File:  [ELWIX - Embedded LightWeight unIX -] / elwix / files / sqlite / dist / sqlite3.c
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Fri Oct 12 08:22:46 2012 UTC (11 years, 9 months ago) by misho
Branches: MAIN
CVS tags: elwix1_7, HEAD, ELWIX1_6
ELWIX 1.6

    1: /******************************************************************************
    2: ** This file is an amalgamation of many separate C source files from SQLite
    3: ** version 3.7.10.  By combining all the individual C code files into this 
    4: ** single large file, the entire code can be compiled as a single translation
    5: ** unit.  This allows many compilers to do optimizations that would not be
    6: ** possible if the files were compiled separately.  Performance improvements
    7: ** of 5% or more are commonly seen when SQLite is compiled as a single
    8: ** translation unit.
    9: **
   10: ** This file is all you need to compile SQLite.  To use SQLite in other
   11: ** programs, you need this file and the "sqlite3.h" header file that defines
   12: ** the programming interface to the SQLite library.  (If you do not have 
   13: ** the "sqlite3.h" header file at hand, you will find a copy embedded within
   14: ** the text of this file.  Search for "Begin file sqlite3.h" to find the start
   15: ** of the embedded sqlite3.h header file.) Additional code files may be needed
   16: ** if you want a wrapper to interface SQLite with your choice of programming
   17: ** language. The code for the "sqlite3" command-line shell is also in a
   18: ** separate file. This file contains only code for the core SQLite library.
   19: */
   20: #define SQLITE_CORE 1
   21: #define SQLITE_AMALGAMATION 1
   22: #ifndef SQLITE_PRIVATE
   23: # define SQLITE_PRIVATE static
   24: #endif
   25: #ifndef SQLITE_API
   26: # define SQLITE_API
   27: #endif
   28: /************** Begin file sqliteInt.h ***************************************/
   29: /*
   30: ** 2001 September 15
   31: **
   32: ** The author disclaims copyright to this source code.  In place of
   33: ** a legal notice, here is a blessing:
   34: **
   35: **    May you do good and not evil.
   36: **    May you find forgiveness for yourself and forgive others.
   37: **    May you share freely, never taking more than you give.
   38: **
   39: *************************************************************************
   40: ** Internal interface definitions for SQLite.
   41: **
   42: */
   43: #ifndef _SQLITEINT_H_
   44: #define _SQLITEINT_H_
   45: 
   46: /*
   47: ** These #defines should enable >2GB file support on POSIX if the
   48: ** underlying operating system supports it.  If the OS lacks
   49: ** large file support, or if the OS is windows, these should be no-ops.
   50: **
   51: ** Ticket #2739:  The _LARGEFILE_SOURCE macro must appear before any
   52: ** system #includes.  Hence, this block of code must be the very first
   53: ** code in all source files.
   54: **
   55: ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch
   56: ** on the compiler command line.  This is necessary if you are compiling
   57: ** on a recent machine (ex: Red Hat 7.2) but you want your code to work
   58: ** on an older machine (ex: Red Hat 6.0).  If you compile on Red Hat 7.2
   59: ** without this option, LFS is enable.  But LFS does not exist in the kernel
   60: ** in Red Hat 6.0, so the code won't work.  Hence, for maximum binary
   61: ** portability you should omit LFS.
   62: **
   63: ** Similar is true for Mac OS X.  LFS is only supported on Mac OS X 9 and later.
   64: */
   65: #ifndef SQLITE_DISABLE_LFS
   66: # define _LARGE_FILE       1
   67: # ifndef _FILE_OFFSET_BITS
   68: #   define _FILE_OFFSET_BITS 64
   69: # endif
   70: # define _LARGEFILE_SOURCE 1
   71: #endif
   72: 
   73: /*
   74: ** Include the configuration header output by 'configure' if we're using the
   75: ** autoconf-based build
   76: */
   77: #ifdef _HAVE_SQLITE_CONFIG_H
   78: #include "config.h"
   79: #endif
   80: 
   81: /************** Include sqliteLimit.h in the middle of sqliteInt.h ***********/
   82: /************** Begin file sqliteLimit.h *************************************/
   83: /*
   84: ** 2007 May 7
   85: **
   86: ** The author disclaims copyright to this source code.  In place of
   87: ** a legal notice, here is a blessing:
   88: **
   89: **    May you do good and not evil.
   90: **    May you find forgiveness for yourself and forgive others.
   91: **    May you share freely, never taking more than you give.
   92: **
   93: *************************************************************************
   94: ** 
   95: ** This file defines various limits of what SQLite can process.
   96: */
   97: 
   98: /*
   99: ** The maximum length of a TEXT or BLOB in bytes.   This also
  100: ** limits the size of a row in a table or index.
  101: **
  102: ** The hard limit is the ability of a 32-bit signed integer
  103: ** to count the size: 2^31-1 or 2147483647.
  104: */
  105: #ifndef SQLITE_MAX_LENGTH
  106: # define SQLITE_MAX_LENGTH 1000000000
  107: #endif
  108: 
  109: /*
  110: ** This is the maximum number of
  111: **
  112: **    * Columns in a table
  113: **    * Columns in an index
  114: **    * Columns in a view
  115: **    * Terms in the SET clause of an UPDATE statement
  116: **    * Terms in the result set of a SELECT statement
  117: **    * Terms in the GROUP BY or ORDER BY clauses of a SELECT statement.
  118: **    * Terms in the VALUES clause of an INSERT statement
  119: **
  120: ** The hard upper limit here is 32676.  Most database people will
  121: ** tell you that in a well-normalized database, you usually should
  122: ** not have more than a dozen or so columns in any table.  And if
  123: ** that is the case, there is no point in having more than a few
  124: ** dozen values in any of the other situations described above.
  125: */
  126: #ifndef SQLITE_MAX_COLUMN
  127: # define SQLITE_MAX_COLUMN 2000
  128: #endif
  129: 
  130: /*
  131: ** The maximum length of a single SQL statement in bytes.
  132: **
  133: ** It used to be the case that setting this value to zero would
  134: ** turn the limit off.  That is no longer true.  It is not possible
  135: ** to turn this limit off.
  136: */
  137: #ifndef SQLITE_MAX_SQL_LENGTH
  138: # define SQLITE_MAX_SQL_LENGTH 1000000000
  139: #endif
  140: 
  141: /*
  142: ** The maximum depth of an expression tree. This is limited to 
  143: ** some extent by SQLITE_MAX_SQL_LENGTH. But sometime you might 
  144: ** want to place more severe limits on the complexity of an 
  145: ** expression.
  146: **
  147: ** A value of 0 used to mean that the limit was not enforced.
  148: ** But that is no longer true.  The limit is now strictly enforced
  149: ** at all times.
  150: */
  151: #ifndef SQLITE_MAX_EXPR_DEPTH
  152: # define SQLITE_MAX_EXPR_DEPTH 1000
  153: #endif
  154: 
  155: /*
  156: ** The maximum number of terms in a compound SELECT statement.
  157: ** The code generator for compound SELECT statements does one
  158: ** level of recursion for each term.  A stack overflow can result
  159: ** if the number of terms is too large.  In practice, most SQL
  160: ** never has more than 3 or 4 terms.  Use a value of 0 to disable
  161: ** any limit on the number of terms in a compount SELECT.
  162: */
  163: #ifndef SQLITE_MAX_COMPOUND_SELECT
  164: # define SQLITE_MAX_COMPOUND_SELECT 500
  165: #endif
  166: 
  167: /*
  168: ** The maximum number of opcodes in a VDBE program.
  169: ** Not currently enforced.
  170: */
  171: #ifndef SQLITE_MAX_VDBE_OP
  172: # define SQLITE_MAX_VDBE_OP 25000
  173: #endif
  174: 
  175: /*
  176: ** The maximum number of arguments to an SQL function.
  177: */
  178: #ifndef SQLITE_MAX_FUNCTION_ARG
  179: # define SQLITE_MAX_FUNCTION_ARG 127
  180: #endif
  181: 
  182: /*
  183: ** The maximum number of in-memory pages to use for the main database
  184: ** table and for temporary tables.  The SQLITE_DEFAULT_CACHE_SIZE
  185: */
  186: #ifndef SQLITE_DEFAULT_CACHE_SIZE
  187: # define SQLITE_DEFAULT_CACHE_SIZE  2000
  188: #endif
  189: #ifndef SQLITE_DEFAULT_TEMP_CACHE_SIZE
  190: # define SQLITE_DEFAULT_TEMP_CACHE_SIZE  500
  191: #endif
  192: 
  193: /*
  194: ** The default number of frames to accumulate in the log file before
  195: ** checkpointing the database in WAL mode.
  196: */
  197: #ifndef SQLITE_DEFAULT_WAL_AUTOCHECKPOINT
  198: # define SQLITE_DEFAULT_WAL_AUTOCHECKPOINT  1000
  199: #endif
  200: 
  201: /*
  202: ** The maximum number of attached databases.  This must be between 0
  203: ** and 62.  The upper bound on 62 is because a 64-bit integer bitmap
  204: ** is used internally to track attached databases.
  205: */
  206: #ifndef SQLITE_MAX_ATTACHED
  207: # define SQLITE_MAX_ATTACHED 10
  208: #endif
  209: 
  210: 
  211: /*
  212: ** The maximum value of a ?nnn wildcard that the parser will accept.
  213: */
  214: #ifndef SQLITE_MAX_VARIABLE_NUMBER
  215: # define SQLITE_MAX_VARIABLE_NUMBER 999
  216: #endif
  217: 
  218: /* Maximum page size.  The upper bound on this value is 65536.  This a limit
  219: ** imposed by the use of 16-bit offsets within each page.
  220: **
  221: ** Earlier versions of SQLite allowed the user to change this value at
  222: ** compile time. This is no longer permitted, on the grounds that it creates
  223: ** a library that is technically incompatible with an SQLite library 
  224: ** compiled with a different limit. If a process operating on a database 
  225: ** with a page-size of 65536 bytes crashes, then an instance of SQLite 
  226: ** compiled with the default page-size limit will not be able to rollback 
  227: ** the aborted transaction. This could lead to database corruption.
  228: */
  229: #ifdef SQLITE_MAX_PAGE_SIZE
  230: # undef SQLITE_MAX_PAGE_SIZE
  231: #endif
  232: #define SQLITE_MAX_PAGE_SIZE 65536
  233: 
  234: 
  235: /*
  236: ** The default size of a database page.
  237: */
  238: #ifndef SQLITE_DEFAULT_PAGE_SIZE
  239: # define SQLITE_DEFAULT_PAGE_SIZE 1024
  240: #endif
  241: #if SQLITE_DEFAULT_PAGE_SIZE>SQLITE_MAX_PAGE_SIZE
  242: # undef SQLITE_DEFAULT_PAGE_SIZE
  243: # define SQLITE_DEFAULT_PAGE_SIZE SQLITE_MAX_PAGE_SIZE
  244: #endif
  245: 
  246: /*
  247: ** Ordinarily, if no value is explicitly provided, SQLite creates databases
  248: ** with page size SQLITE_DEFAULT_PAGE_SIZE. However, based on certain
  249: ** device characteristics (sector-size and atomic write() support),
  250: ** SQLite may choose a larger value. This constant is the maximum value
  251: ** SQLite will choose on its own.
  252: */
  253: #ifndef SQLITE_MAX_DEFAULT_PAGE_SIZE
  254: # define SQLITE_MAX_DEFAULT_PAGE_SIZE 8192
  255: #endif
  256: #if SQLITE_MAX_DEFAULT_PAGE_SIZE>SQLITE_MAX_PAGE_SIZE
  257: # undef SQLITE_MAX_DEFAULT_PAGE_SIZE
  258: # define SQLITE_MAX_DEFAULT_PAGE_SIZE SQLITE_MAX_PAGE_SIZE
  259: #endif
  260: 
  261: 
  262: /*
  263: ** Maximum number of pages in one database file.
  264: **
  265: ** This is really just the default value for the max_page_count pragma.
  266: ** This value can be lowered (or raised) at run-time using that the
  267: ** max_page_count macro.
  268: */
  269: #ifndef SQLITE_MAX_PAGE_COUNT
  270: # define SQLITE_MAX_PAGE_COUNT 1073741823
  271: #endif
  272: 
  273: /*
  274: ** Maximum length (in bytes) of the pattern in a LIKE or GLOB
  275: ** operator.
  276: */
  277: #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
  278: # define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
  279: #endif
  280: 
  281: /*
  282: ** Maximum depth of recursion for triggers.
  283: **
  284: ** A value of 1 means that a trigger program will not be able to itself
  285: ** fire any triggers. A value of 0 means that no trigger programs at all 
  286: ** may be executed.
  287: */
  288: #ifndef SQLITE_MAX_TRIGGER_DEPTH
  289: # define SQLITE_MAX_TRIGGER_DEPTH 1000
  290: #endif
  291: 
  292: /************** End of sqliteLimit.h *****************************************/
  293: /************** Continuing where we left off in sqliteInt.h ******************/
  294: 
  295: /* Disable nuisance warnings on Borland compilers */
  296: #if defined(__BORLANDC__)
  297: #pragma warn -rch /* unreachable code */
  298: #pragma warn -ccc /* Condition is always true or false */
  299: #pragma warn -aus /* Assigned value is never used */
  300: #pragma warn -csu /* Comparing signed and unsigned */
  301: #pragma warn -spa /* Suspicious pointer arithmetic */
  302: #endif
  303: 
  304: /* Needed for various definitions... */
  305: #ifndef _GNU_SOURCE
  306: # define _GNU_SOURCE
  307: #endif
  308: 
  309: /*
  310: ** Include standard header files as necessary
  311: */
  312: #ifdef HAVE_STDINT_H
  313: #include <stdint.h>
  314: #endif
  315: #ifdef HAVE_INTTYPES_H
  316: #include <inttypes.h>
  317: #endif
  318: 
  319: /*
  320: ** The following macros are used to cast pointers to integers and
  321: ** integers to pointers.  The way you do this varies from one compiler
  322: ** to the next, so we have developed the following set of #if statements
  323: ** to generate appropriate macros for a wide range of compilers.
  324: **
  325: ** The correct "ANSI" way to do this is to use the intptr_t type. 
  326: ** Unfortunately, that typedef is not available on all compilers, or
  327: ** if it is available, it requires an #include of specific headers
  328: ** that vary from one machine to the next.
  329: **
  330: ** Ticket #3860:  The llvm-gcc-4.2 compiler from Apple chokes on
  331: ** the ((void*)&((char*)0)[X]) construct.  But MSVC chokes on ((void*)(X)).
  332: ** So we have to define the macros in different ways depending on the
  333: ** compiler.
  334: */
  335: #if defined(__PTRDIFF_TYPE__)  /* This case should work for GCC */
  336: # define SQLITE_INT_TO_PTR(X)  ((void*)(__PTRDIFF_TYPE__)(X))
  337: # define SQLITE_PTR_TO_INT(X)  ((int)(__PTRDIFF_TYPE__)(X))
  338: #elif !defined(__GNUC__)       /* Works for compilers other than LLVM */
  339: # define SQLITE_INT_TO_PTR(X)  ((void*)&((char*)0)[X])
  340: # define SQLITE_PTR_TO_INT(X)  ((int)(((char*)X)-(char*)0))
  341: #elif defined(HAVE_STDINT_H)   /* Use this case if we have ANSI headers */
  342: # define SQLITE_INT_TO_PTR(X)  ((void*)(intptr_t)(X))
  343: # define SQLITE_PTR_TO_INT(X)  ((int)(intptr_t)(X))
  344: #else                          /* Generates a warning - but it always works */
  345: # define SQLITE_INT_TO_PTR(X)  ((void*)(X))
  346: # define SQLITE_PTR_TO_INT(X)  ((int)(X))
  347: #endif
  348: 
  349: /*
  350: ** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2.
  351: ** 0 means mutexes are permanently disable and the library is never
  352: ** threadsafe.  1 means the library is serialized which is the highest
  353: ** level of threadsafety.  2 means the libary is multithreaded - multiple
  354: ** threads can use SQLite as long as no two threads try to use the same
  355: ** database connection at the same time.
  356: **
  357: ** Older versions of SQLite used an optional THREADSAFE macro.
  358: ** We support that for legacy.
  359: */
  360: #if !defined(SQLITE_THREADSAFE)
  361: #if defined(THREADSAFE)
  362: # define SQLITE_THREADSAFE THREADSAFE
  363: #else
  364: # define SQLITE_THREADSAFE 1 /* IMP: R-07272-22309 */
  365: #endif
  366: #endif
  367: 
  368: /*
  369: ** Powersafe overwrite is on by default.  But can be turned off using
  370: ** the -DSQLITE_POWERSAFE_OVERWRITE=0 command-line option.
  371: */
  372: #ifndef SQLITE_POWERSAFE_OVERWRITE
  373: # define SQLITE_POWERSAFE_OVERWRITE 1
  374: #endif
  375: 
  376: /*
  377: ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1.
  378: ** It determines whether or not the features related to 
  379: ** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can
  380: ** be overridden at runtime using the sqlite3_config() API.
  381: */
  382: #if !defined(SQLITE_DEFAULT_MEMSTATUS)
  383: # define SQLITE_DEFAULT_MEMSTATUS 1
  384: #endif
  385: 
  386: /*
  387: ** Exactly one of the following macros must be defined in order to
  388: ** specify which memory allocation subsystem to use.
  389: **
  390: **     SQLITE_SYSTEM_MALLOC          // Use normal system malloc()
  391: **     SQLITE_WIN32_MALLOC           // Use Win32 native heap API
  392: **     SQLITE_MEMDEBUG               // Debugging version of system malloc()
  393: **
  394: ** On Windows, if the SQLITE_WIN32_MALLOC_VALIDATE macro is defined and the
  395: ** assert() macro is enabled, each call into the Win32 native heap subsystem
  396: ** will cause HeapValidate to be called.  If heap validation should fail, an
  397: ** assertion will be triggered.
  398: **
  399: ** (Historical note:  There used to be several other options, but we've
  400: ** pared it down to just these three.)
  401: **
  402: ** If none of the above are defined, then set SQLITE_SYSTEM_MALLOC as
  403: ** the default.
  404: */
  405: #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_WIN32_MALLOC)+defined(SQLITE_MEMDEBUG)>1
  406: # error "At most one of the following compile-time configuration options\
  407:  is allows: SQLITE_SYSTEM_MALLOC, SQLITE_WIN32_MALLOC, SQLITE_MEMDEBUG"
  408: #endif
  409: #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_WIN32_MALLOC)+defined(SQLITE_MEMDEBUG)==0
  410: # define SQLITE_SYSTEM_MALLOC 1
  411: #endif
  412: 
  413: /*
  414: ** If SQLITE_MALLOC_SOFT_LIMIT is not zero, then try to keep the
  415: ** sizes of memory allocations below this value where possible.
  416: */
  417: #if !defined(SQLITE_MALLOC_SOFT_LIMIT)
  418: # define SQLITE_MALLOC_SOFT_LIMIT 1024
  419: #endif
  420: 
  421: /*
  422: ** We need to define _XOPEN_SOURCE as follows in order to enable
  423: ** recursive mutexes on most Unix systems.  But Mac OS X is different.
  424: ** The _XOPEN_SOURCE define causes problems for Mac OS X we are told,
  425: ** so it is omitted there.  See ticket #2673.
  426: **
  427: ** Later we learn that _XOPEN_SOURCE is poorly or incorrectly
  428: ** implemented on some systems.  So we avoid defining it at all
  429: ** if it is already defined or if it is unneeded because we are
  430: ** not doing a threadsafe build.  Ticket #2681.
  431: **
  432: ** See also ticket #2741.
  433: */
  434: #if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) && SQLITE_THREADSAFE
  435: #  define _XOPEN_SOURCE 500  /* Needed to enable pthread recursive mutexes */
  436: #endif
  437: 
  438: /*
  439: ** The TCL headers are only needed when compiling the TCL bindings.
  440: */
  441: #if defined(SQLITE_TCL) || defined(TCLSH)
  442: # include <tcl.h>
  443: #endif
  444: 
  445: /*
  446: ** Many people are failing to set -DNDEBUG=1 when compiling SQLite.
  447: ** Setting NDEBUG makes the code smaller and run faster.  So the following
  448: ** lines are added to automatically set NDEBUG unless the -DSQLITE_DEBUG=1
  449: ** option is set.  Thus NDEBUG becomes an opt-in rather than an opt-out
  450: ** feature.
  451: */
  452: #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
  453: # define NDEBUG 1
  454: #endif
  455: 
  456: /*
  457: ** The testcase() macro is used to aid in coverage testing.  When 
  458: ** doing coverage testing, the condition inside the argument to
  459: ** testcase() must be evaluated both true and false in order to
  460: ** get full branch coverage.  The testcase() macro is inserted
  461: ** to help ensure adequate test coverage in places where simple
  462: ** condition/decision coverage is inadequate.  For example, testcase()
  463: ** can be used to make sure boundary values are tested.  For
  464: ** bitmask tests, testcase() can be used to make sure each bit
  465: ** is significant and used at least once.  On switch statements
  466: ** where multiple cases go to the same block of code, testcase()
  467: ** can insure that all cases are evaluated.
  468: **
  469: */
  470: #ifdef SQLITE_COVERAGE_TEST
  471: SQLITE_PRIVATE   void sqlite3Coverage(int);
  472: # define testcase(X)  if( X ){ sqlite3Coverage(__LINE__); }
  473: #else
  474: # define testcase(X)
  475: #endif
  476: 
  477: /*
  478: ** The TESTONLY macro is used to enclose variable declarations or
  479: ** other bits of code that are needed to support the arguments
  480: ** within testcase() and assert() macros.
  481: */
  482: #if !defined(NDEBUG) || defined(SQLITE_COVERAGE_TEST)
  483: # define TESTONLY(X)  X
  484: #else
  485: # define TESTONLY(X)
  486: #endif
  487: 
  488: /*
  489: ** Sometimes we need a small amount of code such as a variable initialization
  490: ** to setup for a later assert() statement.  We do not want this code to
  491: ** appear when assert() is disabled.  The following macro is therefore
  492: ** used to contain that setup code.  The "VVA" acronym stands for
  493: ** "Verification, Validation, and Accreditation".  In other words, the
  494: ** code within VVA_ONLY() will only run during verification processes.
  495: */
  496: #ifndef NDEBUG
  497: # define VVA_ONLY(X)  X
  498: #else
  499: # define VVA_ONLY(X)
  500: #endif
  501: 
  502: /*
  503: ** The ALWAYS and NEVER macros surround boolean expressions which 
  504: ** are intended to always be true or false, respectively.  Such
  505: ** expressions could be omitted from the code completely.  But they
  506: ** are included in a few cases in order to enhance the resilience
  507: ** of SQLite to unexpected behavior - to make the code "self-healing"
  508: ** or "ductile" rather than being "brittle" and crashing at the first
  509: ** hint of unplanned behavior.
  510: **
  511: ** In other words, ALWAYS and NEVER are added for defensive code.
  512: **
  513: ** When doing coverage testing ALWAYS and NEVER are hard-coded to
  514: ** be true and false so that the unreachable code then specify will
  515: ** not be counted as untested code.
  516: */
  517: #if defined(SQLITE_COVERAGE_TEST)
  518: # define ALWAYS(X)      (1)
  519: # define NEVER(X)       (0)
  520: #elif !defined(NDEBUG)
  521: # define ALWAYS(X)      ((X)?1:(assert(0),0))
  522: # define NEVER(X)       ((X)?(assert(0),1):0)
  523: #else
  524: # define ALWAYS(X)      (X)
  525: # define NEVER(X)       (X)
  526: #endif
  527: 
  528: /*
  529: ** Return true (non-zero) if the input is a integer that is too large
  530: ** to fit in 32-bits.  This macro is used inside of various testcase()
  531: ** macros to verify that we have tested SQLite for large-file support.
  532: */
  533: #define IS_BIG_INT(X)  (((X)&~(i64)0xffffffff)!=0)
  534: 
  535: /*
  536: ** The macro unlikely() is a hint that surrounds a boolean
  537: ** expression that is usually false.  Macro likely() surrounds
  538: ** a boolean expression that is usually true.  GCC is able to
  539: ** use these hints to generate better code, sometimes.
  540: */
  541: #if defined(__GNUC__) && 0
  542: # define likely(X)    __builtin_expect((X),1)
  543: # define unlikely(X)  __builtin_expect((X),0)
  544: #else
  545: # define likely(X)    !!(X)
  546: # define unlikely(X)  !!(X)
  547: #endif
  548: 
  549: /************** Include sqlite3.h in the middle of sqliteInt.h ***************/
  550: /************** Begin file sqlite3.h *****************************************/
  551: /*
  552: ** 2001 September 15
  553: **
  554: ** The author disclaims copyright to this source code.  In place of
  555: ** a legal notice, here is a blessing:
  556: **
  557: **    May you do good and not evil.
  558: **    May you find forgiveness for yourself and forgive others.
  559: **    May you share freely, never taking more than you give.
  560: **
  561: *************************************************************************
  562: ** This header file defines the interface that the SQLite library
  563: ** presents to client programs.  If a C-function, structure, datatype,
  564: ** or constant definition does not appear in this file, then it is
  565: ** not a published API of SQLite, is subject to change without
  566: ** notice, and should not be referenced by programs that use SQLite.
  567: **
  568: ** Some of the definitions that are in this file are marked as
  569: ** "experimental".  Experimental interfaces are normally new
  570: ** features recently added to SQLite.  We do not anticipate changes
  571: ** to experimental interfaces but reserve the right to make minor changes
  572: ** if experience from use "in the wild" suggest such changes are prudent.
  573: **
  574: ** The official C-language API documentation for SQLite is derived
  575: ** from comments in this file.  This file is the authoritative source
  576: ** on how SQLite interfaces are suppose to operate.
  577: **
  578: ** The name of this file under configuration management is "sqlite.h.in".
  579: ** The makefile makes some minor changes to this file (such as inserting
  580: ** the version number) and changes its name to "sqlite3.h" as
  581: ** part of the build process.
  582: */
  583: #ifndef _SQLITE3_H_
  584: #define _SQLITE3_H_
  585: #include <stdarg.h>     /* Needed for the definition of va_list */
  586: 
  587: /*
  588: ** Make sure we can call this stuff from C++.
  589: */
  590: #if 0
  591: extern "C" {
  592: #endif
  593: 
  594: 
  595: /*
  596: ** Add the ability to override 'extern'
  597: */
  598: #ifndef SQLITE_EXTERN
  599: # define SQLITE_EXTERN extern
  600: #endif
  601: 
  602: #ifndef SQLITE_API
  603: # define SQLITE_API
  604: #endif
  605: 
  606: 
  607: /*
  608: ** These no-op macros are used in front of interfaces to mark those
  609: ** interfaces as either deprecated or experimental.  New applications
  610: ** should not use deprecated interfaces - they are support for backwards
  611: ** compatibility only.  Application writers should be aware that
  612: ** experimental interfaces are subject to change in point releases.
  613: **
  614: ** These macros used to resolve to various kinds of compiler magic that
  615: ** would generate warning messages when they were used.  But that
  616: ** compiler magic ended up generating such a flurry of bug reports
  617: ** that we have taken it all out and gone back to using simple
  618: ** noop macros.
  619: */
  620: #define SQLITE_DEPRECATED
  621: #define SQLITE_EXPERIMENTAL
  622: 
  623: /*
  624: ** Ensure these symbols were not defined by some previous header file.
  625: */
  626: #ifdef SQLITE_VERSION
  627: # undef SQLITE_VERSION
  628: #endif
  629: #ifdef SQLITE_VERSION_NUMBER
  630: # undef SQLITE_VERSION_NUMBER
  631: #endif
  632: 
  633: /*
  634: ** CAPI3REF: Compile-Time Library Version Numbers
  635: **
  636: ** ^(The [SQLITE_VERSION] C preprocessor macro in the sqlite3.h header
  637: ** evaluates to a string literal that is the SQLite version in the
  638: ** format "X.Y.Z" where X is the major version number (always 3 for
  639: ** SQLite3) and Y is the minor version number and Z is the release number.)^
  640: ** ^(The [SQLITE_VERSION_NUMBER] C preprocessor macro resolves to an integer
  641: ** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same
  642: ** numbers used in [SQLITE_VERSION].)^
  643: ** The SQLITE_VERSION_NUMBER for any given release of SQLite will also
  644: ** be larger than the release from which it is derived.  Either Y will
  645: ** be held constant and Z will be incremented or else Y will be incremented
  646: ** and Z will be reset to zero.
  647: **
  648: ** Since version 3.6.18, SQLite source code has been stored in the
  649: ** <a href="http://www.fossil-scm.org/">Fossil configuration management
  650: ** system</a>.  ^The SQLITE_SOURCE_ID macro evaluates to
  651: ** a string which identifies a particular check-in of SQLite
  652: ** within its configuration management system.  ^The SQLITE_SOURCE_ID
  653: ** string contains the date and time of the check-in (UTC) and an SHA1
  654: ** hash of the entire source tree.
  655: **
  656: ** See also: [sqlite3_libversion()],
  657: ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
  658: ** [sqlite_version()] and [sqlite_source_id()].
  659: */
  660: #define SQLITE_VERSION        "3.7.10"
  661: #define SQLITE_VERSION_NUMBER 3007010
  662: #define SQLITE_SOURCE_ID      "2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204"
  663: 
  664: /*
  665: ** CAPI3REF: Run-Time Library Version Numbers
  666: ** KEYWORDS: sqlite3_version, sqlite3_sourceid
  667: **
  668: ** These interfaces provide the same information as the [SQLITE_VERSION],
  669: ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros
  670: ** but are associated with the library instead of the header file.  ^(Cautious
  671: ** programmers might include assert() statements in their application to
  672: ** verify that values returned by these interfaces match the macros in
  673: ** the header, and thus insure that the application is
  674: ** compiled with matching library and header files.
  675: **
  676: ** <blockquote><pre>
  677: ** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
  678: ** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
  679: ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
  680: ** </pre></blockquote>)^
  681: **
  682: ** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION]
  683: ** macro.  ^The sqlite3_libversion() function returns a pointer to the
  684: ** to the sqlite3_version[] string constant.  The sqlite3_libversion()
  685: ** function is provided for use in DLLs since DLL users usually do not have
  686: ** direct access to string constants within the DLL.  ^The
  687: ** sqlite3_libversion_number() function returns an integer equal to
  688: ** [SQLITE_VERSION_NUMBER].  ^The sqlite3_sourceid() function returns 
  689: ** a pointer to a string constant whose value is the same as the 
  690: ** [SQLITE_SOURCE_ID] C preprocessor macro.
  691: **
  692: ** See also: [sqlite_version()] and [sqlite_source_id()].
  693: */
  694: SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
  695: SQLITE_API const char *sqlite3_libversion(void);
  696: SQLITE_API const char *sqlite3_sourceid(void);
  697: SQLITE_API int sqlite3_libversion_number(void);
  698: 
  699: /*
  700: ** CAPI3REF: Run-Time Library Compilation Options Diagnostics
  701: **
  702: ** ^The sqlite3_compileoption_used() function returns 0 or 1 
  703: ** indicating whether the specified option was defined at 
  704: ** compile time.  ^The SQLITE_ prefix may be omitted from the 
  705: ** option name passed to sqlite3_compileoption_used().  
  706: **
  707: ** ^The sqlite3_compileoption_get() function allows iterating
  708: ** over the list of options that were defined at compile time by
  709: ** returning the N-th compile time option string.  ^If N is out of range,
  710: ** sqlite3_compileoption_get() returns a NULL pointer.  ^The SQLITE_ 
  711: ** prefix is omitted from any strings returned by 
  712: ** sqlite3_compileoption_get().
  713: **
  714: ** ^Support for the diagnostic functions sqlite3_compileoption_used()
  715: ** and sqlite3_compileoption_get() may be omitted by specifying the 
  716: ** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time.
  717: **
  718: ** See also: SQL functions [sqlite_compileoption_used()] and
  719: ** [sqlite_compileoption_get()] and the [compile_options pragma].
  720: */
  721: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
  722: SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
  723: SQLITE_API const char *sqlite3_compileoption_get(int N);
  724: #endif
  725: 
  726: /*
  727: ** CAPI3REF: Test To See If The Library Is Threadsafe
  728: **
  729: ** ^The sqlite3_threadsafe() function returns zero if and only if
  730: ** SQLite was compiled with mutexing code omitted due to the
  731: ** [SQLITE_THREADSAFE] compile-time option being set to 0.
  732: **
  733: ** SQLite can be compiled with or without mutexes.  When
  734: ** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes
  735: ** are enabled and SQLite is threadsafe.  When the
  736: ** [SQLITE_THREADSAFE] macro is 0, 
  737: ** the mutexes are omitted.  Without the mutexes, it is not safe
  738: ** to use SQLite concurrently from more than one thread.
  739: **
  740: ** Enabling mutexes incurs a measurable performance penalty.
  741: ** So if speed is of utmost importance, it makes sense to disable
  742: ** the mutexes.  But for maximum safety, mutexes should be enabled.
  743: ** ^The default behavior is for mutexes to be enabled.
  744: **
  745: ** This interface can be used by an application to make sure that the
  746: ** version of SQLite that it is linking against was compiled with
  747: ** the desired setting of the [SQLITE_THREADSAFE] macro.
  748: **
  749: ** This interface only reports on the compile-time mutex setting
  750: ** of the [SQLITE_THREADSAFE] flag.  If SQLite is compiled with
  751: ** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but
  752: ** can be fully or partially disabled using a call to [sqlite3_config()]
  753: ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD],
  754: ** or [SQLITE_CONFIG_MUTEX].  ^(The return value of the
  755: ** sqlite3_threadsafe() function shows only the compile-time setting of
  756: ** thread safety, not any run-time changes to that setting made by
  757: ** sqlite3_config(). In other words, the return value from sqlite3_threadsafe()
  758: ** is unchanged by calls to sqlite3_config().)^
  759: **
  760: ** See the [threading mode] documentation for additional information.
  761: */
  762: SQLITE_API int sqlite3_threadsafe(void);
  763: 
  764: /*
  765: ** CAPI3REF: Database Connection Handle
  766: ** KEYWORDS: {database connection} {database connections}
  767: **
  768: ** Each open SQLite database is represented by a pointer to an instance of
  769: ** the opaque structure named "sqlite3".  It is useful to think of an sqlite3
  770: ** pointer as an object.  The [sqlite3_open()], [sqlite3_open16()], and
  771: ** [sqlite3_open_v2()] interfaces are its constructors, and [sqlite3_close()]
  772: ** is its destructor.  There are many other interfaces (such as
  773: ** [sqlite3_prepare_v2()], [sqlite3_create_function()], and
  774: ** [sqlite3_busy_timeout()] to name but three) that are methods on an
  775: ** sqlite3 object.
  776: */
  777: typedef struct sqlite3 sqlite3;
  778: 
  779: /*
  780: ** CAPI3REF: 64-Bit Integer Types
  781: ** KEYWORDS: sqlite_int64 sqlite_uint64
  782: **
  783: ** Because there is no cross-platform way to specify 64-bit integer types
  784: ** SQLite includes typedefs for 64-bit signed and unsigned integers.
  785: **
  786: ** The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions.
  787: ** The sqlite_int64 and sqlite_uint64 types are supported for backwards
  788: ** compatibility only.
  789: **
  790: ** ^The sqlite3_int64 and sqlite_int64 types can store integer values
  791: ** between -9223372036854775808 and +9223372036854775807 inclusive.  ^The
  792: ** sqlite3_uint64 and sqlite_uint64 types can store integer values 
  793: ** between 0 and +18446744073709551615 inclusive.
  794: */
  795: #ifdef SQLITE_INT64_TYPE
  796:   typedef SQLITE_INT64_TYPE sqlite_int64;
  797:   typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
  798: #elif defined(_MSC_VER) || defined(__BORLANDC__)
  799:   typedef __int64 sqlite_int64;
  800:   typedef unsigned __int64 sqlite_uint64;
  801: #else
  802:   typedef long long int sqlite_int64;
  803:   typedef unsigned long long int sqlite_uint64;
  804: #endif
  805: typedef sqlite_int64 sqlite3_int64;
  806: typedef sqlite_uint64 sqlite3_uint64;
  807: 
  808: /*
  809: ** If compiling for a processor that lacks floating point support,
  810: ** substitute integer for floating-point.
  811: */
  812: #ifdef SQLITE_OMIT_FLOATING_POINT
  813: # define double sqlite3_int64
  814: #endif
  815: 
  816: /*
  817: ** CAPI3REF: Closing A Database Connection
  818: **
  819: ** ^The sqlite3_close() routine is the destructor for the [sqlite3] object.
  820: ** ^Calls to sqlite3_close() return SQLITE_OK if the [sqlite3] object is
  821: ** successfully destroyed and all associated resources are deallocated.
  822: **
  823: ** Applications must [sqlite3_finalize | finalize] all [prepared statements]
  824: ** and [sqlite3_blob_close | close] all [BLOB handles] associated with
  825: ** the [sqlite3] object prior to attempting to close the object.  ^If
  826: ** sqlite3_close() is called on a [database connection] that still has
  827: ** outstanding [prepared statements] or [BLOB handles], then it returns
  828: ** SQLITE_BUSY.
  829: **
  830: ** ^If [sqlite3_close()] is invoked while a transaction is open,
  831: ** the transaction is automatically rolled back.
  832: **
  833: ** The C parameter to [sqlite3_close(C)] must be either a NULL
  834: ** pointer or an [sqlite3] object pointer obtained
  835: ** from [sqlite3_open()], [sqlite3_open16()], or
  836: ** [sqlite3_open_v2()], and not previously closed.
  837: ** ^Calling sqlite3_close() with a NULL pointer argument is a 
  838: ** harmless no-op.
  839: */
  840: SQLITE_API int sqlite3_close(sqlite3 *);
  841: 
  842: /*
  843: ** The type for a callback function.
  844: ** This is legacy and deprecated.  It is included for historical
  845: ** compatibility and is not documented.
  846: */
  847: typedef int (*sqlite3_callback)(void*,int,char**, char**);
  848: 
  849: /*
  850: ** CAPI3REF: One-Step Query Execution Interface
  851: **
  852: ** The sqlite3_exec() interface is a convenience wrapper around
  853: ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()],
  854: ** that allows an application to run multiple statements of SQL
  855: ** without having to use a lot of C code. 
  856: **
  857: ** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded,
  858: ** semicolon-separate SQL statements passed into its 2nd argument,
  859: ** in the context of the [database connection] passed in as its 1st
  860: ** argument.  ^If the callback function of the 3rd argument to
  861: ** sqlite3_exec() is not NULL, then it is invoked for each result row
  862: ** coming out of the evaluated SQL statements.  ^The 4th argument to
  863: ** sqlite3_exec() is relayed through to the 1st argument of each
  864: ** callback invocation.  ^If the callback pointer to sqlite3_exec()
  865: ** is NULL, then no callback is ever invoked and result rows are
  866: ** ignored.
  867: **
  868: ** ^If an error occurs while evaluating the SQL statements passed into
  869: ** sqlite3_exec(), then execution of the current statement stops and
  870: ** subsequent statements are skipped.  ^If the 5th parameter to sqlite3_exec()
  871: ** is not NULL then any error message is written into memory obtained
  872: ** from [sqlite3_malloc()] and passed back through the 5th parameter.
  873: ** To avoid memory leaks, the application should invoke [sqlite3_free()]
  874: ** on error message strings returned through the 5th parameter of
  875: ** of sqlite3_exec() after the error message string is no longer needed.
  876: ** ^If the 5th parameter to sqlite3_exec() is not NULL and no errors
  877: ** occur, then sqlite3_exec() sets the pointer in its 5th parameter to
  878: ** NULL before returning.
  879: **
  880: ** ^If an sqlite3_exec() callback returns non-zero, the sqlite3_exec()
  881: ** routine returns SQLITE_ABORT without invoking the callback again and
  882: ** without running any subsequent SQL statements.
  883: **
  884: ** ^The 2nd argument to the sqlite3_exec() callback function is the
  885: ** number of columns in the result.  ^The 3rd argument to the sqlite3_exec()
  886: ** callback is an array of pointers to strings obtained as if from
  887: ** [sqlite3_column_text()], one for each column.  ^If an element of a
  888: ** result row is NULL then the corresponding string pointer for the
  889: ** sqlite3_exec() callback is a NULL pointer.  ^The 4th argument to the
  890: ** sqlite3_exec() callback is an array of pointers to strings where each
  891: ** entry represents the name of corresponding result column as obtained
  892: ** from [sqlite3_column_name()].
  893: **
  894: ** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer
  895: ** to an empty string, or a pointer that contains only whitespace and/or 
  896: ** SQL comments, then no SQL statements are evaluated and the database
  897: ** is not changed.
  898: **
  899: ** Restrictions:
  900: **
  901: ** <ul>
  902: ** <li> The application must insure that the 1st parameter to sqlite3_exec()
  903: **      is a valid and open [database connection].
  904: ** <li> The application must not close [database connection] specified by
  905: **      the 1st parameter to sqlite3_exec() while sqlite3_exec() is running.
  906: ** <li> The application must not modify the SQL statement text passed into
  907: **      the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running.
  908: ** </ul>
  909: */
  910: SQLITE_API int sqlite3_exec(
  911:   sqlite3*,                                  /* An open database */
  912:   const char *sql,                           /* SQL to be evaluated */
  913:   int (*callback)(void*,int,char**,char**),  /* Callback function */
  914:   void *,                                    /* 1st argument to callback */
  915:   char **errmsg                              /* Error msg written here */
  916: );
  917: 
  918: /*
  919: ** CAPI3REF: Result Codes
  920: ** KEYWORDS: SQLITE_OK {error code} {error codes}
  921: ** KEYWORDS: {result code} {result codes}
  922: **
  923: ** Many SQLite functions return an integer result code from the set shown
  924: ** here in order to indicate success or failure.
  925: **
  926: ** New error codes may be added in future versions of SQLite.
  927: **
  928: ** See also: [SQLITE_IOERR_READ | extended result codes],
  929: ** [sqlite3_vtab_on_conflict()] [SQLITE_ROLLBACK | result codes].
  930: */
  931: #define SQLITE_OK           0   /* Successful result */
  932: /* beginning-of-error-codes */
  933: #define SQLITE_ERROR        1   /* SQL error or missing database */
  934: #define SQLITE_INTERNAL     2   /* Internal logic error in SQLite */
  935: #define SQLITE_PERM         3   /* Access permission denied */
  936: #define SQLITE_ABORT        4   /* Callback routine requested an abort */
  937: #define SQLITE_BUSY         5   /* The database file is locked */
  938: #define SQLITE_LOCKED       6   /* A table in the database is locked */
  939: #define SQLITE_NOMEM        7   /* A malloc() failed */
  940: #define SQLITE_READONLY     8   /* Attempt to write a readonly database */
  941: #define SQLITE_INTERRUPT    9   /* Operation terminated by sqlite3_interrupt()*/
  942: #define SQLITE_IOERR       10   /* Some kind of disk I/O error occurred */
  943: #define SQLITE_CORRUPT     11   /* The database disk image is malformed */
  944: #define SQLITE_NOTFOUND    12   /* Unknown opcode in sqlite3_file_control() */
  945: #define SQLITE_FULL        13   /* Insertion failed because database is full */
  946: #define SQLITE_CANTOPEN    14   /* Unable to open the database file */
  947: #define SQLITE_PROTOCOL    15   /* Database lock protocol error */
  948: #define SQLITE_EMPTY       16   /* Database is empty */
  949: #define SQLITE_SCHEMA      17   /* The database schema changed */
  950: #define SQLITE_TOOBIG      18   /* String or BLOB exceeds size limit */
  951: #define SQLITE_CONSTRAINT  19   /* Abort due to constraint violation */
  952: #define SQLITE_MISMATCH    20   /* Data type mismatch */
  953: #define SQLITE_MISUSE      21   /* Library used incorrectly */
  954: #define SQLITE_NOLFS       22   /* Uses OS features not supported on host */
  955: #define SQLITE_AUTH        23   /* Authorization denied */
  956: #define SQLITE_FORMAT      24   /* Auxiliary database format error */
  957: #define SQLITE_RANGE       25   /* 2nd parameter to sqlite3_bind out of range */
  958: #define SQLITE_NOTADB      26   /* File opened that is not a database file */
  959: #define SQLITE_ROW         100  /* sqlite3_step() has another row ready */
  960: #define SQLITE_DONE        101  /* sqlite3_step() has finished executing */
  961: /* end-of-error-codes */
  962: 
  963: /*
  964: ** CAPI3REF: Extended Result Codes
  965: ** KEYWORDS: {extended error code} {extended error codes}
  966: ** KEYWORDS: {extended result code} {extended result codes}
  967: **
  968: ** In its default configuration, SQLite API routines return one of 26 integer
  969: ** [SQLITE_OK | result codes].  However, experience has shown that many of
  970: ** these result codes are too coarse-grained.  They do not provide as
  971: ** much information about problems as programmers might like.  In an effort to
  972: ** address this, newer versions of SQLite (version 3.3.8 and later) include
  973: ** support for additional result codes that provide more detailed information
  974: ** about errors. The extended result codes are enabled or disabled
  975: ** on a per database connection basis using the
  976: ** [sqlite3_extended_result_codes()] API.
  977: **
  978: ** Some of the available extended result codes are listed here.
  979: ** One may expect the number of extended result codes will be expand
  980: ** over time.  Software that uses extended result codes should expect
  981: ** to see new result codes in future releases of SQLite.
  982: **
  983: ** The SQLITE_OK result code will never be extended.  It will always
  984: ** be exactly zero.
  985: */
  986: #define SQLITE_IOERR_READ              (SQLITE_IOERR | (1<<8))
  987: #define SQLITE_IOERR_SHORT_READ        (SQLITE_IOERR | (2<<8))
  988: #define SQLITE_IOERR_WRITE             (SQLITE_IOERR | (3<<8))
  989: #define SQLITE_IOERR_FSYNC             (SQLITE_IOERR | (4<<8))
  990: #define SQLITE_IOERR_DIR_FSYNC         (SQLITE_IOERR | (5<<8))
  991: #define SQLITE_IOERR_TRUNCATE          (SQLITE_IOERR | (6<<8))
  992: #define SQLITE_IOERR_FSTAT             (SQLITE_IOERR | (7<<8))
  993: #define SQLITE_IOERR_UNLOCK            (SQLITE_IOERR | (8<<8))
  994: #define SQLITE_IOERR_RDLOCK            (SQLITE_IOERR | (9<<8))
  995: #define SQLITE_IOERR_DELETE            (SQLITE_IOERR | (10<<8))
  996: #define SQLITE_IOERR_BLOCKED           (SQLITE_IOERR | (11<<8))
  997: #define SQLITE_IOERR_NOMEM             (SQLITE_IOERR | (12<<8))
  998: #define SQLITE_IOERR_ACCESS            (SQLITE_IOERR | (13<<8))
  999: #define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14<<8))
 1000: #define SQLITE_IOERR_LOCK              (SQLITE_IOERR | (15<<8))
 1001: #define SQLITE_IOERR_CLOSE             (SQLITE_IOERR | (16<<8))
 1002: #define SQLITE_IOERR_DIR_CLOSE         (SQLITE_IOERR | (17<<8))
 1003: #define SQLITE_IOERR_SHMOPEN           (SQLITE_IOERR | (18<<8))
 1004: #define SQLITE_IOERR_SHMSIZE           (SQLITE_IOERR | (19<<8))
 1005: #define SQLITE_IOERR_SHMLOCK           (SQLITE_IOERR | (20<<8))
 1006: #define SQLITE_IOERR_SHMMAP            (SQLITE_IOERR | (21<<8))
 1007: #define SQLITE_IOERR_SEEK              (SQLITE_IOERR | (22<<8))
 1008: #define SQLITE_LOCKED_SHAREDCACHE      (SQLITE_LOCKED |  (1<<8))
 1009: #define SQLITE_BUSY_RECOVERY           (SQLITE_BUSY   |  (1<<8))
 1010: #define SQLITE_CANTOPEN_NOTEMPDIR      (SQLITE_CANTOPEN | (1<<8))
 1011: #define SQLITE_CORRUPT_VTAB            (SQLITE_CORRUPT | (1<<8))
 1012: #define SQLITE_READONLY_RECOVERY       (SQLITE_READONLY | (1<<8))
 1013: #define SQLITE_READONLY_CANTLOCK       (SQLITE_READONLY | (2<<8))
 1014: 
 1015: /*
 1016: ** CAPI3REF: Flags For File Open Operations
 1017: **
 1018: ** These bit values are intended for use in the
 1019: ** 3rd parameter to the [sqlite3_open_v2()] interface and
 1020: ** in the 4th parameter to the [sqlite3_vfs.xOpen] method.
 1021: */
 1022: #define SQLITE_OPEN_READONLY         0x00000001  /* Ok for sqlite3_open_v2() */
 1023: #define SQLITE_OPEN_READWRITE        0x00000002  /* Ok for sqlite3_open_v2() */
 1024: #define SQLITE_OPEN_CREATE           0x00000004  /* Ok for sqlite3_open_v2() */
 1025: #define SQLITE_OPEN_DELETEONCLOSE    0x00000008  /* VFS only */
 1026: #define SQLITE_OPEN_EXCLUSIVE        0x00000010  /* VFS only */
 1027: #define SQLITE_OPEN_AUTOPROXY        0x00000020  /* VFS only */
 1028: #define SQLITE_OPEN_URI              0x00000040  /* Ok for sqlite3_open_v2() */
 1029: #define SQLITE_OPEN_MAIN_DB          0x00000100  /* VFS only */
 1030: #define SQLITE_OPEN_TEMP_DB          0x00000200  /* VFS only */
 1031: #define SQLITE_OPEN_TRANSIENT_DB     0x00000400  /* VFS only */
 1032: #define SQLITE_OPEN_MAIN_JOURNAL     0x00000800  /* VFS only */
 1033: #define SQLITE_OPEN_TEMP_JOURNAL     0x00001000  /* VFS only */
 1034: #define SQLITE_OPEN_SUBJOURNAL       0x00002000  /* VFS only */
 1035: #define SQLITE_OPEN_MASTER_JOURNAL   0x00004000  /* VFS only */
 1036: #define SQLITE_OPEN_NOMUTEX          0x00008000  /* Ok for sqlite3_open_v2() */
 1037: #define SQLITE_OPEN_FULLMUTEX        0x00010000  /* Ok for sqlite3_open_v2() */
 1038: #define SQLITE_OPEN_SHAREDCACHE      0x00020000  /* Ok for sqlite3_open_v2() */
 1039: #define SQLITE_OPEN_PRIVATECACHE     0x00040000  /* Ok for sqlite3_open_v2() */
 1040: #define SQLITE_OPEN_WAL              0x00080000  /* VFS only */
 1041: 
 1042: /* Reserved:                         0x00F00000 */
 1043: 
 1044: /*
 1045: ** CAPI3REF: Device Characteristics
 1046: **
 1047: ** The xDeviceCharacteristics method of the [sqlite3_io_methods]
 1048: ** object returns an integer which is a vector of the these
 1049: ** bit values expressing I/O characteristics of the mass storage
 1050: ** device that holds the file that the [sqlite3_io_methods]
 1051: ** refers to.
 1052: **
 1053: ** The SQLITE_IOCAP_ATOMIC property means that all writes of
 1054: ** any size are atomic.  The SQLITE_IOCAP_ATOMICnnn values
 1055: ** mean that writes of blocks that are nnn bytes in size and
 1056: ** are aligned to an address which is an integer multiple of
 1057: ** nnn are atomic.  The SQLITE_IOCAP_SAFE_APPEND value means
 1058: ** that when data is appended to a file, the data is appended
 1059: ** first then the size of the file is extended, never the other
 1060: ** way around.  The SQLITE_IOCAP_SEQUENTIAL property means that
 1061: ** information is written to disk in the same order as calls
 1062: ** to xWrite().  The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that
 1063: ** after reboot following a crash or power loss, the only bytes in a
 1064: ** file that were written at the application level might have changed
 1065: ** and that adjacent bytes, even bytes within the same sector are
 1066: ** guaranteed to be unchanged.
 1067: */
 1068: #define SQLITE_IOCAP_ATOMIC                 0x00000001
 1069: #define SQLITE_IOCAP_ATOMIC512              0x00000002
 1070: #define SQLITE_IOCAP_ATOMIC1K               0x00000004
 1071: #define SQLITE_IOCAP_ATOMIC2K               0x00000008
 1072: #define SQLITE_IOCAP_ATOMIC4K               0x00000010
 1073: #define SQLITE_IOCAP_ATOMIC8K               0x00000020
 1074: #define SQLITE_IOCAP_ATOMIC16K              0x00000040
 1075: #define SQLITE_IOCAP_ATOMIC32K              0x00000080
 1076: #define SQLITE_IOCAP_ATOMIC64K              0x00000100
 1077: #define SQLITE_IOCAP_SAFE_APPEND            0x00000200
 1078: #define SQLITE_IOCAP_SEQUENTIAL             0x00000400
 1079: #define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN  0x00000800
 1080: #define SQLITE_IOCAP_POWERSAFE_OVERWRITE    0x00001000
 1081: 
 1082: /*
 1083: ** CAPI3REF: File Locking Levels
 1084: **
 1085: ** SQLite uses one of these integer values as the second
 1086: ** argument to calls it makes to the xLock() and xUnlock() methods
 1087: ** of an [sqlite3_io_methods] object.
 1088: */
 1089: #define SQLITE_LOCK_NONE          0
 1090: #define SQLITE_LOCK_SHARED        1
 1091: #define SQLITE_LOCK_RESERVED      2
 1092: #define SQLITE_LOCK_PENDING       3
 1093: #define SQLITE_LOCK_EXCLUSIVE     4
 1094: 
 1095: /*
 1096: ** CAPI3REF: Synchronization Type Flags
 1097: **
 1098: ** When SQLite invokes the xSync() method of an
 1099: ** [sqlite3_io_methods] object it uses a combination of
 1100: ** these integer values as the second argument.
 1101: **
 1102: ** When the SQLITE_SYNC_DATAONLY flag is used, it means that the
 1103: ** sync operation only needs to flush data to mass storage.  Inode
 1104: ** information need not be flushed. If the lower four bits of the flag
 1105: ** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
 1106: ** If the lower four bits equal SQLITE_SYNC_FULL, that means
 1107: ** to use Mac OS X style fullsync instead of fsync().
 1108: **
 1109: ** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
 1110: ** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL
 1111: ** settings.  The [synchronous pragma] determines when calls to the
 1112: ** xSync VFS method occur and applies uniformly across all platforms.
 1113: ** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
 1114: ** energetic or rigorous or forceful the sync operations are and
 1115: ** only make a difference on Mac OSX for the default SQLite code.
 1116: ** (Third-party VFS implementations might also make the distinction
 1117: ** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
 1118: ** operating systems natively supported by SQLite, only Mac OSX
 1119: ** cares about the difference.)
 1120: */
 1121: #define SQLITE_SYNC_NORMAL        0x00002
 1122: #define SQLITE_SYNC_FULL          0x00003
 1123: #define SQLITE_SYNC_DATAONLY      0x00010
 1124: 
 1125: /*
 1126: ** CAPI3REF: OS Interface Open File Handle
 1127: **
 1128: ** An [sqlite3_file] object represents an open file in the 
 1129: ** [sqlite3_vfs | OS interface layer].  Individual OS interface
 1130: ** implementations will
 1131: ** want to subclass this object by appending additional fields
 1132: ** for their own use.  The pMethods entry is a pointer to an
 1133: ** [sqlite3_io_methods] object that defines methods for performing
 1134: ** I/O operations on the open file.
 1135: */
 1136: typedef struct sqlite3_file sqlite3_file;
 1137: struct sqlite3_file {
 1138:   const struct sqlite3_io_methods *pMethods;  /* Methods for an open file */
 1139: };
 1140: 
 1141: /*
 1142: ** CAPI3REF: OS Interface File Virtual Methods Object
 1143: **
 1144: ** Every file opened by the [sqlite3_vfs.xOpen] method populates an
 1145: ** [sqlite3_file] object (or, more commonly, a subclass of the
 1146: ** [sqlite3_file] object) with a pointer to an instance of this object.
 1147: ** This object defines the methods used to perform various operations
 1148: ** against the open file represented by the [sqlite3_file] object.
 1149: **
 1150: ** If the [sqlite3_vfs.xOpen] method sets the sqlite3_file.pMethods element 
 1151: ** to a non-NULL pointer, then the sqlite3_io_methods.xClose method
 1152: ** may be invoked even if the [sqlite3_vfs.xOpen] reported that it failed.  The
 1153: ** only way to prevent a call to xClose following a failed [sqlite3_vfs.xOpen]
 1154: ** is for the [sqlite3_vfs.xOpen] to set the sqlite3_file.pMethods element
 1155: ** to NULL.
 1156: **
 1157: ** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or
 1158: ** [SQLITE_SYNC_FULL].  The first choice is the normal fsync().
 1159: ** The second choice is a Mac OS X style fullsync.  The [SQLITE_SYNC_DATAONLY]
 1160: ** flag may be ORed in to indicate that only the data of the file
 1161: ** and not its inode needs to be synced.
 1162: **
 1163: ** The integer values to xLock() and xUnlock() are one of
 1164: ** <ul>
 1165: ** <li> [SQLITE_LOCK_NONE],
 1166: ** <li> [SQLITE_LOCK_SHARED],
 1167: ** <li> [SQLITE_LOCK_RESERVED],
 1168: ** <li> [SQLITE_LOCK_PENDING], or
 1169: ** <li> [SQLITE_LOCK_EXCLUSIVE].
 1170: ** </ul>
 1171: ** xLock() increases the lock. xUnlock() decreases the lock.
 1172: ** The xCheckReservedLock() method checks whether any database connection,
 1173: ** either in this process or in some other process, is holding a RESERVED,
 1174: ** PENDING, or EXCLUSIVE lock on the file.  It returns true
 1175: ** if such a lock exists and false otherwise.
 1176: **
 1177: ** The xFileControl() method is a generic interface that allows custom
 1178: ** VFS implementations to directly control an open file using the
 1179: ** [sqlite3_file_control()] interface.  The second "op" argument is an
 1180: ** integer opcode.  The third argument is a generic pointer intended to
 1181: ** point to a structure that may contain arguments or space in which to
 1182: ** write return values.  Potential uses for xFileControl() might be
 1183: ** functions to enable blocking locks with timeouts, to change the
 1184: ** locking strategy (for example to use dot-file locks), to inquire
 1185: ** about the status of a lock, or to break stale locks.  The SQLite
 1186: ** core reserves all opcodes less than 100 for its own use.
 1187: ** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available.
 1188: ** Applications that define a custom xFileControl method should use opcodes
 1189: ** greater than 100 to avoid conflicts.  VFS implementations should
 1190: ** return [SQLITE_NOTFOUND] for file control opcodes that they do not
 1191: ** recognize.
 1192: **
 1193: ** The xSectorSize() method returns the sector size of the
 1194: ** device that underlies the file.  The sector size is the
 1195: ** minimum write that can be performed without disturbing
 1196: ** other bytes in the file.  The xDeviceCharacteristics()
 1197: ** method returns a bit vector describing behaviors of the
 1198: ** underlying device:
 1199: **
 1200: ** <ul>
 1201: ** <li> [SQLITE_IOCAP_ATOMIC]
 1202: ** <li> [SQLITE_IOCAP_ATOMIC512]
 1203: ** <li> [SQLITE_IOCAP_ATOMIC1K]
 1204: ** <li> [SQLITE_IOCAP_ATOMIC2K]
 1205: ** <li> [SQLITE_IOCAP_ATOMIC4K]
 1206: ** <li> [SQLITE_IOCAP_ATOMIC8K]
 1207: ** <li> [SQLITE_IOCAP_ATOMIC16K]
 1208: ** <li> [SQLITE_IOCAP_ATOMIC32K]
 1209: ** <li> [SQLITE_IOCAP_ATOMIC64K]
 1210: ** <li> [SQLITE_IOCAP_SAFE_APPEND]
 1211: ** <li> [SQLITE_IOCAP_SEQUENTIAL]
 1212: ** </ul>
 1213: **
 1214: ** The SQLITE_IOCAP_ATOMIC property means that all writes of
 1215: ** any size are atomic.  The SQLITE_IOCAP_ATOMICnnn values
 1216: ** mean that writes of blocks that are nnn bytes in size and
 1217: ** are aligned to an address which is an integer multiple of
 1218: ** nnn are atomic.  The SQLITE_IOCAP_SAFE_APPEND value means
 1219: ** that when data is appended to a file, the data is appended
 1220: ** first then the size of the file is extended, never the other
 1221: ** way around.  The SQLITE_IOCAP_SEQUENTIAL property means that
 1222: ** information is written to disk in the same order as calls
 1223: ** to xWrite().
 1224: **
 1225: ** If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill
 1226: ** in the unread portions of the buffer with zeros.  A VFS that
 1227: ** fails to zero-fill short reads might seem to work.  However,
 1228: ** failure to zero-fill short reads will eventually lead to
 1229: ** database corruption.
 1230: */
 1231: typedef struct sqlite3_io_methods sqlite3_io_methods;
 1232: struct sqlite3_io_methods {
 1233:   int iVersion;
 1234:   int (*xClose)(sqlite3_file*);
 1235:   int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
 1236:   int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst);
 1237:   int (*xTruncate)(sqlite3_file*, sqlite3_int64 size);
 1238:   int (*xSync)(sqlite3_file*, int flags);
 1239:   int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize);
 1240:   int (*xLock)(sqlite3_file*, int);
 1241:   int (*xUnlock)(sqlite3_file*, int);
 1242:   int (*xCheckReservedLock)(sqlite3_file*, int *pResOut);
 1243:   int (*xFileControl)(sqlite3_file*, int op, void *pArg);
 1244:   int (*xSectorSize)(sqlite3_file*);
 1245:   int (*xDeviceCharacteristics)(sqlite3_file*);
 1246:   /* Methods above are valid for version 1 */
 1247:   int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**);
 1248:   int (*xShmLock)(sqlite3_file*, int offset, int n, int flags);
 1249:   void (*xShmBarrier)(sqlite3_file*);
 1250:   int (*xShmUnmap)(sqlite3_file*, int deleteFlag);
 1251:   /* Methods above are valid for version 2 */
 1252:   /* Additional methods may be added in future releases */
 1253: };
 1254: 
 1255: /*
 1256: ** CAPI3REF: Standard File Control Opcodes
 1257: **
 1258: ** These integer constants are opcodes for the xFileControl method
 1259: ** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()]
 1260: ** interface.
 1261: **
 1262: ** The [SQLITE_FCNTL_LOCKSTATE] opcode is used for debugging.  This
 1263: ** opcode causes the xFileControl method to write the current state of
 1264: ** the lock (one of [SQLITE_LOCK_NONE], [SQLITE_LOCK_SHARED],
 1265: ** [SQLITE_LOCK_RESERVED], [SQLITE_LOCK_PENDING], or [SQLITE_LOCK_EXCLUSIVE])
 1266: ** into an integer that the pArg argument points to. This capability
 1267: ** is used during testing and only needs to be supported when SQLITE_TEST
 1268: ** is defined.
 1269: **
 1270: ** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS
 1271: ** layer a hint of how large the database file will grow to be during the
 1272: ** current transaction.  This hint is not guaranteed to be accurate but it
 1273: ** is often close.  The underlying VFS might choose to preallocate database
 1274: ** file space based on this hint in order to help writes to the database
 1275: ** file run faster.
 1276: **
 1277: ** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS
 1278: ** extends and truncates the database file in chunks of a size specified
 1279: ** by the user. The fourth argument to [sqlite3_file_control()] should 
 1280: ** point to an integer (type int) containing the new chunk-size to use
 1281: ** for the nominated database. Allocating database file space in large
 1282: ** chunks (say 1MB at a time), may reduce file-system fragmentation and
 1283: ** improve performance on some systems.
 1284: **
 1285: ** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer
 1286: ** to the [sqlite3_file] object associated with a particular database
 1287: ** connection.  See the [sqlite3_file_control()] documentation for
 1288: ** additional information.
 1289: **
 1290: ** ^(The [SQLITE_FCNTL_SYNC_OMITTED] opcode is generated internally by
 1291: ** SQLite and sent to all VFSes in place of a call to the xSync method
 1292: ** when the database connection has [PRAGMA synchronous] set to OFF.)^
 1293: ** Some specialized VFSes need this signal in order to operate correctly
 1294: ** when [PRAGMA synchronous | PRAGMA synchronous=OFF] is set, but most 
 1295: ** VFSes do not need this signal and should silently ignore this opcode.
 1296: ** Applications should not call [sqlite3_file_control()] with this
 1297: ** opcode as doing so may disrupt the operation of the specialized VFSes
 1298: ** that do require it.  
 1299: **
 1300: ** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic
 1301: ** retry counts and intervals for certain disk I/O operations for the
 1302: ** windows [VFS] in order to provide robustness in the presence of
 1303: ** anti-virus programs.  By default, the windows VFS will retry file read,
 1304: ** file write, and file delete operations up to 10 times, with a delay
 1305: ** of 25 milliseconds before the first retry and with the delay increasing
 1306: ** by an additional 25 milliseconds with each subsequent retry.  This
 1307: ** opcode allows these two values (10 retries and 25 milliseconds of delay)
 1308: ** to be adjusted.  The values are changed for all database connections
 1309: ** within the same process.  The argument is a pointer to an array of two
 1310: ** integers where the first integer i the new retry count and the second
 1311: ** integer is the delay.  If either integer is negative, then the setting
 1312: ** is not changed but instead the prior value of that setting is written
 1313: ** into the array entry, allowing the current retry settings to be
 1314: ** interrogated.  The zDbName parameter is ignored.
 1315: **
 1316: ** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the
 1317: ** persistent [WAL | Write AHead Log] setting.  By default, the auxiliary
 1318: ** write ahead log and shared memory files used for transaction control
 1319: ** are automatically deleted when the latest connection to the database
 1320: ** closes.  Setting persistent WAL mode causes those files to persist after
 1321: ** close.  Persisting the files is useful when other processes that do not
 1322: ** have write permission on the directory containing the database file want
 1323: ** to read the database file, as the WAL and shared memory files must exist
 1324: ** in order for the database to be readable.  The fourth parameter to
 1325: ** [sqlite3_file_control()] for this opcode should be a pointer to an integer.
 1326: ** That integer is 0 to disable persistent WAL mode or 1 to enable persistent
 1327: ** WAL mode.  If the integer is -1, then it is overwritten with the current
 1328: ** WAL persistence setting.
 1329: **
 1330: ** ^The [SQLITE_FCNTL_POWERSAFE_OVERWRITE] opcode is used to set or query the
 1331: ** persistent "powersafe-overwrite" or "PSOW" setting.  The PSOW setting
 1332: ** determines the [SQLITE_IOCAP_POWERSAFE_OVERWRITE] bit of the
 1333: ** xDeviceCharacteristics methods. The fourth parameter to
 1334: ** [sqlite3_file_control()] for this opcode should be a pointer to an integer.
 1335: ** That integer is 0 to disable zero-damage mode or 1 to enable zero-damage
 1336: ** mode.  If the integer is -1, then it is overwritten with the current
 1337: ** zero-damage mode setting.
 1338: **
 1339: ** ^The [SQLITE_FCNTL_OVERWRITE] opcode is invoked by SQLite after opening
 1340: ** a write transaction to indicate that, unless it is rolled back for some
 1341: ** reason, the entire database file will be overwritten by the current 
 1342: ** transaction. This is used by VACUUM operations.
 1343: **
 1344: ** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of
 1345: ** all [VFSes] in the VFS stack.  The names are of all VFS shims and the
 1346: ** final bottom-level VFS are written into memory obtained from 
 1347: ** [sqlite3_malloc()] and the result is stored in the char* variable
 1348: ** that the fourth parameter of [sqlite3_file_control()] points to.
 1349: ** The caller is responsible for freeing the memory when done.  As with
 1350: ** all file-control actions, there is no guarantee that this will actually
 1351: ** do anything.  Callers should initialize the char* variable to a NULL
 1352: ** pointer in case this file-control is not implemented.  This file-control
 1353: ** is intended for diagnostic use only.
 1354: */
 1355: #define SQLITE_FCNTL_LOCKSTATE               1
 1356: #define SQLITE_GET_LOCKPROXYFILE             2
 1357: #define SQLITE_SET_LOCKPROXYFILE             3
 1358: #define SQLITE_LAST_ERRNO                    4
 1359: #define SQLITE_FCNTL_SIZE_HINT               5
 1360: #define SQLITE_FCNTL_CHUNK_SIZE              6
 1361: #define SQLITE_FCNTL_FILE_POINTER            7
 1362: #define SQLITE_FCNTL_SYNC_OMITTED            8
 1363: #define SQLITE_FCNTL_WIN32_AV_RETRY          9
 1364: #define SQLITE_FCNTL_PERSIST_WAL            10
 1365: #define SQLITE_FCNTL_OVERWRITE              11
 1366: #define SQLITE_FCNTL_VFSNAME                12
 1367: #define SQLITE_FCNTL_POWERSAFE_OVERWRITE    13
 1368: 
 1369: /*
 1370: ** CAPI3REF: Mutex Handle
 1371: **
 1372: ** The mutex module within SQLite defines [sqlite3_mutex] to be an
 1373: ** abstract type for a mutex object.  The SQLite core never looks
 1374: ** at the internal representation of an [sqlite3_mutex].  It only
 1375: ** deals with pointers to the [sqlite3_mutex] object.
 1376: **
 1377: ** Mutexes are created using [sqlite3_mutex_alloc()].
 1378: */
 1379: typedef struct sqlite3_mutex sqlite3_mutex;
 1380: 
 1381: /*
 1382: ** CAPI3REF: OS Interface Object
 1383: **
 1384: ** An instance of the sqlite3_vfs object defines the interface between
 1385: ** the SQLite core and the underlying operating system.  The "vfs"
 1386: ** in the name of the object stands for "virtual file system".  See
 1387: ** the [VFS | VFS documentation] for further information.
 1388: **
 1389: ** The value of the iVersion field is initially 1 but may be larger in
 1390: ** future versions of SQLite.  Additional fields may be appended to this
 1391: ** object when the iVersion value is increased.  Note that the structure
 1392: ** of the sqlite3_vfs object changes in the transaction between
 1393: ** SQLite version 3.5.9 and 3.6.0 and yet the iVersion field was not
 1394: ** modified.
 1395: **
 1396: ** The szOsFile field is the size of the subclassed [sqlite3_file]
 1397: ** structure used by this VFS.  mxPathname is the maximum length of
 1398: ** a pathname in this VFS.
 1399: **
 1400: ** Registered sqlite3_vfs objects are kept on a linked list formed by
 1401: ** the pNext pointer.  The [sqlite3_vfs_register()]
 1402: ** and [sqlite3_vfs_unregister()] interfaces manage this list
 1403: ** in a thread-safe way.  The [sqlite3_vfs_find()] interface
 1404: ** searches the list.  Neither the application code nor the VFS
 1405: ** implementation should use the pNext pointer.
 1406: **
 1407: ** The pNext field is the only field in the sqlite3_vfs
 1408: ** structure that SQLite will ever modify.  SQLite will only access
 1409: ** or modify this field while holding a particular static mutex.
 1410: ** The application should never modify anything within the sqlite3_vfs
 1411: ** object once the object has been registered.
 1412: **
 1413: ** The zName field holds the name of the VFS module.  The name must
 1414: ** be unique across all VFS modules.
 1415: **
 1416: ** [[sqlite3_vfs.xOpen]]
 1417: ** ^SQLite guarantees that the zFilename parameter to xOpen
 1418: ** is either a NULL pointer or string obtained
 1419: ** from xFullPathname() with an optional suffix added.
 1420: ** ^If a suffix is added to the zFilename parameter, it will
 1421: ** consist of a single "-" character followed by no more than
 1422: ** 11 alphanumeric and/or "-" characters.
 1423: ** ^SQLite further guarantees that
 1424: ** the string will be valid and unchanged until xClose() is
 1425: ** called. Because of the previous sentence,
 1426: ** the [sqlite3_file] can safely store a pointer to the
 1427: ** filename if it needs to remember the filename for some reason.
 1428: ** If the zFilename parameter to xOpen is a NULL pointer then xOpen
 1429: ** must invent its own temporary name for the file.  ^Whenever the 
 1430: ** xFilename parameter is NULL it will also be the case that the
 1431: ** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE].
 1432: **
 1433: ** The flags argument to xOpen() includes all bits set in
 1434: ** the flags argument to [sqlite3_open_v2()].  Or if [sqlite3_open()]
 1435: ** or [sqlite3_open16()] is used, then flags includes at least
 1436: ** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]. 
 1437: ** If xOpen() opens a file read-only then it sets *pOutFlags to
 1438: ** include [SQLITE_OPEN_READONLY].  Other bits in *pOutFlags may be set.
 1439: **
 1440: ** ^(SQLite will also add one of the following flags to the xOpen()
 1441: ** call, depending on the object being opened:
 1442: **
 1443: ** <ul>
 1444: ** <li>  [SQLITE_OPEN_MAIN_DB]
 1445: ** <li>  [SQLITE_OPEN_MAIN_JOURNAL]
 1446: ** <li>  [SQLITE_OPEN_TEMP_DB]
 1447: ** <li>  [SQLITE_OPEN_TEMP_JOURNAL]
 1448: ** <li>  [SQLITE_OPEN_TRANSIENT_DB]
 1449: ** <li>  [SQLITE_OPEN_SUBJOURNAL]
 1450: ** <li>  [SQLITE_OPEN_MASTER_JOURNAL]
 1451: ** <li>  [SQLITE_OPEN_WAL]
 1452: ** </ul>)^
 1453: **
 1454: ** The file I/O implementation can use the object type flags to
 1455: ** change the way it deals with files.  For example, an application
 1456: ** that does not care about crash recovery or rollback might make
 1457: ** the open of a journal file a no-op.  Writes to this journal would
 1458: ** also be no-ops, and any attempt to read the journal would return
 1459: ** SQLITE_IOERR.  Or the implementation might recognize that a database
 1460: ** file will be doing page-aligned sector reads and writes in a random
 1461: ** order and set up its I/O subsystem accordingly.
 1462: **
 1463: ** SQLite might also add one of the following flags to the xOpen method:
 1464: **
 1465: ** <ul>
 1466: ** <li> [SQLITE_OPEN_DELETEONCLOSE]
 1467: ** <li> [SQLITE_OPEN_EXCLUSIVE]
 1468: ** </ul>
 1469: **
 1470: ** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be
 1471: ** deleted when it is closed.  ^The [SQLITE_OPEN_DELETEONCLOSE]
 1472: ** will be set for TEMP databases and their journals, transient
 1473: ** databases, and subjournals.
 1474: **
 1475: ** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction
 1476: ** with the [SQLITE_OPEN_CREATE] flag, which are both directly
 1477: ** analogous to the O_EXCL and O_CREAT flags of the POSIX open()
 1478: ** API.  The SQLITE_OPEN_EXCLUSIVE flag, when paired with the 
 1479: ** SQLITE_OPEN_CREATE, is used to indicate that file should always
 1480: ** be created, and that it is an error if it already exists.
 1481: ** It is <i>not</i> used to indicate the file should be opened 
 1482: ** for exclusive access.
 1483: **
 1484: ** ^At least szOsFile bytes of memory are allocated by SQLite
 1485: ** to hold the  [sqlite3_file] structure passed as the third
 1486: ** argument to xOpen.  The xOpen method does not have to
 1487: ** allocate the structure; it should just fill it in.  Note that
 1488: ** the xOpen method must set the sqlite3_file.pMethods to either
 1489: ** a valid [sqlite3_io_methods] object or to NULL.  xOpen must do
 1490: ** this even if the open fails.  SQLite expects that the sqlite3_file.pMethods
 1491: ** element will be valid after xOpen returns regardless of the success
 1492: ** or failure of the xOpen call.
 1493: **
 1494: ** [[sqlite3_vfs.xAccess]]
 1495: ** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
 1496: ** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
 1497: ** test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
 1498: ** to test whether a file is at least readable.   The file can be a
 1499: ** directory.
 1500: **
 1501: ** ^SQLite will always allocate at least mxPathname+1 bytes for the
 1502: ** output buffer xFullPathname.  The exact size of the output buffer
 1503: ** is also passed as a parameter to both  methods. If the output buffer
 1504: ** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is
 1505: ** handled as a fatal error by SQLite, vfs implementations should endeavor
 1506: ** to prevent this by setting mxPathname to a sufficiently large value.
 1507: **
 1508: ** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64()
 1509: ** interfaces are not strictly a part of the filesystem, but they are
 1510: ** included in the VFS structure for completeness.
 1511: ** The xRandomness() function attempts to return nBytes bytes
 1512: ** of good-quality randomness into zOut.  The return value is
 1513: ** the actual number of bytes of randomness obtained.
 1514: ** The xSleep() method causes the calling thread to sleep for at
 1515: ** least the number of microseconds given.  ^The xCurrentTime()
 1516: ** method returns a Julian Day Number for the current date and time as
 1517: ** a floating point value.
 1518: ** ^The xCurrentTimeInt64() method returns, as an integer, the Julian
 1519: ** Day Number multiplied by 86400000 (the number of milliseconds in 
 1520: ** a 24-hour day).  
 1521: ** ^SQLite will use the xCurrentTimeInt64() method to get the current
 1522: ** date and time if that method is available (if iVersion is 2 or 
 1523: ** greater and the function pointer is not NULL) and will fall back
 1524: ** to xCurrentTime() if xCurrentTimeInt64() is unavailable.
 1525: **
 1526: ** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces
 1527: ** are not used by the SQLite core.  These optional interfaces are provided
 1528: ** by some VFSes to facilitate testing of the VFS code. By overriding 
 1529: ** system calls with functions under its control, a test program can
 1530: ** simulate faults and error conditions that would otherwise be difficult
 1531: ** or impossible to induce.  The set of system calls that can be overridden
 1532: ** varies from one VFS to another, and from one version of the same VFS to the
 1533: ** next.  Applications that use these interfaces must be prepared for any
 1534: ** or all of these interfaces to be NULL or for their behavior to change
 1535: ** from one release to the next.  Applications must not attempt to access
 1536: ** any of these methods if the iVersion of the VFS is less than 3.
 1537: */
 1538: typedef struct sqlite3_vfs sqlite3_vfs;
 1539: typedef void (*sqlite3_syscall_ptr)(void);
 1540: struct sqlite3_vfs {
 1541:   int iVersion;            /* Structure version number (currently 3) */
 1542:   int szOsFile;            /* Size of subclassed sqlite3_file */
 1543:   int mxPathname;          /* Maximum file pathname length */
 1544:   sqlite3_vfs *pNext;      /* Next registered VFS */
 1545:   const char *zName;       /* Name of this virtual file system */
 1546:   void *pAppData;          /* Pointer to application-specific data */
 1547:   int (*xOpen)(sqlite3_vfs*, const char *zName, sqlite3_file*,
 1548:                int flags, int *pOutFlags);
 1549:   int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir);
 1550:   int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut);
 1551:   int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut);
 1552:   void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename);
 1553:   void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg);
 1554:   void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void);
 1555:   void (*xDlClose)(sqlite3_vfs*, void*);
 1556:   int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut);
 1557:   int (*xSleep)(sqlite3_vfs*, int microseconds);
 1558:   int (*xCurrentTime)(sqlite3_vfs*, double*);
 1559:   int (*xGetLastError)(sqlite3_vfs*, int, char *);
 1560:   /*
 1561:   ** The methods above are in version 1 of the sqlite_vfs object
 1562:   ** definition.  Those that follow are added in version 2 or later
 1563:   */
 1564:   int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
 1565:   /*
 1566:   ** The methods above are in versions 1 and 2 of the sqlite_vfs object.
 1567:   ** Those below are for version 3 and greater.
 1568:   */
 1569:   int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr);
 1570:   sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName);
 1571:   const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName);
 1572:   /*
 1573:   ** The methods above are in versions 1 through 3 of the sqlite_vfs object.
 1574:   ** New fields may be appended in figure versions.  The iVersion
 1575:   ** value will increment whenever this happens. 
 1576:   */
 1577: };
 1578: 
 1579: /*
 1580: ** CAPI3REF: Flags for the xAccess VFS method
 1581: **
 1582: ** These integer constants can be used as the third parameter to
 1583: ** the xAccess method of an [sqlite3_vfs] object.  They determine
 1584: ** what kind of permissions the xAccess method is looking for.
 1585: ** With SQLITE_ACCESS_EXISTS, the xAccess method
 1586: ** simply checks whether the file exists.
 1587: ** With SQLITE_ACCESS_READWRITE, the xAccess method
 1588: ** checks whether the named directory is both readable and writable
 1589: ** (in other words, if files can be added, removed, and renamed within
 1590: ** the directory).
 1591: ** The SQLITE_ACCESS_READWRITE constant is currently used only by the
 1592: ** [temp_store_directory pragma], though this could change in a future
 1593: ** release of SQLite.
 1594: ** With SQLITE_ACCESS_READ, the xAccess method
 1595: ** checks whether the file is readable.  The SQLITE_ACCESS_READ constant is
 1596: ** currently unused, though it might be used in a future release of
 1597: ** SQLite.
 1598: */
 1599: #define SQLITE_ACCESS_EXISTS    0
 1600: #define SQLITE_ACCESS_READWRITE 1   /* Used by PRAGMA temp_store_directory */
 1601: #define SQLITE_ACCESS_READ      2   /* Unused */
 1602: 
 1603: /*
 1604: ** CAPI3REF: Flags for the xShmLock VFS method
 1605: **
 1606: ** These integer constants define the various locking operations
 1607: ** allowed by the xShmLock method of [sqlite3_io_methods].  The
 1608: ** following are the only legal combinations of flags to the
 1609: ** xShmLock method:
 1610: **
 1611: ** <ul>
 1612: ** <li>  SQLITE_SHM_LOCK | SQLITE_SHM_SHARED
 1613: ** <li>  SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE
 1614: ** <li>  SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED
 1615: ** <li>  SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE
 1616: ** </ul>
 1617: **
 1618: ** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as
 1619: ** was given no the corresponding lock.  
 1620: **
 1621: ** The xShmLock method can transition between unlocked and SHARED or
 1622: ** between unlocked and EXCLUSIVE.  It cannot transition between SHARED
 1623: ** and EXCLUSIVE.
 1624: */
 1625: #define SQLITE_SHM_UNLOCK       1
 1626: #define SQLITE_SHM_LOCK         2
 1627: #define SQLITE_SHM_SHARED       4
 1628: #define SQLITE_SHM_EXCLUSIVE    8
 1629: 
 1630: /*
 1631: ** CAPI3REF: Maximum xShmLock index
 1632: **
 1633: ** The xShmLock method on [sqlite3_io_methods] may use values
 1634: ** between 0 and this upper bound as its "offset" argument.
 1635: ** The SQLite core will never attempt to acquire or release a
 1636: ** lock outside of this range
 1637: */
 1638: #define SQLITE_SHM_NLOCK        8
 1639: 
 1640: 
 1641: /*
 1642: ** CAPI3REF: Initialize The SQLite Library
 1643: **
 1644: ** ^The sqlite3_initialize() routine initializes the
 1645: ** SQLite library.  ^The sqlite3_shutdown() routine
 1646: ** deallocates any resources that were allocated by sqlite3_initialize().
 1647: ** These routines are designed to aid in process initialization and
 1648: ** shutdown on embedded systems.  Workstation applications using
 1649: ** SQLite normally do not need to invoke either of these routines.
 1650: **
 1651: ** A call to sqlite3_initialize() is an "effective" call if it is
 1652: ** the first time sqlite3_initialize() is invoked during the lifetime of
 1653: ** the process, or if it is the first time sqlite3_initialize() is invoked
 1654: ** following a call to sqlite3_shutdown().  ^(Only an effective call
 1655: ** of sqlite3_initialize() does any initialization.  All other calls
 1656: ** are harmless no-ops.)^
 1657: **
 1658: ** A call to sqlite3_shutdown() is an "effective" call if it is the first
 1659: ** call to sqlite3_shutdown() since the last sqlite3_initialize().  ^(Only
 1660: ** an effective call to sqlite3_shutdown() does any deinitialization.
 1661: ** All other valid calls to sqlite3_shutdown() are harmless no-ops.)^
 1662: **
 1663: ** The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown()
 1664: ** is not.  The sqlite3_shutdown() interface must only be called from a
 1665: ** single thread.  All open [database connections] must be closed and all
 1666: ** other SQLite resources must be deallocated prior to invoking
 1667: ** sqlite3_shutdown().
 1668: **
 1669: ** Among other things, ^sqlite3_initialize() will invoke
 1670: ** sqlite3_os_init().  Similarly, ^sqlite3_shutdown()
 1671: ** will invoke sqlite3_os_end().
 1672: **
 1673: ** ^The sqlite3_initialize() routine returns [SQLITE_OK] on success.
 1674: ** ^If for some reason, sqlite3_initialize() is unable to initialize
 1675: ** the library (perhaps it is unable to allocate a needed resource such
 1676: ** as a mutex) it returns an [error code] other than [SQLITE_OK].
 1677: **
 1678: ** ^The sqlite3_initialize() routine is called internally by many other
 1679: ** SQLite interfaces so that an application usually does not need to
 1680: ** invoke sqlite3_initialize() directly.  For example, [sqlite3_open()]
 1681: ** calls sqlite3_initialize() so the SQLite library will be automatically
 1682: ** initialized when [sqlite3_open()] is called if it has not be initialized
 1683: ** already.  ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT]
 1684: ** compile-time option, then the automatic calls to sqlite3_initialize()
 1685: ** are omitted and the application must call sqlite3_initialize() directly
 1686: ** prior to using any other SQLite interface.  For maximum portability,
 1687: ** it is recommended that applications always invoke sqlite3_initialize()
 1688: ** directly prior to using any other SQLite interface.  Future releases
 1689: ** of SQLite may require this.  In other words, the behavior exhibited
 1690: ** when SQLite is compiled with [SQLITE_OMIT_AUTOINIT] might become the
 1691: ** default behavior in some future release of SQLite.
 1692: **
 1693: ** The sqlite3_os_init() routine does operating-system specific
 1694: ** initialization of the SQLite library.  The sqlite3_os_end()
 1695: ** routine undoes the effect of sqlite3_os_init().  Typical tasks
 1696: ** performed by these routines include allocation or deallocation
 1697: ** of static resources, initialization of global variables,
 1698: ** setting up a default [sqlite3_vfs] module, or setting up
 1699: ** a default configuration using [sqlite3_config()].
 1700: **
 1701: ** The application should never invoke either sqlite3_os_init()
 1702: ** or sqlite3_os_end() directly.  The application should only invoke
 1703: ** sqlite3_initialize() and sqlite3_shutdown().  The sqlite3_os_init()
 1704: ** interface is called automatically by sqlite3_initialize() and
 1705: ** sqlite3_os_end() is called by sqlite3_shutdown().  Appropriate
 1706: ** implementations for sqlite3_os_init() and sqlite3_os_end()
 1707: ** are built into SQLite when it is compiled for Unix, Windows, or OS/2.
 1708: ** When [custom builds | built for other platforms]
 1709: ** (using the [SQLITE_OS_OTHER=1] compile-time
 1710: ** option) the application must supply a suitable implementation for
 1711: ** sqlite3_os_init() and sqlite3_os_end().  An application-supplied
 1712: ** implementation of sqlite3_os_init() or sqlite3_os_end()
 1713: ** must return [SQLITE_OK] on success and some other [error code] upon
 1714: ** failure.
 1715: */
 1716: SQLITE_API int sqlite3_initialize(void);
 1717: SQLITE_API int sqlite3_shutdown(void);
 1718: SQLITE_API int sqlite3_os_init(void);
 1719: SQLITE_API int sqlite3_os_end(void);
 1720: 
 1721: /*
 1722: ** CAPI3REF: Configuring The SQLite Library
 1723: **
 1724: ** The sqlite3_config() interface is used to make global configuration
 1725: ** changes to SQLite in order to tune SQLite to the specific needs of
 1726: ** the application.  The default configuration is recommended for most
 1727: ** applications and so this routine is usually not necessary.  It is
 1728: ** provided to support rare applications with unusual needs.
 1729: **
 1730: ** The sqlite3_config() interface is not threadsafe.  The application
 1731: ** must insure that no other SQLite interfaces are invoked by other
 1732: ** threads while sqlite3_config() is running.  Furthermore, sqlite3_config()
 1733: ** may only be invoked prior to library initialization using
 1734: ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()].
 1735: ** ^If sqlite3_config() is called after [sqlite3_initialize()] and before
 1736: ** [sqlite3_shutdown()] then it will return SQLITE_MISUSE.
 1737: ** Note, however, that ^sqlite3_config() can be called as part of the
 1738: ** implementation of an application-defined [sqlite3_os_init()].
 1739: **
 1740: ** The first argument to sqlite3_config() is an integer
 1741: ** [configuration option] that determines
 1742: ** what property of SQLite is to be configured.  Subsequent arguments
 1743: ** vary depending on the [configuration option]
 1744: ** in the first argument.
 1745: **
 1746: ** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK].
 1747: ** ^If the option is unknown or SQLite is unable to set the option
 1748: ** then this routine returns a non-zero [error code].
 1749: */
 1750: SQLITE_API int sqlite3_config(int, ...);
 1751: 
 1752: /*
 1753: ** CAPI3REF: Configure database connections
 1754: **
 1755: ** The sqlite3_db_config() interface is used to make configuration
 1756: ** changes to a [database connection].  The interface is similar to
 1757: ** [sqlite3_config()] except that the changes apply to a single
 1758: ** [database connection] (specified in the first argument).
 1759: **
 1760: ** The second argument to sqlite3_db_config(D,V,...)  is the
 1761: ** [SQLITE_DBCONFIG_LOOKASIDE | configuration verb] - an integer code 
 1762: ** that indicates what aspect of the [database connection] is being configured.
 1763: ** Subsequent arguments vary depending on the configuration verb.
 1764: **
 1765: ** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if
 1766: ** the call is considered successful.
 1767: */
 1768: SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
 1769: 
 1770: /*
 1771: ** CAPI3REF: Memory Allocation Routines
 1772: **
 1773: ** An instance of this object defines the interface between SQLite
 1774: ** and low-level memory allocation routines.
 1775: **
 1776: ** This object is used in only one place in the SQLite interface.
 1777: ** A pointer to an instance of this object is the argument to
 1778: ** [sqlite3_config()] when the configuration option is
 1779: ** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC].  
 1780: ** By creating an instance of this object
 1781: ** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC])
 1782: ** during configuration, an application can specify an alternative
 1783: ** memory allocation subsystem for SQLite to use for all of its
 1784: ** dynamic memory needs.
 1785: **
 1786: ** Note that SQLite comes with several [built-in memory allocators]
 1787: ** that are perfectly adequate for the overwhelming majority of applications
 1788: ** and that this object is only useful to a tiny minority of applications
 1789: ** with specialized memory allocation requirements.  This object is
 1790: ** also used during testing of SQLite in order to specify an alternative
 1791: ** memory allocator that simulates memory out-of-memory conditions in
 1792: ** order to verify that SQLite recovers gracefully from such
 1793: ** conditions.
 1794: **
 1795: ** The xMalloc, xRealloc, and xFree methods must work like the
 1796: ** malloc(), realloc() and free() functions from the standard C library.
 1797: ** ^SQLite guarantees that the second argument to
 1798: ** xRealloc is always a value returned by a prior call to xRoundup.
 1799: **
 1800: ** xSize should return the allocated size of a memory allocation
 1801: ** previously obtained from xMalloc or xRealloc.  The allocated size
 1802: ** is always at least as big as the requested size but may be larger.
 1803: **
 1804: ** The xRoundup method returns what would be the allocated size of
 1805: ** a memory allocation given a particular requested size.  Most memory
 1806: ** allocators round up memory allocations at least to the next multiple
 1807: ** of 8.  Some allocators round up to a larger multiple or to a power of 2.
 1808: ** Every memory allocation request coming in through [sqlite3_malloc()]
 1809: ** or [sqlite3_realloc()] first calls xRoundup.  If xRoundup returns 0, 
 1810: ** that causes the corresponding memory allocation to fail.
 1811: **
 1812: ** The xInit method initializes the memory allocator.  (For example,
 1813: ** it might allocate any require mutexes or initialize internal data
 1814: ** structures.  The xShutdown method is invoked (indirectly) by
 1815: ** [sqlite3_shutdown()] and should deallocate any resources acquired
 1816: ** by xInit.  The pAppData pointer is used as the only parameter to
 1817: ** xInit and xShutdown.
 1818: **
 1819: ** SQLite holds the [SQLITE_MUTEX_STATIC_MASTER] mutex when it invokes
 1820: ** the xInit method, so the xInit method need not be threadsafe.  The
 1821: ** xShutdown method is only called from [sqlite3_shutdown()] so it does
 1822: ** not need to be threadsafe either.  For all other methods, SQLite
 1823: ** holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the
 1824: ** [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which
 1825: ** it is by default) and so the methods are automatically serialized.
 1826: ** However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other
 1827: ** methods must be threadsafe or else make their own arrangements for
 1828: ** serialization.
 1829: **
 1830: ** SQLite will never invoke xInit() more than once without an intervening
 1831: ** call to xShutdown().
 1832: */
 1833: typedef struct sqlite3_mem_methods sqlite3_mem_methods;
 1834: struct sqlite3_mem_methods {
 1835:   void *(*xMalloc)(int);         /* Memory allocation function */
 1836:   void (*xFree)(void*);          /* Free a prior allocation */
 1837:   void *(*xRealloc)(void*,int);  /* Resize an allocation */
 1838:   int (*xSize)(void*);           /* Return the size of an allocation */
 1839:   int (*xRoundup)(int);          /* Round up request size to allocation size */
 1840:   int (*xInit)(void*);           /* Initialize the memory allocator */
 1841:   void (*xShutdown)(void*);      /* Deinitialize the memory allocator */
 1842:   void *pAppData;                /* Argument to xInit() and xShutdown() */
 1843: };
 1844: 
 1845: /*
 1846: ** CAPI3REF: Configuration Options
 1847: ** KEYWORDS: {configuration option}
 1848: **
 1849: ** These constants are the available integer configuration options that
 1850: ** can be passed as the first argument to the [sqlite3_config()] interface.
 1851: **
 1852: ** New configuration options may be added in future releases of SQLite.
 1853: ** Existing configuration options might be discontinued.  Applications
 1854: ** should check the return code from [sqlite3_config()] to make sure that
 1855: ** the call worked.  The [sqlite3_config()] interface will return a
 1856: ** non-zero [error code] if a discontinued or unsupported configuration option
 1857: ** is invoked.
 1858: **
 1859: ** <dl>
 1860: ** [[SQLITE_CONFIG_SINGLETHREAD]] <dt>SQLITE_CONFIG_SINGLETHREAD</dt>
 1861: ** <dd>There are no arguments to this option.  ^This option sets the
 1862: ** [threading mode] to Single-thread.  In other words, it disables
 1863: ** all mutexing and puts SQLite into a mode where it can only be used
 1864: ** by a single thread.   ^If SQLite is compiled with
 1865: ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
 1866: ** it is not possible to change the [threading mode] from its default
 1867: ** value of Single-thread and so [sqlite3_config()] will return 
 1868: ** [SQLITE_ERROR] if called with the SQLITE_CONFIG_SINGLETHREAD
 1869: ** configuration option.</dd>
 1870: **
 1871: ** [[SQLITE_CONFIG_MULTITHREAD]] <dt>SQLITE_CONFIG_MULTITHREAD</dt>
 1872: ** <dd>There are no arguments to this option.  ^This option sets the
 1873: ** [threading mode] to Multi-thread.  In other words, it disables
 1874: ** mutexing on [database connection] and [prepared statement] objects.
 1875: ** The application is responsible for serializing access to
 1876: ** [database connections] and [prepared statements].  But other mutexes
 1877: ** are enabled so that SQLite will be safe to use in a multi-threaded
 1878: ** environment as long as no two threads attempt to use the same
 1879: ** [database connection] at the same time.  ^If SQLite is compiled with
 1880: ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
 1881: ** it is not possible to set the Multi-thread [threading mode] and
 1882: ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
 1883: ** SQLITE_CONFIG_MULTITHREAD configuration option.</dd>
 1884: **
 1885: ** [[SQLITE_CONFIG_SERIALIZED]] <dt>SQLITE_CONFIG_SERIALIZED</dt>
 1886: ** <dd>There are no arguments to this option.  ^This option sets the
 1887: ** [threading mode] to Serialized. In other words, this option enables
 1888: ** all mutexes including the recursive
 1889: ** mutexes on [database connection] and [prepared statement] objects.
 1890: ** In this mode (which is the default when SQLite is compiled with
 1891: ** [SQLITE_THREADSAFE=1]) the SQLite library will itself serialize access
 1892: ** to [database connections] and [prepared statements] so that the
 1893: ** application is free to use the same [database connection] or the
 1894: ** same [prepared statement] in different threads at the same time.
 1895: ** ^If SQLite is compiled with
 1896: ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
 1897: ** it is not possible to set the Serialized [threading mode] and
 1898: ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
 1899: ** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
 1900: **
 1901: ** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
 1902: ** <dd> ^(This option takes a single argument which is a pointer to an
 1903: ** instance of the [sqlite3_mem_methods] structure.  The argument specifies
 1904: ** alternative low-level memory allocation routines to be used in place of
 1905: ** the memory allocation routines built into SQLite.)^ ^SQLite makes
 1906: ** its own private copy of the content of the [sqlite3_mem_methods] structure
 1907: ** before the [sqlite3_config()] call returns.</dd>
 1908: **
 1909: ** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
 1910: ** <dd> ^(This option takes a single argument which is a pointer to an
 1911: ** instance of the [sqlite3_mem_methods] structure.  The [sqlite3_mem_methods]
 1912: ** structure is filled with the currently defined memory allocation routines.)^
 1913: ** This option can be used to overload the default memory allocation
 1914: ** routines with a wrapper that simulations memory allocation failure or
 1915: ** tracks memory usage, for example. </dd>
 1916: **
 1917: ** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
 1918: ** <dd> ^This option takes single argument of type int, interpreted as a 
 1919: ** boolean, which enables or disables the collection of memory allocation 
 1920: ** statistics. ^(When memory allocation statistics are disabled, the 
 1921: ** following SQLite interfaces become non-operational:
 1922: **   <ul>
 1923: **   <li> [sqlite3_memory_used()]
 1924: **   <li> [sqlite3_memory_highwater()]
 1925: **   <li> [sqlite3_soft_heap_limit64()]
 1926: **   <li> [sqlite3_status()]
 1927: **   </ul>)^
 1928: ** ^Memory allocation statistics are enabled by default unless SQLite is
 1929: ** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
 1930: ** allocation statistics are disabled by default.
 1931: ** </dd>
 1932: **
 1933: ** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
 1934: ** <dd> ^This option specifies a static memory buffer that SQLite can use for
 1935: ** scratch memory.  There are three arguments:  A pointer an 8-byte
 1936: ** aligned memory buffer from which the scratch allocations will be
 1937: ** drawn, the size of each scratch allocation (sz),
 1938: ** and the maximum number of scratch allocations (N).  The sz
 1939: ** argument must be a multiple of 16.
 1940: ** The first argument must be a pointer to an 8-byte aligned buffer
 1941: ** of at least sz*N bytes of memory.
 1942: ** ^SQLite will use no more than two scratch buffers per thread.  So
 1943: ** N should be set to twice the expected maximum number of threads.
 1944: ** ^SQLite will never require a scratch buffer that is more than 6
 1945: ** times the database page size. ^If SQLite needs needs additional
 1946: ** scratch memory beyond what is provided by this configuration option, then 
 1947: ** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
 1948: **
 1949: ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
 1950: ** <dd> ^This option specifies a static memory buffer that SQLite can use for
 1951: ** the database page cache with the default page cache implementation.  
 1952: ** This configuration should not be used if an application-define page
 1953: ** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option.
 1954: ** There are three arguments to this option: A pointer to 8-byte aligned
 1955: ** memory, the size of each page buffer (sz), and the number of pages (N).
 1956: ** The sz argument should be the size of the largest database page
 1957: ** (a power of two between 512 and 32768) plus a little extra for each
 1958: ** page header.  ^The page header size is 20 to 40 bytes depending on
 1959: ** the host architecture.  ^It is harmless, apart from the wasted memory,
 1960: ** to make sz a little too large.  The first
 1961: ** argument should point to an allocation of at least sz*N bytes of memory.
 1962: ** ^SQLite will use the memory provided by the first argument to satisfy its
 1963: ** memory needs for the first N pages that it adds to cache.  ^If additional
 1964: ** page cache memory is needed beyond what is provided by this option, then
 1965: ** SQLite goes to [sqlite3_malloc()] for the additional storage space.
 1966: ** The pointer in the first argument must
 1967: ** be aligned to an 8-byte boundary or subsequent behavior of SQLite
 1968: ** will be undefined.</dd>
 1969: **
 1970: ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
 1971: ** <dd> ^This option specifies a static memory buffer that SQLite will use
 1972: ** for all of its dynamic memory allocation needs beyond those provided
 1973: ** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
 1974: ** There are three arguments: An 8-byte aligned pointer to the memory,
 1975: ** the number of bytes in the memory buffer, and the minimum allocation size.
 1976: ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
 1977: ** to using its default memory allocator (the system malloc() implementation),
 1978: ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC].  ^If the
 1979: ** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or
 1980: ** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory
 1981: ** allocator is engaged to handle all of SQLites memory allocation needs.
 1982: ** The first pointer (the memory pointer) must be aligned to an 8-byte
 1983: ** boundary or subsequent behavior of SQLite will be undefined.
 1984: ** The minimum allocation size is capped at 2**12. Reasonable values
 1985: ** for the minimum allocation size are 2**5 through 2**8.</dd>
 1986: **
 1987: ** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
 1988: ** <dd> ^(This option takes a single argument which is a pointer to an
 1989: ** instance of the [sqlite3_mutex_methods] structure.  The argument specifies
 1990: ** alternative low-level mutex routines to be used in place
 1991: ** the mutex routines built into SQLite.)^  ^SQLite makes a copy of the
 1992: ** content of the [sqlite3_mutex_methods] structure before the call to
 1993: ** [sqlite3_config()] returns. ^If SQLite is compiled with
 1994: ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
 1995: ** the entire mutexing subsystem is omitted from the build and hence calls to
 1996: ** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
 1997: ** return [SQLITE_ERROR].</dd>
 1998: **
 1999: ** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
 2000: ** <dd> ^(This option takes a single argument which is a pointer to an
 2001: ** instance of the [sqlite3_mutex_methods] structure.  The
 2002: ** [sqlite3_mutex_methods]
 2003: ** structure is filled with the currently defined mutex routines.)^
 2004: ** This option can be used to overload the default mutex allocation
 2005: ** routines with a wrapper used to track mutex usage for performance
 2006: ** profiling or testing, for example.   ^If SQLite is compiled with
 2007: ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
 2008: ** the entire mutexing subsystem is omitted from the build and hence calls to
 2009: ** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
 2010: ** return [SQLITE_ERROR].</dd>
 2011: **
 2012: ** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
 2013: ** <dd> ^(This option takes two arguments that determine the default
 2014: ** memory allocation for the lookaside memory allocator on each
 2015: ** [database connection].  The first argument is the
 2016: ** size of each lookaside buffer slot and the second is the number of
 2017: ** slots allocated to each database connection.)^  ^(This option sets the
 2018: ** <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
 2019: ** verb to [sqlite3_db_config()] can be used to change the lookaside
 2020: ** configuration on individual connections.)^ </dd>
 2021: **
 2022: ** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
 2023: ** <dd> ^(This option takes a single argument which is a pointer to
 2024: ** an [sqlite3_pcache_methods2] object.  This object specifies the interface
 2025: ** to a custom page cache implementation.)^  ^SQLite makes a copy of the
 2026: ** object and uses it for page cache memory allocations.</dd>
 2027: **
 2028: ** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt>
 2029: ** <dd> ^(This option takes a single argument which is a pointer to an
 2030: ** [sqlite3_pcache_methods2] object.  SQLite copies of the current
 2031: ** page cache implementation into that object.)^ </dd>
 2032: **
 2033: ** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
 2034: ** <dd> ^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a
 2035: ** function with a call signature of void(*)(void*,int,const char*), 
 2036: ** and a pointer to void. ^If the function pointer is not NULL, it is
 2037: ** invoked by [sqlite3_log()] to process each logging event.  ^If the
 2038: ** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op.
 2039: ** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is
 2040: ** passed through as the first parameter to the application-defined logger
 2041: ** function whenever that function is invoked.  ^The second parameter to
 2042: ** the logger function is a copy of the first parameter to the corresponding
 2043: ** [sqlite3_log()] call and is intended to be a [result code] or an
 2044: ** [extended result code].  ^The third parameter passed to the logger is
 2045: ** log message after formatting via [sqlite3_snprintf()].
 2046: ** The SQLite logging interface is not reentrant; the logger function
 2047: ** supplied by the application must not invoke any SQLite interface.
 2048: ** In a multi-threaded application, the application-defined logger
 2049: ** function must be threadsafe. </dd>
 2050: **
 2051: ** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
 2052: ** <dd> This option takes a single argument of type int. If non-zero, then
 2053: ** URI handling is globally enabled. If the parameter is zero, then URI handling
 2054: ** is globally disabled. If URI handling is globally enabled, all filenames
 2055: ** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
 2056: ** specified as part of [ATTACH] commands are interpreted as URIs, regardless
 2057: ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
 2058: ** connection is opened. If it is globally disabled, filenames are
 2059: ** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
 2060: ** database connection is opened. By default, URI handling is globally
 2061: ** disabled. The default value may be changed by compiling with the
 2062: ** [SQLITE_USE_URI] symbol defined.
 2063: **
 2064: ** [[SQLITE_CONFIG_PCACHE]] [[SQLITE_CONFIG_GETPCACHE]]
 2065: ** <dt>SQLITE_CONFIG_PCACHE and SQLITE_CONFNIG_GETPCACHE
 2066: ** <dd> These options are obsolete and should not be used by new code.
 2067: ** They are retained for backwards compatibility but are now no-ops.
 2068: ** </dl>
 2069: */
 2070: #define SQLITE_CONFIG_SINGLETHREAD  1  /* nil */
 2071: #define SQLITE_CONFIG_MULTITHREAD   2  /* nil */
 2072: #define SQLITE_CONFIG_SERIALIZED    3  /* nil */
 2073: #define SQLITE_CONFIG_MALLOC        4  /* sqlite3_mem_methods* */
 2074: #define SQLITE_CONFIG_GETMALLOC     5  /* sqlite3_mem_methods* */
 2075: #define SQLITE_CONFIG_SCRATCH       6  /* void*, int sz, int N */
 2076: #define SQLITE_CONFIG_PAGECACHE     7  /* void*, int sz, int N */
 2077: #define SQLITE_CONFIG_HEAP          8  /* void*, int nByte, int min */
 2078: #define SQLITE_CONFIG_MEMSTATUS     9  /* boolean */
 2079: #define SQLITE_CONFIG_MUTEX        10  /* sqlite3_mutex_methods* */
 2080: #define SQLITE_CONFIG_GETMUTEX     11  /* sqlite3_mutex_methods* */
 2081: /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ 
 2082: #define SQLITE_CONFIG_LOOKASIDE    13  /* int int */
 2083: #define SQLITE_CONFIG_PCACHE       14  /* no-op */
 2084: #define SQLITE_CONFIG_GETPCACHE    15  /* no-op */
 2085: #define SQLITE_CONFIG_LOG          16  /* xFunc, void* */
 2086: #define SQLITE_CONFIG_URI          17  /* int */
 2087: #define SQLITE_CONFIG_PCACHE2      18  /* sqlite3_pcache_methods2* */
 2088: #define SQLITE_CONFIG_GETPCACHE2   19  /* sqlite3_pcache_methods2* */
 2089: 
 2090: /*
 2091: ** CAPI3REF: Database Connection Configuration Options
 2092: **
 2093: ** These constants are the available integer configuration options that
 2094: ** can be passed as the second argument to the [sqlite3_db_config()] interface.
 2095: **
 2096: ** New configuration options may be added in future releases of SQLite.
 2097: ** Existing configuration options might be discontinued.  Applications
 2098: ** should check the return code from [sqlite3_db_config()] to make sure that
 2099: ** the call worked.  ^The [sqlite3_db_config()] interface will return a
 2100: ** non-zero [error code] if a discontinued or unsupported configuration option
 2101: ** is invoked.
 2102: **
 2103: ** <dl>
 2104: ** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt>
 2105: ** <dd> ^This option takes three additional arguments that determine the 
 2106: ** [lookaside memory allocator] configuration for the [database connection].
 2107: ** ^The first argument (the third parameter to [sqlite3_db_config()] is a
 2108: ** pointer to a memory buffer to use for lookaside memory.
 2109: ** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb
 2110: ** may be NULL in which case SQLite will allocate the
 2111: ** lookaside buffer itself using [sqlite3_malloc()]. ^The second argument is the
 2112: ** size of each lookaside buffer slot.  ^The third argument is the number of
 2113: ** slots.  The size of the buffer in the first argument must be greater than
 2114: ** or equal to the product of the second and third arguments.  The buffer
 2115: ** must be aligned to an 8-byte boundary.  ^If the second argument to
 2116: ** SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally
 2117: ** rounded down to the next smaller multiple of 8.  ^(The lookaside memory
 2118: ** configuration for a database connection can only be changed when that
 2119: ** connection is not currently using lookaside memory, or in other words
 2120: ** when the "current value" returned by
 2121: ** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero.
 2122: ** Any attempt to change the lookaside memory configuration when lookaside
 2123: ** memory is in use leaves the configuration unchanged and returns 
 2124: ** [SQLITE_BUSY].)^</dd>
 2125: **
 2126: ** <dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt>
 2127: ** <dd> ^This option is used to enable or disable the enforcement of
 2128: ** [foreign key constraints].  There should be two additional arguments.
 2129: ** The first argument is an integer which is 0 to disable FK enforcement,
 2130: ** positive to enable FK enforcement or negative to leave FK enforcement
 2131: ** unchanged.  The second parameter is a pointer to an integer into which
 2132: ** is written 0 or 1 to indicate whether FK enforcement is off or on
 2133: ** following this call.  The second parameter may be a NULL pointer, in
 2134: ** which case the FK enforcement setting is not reported back. </dd>
 2135: **
 2136: ** <dt>SQLITE_DBCONFIG_ENABLE_TRIGGER</dt>
 2137: ** <dd> ^This option is used to enable or disable [CREATE TRIGGER | triggers].
 2138: ** There should be two additional arguments.
 2139: ** The first argument is an integer which is 0 to disable triggers,
 2140: ** positive to enable triggers or negative to leave the setting unchanged.
 2141: ** The second parameter is a pointer to an integer into which
 2142: ** is written 0 or 1 to indicate whether triggers are disabled or enabled
 2143: ** following this call.  The second parameter may be a NULL pointer, in
 2144: ** which case the trigger setting is not reported back. </dd>
 2145: **
 2146: ** </dl>
 2147: */
 2148: #define SQLITE_DBCONFIG_LOOKASIDE       1001  /* void* int int */
 2149: #define SQLITE_DBCONFIG_ENABLE_FKEY     1002  /* int int* */
 2150: #define SQLITE_DBCONFIG_ENABLE_TRIGGER  1003  /* int int* */
 2151: 
 2152: 
 2153: /*
 2154: ** CAPI3REF: Enable Or Disable Extended Result Codes
 2155: **
 2156: ** ^The sqlite3_extended_result_codes() routine enables or disables the
 2157: ** [extended result codes] feature of SQLite. ^The extended result
 2158: ** codes are disabled by default for historical compatibility.
 2159: */
 2160: SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff);
 2161: 
 2162: /*
 2163: ** CAPI3REF: Last Insert Rowid
 2164: **
 2165: ** ^Each entry in an SQLite table has a unique 64-bit signed
 2166: ** integer key called the [ROWID | "rowid"]. ^The rowid is always available
 2167: ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those
 2168: ** names are not also used by explicitly declared columns. ^If
 2169: ** the table has a column of type [INTEGER PRIMARY KEY] then that column
 2170: ** is another alias for the rowid.
 2171: **
 2172: ** ^This routine returns the [rowid] of the most recent
 2173: ** successful [INSERT] into the database from the [database connection]
 2174: ** in the first argument.  ^As of SQLite version 3.7.7, this routines
 2175: ** records the last insert rowid of both ordinary tables and [virtual tables].
 2176: ** ^If no successful [INSERT]s
 2177: ** have ever occurred on that database connection, zero is returned.
 2178: **
 2179: ** ^(If an [INSERT] occurs within a trigger or within a [virtual table]
 2180: ** method, then this routine will return the [rowid] of the inserted
 2181: ** row as long as the trigger or virtual table method is running.
 2182: ** But once the trigger or virtual table method ends, the value returned 
 2183: ** by this routine reverts to what it was before the trigger or virtual
 2184: ** table method began.)^
 2185: **
 2186: ** ^An [INSERT] that fails due to a constraint violation is not a
 2187: ** successful [INSERT] and does not change the value returned by this
 2188: ** routine.  ^Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK,
 2189: ** and INSERT OR ABORT make no changes to the return value of this
 2190: ** routine when their insertion fails.  ^(When INSERT OR REPLACE
 2191: ** encounters a constraint violation, it does not fail.  The
 2192: ** INSERT continues to completion after deleting rows that caused
 2193: ** the constraint problem so INSERT OR REPLACE will always change
 2194: ** the return value of this interface.)^
 2195: **
 2196: ** ^For the purposes of this routine, an [INSERT] is considered to
 2197: ** be successful even if it is subsequently rolled back.
 2198: **
 2199: ** This function is accessible to SQL statements via the
 2200: ** [last_insert_rowid() SQL function].
 2201: **
 2202: ** If a separate thread performs a new [INSERT] on the same
 2203: ** database connection while the [sqlite3_last_insert_rowid()]
 2204: ** function is running and thus changes the last insert [rowid],
 2205: ** then the value returned by [sqlite3_last_insert_rowid()] is
 2206: ** unpredictable and might not equal either the old or the new
 2207: ** last insert [rowid].
 2208: */
 2209: SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
 2210: 
 2211: /*
 2212: ** CAPI3REF: Count The Number Of Rows Modified
 2213: **
 2214: ** ^This function returns the number of database rows that were changed
 2215: ** or inserted or deleted by the most recently completed SQL statement
 2216: ** on the [database connection] specified by the first parameter.
 2217: ** ^(Only changes that are directly specified by the [INSERT], [UPDATE],
 2218: ** or [DELETE] statement are counted.  Auxiliary changes caused by
 2219: ** triggers or [foreign key actions] are not counted.)^ Use the
 2220: ** [sqlite3_total_changes()] function to find the total number of changes
 2221: ** including changes caused by triggers and foreign key actions.
 2222: **
 2223: ** ^Changes to a view that are simulated by an [INSTEAD OF trigger]
 2224: ** are not counted.  Only real table changes are counted.
 2225: **
 2226: ** ^(A "row change" is a change to a single row of a single table
 2227: ** caused by an INSERT, DELETE, or UPDATE statement.  Rows that
 2228: ** are changed as side effects of [REPLACE] constraint resolution,
 2229: ** rollback, ABORT processing, [DROP TABLE], or by any other
 2230: ** mechanisms do not count as direct row changes.)^
 2231: **
 2232: ** A "trigger context" is a scope of execution that begins and
 2233: ** ends with the script of a [CREATE TRIGGER | trigger]. 
 2234: ** Most SQL statements are
 2235: ** evaluated outside of any trigger.  This is the "top level"
 2236: ** trigger context.  If a trigger fires from the top level, a
 2237: ** new trigger context is entered for the duration of that one
 2238: ** trigger.  Subtriggers create subcontexts for their duration.
 2239: **
 2240: ** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does
 2241: ** not create a new trigger context.
 2242: **
 2243: ** ^This function returns the number of direct row changes in the
 2244: ** most recent INSERT, UPDATE, or DELETE statement within the same
 2245: ** trigger context.
 2246: **
 2247: ** ^Thus, when called from the top level, this function returns the
 2248: ** number of changes in the most recent INSERT, UPDATE, or DELETE
 2249: ** that also occurred at the top level.  ^(Within the body of a trigger,
 2250: ** the sqlite3_changes() interface can be called to find the number of
 2251: ** changes in the most recently completed INSERT, UPDATE, or DELETE
 2252: ** statement within the body of the same trigger.
 2253: ** However, the number returned does not include changes
 2254: ** caused by subtriggers since those have their own context.)^
 2255: **
 2256: ** See also the [sqlite3_total_changes()] interface, the
 2257: ** [count_changes pragma], and the [changes() SQL function].
 2258: **
 2259: ** If a separate thread makes changes on the same database connection
 2260: ** while [sqlite3_changes()] is running then the value returned
 2261: ** is unpredictable and not meaningful.
 2262: */
 2263: SQLITE_API int sqlite3_changes(sqlite3*);
 2264: 
 2265: /*
 2266: ** CAPI3REF: Total Number Of Rows Modified
 2267: **
 2268: ** ^This function returns the number of row changes caused by [INSERT],
 2269: ** [UPDATE] or [DELETE] statements since the [database connection] was opened.
 2270: ** ^(The count returned by sqlite3_total_changes() includes all changes
 2271: ** from all [CREATE TRIGGER | trigger] contexts and changes made by
 2272: ** [foreign key actions]. However,
 2273: ** the count does not include changes used to implement [REPLACE] constraints,
 2274: ** do rollbacks or ABORT processing, or [DROP TABLE] processing.  The
 2275: ** count does not include rows of views that fire an [INSTEAD OF trigger],
 2276: ** though if the INSTEAD OF trigger makes changes of its own, those changes 
 2277: ** are counted.)^
 2278: ** ^The sqlite3_total_changes() function counts the changes as soon as
 2279: ** the statement that makes them is completed (when the statement handle
 2280: ** is passed to [sqlite3_reset()] or [sqlite3_finalize()]).
 2281: **
 2282: ** See also the [sqlite3_changes()] interface, the
 2283: ** [count_changes pragma], and the [total_changes() SQL function].
 2284: **
 2285: ** If a separate thread makes changes on the same database connection
 2286: ** while [sqlite3_total_changes()] is running then the value
 2287: ** returned is unpredictable and not meaningful.
 2288: */
 2289: SQLITE_API int sqlite3_total_changes(sqlite3*);
 2290: 
 2291: /*
 2292: ** CAPI3REF: Interrupt A Long-Running Query
 2293: **
 2294: ** ^This function causes any pending database operation to abort and
 2295: ** return at its earliest opportunity. This routine is typically
 2296: ** called in response to a user action such as pressing "Cancel"
 2297: ** or Ctrl-C where the user wants a long query operation to halt
 2298: ** immediately.
 2299: **
 2300: ** ^It is safe to call this routine from a thread different from the
 2301: ** thread that is currently running the database operation.  But it
 2302: ** is not safe to call this routine with a [database connection] that
 2303: ** is closed or might close before sqlite3_interrupt() returns.
 2304: **
 2305: ** ^If an SQL operation is very nearly finished at the time when
 2306: ** sqlite3_interrupt() is called, then it might not have an opportunity
 2307: ** to be interrupted and might continue to completion.
 2308: **
 2309: ** ^An SQL operation that is interrupted will return [SQLITE_INTERRUPT].
 2310: ** ^If the interrupted SQL operation is an INSERT, UPDATE, or DELETE
 2311: ** that is inside an explicit transaction, then the entire transaction
 2312: ** will be rolled back automatically.
 2313: **
 2314: ** ^The sqlite3_interrupt(D) call is in effect until all currently running
 2315: ** SQL statements on [database connection] D complete.  ^Any new SQL statements
 2316: ** that are started after the sqlite3_interrupt() call and before the 
 2317: ** running statements reaches zero are interrupted as if they had been
 2318: ** running prior to the sqlite3_interrupt() call.  ^New SQL statements
 2319: ** that are started after the running statement count reaches zero are
 2320: ** not effected by the sqlite3_interrupt().
 2321: ** ^A call to sqlite3_interrupt(D) that occurs when there are no running
 2322: ** SQL statements is a no-op and has no effect on SQL statements
 2323: ** that are started after the sqlite3_interrupt() call returns.
 2324: **
 2325: ** If the database connection closes while [sqlite3_interrupt()]
 2326: ** is running then bad things will likely happen.
 2327: */
 2328: SQLITE_API void sqlite3_interrupt(sqlite3*);
 2329: 
 2330: /*
 2331: ** CAPI3REF: Determine If An SQL Statement Is Complete
 2332: **
 2333: ** These routines are useful during command-line input to determine if the
 2334: ** currently entered text seems to form a complete SQL statement or
 2335: ** if additional input is needed before sending the text into
 2336: ** SQLite for parsing.  ^These routines return 1 if the input string
 2337: ** appears to be a complete SQL statement.  ^A statement is judged to be
 2338: ** complete if it ends with a semicolon token and is not a prefix of a
 2339: ** well-formed CREATE TRIGGER statement.  ^Semicolons that are embedded within
 2340: ** string literals or quoted identifier names or comments are not
 2341: ** independent tokens (they are part of the token in which they are
 2342: ** embedded) and thus do not count as a statement terminator.  ^Whitespace
 2343: ** and comments that follow the final semicolon are ignored.
 2344: **
 2345: ** ^These routines return 0 if the statement is incomplete.  ^If a
 2346: ** memory allocation fails, then SQLITE_NOMEM is returned.
 2347: **
 2348: ** ^These routines do not parse the SQL statements thus
 2349: ** will not detect syntactically incorrect SQL.
 2350: **
 2351: ** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior 
 2352: ** to invoking sqlite3_complete16() then sqlite3_initialize() is invoked
 2353: ** automatically by sqlite3_complete16().  If that initialization fails,
 2354: ** then the return value from sqlite3_complete16() will be non-zero
 2355: ** regardless of whether or not the input SQL is complete.)^
 2356: **
 2357: ** The input to [sqlite3_complete()] must be a zero-terminated
 2358: ** UTF-8 string.
 2359: **
 2360: ** The input to [sqlite3_complete16()] must be a zero-terminated
 2361: ** UTF-16 string in native byte order.
 2362: */
 2363: SQLITE_API int sqlite3_complete(const char *sql);
 2364: SQLITE_API int sqlite3_complete16(const void *sql);
 2365: 
 2366: /*
 2367: ** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors
 2368: **
 2369: ** ^This routine sets a callback function that might be invoked whenever
 2370: ** an attempt is made to open a database table that another thread
 2371: ** or process has locked.
 2372: **
 2373: ** ^If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED]
 2374: ** is returned immediately upon encountering the lock.  ^If the busy callback
 2375: ** is not NULL, then the callback might be invoked with two arguments.
 2376: **
 2377: ** ^The first argument to the busy handler is a copy of the void* pointer which
 2378: ** is the third argument to sqlite3_busy_handler().  ^The second argument to
 2379: ** the busy handler callback is the number of times that the busy handler has
 2380: ** been invoked for this locking event.  ^If the
 2381: ** busy callback returns 0, then no additional attempts are made to
 2382: ** access the database and [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] is returned.
 2383: ** ^If the callback returns non-zero, then another attempt
 2384: ** is made to open the database for reading and the cycle repeats.
 2385: **
 2386: ** The presence of a busy handler does not guarantee that it will be invoked
 2387: ** when there is lock contention. ^If SQLite determines that invoking the busy
 2388: ** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY]
 2389: ** or [SQLITE_IOERR_BLOCKED] instead of invoking the busy handler.
 2390: ** Consider a scenario where one process is holding a read lock that
 2391: ** it is trying to promote to a reserved lock and
 2392: ** a second process is holding a reserved lock that it is trying
 2393: ** to promote to an exclusive lock.  The first process cannot proceed
 2394: ** because it is blocked by the second and the second process cannot
 2395: ** proceed because it is blocked by the first.  If both processes
 2396: ** invoke the busy handlers, neither will make any progress.  Therefore,
 2397: ** SQLite returns [SQLITE_BUSY] for the first process, hoping that this
 2398: ** will induce the first process to release its read lock and allow
 2399: ** the second process to proceed.
 2400: **
 2401: ** ^The default busy callback is NULL.
 2402: **
 2403: ** ^The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED]
 2404: ** when SQLite is in the middle of a large transaction where all the
 2405: ** changes will not fit into the in-memory cache.  SQLite will
 2406: ** already hold a RESERVED lock on the database file, but it needs
 2407: ** to promote this lock to EXCLUSIVE so that it can spill cache
 2408: ** pages into the database file without harm to concurrent
 2409: ** readers.  ^If it is unable to promote the lock, then the in-memory
 2410: ** cache will be left in an inconsistent state and so the error
 2411: ** code is promoted from the relatively benign [SQLITE_BUSY] to
 2412: ** the more severe [SQLITE_IOERR_BLOCKED].  ^This error code promotion
 2413: ** forces an automatic rollback of the changes.  See the
 2414: ** <a href="/cvstrac/wiki?p=CorruptionFollowingBusyError">
 2415: ** CorruptionFollowingBusyError</a> wiki page for a discussion of why
 2416: ** this is important.
 2417: **
 2418: ** ^(There can only be a single busy handler defined for each
 2419: ** [database connection].  Setting a new busy handler clears any
 2420: ** previously set handler.)^  ^Note that calling [sqlite3_busy_timeout()]
 2421: ** will also set or clear the busy handler.
 2422: **
 2423: ** The busy callback should not take any actions which modify the
 2424: ** database connection that invoked the busy handler.  Any such actions
 2425: ** result in undefined behavior.
 2426: ** 
 2427: ** A busy handler must not close the database connection
 2428: ** or [prepared statement] that invoked the busy handler.
 2429: */
 2430: SQLITE_API int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
 2431: 
 2432: /*
 2433: ** CAPI3REF: Set A Busy Timeout
 2434: **
 2435: ** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps
 2436: ** for a specified amount of time when a table is locked.  ^The handler
 2437: ** will sleep multiple times until at least "ms" milliseconds of sleeping
 2438: ** have accumulated.  ^After at least "ms" milliseconds of sleeping,
 2439: ** the handler returns 0 which causes [sqlite3_step()] to return
 2440: ** [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED].
 2441: **
 2442: ** ^Calling this routine with an argument less than or equal to zero
 2443: ** turns off all busy handlers.
 2444: **
 2445: ** ^(There can only be a single busy handler for a particular
 2446: ** [database connection] any any given moment.  If another busy handler
 2447: ** was defined  (using [sqlite3_busy_handler()]) prior to calling
 2448: ** this routine, that other busy handler is cleared.)^
 2449: */
 2450: SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms);
 2451: 
 2452: /*
 2453: ** CAPI3REF: Convenience Routines For Running Queries
 2454: **
 2455: ** This is a legacy interface that is preserved for backwards compatibility.
 2456: ** Use of this interface is not recommended.
 2457: **
 2458: ** Definition: A <b>result table</b> is memory data structure created by the
 2459: ** [sqlite3_get_table()] interface.  A result table records the
 2460: ** complete query results from one or more queries.
 2461: **
 2462: ** The table conceptually has a number of rows and columns.  But
 2463: ** these numbers are not part of the result table itself.  These
 2464: ** numbers are obtained separately.  Let N be the number of rows
 2465: ** and M be the number of columns.
 2466: **
 2467: ** A result table is an array of pointers to zero-terminated UTF-8 strings.
 2468: ** There are (N+1)*M elements in the array.  The first M pointers point
 2469: ** to zero-terminated strings that  contain the names of the columns.
 2470: ** The remaining entries all point to query results.  NULL values result
 2471: ** in NULL pointers.  All other values are in their UTF-8 zero-terminated
 2472: ** string representation as returned by [sqlite3_column_text()].
 2473: **
 2474: ** A result table might consist of one or more memory allocations.
 2475: ** It is not safe to pass a result table directly to [sqlite3_free()].
 2476: ** A result table should be deallocated using [sqlite3_free_table()].
 2477: **
 2478: ** ^(As an example of the result table format, suppose a query result
 2479: ** is as follows:
 2480: **
 2481: ** <blockquote><pre>
 2482: **        Name        | Age
 2483: **        -----------------------
 2484: **        Alice       | 43
 2485: **        Bob         | 28
 2486: **        Cindy       | 21
 2487: ** </pre></blockquote>
 2488: **
 2489: ** There are two column (M==2) and three rows (N==3).  Thus the
 2490: ** result table has 8 entries.  Suppose the result table is stored
 2491: ** in an array names azResult.  Then azResult holds this content:
 2492: **
 2493: ** <blockquote><pre>
 2494: **        azResult&#91;0] = "Name";
 2495: **        azResult&#91;1] = "Age";
 2496: **        azResult&#91;2] = "Alice";
 2497: **        azResult&#91;3] = "43";
 2498: **        azResult&#91;4] = "Bob";
 2499: **        azResult&#91;5] = "28";
 2500: **        azResult&#91;6] = "Cindy";
 2501: **        azResult&#91;7] = "21";
 2502: ** </pre></blockquote>)^
 2503: **
 2504: ** ^The sqlite3_get_table() function evaluates one or more
 2505: ** semicolon-separated SQL statements in the zero-terminated UTF-8
 2506: ** string of its 2nd parameter and returns a result table to the
 2507: ** pointer given in its 3rd parameter.
 2508: **
 2509: ** After the application has finished with the result from sqlite3_get_table(),
 2510: ** it must pass the result table pointer to sqlite3_free_table() in order to
 2511: ** release the memory that was malloced.  Because of the way the
 2512: ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling
 2513: ** function must not try to call [sqlite3_free()] directly.  Only
 2514: ** [sqlite3_free_table()] is able to release the memory properly and safely.
 2515: **
 2516: ** The sqlite3_get_table() interface is implemented as a wrapper around
 2517: ** [sqlite3_exec()].  The sqlite3_get_table() routine does not have access
 2518: ** to any internal data structures of SQLite.  It uses only the public
 2519: ** interface defined here.  As a consequence, errors that occur in the
 2520: ** wrapper layer outside of the internal [sqlite3_exec()] call are not
 2521: ** reflected in subsequent calls to [sqlite3_errcode()] or
 2522: ** [sqlite3_errmsg()].
 2523: */
 2524: SQLITE_API int sqlite3_get_table(
 2525:   sqlite3 *db,          /* An open database */
 2526:   const char *zSql,     /* SQL to be evaluated */
 2527:   char ***pazResult,    /* Results of the query */
 2528:   int *pnRow,           /* Number of result rows written here */
 2529:   int *pnColumn,        /* Number of result columns written here */
 2530:   char **pzErrmsg       /* Error msg written here */
 2531: );
 2532: SQLITE_API void sqlite3_free_table(char **result);
 2533: 
 2534: /*
 2535: ** CAPI3REF: Formatted String Printing Functions
 2536: **
 2537: ** These routines are work-alikes of the "printf()" family of functions
 2538: ** from the standard C library.
 2539: **
 2540: ** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their
 2541: ** results into memory obtained from [sqlite3_malloc()].
 2542: ** The strings returned by these two routines should be
 2543: ** released by [sqlite3_free()].  ^Both routines return a
 2544: ** NULL pointer if [sqlite3_malloc()] is unable to allocate enough
 2545: ** memory to hold the resulting string.
 2546: **
 2547: ** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from
 2548: ** the standard C library.  The result is written into the
 2549: ** buffer supplied as the second parameter whose size is given by
 2550: ** the first parameter. Note that the order of the
 2551: ** first two parameters is reversed from snprintf().)^  This is an
 2552: ** historical accident that cannot be fixed without breaking
 2553: ** backwards compatibility.  ^(Note also that sqlite3_snprintf()
 2554: ** returns a pointer to its buffer instead of the number of
 2555: ** characters actually written into the buffer.)^  We admit that
 2556: ** the number of characters written would be a more useful return
 2557: ** value but we cannot change the implementation of sqlite3_snprintf()
 2558: ** now without breaking compatibility.
 2559: **
 2560: ** ^As long as the buffer size is greater than zero, sqlite3_snprintf()
 2561: ** guarantees that the buffer is always zero-terminated.  ^The first
 2562: ** parameter "n" is the total size of the buffer, including space for
 2563: ** the zero terminator.  So the longest string that can be completely
 2564: ** written will be n-1 characters.
 2565: **
 2566: ** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf().
 2567: **
 2568: ** These routines all implement some additional formatting
 2569: ** options that are useful for constructing SQL statements.
 2570: ** All of the usual printf() formatting options apply.  In addition, there
 2571: ** is are "%q", "%Q", and "%z" options.
 2572: **
 2573: ** ^(The %q option works like %s in that it substitutes a nul-terminated
 2574: ** string from the argument list.  But %q also doubles every '\'' character.
 2575: ** %q is designed for use inside a string literal.)^  By doubling each '\''
 2576: ** character it escapes that character and allows it to be inserted into
 2577: ** the string.
 2578: **
 2579: ** For example, assume the string variable zText contains text as follows:
 2580: **
 2581: ** <blockquote><pre>
 2582: **  char *zText = "It's a happy day!";
 2583: ** </pre></blockquote>
 2584: **
 2585: ** One can use this text in an SQL statement as follows:
 2586: **
 2587: ** <blockquote><pre>
 2588: **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES('%q')", zText);
 2589: **  sqlite3_exec(db, zSQL, 0, 0, 0);
 2590: **  sqlite3_free(zSQL);
 2591: ** </pre></blockquote>
 2592: **
 2593: ** Because the %q format string is used, the '\'' character in zText
 2594: ** is escaped and the SQL generated is as follows:
 2595: **
 2596: ** <blockquote><pre>
 2597: **  INSERT INTO table1 VALUES('It''s a happy day!')
 2598: ** </pre></blockquote>
 2599: **
 2600: ** This is correct.  Had we used %s instead of %q, the generated SQL
 2601: ** would have looked like this:
 2602: **
 2603: ** <blockquote><pre>
 2604: **  INSERT INTO table1 VALUES('It's a happy day!');
 2605: ** </pre></blockquote>
 2606: **
 2607: ** This second example is an SQL syntax error.  As a general rule you should
 2608: ** always use %q instead of %s when inserting text into a string literal.
 2609: **
 2610: ** ^(The %Q option works like %q except it also adds single quotes around
 2611: ** the outside of the total string.  Additionally, if the parameter in the
 2612: ** argument list is a NULL pointer, %Q substitutes the text "NULL" (without
 2613: ** single quotes).)^  So, for example, one could say:
 2614: **
 2615: ** <blockquote><pre>
 2616: **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText);
 2617: **  sqlite3_exec(db, zSQL, 0, 0, 0);
 2618: **  sqlite3_free(zSQL);
 2619: ** </pre></blockquote>
 2620: **
 2621: ** The code above will render a correct SQL statement in the zSQL
 2622: ** variable even if the zText variable is a NULL pointer.
 2623: **
 2624: ** ^(The "%z" formatting option works like "%s" but with the
 2625: ** addition that after the string has been read and copied into
 2626: ** the result, [sqlite3_free()] is called on the input string.)^
 2627: */
 2628: SQLITE_API char *sqlite3_mprintf(const char*,...);
 2629: SQLITE_API char *sqlite3_vmprintf(const char*, va_list);
 2630: SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...);
 2631: SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
 2632: 
 2633: /*
 2634: ** CAPI3REF: Memory Allocation Subsystem
 2635: **
 2636: ** The SQLite core uses these three routines for all of its own
 2637: ** internal memory allocation needs. "Core" in the previous sentence
 2638: ** does not include operating-system specific VFS implementation.  The
 2639: ** Windows VFS uses native malloc() and free() for some operations.
 2640: **
 2641: ** ^The sqlite3_malloc() routine returns a pointer to a block
 2642: ** of memory at least N bytes in length, where N is the parameter.
 2643: ** ^If sqlite3_malloc() is unable to obtain sufficient free
 2644: ** memory, it returns a NULL pointer.  ^If the parameter N to
 2645: ** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
 2646: ** a NULL pointer.
 2647: **
 2648: ** ^Calling sqlite3_free() with a pointer previously returned
 2649: ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so
 2650: ** that it might be reused.  ^The sqlite3_free() routine is
 2651: ** a no-op if is called with a NULL pointer.  Passing a NULL pointer
 2652: ** to sqlite3_free() is harmless.  After being freed, memory
 2653: ** should neither be read nor written.  Even reading previously freed
 2654: ** memory might result in a segmentation fault or other severe error.
 2655: ** Memory corruption, a segmentation fault, or other severe error
 2656: ** might result if sqlite3_free() is called with a non-NULL pointer that
 2657: ** was not obtained from sqlite3_malloc() or sqlite3_realloc().
 2658: **
 2659: ** ^(The sqlite3_realloc() interface attempts to resize a
 2660: ** prior memory allocation to be at least N bytes, where N is the
 2661: ** second parameter.  The memory allocation to be resized is the first
 2662: ** parameter.)^ ^ If the first parameter to sqlite3_realloc()
 2663: ** is a NULL pointer then its behavior is identical to calling
 2664: ** sqlite3_malloc(N) where N is the second parameter to sqlite3_realloc().
 2665: ** ^If the second parameter to sqlite3_realloc() is zero or
 2666: ** negative then the behavior is exactly the same as calling
 2667: ** sqlite3_free(P) where P is the first parameter to sqlite3_realloc().
 2668: ** ^sqlite3_realloc() returns a pointer to a memory allocation
 2669: ** of at least N bytes in size or NULL if sufficient memory is unavailable.
 2670: ** ^If M is the size of the prior allocation, then min(N,M) bytes
 2671: ** of the prior allocation are copied into the beginning of buffer returned
 2672: ** by sqlite3_realloc() and the prior allocation is freed.
 2673: ** ^If sqlite3_realloc() returns NULL, then the prior allocation
 2674: ** is not freed.
 2675: **
 2676: ** ^The memory returned by sqlite3_malloc() and sqlite3_realloc()
 2677: ** is always aligned to at least an 8 byte boundary, or to a
 2678: ** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time
 2679: ** option is used.
 2680: **
 2681: ** In SQLite version 3.5.0 and 3.5.1, it was possible to define
 2682: ** the SQLITE_OMIT_MEMORY_ALLOCATION which would cause the built-in
 2683: ** implementation of these routines to be omitted.  That capability
 2684: ** is no longer provided.  Only built-in memory allocators can be used.
 2685: **
 2686: ** The Windows OS interface layer calls
 2687: ** the system malloc() and free() directly when converting
 2688: ** filenames between the UTF-8 encoding used by SQLite
 2689: ** and whatever filename encoding is used by the particular Windows
 2690: ** installation.  Memory allocation errors are detected, but
 2691: ** they are reported back as [SQLITE_CANTOPEN] or
 2692: ** [SQLITE_IOERR] rather than [SQLITE_NOMEM].
 2693: **
 2694: ** The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()]
 2695: ** must be either NULL or else pointers obtained from a prior
 2696: ** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have
 2697: ** not yet been released.
 2698: **
 2699: ** The application must not read or write any part of
 2700: ** a block of memory after it has been released using
 2701: ** [sqlite3_free()] or [sqlite3_realloc()].
 2702: */
 2703: SQLITE_API void *sqlite3_malloc(int);
 2704: SQLITE_API void *sqlite3_realloc(void*, int);
 2705: SQLITE_API void sqlite3_free(void*);
 2706: 
 2707: /*
 2708: ** CAPI3REF: Memory Allocator Statistics
 2709: **
 2710: ** SQLite provides these two interfaces for reporting on the status
 2711: ** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()]
 2712: ** routines, which form the built-in memory allocation subsystem.
 2713: **
 2714: ** ^The [sqlite3_memory_used()] routine returns the number of bytes
 2715: ** of memory currently outstanding (malloced but not freed).
 2716: ** ^The [sqlite3_memory_highwater()] routine returns the maximum
 2717: ** value of [sqlite3_memory_used()] since the high-water mark
 2718: ** was last reset.  ^The values returned by [sqlite3_memory_used()] and
 2719: ** [sqlite3_memory_highwater()] include any overhead
 2720: ** added by SQLite in its implementation of [sqlite3_malloc()],
 2721: ** but not overhead added by the any underlying system library
 2722: ** routines that [sqlite3_malloc()] may call.
 2723: **
 2724: ** ^The memory high-water mark is reset to the current value of
 2725: ** [sqlite3_memory_used()] if and only if the parameter to
 2726: ** [sqlite3_memory_highwater()] is true.  ^The value returned
 2727: ** by [sqlite3_memory_highwater(1)] is the high-water mark
 2728: ** prior to the reset.
 2729: */
 2730: SQLITE_API sqlite3_int64 sqlite3_memory_used(void);
 2731: SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
 2732: 
 2733: /*
 2734: ** CAPI3REF: Pseudo-Random Number Generator
 2735: **
 2736: ** SQLite contains a high-quality pseudo-random number generator (PRNG) used to
 2737: ** select random [ROWID | ROWIDs] when inserting new records into a table that
 2738: ** already uses the largest possible [ROWID].  The PRNG is also used for
 2739: ** the build-in random() and randomblob() SQL functions.  This interface allows
 2740: ** applications to access the same PRNG for other purposes.
 2741: **
 2742: ** ^A call to this routine stores N bytes of randomness into buffer P.
 2743: **
 2744: ** ^The first time this routine is invoked (either internally or by
 2745: ** the application) the PRNG is seeded using randomness obtained
 2746: ** from the xRandomness method of the default [sqlite3_vfs] object.
 2747: ** ^On all subsequent invocations, the pseudo-randomness is generated
 2748: ** internally and without recourse to the [sqlite3_vfs] xRandomness
 2749: ** method.
 2750: */
 2751: SQLITE_API void sqlite3_randomness(int N, void *P);
 2752: 
 2753: /*
 2754: ** CAPI3REF: Compile-Time Authorization Callbacks
 2755: **
 2756: ** ^This routine registers an authorizer callback with a particular
 2757: ** [database connection], supplied in the first argument.
 2758: ** ^The authorizer callback is invoked as SQL statements are being compiled
 2759: ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()],
 2760: ** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()].  ^At various
 2761: ** points during the compilation process, as logic is being created
 2762: ** to perform various actions, the authorizer callback is invoked to
 2763: ** see if those actions are allowed.  ^The authorizer callback should
 2764: ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the
 2765: ** specific action but allow the SQL statement to continue to be
 2766: ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be
 2767: ** rejected with an error.  ^If the authorizer callback returns
 2768: ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY]
 2769: ** then the [sqlite3_prepare_v2()] or equivalent call that triggered
 2770: ** the authorizer will fail with an error message.
 2771: **
 2772: ** When the callback returns [SQLITE_OK], that means the operation
 2773: ** requested is ok.  ^When the callback returns [SQLITE_DENY], the
 2774: ** [sqlite3_prepare_v2()] or equivalent call that triggered the
 2775: ** authorizer will fail with an error message explaining that
 2776: ** access is denied. 
 2777: **
 2778: ** ^The first parameter to the authorizer callback is a copy of the third
 2779: ** parameter to the sqlite3_set_authorizer() interface. ^The second parameter
 2780: ** to the callback is an integer [SQLITE_COPY | action code] that specifies
 2781: ** the particular action to be authorized. ^The third through sixth parameters
 2782: ** to the callback are zero-terminated strings that contain additional
 2783: ** details about the action to be authorized.
 2784: **
 2785: ** ^If the action code is [SQLITE_READ]
 2786: ** and the callback returns [SQLITE_IGNORE] then the
 2787: ** [prepared statement] statement is constructed to substitute
 2788: ** a NULL value in place of the table column that would have
 2789: ** been read if [SQLITE_OK] had been returned.  The [SQLITE_IGNORE]
 2790: ** return can be used to deny an untrusted user access to individual
 2791: ** columns of a table.
 2792: ** ^If the action code is [SQLITE_DELETE] and the callback returns
 2793: ** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the
 2794: ** [truncate optimization] is disabled and all rows are deleted individually.
 2795: **
 2796: ** An authorizer is used when [sqlite3_prepare | preparing]
 2797: ** SQL statements from an untrusted source, to ensure that the SQL statements
 2798: ** do not try to access data they are not allowed to see, or that they do not
 2799: ** try to execute malicious statements that damage the database.  For
 2800: ** example, an application may allow a user to enter arbitrary
 2801: ** SQL queries for evaluation by a database.  But the application does
 2802: ** not want the user to be able to make arbitrary changes to the
 2803: ** database.  An authorizer could then be put in place while the
 2804: ** user-entered SQL is being [sqlite3_prepare | prepared] that
 2805: ** disallows everything except [SELECT] statements.
 2806: **
 2807: ** Applications that need to process SQL from untrusted sources
 2808: ** might also consider lowering resource limits using [sqlite3_limit()]
 2809: ** and limiting database size using the [max_page_count] [PRAGMA]
 2810: ** in addition to using an authorizer.
 2811: **
 2812: ** ^(Only a single authorizer can be in place on a database connection
 2813: ** at a time.  Each call to sqlite3_set_authorizer overrides the
 2814: ** previous call.)^  ^Disable the authorizer by installing a NULL callback.
 2815: ** The authorizer is disabled by default.
 2816: **
 2817: ** The authorizer callback must not do anything that will modify
 2818: ** the database connection that invoked the authorizer callback.
 2819: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
 2820: ** database connections for the meaning of "modify" in this paragraph.
 2821: **
 2822: ** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the
 2823: ** statement might be re-prepared during [sqlite3_step()] due to a 
 2824: ** schema change.  Hence, the application should ensure that the
 2825: ** correct authorizer callback remains in place during the [sqlite3_step()].
 2826: **
 2827: ** ^Note that the authorizer callback is invoked only during
 2828: ** [sqlite3_prepare()] or its variants.  Authorization is not
 2829: ** performed during statement evaluation in [sqlite3_step()], unless
 2830: ** as stated in the previous paragraph, sqlite3_step() invokes
 2831: ** sqlite3_prepare_v2() to reprepare a statement after a schema change.
 2832: */
 2833: SQLITE_API int sqlite3_set_authorizer(
 2834:   sqlite3*,
 2835:   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
 2836:   void *pUserData
 2837: );
 2838: 
 2839: /*
 2840: ** CAPI3REF: Authorizer Return Codes
 2841: **
 2842: ** The [sqlite3_set_authorizer | authorizer callback function] must
 2843: ** return either [SQLITE_OK] or one of these two constants in order
 2844: ** to signal SQLite whether or not the action is permitted.  See the
 2845: ** [sqlite3_set_authorizer | authorizer documentation] for additional
 2846: ** information.
 2847: **
 2848: ** Note that SQLITE_IGNORE is also used as a [SQLITE_ROLLBACK | return code]
 2849: ** from the [sqlite3_vtab_on_conflict()] interface.
 2850: */
 2851: #define SQLITE_DENY   1   /* Abort the SQL statement with an error */
 2852: #define SQLITE_IGNORE 2   /* Don't allow access, but don't generate an error */
 2853: 
 2854: /*
 2855: ** CAPI3REF: Authorizer Action Codes
 2856: **
 2857: ** The [sqlite3_set_authorizer()] interface registers a callback function
 2858: ** that is invoked to authorize certain SQL statement actions.  The
 2859: ** second parameter to the callback is an integer code that specifies
 2860: ** what action is being authorized.  These are the integer action codes that
 2861: ** the authorizer callback may be passed.
 2862: **
 2863: ** These action code values signify what kind of operation is to be
 2864: ** authorized.  The 3rd and 4th parameters to the authorization
 2865: ** callback function will be parameters or NULL depending on which of these
 2866: ** codes is used as the second parameter.  ^(The 5th parameter to the
 2867: ** authorizer callback is the name of the database ("main", "temp",
 2868: ** etc.) if applicable.)^  ^The 6th parameter to the authorizer callback
 2869: ** is the name of the inner-most trigger or view that is responsible for
 2870: ** the access attempt or NULL if this access attempt is directly from
 2871: ** top-level SQL code.
 2872: */
 2873: /******************************************* 3rd ************ 4th ***********/
 2874: #define SQLITE_CREATE_INDEX          1   /* Index Name      Table Name      */
 2875: #define SQLITE_CREATE_TABLE          2   /* Table Name      NULL            */
 2876: #define SQLITE_CREATE_TEMP_INDEX     3   /* Index Name      Table Name      */
 2877: #define SQLITE_CREATE_TEMP_TABLE     4   /* Table Name      NULL            */
 2878: #define SQLITE_CREATE_TEMP_TRIGGER   5   /* Trigger Name    Table Name      */
 2879: #define SQLITE_CREATE_TEMP_VIEW      6   /* View Name       NULL            */
 2880: #define SQLITE_CREATE_TRIGGER        7   /* Trigger Name    Table Name      */
 2881: #define SQLITE_CREATE_VIEW           8   /* View Name       NULL            */
 2882: #define SQLITE_DELETE                9   /* Table Name      NULL            */
 2883: #define SQLITE_DROP_INDEX           10   /* Index Name      Table Name      */
 2884: #define SQLITE_DROP_TABLE           11   /* Table Name      NULL            */
 2885: #define SQLITE_DROP_TEMP_INDEX      12   /* Index Name      Table Name      */
 2886: #define SQLITE_DROP_TEMP_TABLE      13   /* Table Name      NULL            */
 2887: #define SQLITE_DROP_TEMP_TRIGGER    14   /* Trigger Name    Table Name      */
 2888: #define SQLITE_DROP_TEMP_VIEW       15   /* View Name       NULL            */
 2889: #define SQLITE_DROP_TRIGGER         16   /* Trigger Name    Table Name      */
 2890: #define SQLITE_DROP_VIEW            17   /* View Name       NULL            */
 2891: #define SQLITE_INSERT               18   /* Table Name      NULL            */
 2892: #define SQLITE_PRAGMA               19   /* Pragma Name     1st arg or NULL */
 2893: #define SQLITE_READ                 20   /* Table Name      Column Name     */
 2894: #define SQLITE_SELECT               21   /* NULL            NULL            */
 2895: #define SQLITE_TRANSACTION          22   /* Operation       NULL            */
 2896: #define SQLITE_UPDATE               23   /* Table Name      Column Name     */
 2897: #define SQLITE_ATTACH               24   /* Filename        NULL            */
 2898: #define SQLITE_DETACH               25   /* Database Name   NULL            */
 2899: #define SQLITE_ALTER_TABLE          26   /* Database Name   Table Name      */
 2900: #define SQLITE_REINDEX              27   /* Index Name      NULL            */
 2901: #define SQLITE_ANALYZE              28   /* Table Name      NULL            */
 2902: #define SQLITE_CREATE_VTABLE        29   /* Table Name      Module Name     */
 2903: #define SQLITE_DROP_VTABLE          30   /* Table Name      Module Name     */
 2904: #define SQLITE_FUNCTION             31   /* NULL            Function Name   */
 2905: #define SQLITE_SAVEPOINT            32   /* Operation       Savepoint Name  */
 2906: #define SQLITE_COPY                  0   /* No longer used */
 2907: 
 2908: /*
 2909: ** CAPI3REF: Tracing And Profiling Functions
 2910: **
 2911: ** These routines register callback functions that can be used for
 2912: ** tracing and profiling the execution of SQL statements.
 2913: **
 2914: ** ^The callback function registered by sqlite3_trace() is invoked at
 2915: ** various times when an SQL statement is being run by [sqlite3_step()].
 2916: ** ^The sqlite3_trace() callback is invoked with a UTF-8 rendering of the
 2917: ** SQL statement text as the statement first begins executing.
 2918: ** ^(Additional sqlite3_trace() callbacks might occur
 2919: ** as each triggered subprogram is entered.  The callbacks for triggers
 2920: ** contain a UTF-8 SQL comment that identifies the trigger.)^
 2921: **
 2922: ** ^The callback function registered by sqlite3_profile() is invoked
 2923: ** as each SQL statement finishes.  ^The profile callback contains
 2924: ** the original statement text and an estimate of wall-clock time
 2925: ** of how long that statement took to run.  ^The profile callback
 2926: ** time is in units of nanoseconds, however the current implementation
 2927: ** is only capable of millisecond resolution so the six least significant
 2928: ** digits in the time are meaningless.  Future versions of SQLite
 2929: ** might provide greater resolution on the profiler callback.  The
 2930: ** sqlite3_profile() function is considered experimental and is
 2931: ** subject to change in future versions of SQLite.
 2932: */
 2933: SQLITE_API void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
 2934: SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*,
 2935:    void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
 2936: 
 2937: /*
 2938: ** CAPI3REF: Query Progress Callbacks
 2939: **
 2940: ** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback
 2941: ** function X to be invoked periodically during long running calls to
 2942: ** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for
 2943: ** database connection D.  An example use for this
 2944: ** interface is to keep a GUI updated during a large query.
 2945: **
 2946: ** ^The parameter P is passed through as the only parameter to the 
 2947: ** callback function X.  ^The parameter N is the number of 
 2948: ** [virtual machine instructions] that are evaluated between successive
 2949: ** invocations of the callback X.
 2950: **
 2951: ** ^Only a single progress handler may be defined at one time per
 2952: ** [database connection]; setting a new progress handler cancels the
 2953: ** old one.  ^Setting parameter X to NULL disables the progress handler.
 2954: ** ^The progress handler is also disabled by setting N to a value less
 2955: ** than 1.
 2956: **
 2957: ** ^If the progress callback returns non-zero, the operation is
 2958: ** interrupted.  This feature can be used to implement a
 2959: ** "Cancel" button on a GUI progress dialog box.
 2960: **
 2961: ** The progress handler callback must not do anything that will modify
 2962: ** the database connection that invoked the progress handler.
 2963: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
 2964: ** database connections for the meaning of "modify" in this paragraph.
 2965: **
 2966: */
 2967: SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
 2968: 
 2969: /*
 2970: ** CAPI3REF: Opening A New Database Connection
 2971: **
 2972: ** ^These routines open an SQLite database file as specified by the 
 2973: ** filename argument. ^The filename argument is interpreted as UTF-8 for
 2974: ** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
 2975: ** order for sqlite3_open16(). ^(A [database connection] handle is usually
 2976: ** returned in *ppDb, even if an error occurs.  The only exception is that
 2977: ** if SQLite is unable to allocate memory to hold the [sqlite3] object,
 2978: ** a NULL will be written into *ppDb instead of a pointer to the [sqlite3]
 2979: ** object.)^ ^(If the database is opened (and/or created) successfully, then
 2980: ** [SQLITE_OK] is returned.  Otherwise an [error code] is returned.)^ ^The
 2981: ** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain
 2982: ** an English language description of the error following a failure of any
 2983: ** of the sqlite3_open() routines.
 2984: **
 2985: ** ^The default encoding for the database will be UTF-8 if
 2986: ** sqlite3_open() or sqlite3_open_v2() is called and
 2987: ** UTF-16 in the native byte order if sqlite3_open16() is used.
 2988: **
 2989: ** Whether or not an error occurs when it is opened, resources
 2990: ** associated with the [database connection] handle should be released by
 2991: ** passing it to [sqlite3_close()] when it is no longer required.
 2992: **
 2993: ** The sqlite3_open_v2() interface works like sqlite3_open()
 2994: ** except that it accepts two additional parameters for additional control
 2995: ** over the new database connection.  ^(The flags parameter to
 2996: ** sqlite3_open_v2() can take one of
 2997: ** the following three values, optionally combined with the 
 2998: ** [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX], [SQLITE_OPEN_SHAREDCACHE],
 2999: ** [SQLITE_OPEN_PRIVATECACHE], and/or [SQLITE_OPEN_URI] flags:)^
 3000: **
 3001: ** <dl>
 3002: ** ^(<dt>[SQLITE_OPEN_READONLY]</dt>
 3003: ** <dd>The database is opened in read-only mode.  If the database does not
 3004: ** already exist, an error is returned.</dd>)^
 3005: **
 3006: ** ^(<dt>[SQLITE_OPEN_READWRITE]</dt>
 3007: ** <dd>The database is opened for reading and writing if possible, or reading
 3008: ** only if the file is write protected by the operating system.  In either
 3009: ** case the database must already exist, otherwise an error is returned.</dd>)^
 3010: **
 3011: ** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt>
 3012: ** <dd>The database is opened for reading and writing, and is created if
 3013: ** it does not already exist. This is the behavior that is always used for
 3014: ** sqlite3_open() and sqlite3_open16().</dd>)^
 3015: ** </dl>
 3016: **
 3017: ** If the 3rd parameter to sqlite3_open_v2() is not one of the
 3018: ** combinations shown above optionally combined with other
 3019: ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
 3020: ** then the behavior is undefined.
 3021: **
 3022: ** ^If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection
 3023: ** opens in the multi-thread [threading mode] as long as the single-thread
 3024: ** mode has not been set at compile-time or start-time.  ^If the
 3025: ** [SQLITE_OPEN_FULLMUTEX] flag is set then the database connection opens
 3026: ** in the serialized [threading mode] unless single-thread was
 3027: ** previously selected at compile-time or start-time.
 3028: ** ^The [SQLITE_OPEN_SHAREDCACHE] flag causes the database connection to be
 3029: ** eligible to use [shared cache mode], regardless of whether or not shared
 3030: ** cache is enabled using [sqlite3_enable_shared_cache()].  ^The
 3031: ** [SQLITE_OPEN_PRIVATECACHE] flag causes the database connection to not
 3032: ** participate in [shared cache mode] even if it is enabled.
 3033: **
 3034: ** ^The fourth parameter to sqlite3_open_v2() is the name of the
 3035: ** [sqlite3_vfs] object that defines the operating system interface that
 3036: ** the new database connection should use.  ^If the fourth parameter is
 3037: ** a NULL pointer then the default [sqlite3_vfs] object is used.
 3038: **
 3039: ** ^If the filename is ":memory:", then a private, temporary in-memory database
 3040: ** is created for the connection.  ^This in-memory database will vanish when
 3041: ** the database connection is closed.  Future versions of SQLite might
 3042: ** make use of additional special filenames that begin with the ":" character.
 3043: ** It is recommended that when a database filename actually does begin with
 3044: ** a ":" character you should prefix the filename with a pathname such as
 3045: ** "./" to avoid ambiguity.
 3046: **
 3047: ** ^If the filename is an empty string, then a private, temporary
 3048: ** on-disk database will be created.  ^This private database will be
 3049: ** automatically deleted as soon as the database connection is closed.
 3050: **
 3051: ** [[URI filenames in sqlite3_open()]] <h3>URI Filenames</h3>
 3052: **
 3053: ** ^If [URI filename] interpretation is enabled, and the filename argument
 3054: ** begins with "file:", then the filename is interpreted as a URI. ^URI
 3055: ** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is
 3056: ** set in the fourth argument to sqlite3_open_v2(), or if it has
 3057: ** been enabled globally using the [SQLITE_CONFIG_URI] option with the
 3058: ** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option.
 3059: ** As of SQLite version 3.7.7, URI filename interpretation is turned off
 3060: ** by default, but future releases of SQLite might enable URI filename
 3061: ** interpretation by default.  See "[URI filenames]" for additional
 3062: ** information.
 3063: **
 3064: ** URI filenames are parsed according to RFC 3986. ^If the URI contains an
 3065: ** authority, then it must be either an empty string or the string 
 3066: ** "localhost". ^If the authority is not an empty string or "localhost", an 
 3067: ** error is returned to the caller. ^The fragment component of a URI, if 
 3068: ** present, is ignored.
 3069: **
 3070: ** ^SQLite uses the path component of the URI as the name of the disk file
 3071: ** which contains the database. ^If the path begins with a '/' character, 
 3072: ** then it is interpreted as an absolute path. ^If the path does not begin 
 3073: ** with a '/' (meaning that the authority section is omitted from the URI)
 3074: ** then the path is interpreted as a relative path. 
 3075: ** ^On windows, the first component of an absolute path 
 3076: ** is a drive specification (e.g. "C:").
 3077: **
 3078: ** [[core URI query parameters]]
 3079: ** The query component of a URI may contain parameters that are interpreted
 3080: ** either by SQLite itself, or by a [VFS | custom VFS implementation].
 3081: ** SQLite interprets the following three query parameters:
 3082: **
 3083: ** <ul>
 3084: **   <li> <b>vfs</b>: ^The "vfs" parameter may be used to specify the name of
 3085: **     a VFS object that provides the operating system interface that should
 3086: **     be used to access the database file on disk. ^If this option is set to
 3087: **     an empty string the default VFS object is used. ^Specifying an unknown
 3088: **     VFS is an error. ^If sqlite3_open_v2() is used and the vfs option is
 3089: **     present, then the VFS specified by the option takes precedence over
 3090: **     the value passed as the fourth parameter to sqlite3_open_v2().
 3091: **
 3092: **   <li> <b>mode</b>: ^(The mode parameter may be set to either "ro", "rw" or
 3093: **     "rwc". Attempting to set it to any other value is an error)^. 
 3094: **     ^If "ro" is specified, then the database is opened for read-only 
 3095: **     access, just as if the [SQLITE_OPEN_READONLY] flag had been set in the 
 3096: **     third argument to sqlite3_prepare_v2(). ^If the mode option is set to 
 3097: **     "rw", then the database is opened for read-write (but not create) 
 3098: **     access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had 
 3099: **     been set. ^Value "rwc" is equivalent to setting both 
 3100: **     SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE. ^If sqlite3_open_v2() is 
 3101: **     used, it is an error to specify a value for the mode parameter that is 
 3102: **     less restrictive than that specified by the flags passed as the third 
 3103: **     parameter.
 3104: **
 3105: **   <li> <b>cache</b>: ^The cache parameter may be set to either "shared" or
 3106: **     "private". ^Setting it to "shared" is equivalent to setting the
 3107: **     SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to
 3108: **     sqlite3_open_v2(). ^Setting the cache parameter to "private" is 
 3109: **     equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit.
 3110: **     ^If sqlite3_open_v2() is used and the "cache" parameter is present in
 3111: **     a URI filename, its value overrides any behaviour requested by setting
 3112: **     SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag.
 3113: ** </ul>
 3114: **
 3115: ** ^Specifying an unknown parameter in the query component of a URI is not an
 3116: ** error.  Future versions of SQLite might understand additional query
 3117: ** parameters.  See "[query parameters with special meaning to SQLite]" for
 3118: ** additional information.
 3119: **
 3120: ** [[URI filename examples]] <h3>URI filename examples</h3>
 3121: **
 3122: ** <table border="1" align=center cellpadding=5>
 3123: ** <tr><th> URI filenames <th> Results
 3124: ** <tr><td> file:data.db <td> 
 3125: **          Open the file "data.db" in the current directory.
 3126: ** <tr><td> file:/home/fred/data.db<br>
 3127: **          file:///home/fred/data.db <br> 
 3128: **          file://localhost/home/fred/data.db <br> <td> 
 3129: **          Open the database file "/home/fred/data.db".
 3130: ** <tr><td> file://darkstar/home/fred/data.db <td> 
 3131: **          An error. "darkstar" is not a recognized authority.
 3132: ** <tr><td style="white-space:nowrap"> 
 3133: **          file:///C:/Documents%20and%20Settings/fred/Desktop/data.db
 3134: **     <td> Windows only: Open the file "data.db" on fred's desktop on drive
 3135: **          C:. Note that the %20 escaping in this example is not strictly 
 3136: **          necessary - space characters can be used literally
 3137: **          in URI filenames.
 3138: ** <tr><td> file:data.db?mode=ro&cache=private <td> 
 3139: **          Open file "data.db" in the current directory for read-only access.
 3140: **          Regardless of whether or not shared-cache mode is enabled by
 3141: **          default, use a private cache.
 3142: ** <tr><td> file:/home/fred/data.db?vfs=unix-nolock <td>
 3143: **          Open file "/home/fred/data.db". Use the special VFS "unix-nolock".
 3144: ** <tr><td> file:data.db?mode=readonly <td> 
 3145: **          An error. "readonly" is not a valid option for the "mode" parameter.
 3146: ** </table>
 3147: **
 3148: ** ^URI hexadecimal escape sequences (%HH) are supported within the path and
 3149: ** query components of a URI. A hexadecimal escape sequence consists of a
 3150: ** percent sign - "%" - followed by exactly two hexadecimal digits 
 3151: ** specifying an octet value. ^Before the path or query components of a
 3152: ** URI filename are interpreted, they are encoded using UTF-8 and all 
 3153: ** hexadecimal escape sequences replaced by a single byte containing the
 3154: ** corresponding octet. If this process generates an invalid UTF-8 encoding,
 3155: ** the results are undefined.
 3156: **
 3157: ** <b>Note to Windows users:</b>  The encoding used for the filename argument
 3158: ** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever
 3159: ** codepage is currently defined.  Filenames containing international
 3160: ** characters must be converted to UTF-8 prior to passing them into
 3161: ** sqlite3_open() or sqlite3_open_v2().
 3162: */
 3163: SQLITE_API int sqlite3_open(
 3164:   const char *filename,   /* Database filename (UTF-8) */
 3165:   sqlite3 **ppDb          /* OUT: SQLite db handle */
 3166: );
 3167: SQLITE_API int sqlite3_open16(
 3168:   const void *filename,   /* Database filename (UTF-16) */
 3169:   sqlite3 **ppDb          /* OUT: SQLite db handle */
 3170: );
 3171: SQLITE_API int sqlite3_open_v2(
 3172:   const char *filename,   /* Database filename (UTF-8) */
 3173:   sqlite3 **ppDb,         /* OUT: SQLite db handle */
 3174:   int flags,              /* Flags */
 3175:   const char *zVfs        /* Name of VFS module to use */
 3176: );
 3177: 
 3178: /*
 3179: ** CAPI3REF: Obtain Values For URI Parameters
 3180: **
 3181: ** These are utility routines, useful to VFS implementations, that check
 3182: ** to see if a database file was a URI that contained a specific query 
 3183: ** parameter, and if so obtains the value of that query parameter.
 3184: **
 3185: ** If F is the database filename pointer passed into the xOpen() method of 
 3186: ** a VFS implementation when the flags parameter to xOpen() has one or 
 3187: ** more of the [SQLITE_OPEN_URI] or [SQLITE_OPEN_MAIN_DB] bits set and
 3188: ** P is the name of the query parameter, then
 3189: ** sqlite3_uri_parameter(F,P) returns the value of the P
 3190: ** parameter if it exists or a NULL pointer if P does not appear as a 
 3191: ** query parameter on F.  If P is a query parameter of F
 3192: ** has no explicit value, then sqlite3_uri_parameter(F,P) returns
 3193: ** a pointer to an empty string.
 3194: **
 3195: ** The sqlite3_uri_boolean(F,P,B) routine assumes that P is a boolean
 3196: ** parameter and returns true (1) or false (0) according to the value
 3197: ** of P.  The value of P is true if it is "yes" or "true" or "on" or 
 3198: ** a non-zero number and is false otherwise.  If P is not a query parameter
 3199: ** on F then sqlite3_uri_boolean(F,P,B) returns (B!=0).
 3200: **
 3201: ** The sqlite3_uri_int64(F,P,D) routine converts the value of P into a
 3202: ** 64-bit signed integer and returns that integer, or D if P does not
 3203: ** exist.  If the value of P is something other than an integer, then
 3204: ** zero is returned.
 3205: ** 
 3206: ** If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and
 3207: ** sqlite3_uri_boolean(F,P,B) returns B.  If F is not a NULL pointer and
 3208: ** is not a database file pathname pointer that SQLite passed into the xOpen
 3209: ** VFS method, then the behavior of this routine is undefined and probably
 3210: ** undesirable.
 3211: */
 3212: SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam);
 3213: SQLITE_API int sqlite3_uri_boolean(const char *zFile, const char *zParam, int bDefault);
 3214: SQLITE_API sqlite3_int64 sqlite3_uri_int64(const char*, const char*, sqlite3_int64);
 3215: 
 3216: 
 3217: /*
 3218: ** CAPI3REF: Error Codes And Messages
 3219: **
 3220: ** ^The sqlite3_errcode() interface returns the numeric [result code] or
 3221: ** [extended result code] for the most recent failed sqlite3_* API call
 3222: ** associated with a [database connection]. If a prior API call failed
 3223: ** but the most recent API call succeeded, the return value from
 3224: ** sqlite3_errcode() is undefined.  ^The sqlite3_extended_errcode()
 3225: ** interface is the same except that it always returns the 
 3226: ** [extended result code] even when extended result codes are
 3227: ** disabled.
 3228: **
 3229: ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
 3230: ** text that describes the error, as either UTF-8 or UTF-16 respectively.
 3231: ** ^(Memory to hold the error message string is managed internally.
 3232: ** The application does not need to worry about freeing the result.
 3233: ** However, the error string might be overwritten or deallocated by
 3234: ** subsequent calls to other SQLite interface functions.)^
 3235: **
 3236: ** When the serialized [threading mode] is in use, it might be the
 3237: ** case that a second error occurs on a separate thread in between
 3238: ** the time of the first error and the call to these interfaces.
 3239: ** When that happens, the second error will be reported since these
 3240: ** interfaces always report the most recent result.  To avoid
 3241: ** this, each thread can obtain exclusive use of the [database connection] D
 3242: ** by invoking [sqlite3_mutex_enter]([sqlite3_db_mutex](D)) before beginning
 3243: ** to use D and invoking [sqlite3_mutex_leave]([sqlite3_db_mutex](D)) after
 3244: ** all calls to the interfaces listed here are completed.
 3245: **
 3246: ** If an interface fails with SQLITE_MISUSE, that means the interface
 3247: ** was invoked incorrectly by the application.  In that case, the
 3248: ** error code and message may or may not be set.
 3249: */
 3250: SQLITE_API int sqlite3_errcode(sqlite3 *db);
 3251: SQLITE_API int sqlite3_extended_errcode(sqlite3 *db);
 3252: SQLITE_API const char *sqlite3_errmsg(sqlite3*);
 3253: SQLITE_API const void *sqlite3_errmsg16(sqlite3*);
 3254: 
 3255: /*
 3256: ** CAPI3REF: SQL Statement Object
 3257: ** KEYWORDS: {prepared statement} {prepared statements}
 3258: **
 3259: ** An instance of this object represents a single SQL statement.
 3260: ** This object is variously known as a "prepared statement" or a
 3261: ** "compiled SQL statement" or simply as a "statement".
 3262: **
 3263: ** The life of a statement object goes something like this:
 3264: **
 3265: ** <ol>
 3266: ** <li> Create the object using [sqlite3_prepare_v2()] or a related
 3267: **      function.
 3268: ** <li> Bind values to [host parameters] using the sqlite3_bind_*()
 3269: **      interfaces.
 3270: ** <li> Run the SQL by calling [sqlite3_step()] one or more times.
 3271: ** <li> Reset the statement using [sqlite3_reset()] then go back
 3272: **      to step 2.  Do this zero or more times.
 3273: ** <li> Destroy the object using [sqlite3_finalize()].
 3274: ** </ol>
 3275: **
 3276: ** Refer to documentation on individual methods above for additional
 3277: ** information.
 3278: */
 3279: typedef struct sqlite3_stmt sqlite3_stmt;
 3280: 
 3281: /*
 3282: ** CAPI3REF: Run-time Limits
 3283: **
 3284: ** ^(This interface allows the size of various constructs to be limited
 3285: ** on a connection by connection basis.  The first parameter is the
 3286: ** [database connection] whose limit is to be set or queried.  The
 3287: ** second parameter is one of the [limit categories] that define a
 3288: ** class of constructs to be size limited.  The third parameter is the
 3289: ** new limit for that construct.)^
 3290: **
 3291: ** ^If the new limit is a negative number, the limit is unchanged.
 3292: ** ^(For each limit category SQLITE_LIMIT_<i>NAME</i> there is a 
 3293: ** [limits | hard upper bound]
 3294: ** set at compile-time by a C preprocessor macro called
 3295: ** [limits | SQLITE_MAX_<i>NAME</i>].
 3296: ** (The "_LIMIT_" in the name is changed to "_MAX_".))^
 3297: ** ^Attempts to increase a limit above its hard upper bound are
 3298: ** silently truncated to the hard upper bound.
 3299: **
 3300: ** ^Regardless of whether or not the limit was changed, the 
 3301: ** [sqlite3_limit()] interface returns the prior value of the limit.
 3302: ** ^Hence, to find the current value of a limit without changing it,
 3303: ** simply invoke this interface with the third parameter set to -1.
 3304: **
 3305: ** Run-time limits are intended for use in applications that manage
 3306: ** both their own internal database and also databases that are controlled
 3307: ** by untrusted external sources.  An example application might be a
 3308: ** web browser that has its own databases for storing history and
 3309: ** separate databases controlled by JavaScript applications downloaded
 3310: ** off the Internet.  The internal databases can be given the
 3311: ** large, default limits.  Databases managed by external sources can
 3312: ** be given much smaller limits designed to prevent a denial of service
 3313: ** attack.  Developers might also want to use the [sqlite3_set_authorizer()]
 3314: ** interface to further control untrusted SQL.  The size of the database
 3315: ** created by an untrusted script can be contained using the
 3316: ** [max_page_count] [PRAGMA].
 3317: **
 3318: ** New run-time limit categories may be added in future releases.
 3319: */
 3320: SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
 3321: 
 3322: /*
 3323: ** CAPI3REF: Run-Time Limit Categories
 3324: ** KEYWORDS: {limit category} {*limit categories}
 3325: **
 3326: ** These constants define various performance limits
 3327: ** that can be lowered at run-time using [sqlite3_limit()].
 3328: ** The synopsis of the meanings of the various limits is shown below.
 3329: ** Additional information is available at [limits | Limits in SQLite].
 3330: **
 3331: ** <dl>
 3332: ** [[SQLITE_LIMIT_LENGTH]] ^(<dt>SQLITE_LIMIT_LENGTH</dt>
 3333: ** <dd>The maximum size of any string or BLOB or table row, in bytes.<dd>)^
 3334: **
 3335: ** [[SQLITE_LIMIT_SQL_LENGTH]] ^(<dt>SQLITE_LIMIT_SQL_LENGTH</dt>
 3336: ** <dd>The maximum length of an SQL statement, in bytes.</dd>)^
 3337: **
 3338: ** [[SQLITE_LIMIT_COLUMN]] ^(<dt>SQLITE_LIMIT_COLUMN</dt>
 3339: ** <dd>The maximum number of columns in a table definition or in the
 3340: ** result set of a [SELECT] or the maximum number of columns in an index
 3341: ** or in an ORDER BY or GROUP BY clause.</dd>)^
 3342: **
 3343: ** [[SQLITE_LIMIT_EXPR_DEPTH]] ^(<dt>SQLITE_LIMIT_EXPR_DEPTH</dt>
 3344: ** <dd>The maximum depth of the parse tree on any expression.</dd>)^
 3345: **
 3346: ** [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(<dt>SQLITE_LIMIT_COMPOUND_SELECT</dt>
 3347: ** <dd>The maximum number of terms in a compound SELECT statement.</dd>)^
 3348: **
 3349: ** [[SQLITE_LIMIT_VDBE_OP]] ^(<dt>SQLITE_LIMIT_VDBE_OP</dt>
 3350: ** <dd>The maximum number of instructions in a virtual machine program
 3351: ** used to implement an SQL statement.  This limit is not currently
 3352: ** enforced, though that might be added in some future release of
 3353: ** SQLite.</dd>)^
 3354: **
 3355: ** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(<dt>SQLITE_LIMIT_FUNCTION_ARG</dt>
 3356: ** <dd>The maximum number of arguments on a function.</dd>)^
 3357: **
 3358: ** [[SQLITE_LIMIT_ATTACHED]] ^(<dt>SQLITE_LIMIT_ATTACHED</dt>
 3359: ** <dd>The maximum number of [ATTACH | attached databases].)^</dd>
 3360: **
 3361: ** [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]]
 3362: ** ^(<dt>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</dt>
 3363: ** <dd>The maximum length of the pattern argument to the [LIKE] or
 3364: ** [GLOB] operators.</dd>)^
 3365: **
 3366: ** [[SQLITE_LIMIT_VARIABLE_NUMBER]]
 3367: ** ^(<dt>SQLITE_LIMIT_VARIABLE_NUMBER</dt>
 3368: ** <dd>The maximum index number of any [parameter] in an SQL statement.)^
 3369: **
 3370: ** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(<dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt>
 3371: ** <dd>The maximum depth of recursion for triggers.</dd>)^
 3372: ** </dl>
 3373: */
 3374: #define SQLITE_LIMIT_LENGTH                    0
 3375: #define SQLITE_LIMIT_SQL_LENGTH                1
 3376: #define SQLITE_LIMIT_COLUMN                    2
 3377: #define SQLITE_LIMIT_EXPR_DEPTH                3
 3378: #define SQLITE_LIMIT_COMPOUND_SELECT           4
 3379: #define SQLITE_LIMIT_VDBE_OP                   5
 3380: #define SQLITE_LIMIT_FUNCTION_ARG              6
 3381: #define SQLITE_LIMIT_ATTACHED                  7
 3382: #define SQLITE_LIMIT_LIKE_PATTERN_LENGTH       8
 3383: #define SQLITE_LIMIT_VARIABLE_NUMBER           9
 3384: #define SQLITE_LIMIT_TRIGGER_DEPTH            10
 3385: 
 3386: /*
 3387: ** CAPI3REF: Compiling An SQL Statement
 3388: ** KEYWORDS: {SQL statement compiler}
 3389: **
 3390: ** To execute an SQL query, it must first be compiled into a byte-code
 3391: ** program using one of these routines.
 3392: **
 3393: ** The first argument, "db", is a [database connection] obtained from a
 3394: ** prior successful call to [sqlite3_open()], [sqlite3_open_v2()] or
 3395: ** [sqlite3_open16()].  The database connection must not have been closed.
 3396: **
 3397: ** The second argument, "zSql", is the statement to be compiled, encoded
 3398: ** as either UTF-8 or UTF-16.  The sqlite3_prepare() and sqlite3_prepare_v2()
 3399: ** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2()
 3400: ** use UTF-16.
 3401: **
 3402: ** ^If the nByte argument is less than zero, then zSql is read up to the
 3403: ** first zero terminator. ^If nByte is non-negative, then it is the maximum
 3404: ** number of  bytes read from zSql.  ^When nByte is non-negative, the
 3405: ** zSql string ends at either the first '\000' or '\u0000' character or
 3406: ** the nByte-th byte, whichever comes first. If the caller knows
 3407: ** that the supplied string is nul-terminated, then there is a small
 3408: ** performance advantage to be gained by passing an nByte parameter that
 3409: ** is equal to the number of bytes in the input string <i>including</i>
 3410: ** the nul-terminator bytes as this saves SQLite from having to
 3411: ** make a copy of the input string.
 3412: **
 3413: ** ^If pzTail is not NULL then *pzTail is made to point to the first byte
 3414: ** past the end of the first SQL statement in zSql.  These routines only
 3415: ** compile the first statement in zSql, so *pzTail is left pointing to
 3416: ** what remains uncompiled.
 3417: **
 3418: ** ^*ppStmt is left pointing to a compiled [prepared statement] that can be
 3419: ** executed using [sqlite3_step()].  ^If there is an error, *ppStmt is set
 3420: ** to NULL.  ^If the input text contains no SQL (if the input is an empty
 3421: ** string or a comment) then *ppStmt is set to NULL.
 3422: ** The calling procedure is responsible for deleting the compiled
 3423: ** SQL statement using [sqlite3_finalize()] after it has finished with it.
 3424: ** ppStmt may not be NULL.
 3425: **
 3426: ** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK];
 3427: ** otherwise an [error code] is returned.
 3428: **
 3429: ** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are
 3430: ** recommended for all new programs. The two older interfaces are retained
 3431: ** for backwards compatibility, but their use is discouraged.
 3432: ** ^In the "v2" interfaces, the prepared statement
 3433: ** that is returned (the [sqlite3_stmt] object) contains a copy of the
 3434: ** original SQL text. This causes the [sqlite3_step()] interface to
 3435: ** behave differently in three ways:
 3436: **
 3437: ** <ol>
 3438: ** <li>
 3439: ** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it
 3440: ** always used to do, [sqlite3_step()] will automatically recompile the SQL
 3441: ** statement and try to run it again.
 3442: ** </li>
 3443: **
 3444: ** <li>
 3445: ** ^When an error occurs, [sqlite3_step()] will return one of the detailed
 3446: ** [error codes] or [extended error codes].  ^The legacy behavior was that
 3447: ** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code
 3448: ** and the application would have to make a second call to [sqlite3_reset()]
 3449: ** in order to find the underlying cause of the problem. With the "v2" prepare
 3450: ** interfaces, the underlying reason for the error is returned immediately.
 3451: ** </li>
 3452: **
 3453: ** <li>
 3454: ** ^If the specific value bound to [parameter | host parameter] in the 
 3455: ** WHERE clause might influence the choice of query plan for a statement,
 3456: ** then the statement will be automatically recompiled, as if there had been 
 3457: ** a schema change, on the first  [sqlite3_step()] call following any change
 3458: ** to the [sqlite3_bind_text | bindings] of that [parameter]. 
 3459: ** ^The specific value of WHERE-clause [parameter] might influence the 
 3460: ** choice of query plan if the parameter is the left-hand side of a [LIKE]
 3461: ** or [GLOB] operator or if the parameter is compared to an indexed column
 3462: ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled.
 3463: ** the 
 3464: ** </li>
 3465: ** </ol>
 3466: */
 3467: SQLITE_API int sqlite3_prepare(
 3468:   sqlite3 *db,            /* Database handle */
 3469:   const char *zSql,       /* SQL statement, UTF-8 encoded */
 3470:   int nByte,              /* Maximum length of zSql in bytes. */
 3471:   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
 3472:   const char **pzTail     /* OUT: Pointer to unused portion of zSql */
 3473: );
 3474: SQLITE_API int sqlite3_prepare_v2(
 3475:   sqlite3 *db,            /* Database handle */
 3476:   const char *zSql,       /* SQL statement, UTF-8 encoded */
 3477:   int nByte,              /* Maximum length of zSql in bytes. */
 3478:   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
 3479:   const char **pzTail     /* OUT: Pointer to unused portion of zSql */
 3480: );
 3481: SQLITE_API int sqlite3_prepare16(
 3482:   sqlite3 *db,            /* Database handle */
 3483:   const void *zSql,       /* SQL statement, UTF-16 encoded */
 3484:   int nByte,              /* Maximum length of zSql in bytes. */
 3485:   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
 3486:   const void **pzTail     /* OUT: Pointer to unused portion of zSql */
 3487: );
 3488: SQLITE_API int sqlite3_prepare16_v2(
 3489:   sqlite3 *db,            /* Database handle */
 3490:   const void *zSql,       /* SQL statement, UTF-16 encoded */
 3491:   int nByte,              /* Maximum length of zSql in bytes. */
 3492:   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
 3493:   const void **pzTail     /* OUT: Pointer to unused portion of zSql */
 3494: );
 3495: 
 3496: /*
 3497: ** CAPI3REF: Retrieving Statement SQL
 3498: **
 3499: ** ^This interface can be used to retrieve a saved copy of the original
 3500: ** SQL text used to create a [prepared statement] if that statement was
 3501: ** compiled using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()].
 3502: */
 3503: SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);
 3504: 
 3505: /*
 3506: ** CAPI3REF: Determine If An SQL Statement Writes The Database
 3507: **
 3508: ** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
 3509: ** and only if the [prepared statement] X makes no direct changes to
 3510: ** the content of the database file.
 3511: **
 3512: ** Note that [application-defined SQL functions] or
 3513: ** [virtual tables] might change the database indirectly as a side effect.  
 3514: ** ^(For example, if an application defines a function "eval()" that 
 3515: ** calls [sqlite3_exec()], then the following SQL statement would
 3516: ** change the database file through side-effects:
 3517: **
 3518: ** <blockquote><pre>
 3519: **    SELECT eval('DELETE FROM t1') FROM t2;
 3520: ** </pre></blockquote>
 3521: **
 3522: ** But because the [SELECT] statement does not change the database file
 3523: ** directly, sqlite3_stmt_readonly() would still return true.)^
 3524: **
 3525: ** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK],
 3526: ** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true,
 3527: ** since the statements themselves do not actually modify the database but
 3528: ** rather they control the timing of when other statements modify the 
 3529: ** database.  ^The [ATTACH] and [DETACH] statements also cause
 3530: ** sqlite3_stmt_readonly() to return true since, while those statements
 3531: ** change the configuration of a database connection, they do not make 
 3532: ** changes to the content of the database files on disk.
 3533: */
 3534: SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
 3535: 
 3536: /*
 3537: ** CAPI3REF: Determine If A Prepared Statement Has Been Reset
 3538: **
 3539: ** ^The sqlite3_stmt_busy(S) interface returns true (non-zero) if the
 3540: ** [prepared statement] S has been stepped at least once using 
 3541: ** [sqlite3_step(S)] but has not run to completion and/or has not 
 3542: ** been reset using [sqlite3_reset(S)].  ^The sqlite3_stmt_busy(S)
 3543: ** interface returns false if S is a NULL pointer.  If S is not a 
 3544: ** NULL pointer and is not a pointer to a valid [prepared statement]
 3545: ** object, then the behavior is undefined and probably undesirable.
 3546: **
 3547: ** This interface can be used in combination [sqlite3_next_stmt()]
 3548: ** to locate all prepared statements associated with a database 
 3549: ** connection that are in need of being reset.  This can be used,
 3550: ** for example, in diagnostic routines to search for prepared 
 3551: ** statements that are holding a transaction open.
 3552: */
 3553: SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*);
 3554: 
 3555: /*
 3556: ** CAPI3REF: Dynamically Typed Value Object
 3557: ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value}
 3558: **
 3559: ** SQLite uses the sqlite3_value object to represent all values
 3560: ** that can be stored in a database table. SQLite uses dynamic typing
 3561: ** for the values it stores.  ^Values stored in sqlite3_value objects
 3562: ** can be integers, floating point values, strings, BLOBs, or NULL.
 3563: **
 3564: ** An sqlite3_value object may be either "protected" or "unprotected".
 3565: ** Some interfaces require a protected sqlite3_value.  Other interfaces
 3566: ** will accept either a protected or an unprotected sqlite3_value.
 3567: ** Every interface that accepts sqlite3_value arguments specifies
 3568: ** whether or not it requires a protected sqlite3_value.
 3569: **
 3570: ** The terms "protected" and "unprotected" refer to whether or not
 3571: ** a mutex is held.  An internal mutex is held for a protected
 3572: ** sqlite3_value object but no mutex is held for an unprotected
 3573: ** sqlite3_value object.  If SQLite is compiled to be single-threaded
 3574: ** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0)
 3575: ** or if SQLite is run in one of reduced mutex modes 
 3576: ** [SQLITE_CONFIG_SINGLETHREAD] or [SQLITE_CONFIG_MULTITHREAD]
 3577: ** then there is no distinction between protected and unprotected
 3578: ** sqlite3_value objects and they can be used interchangeably.  However,
 3579: ** for maximum code portability it is recommended that applications
 3580: ** still make the distinction between protected and unprotected
 3581: ** sqlite3_value objects even when not strictly required.
 3582: **
 3583: ** ^The sqlite3_value objects that are passed as parameters into the
 3584: ** implementation of [application-defined SQL functions] are protected.
 3585: ** ^The sqlite3_value object returned by
 3586: ** [sqlite3_column_value()] is unprotected.
 3587: ** Unprotected sqlite3_value objects may only be used with
 3588: ** [sqlite3_result_value()] and [sqlite3_bind_value()].
 3589: ** The [sqlite3_value_blob | sqlite3_value_type()] family of
 3590: ** interfaces require protected sqlite3_value objects.
 3591: */
 3592: typedef struct Mem sqlite3_value;
 3593: 
 3594: /*
 3595: ** CAPI3REF: SQL Function Context Object
 3596: **
 3597: ** The context in which an SQL function executes is stored in an
 3598: ** sqlite3_context object.  ^A pointer to an sqlite3_context object
 3599: ** is always first parameter to [application-defined SQL functions].
 3600: ** The application-defined SQL function implementation will pass this
 3601: ** pointer through into calls to [sqlite3_result_int | sqlite3_result()],
 3602: ** [sqlite3_aggregate_context()], [sqlite3_user_data()],
 3603: ** [sqlite3_context_db_handle()], [sqlite3_get_auxdata()],
 3604: ** and/or [sqlite3_set_auxdata()].
 3605: */
 3606: typedef struct sqlite3_context sqlite3_context;
 3607: 
 3608: /*
 3609: ** CAPI3REF: Binding Values To Prepared Statements
 3610: ** KEYWORDS: {host parameter} {host parameters} {host parameter name}
 3611: ** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
 3612: **
 3613: ** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants,
 3614: ** literals may be replaced by a [parameter] that matches one of following
 3615: ** templates:
 3616: **
 3617: ** <ul>
 3618: ** <li>  ?
 3619: ** <li>  ?NNN
 3620: ** <li>  :VVV
 3621: ** <li>  @VVV
 3622: ** <li>  $VVV
 3623: ** </ul>
 3624: **
 3625: ** In the templates above, NNN represents an integer literal,
 3626: ** and VVV represents an alphanumeric identifier.)^  ^The values of these
 3627: ** parameters (also called "host parameter names" or "SQL parameters")
 3628: ** can be set using the sqlite3_bind_*() routines defined here.
 3629: **
 3630: ** ^The first argument to the sqlite3_bind_*() routines is always
 3631: ** a pointer to the [sqlite3_stmt] object returned from
 3632: ** [sqlite3_prepare_v2()] or its variants.
 3633: **
 3634: ** ^The second argument is the index of the SQL parameter to be set.
 3635: ** ^The leftmost SQL parameter has an index of 1.  ^When the same named
 3636: ** SQL parameter is used more than once, second and subsequent
 3637: ** occurrences have the same index as the first occurrence.
 3638: ** ^The index for named parameters can be looked up using the
 3639: ** [sqlite3_bind_parameter_index()] API if desired.  ^The index
 3640: ** for "?NNN" parameters is the value of NNN.
 3641: ** ^The NNN value must be between 1 and the [sqlite3_limit()]
 3642: ** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 999).
 3643: **
 3644: ** ^The third argument is the value to bind to the parameter.
 3645: **
 3646: ** ^(In those routines that have a fourth argument, its value is the
 3647: ** number of bytes in the parameter.  To be clear: the value is the
 3648: ** number of <u>bytes</u> in the value, not the number of characters.)^
 3649: ** ^If the fourth parameter is negative, the length of the string is
 3650: ** the number of bytes up to the first zero terminator.
 3651: ** If a non-negative fourth parameter is provided to sqlite3_bind_text()
 3652: ** or sqlite3_bind_text16() then that parameter must be the byte offset
 3653: ** where the NUL terminator would occur assuming the string were NUL
 3654: ** terminated.  If any NUL characters occur at byte offsets less than 
 3655: ** the value of the fourth parameter then the resulting string value will
 3656: ** contain embedded NULs.  The result of expressions involving strings
 3657: ** with embedded NULs is undefined.
 3658: **
 3659: ** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and
 3660: ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or
 3661: ** string after SQLite has finished with it.  ^The destructor is called
 3662: ** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(),
 3663: ** sqlite3_bind_text(), or sqlite3_bind_text16() fails.  
 3664: ** ^If the fifth argument is
 3665: ** the special value [SQLITE_STATIC], then SQLite assumes that the
 3666: ** information is in static, unmanaged space and does not need to be freed.
 3667: ** ^If the fifth argument has the value [SQLITE_TRANSIENT], then
 3668: ** SQLite makes its own private copy of the data immediately, before
 3669: ** the sqlite3_bind_*() routine returns.
 3670: **
 3671: ** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that
 3672: ** is filled with zeroes.  ^A zeroblob uses a fixed amount of memory
 3673: ** (just an integer to hold its size) while it is being processed.
 3674: ** Zeroblobs are intended to serve as placeholders for BLOBs whose
 3675: ** content is later written using
 3676: ** [sqlite3_blob_open | incremental BLOB I/O] routines.
 3677: ** ^A negative value for the zeroblob results in a zero-length BLOB.
 3678: **
 3679: ** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer
 3680: ** for the [prepared statement] or with a prepared statement for which
 3681: ** [sqlite3_step()] has been called more recently than [sqlite3_reset()],
 3682: ** then the call will return [SQLITE_MISUSE].  If any sqlite3_bind_()
 3683: ** routine is passed a [prepared statement] that has been finalized, the
 3684: ** result is undefined and probably harmful.
 3685: **
 3686: ** ^Bindings are not cleared by the [sqlite3_reset()] routine.
 3687: ** ^Unbound parameters are interpreted as NULL.
 3688: **
 3689: ** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an
 3690: ** [error code] if anything goes wrong.
 3691: ** ^[SQLITE_RANGE] is returned if the parameter
 3692: ** index is out of range.  ^[SQLITE_NOMEM] is returned if malloc() fails.
 3693: **
 3694: ** See also: [sqlite3_bind_parameter_count()],
 3695: ** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()].
 3696: */
 3697: SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
 3698: SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double);
 3699: SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int);
 3700: SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
 3701: SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int);
 3702: SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
 3703: SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
 3704: SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
 3705: SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
 3706: 
 3707: /*
 3708: ** CAPI3REF: Number Of SQL Parameters
 3709: **
 3710: ** ^This routine can be used to find the number of [SQL parameters]
 3711: ** in a [prepared statement].  SQL parameters are tokens of the
 3712: ** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as
 3713: ** placeholders for values that are [sqlite3_bind_blob | bound]
 3714: ** to the parameters at a later time.
 3715: **
 3716: ** ^(This routine actually returns the index of the largest (rightmost)
 3717: ** parameter. For all forms except ?NNN, this will correspond to the
 3718: ** number of unique parameters.  If parameters of the ?NNN form are used,
 3719: ** there may be gaps in the list.)^
 3720: **
 3721: ** See also: [sqlite3_bind_blob|sqlite3_bind()],
 3722: ** [sqlite3_bind_parameter_name()], and
 3723: ** [sqlite3_bind_parameter_index()].
 3724: */
 3725: SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*);
 3726: 
 3727: /*
 3728: ** CAPI3REF: Name Of A Host Parameter
 3729: **
 3730: ** ^The sqlite3_bind_parameter_name(P,N) interface returns
 3731: ** the name of the N-th [SQL parameter] in the [prepared statement] P.
 3732: ** ^(SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA"
 3733: ** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA"
 3734: ** respectively.
 3735: ** In other words, the initial ":" or "$" or "@" or "?"
 3736: ** is included as part of the name.)^
 3737: ** ^Parameters of the form "?" without a following integer have no name
 3738: ** and are referred to as "nameless" or "anonymous parameters".
 3739: **
 3740: ** ^The first host parameter has an index of 1, not 0.
 3741: **
 3742: ** ^If the value N is out of range or if the N-th parameter is
 3743: ** nameless, then NULL is returned.  ^The returned string is
 3744: ** always in UTF-8 encoding even if the named parameter was
 3745: ** originally specified as UTF-16 in [sqlite3_prepare16()] or
 3746: ** [sqlite3_prepare16_v2()].
 3747: **
 3748: ** See also: [sqlite3_bind_blob|sqlite3_bind()],
 3749: ** [sqlite3_bind_parameter_count()], and
 3750: ** [sqlite3_bind_parameter_index()].
 3751: */
 3752: SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int);
 3753: 
 3754: /*
 3755: ** CAPI3REF: Index Of A Parameter With A Given Name
 3756: **
 3757: ** ^Return the index of an SQL parameter given its name.  ^The
 3758: ** index value returned is suitable for use as the second
 3759: ** parameter to [sqlite3_bind_blob|sqlite3_bind()].  ^A zero
 3760: ** is returned if no matching parameter is found.  ^The parameter
 3761: ** name must be given in UTF-8 even if the original statement
 3762: ** was prepared from UTF-16 text using [sqlite3_prepare16_v2()].
 3763: **
 3764: ** See also: [sqlite3_bind_blob|sqlite3_bind()],
 3765: ** [sqlite3_bind_parameter_count()], and
 3766: ** [sqlite3_bind_parameter_index()].
 3767: */
 3768: SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName);
 3769: 
 3770: /*
 3771: ** CAPI3REF: Reset All Bindings On A Prepared Statement
 3772: **
 3773: ** ^Contrary to the intuition of many, [sqlite3_reset()] does not reset
 3774: ** the [sqlite3_bind_blob | bindings] on a [prepared statement].
 3775: ** ^Use this routine to reset all host parameters to NULL.
 3776: */
 3777: SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*);
 3778: 
 3779: /*
 3780: ** CAPI3REF: Number Of Columns In A Result Set
 3781: **
 3782: ** ^Return the number of columns in the result set returned by the
 3783: ** [prepared statement]. ^This routine returns 0 if pStmt is an SQL
 3784: ** statement that does not return data (for example an [UPDATE]).
 3785: **
 3786: ** See also: [sqlite3_data_count()]
 3787: */
 3788: SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt);
 3789: 
 3790: /*
 3791: ** CAPI3REF: Column Names In A Result Set
 3792: **
 3793: ** ^These routines return the name assigned to a particular column
 3794: ** in the result set of a [SELECT] statement.  ^The sqlite3_column_name()
 3795: ** interface returns a pointer to a zero-terminated UTF-8 string
 3796: ** and sqlite3_column_name16() returns a pointer to a zero-terminated
 3797: ** UTF-16 string.  ^The first parameter is the [prepared statement]
 3798: ** that implements the [SELECT] statement. ^The second parameter is the
 3799: ** column number.  ^The leftmost column is number 0.
 3800: **
 3801: ** ^The returned string pointer is valid until either the [prepared statement]
 3802: ** is destroyed by [sqlite3_finalize()] or until the statement is automatically
 3803: ** reprepared by the first call to [sqlite3_step()] for a particular run
 3804: ** or until the next call to
 3805: ** sqlite3_column_name() or sqlite3_column_name16() on the same column.
 3806: **
 3807: ** ^If sqlite3_malloc() fails during the processing of either routine
 3808: ** (for example during a conversion from UTF-8 to UTF-16) then a
 3809: ** NULL pointer is returned.
 3810: **
 3811: ** ^The name of a result column is the value of the "AS" clause for
 3812: ** that column, if there is an AS clause.  If there is no AS clause
 3813: ** then the name of the column is unspecified and may change from
 3814: ** one release of SQLite to the next.
 3815: */
 3816: SQLITE_API const char *sqlite3_column_name(sqlite3_stmt*, int N);
 3817: SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N);
 3818: 
 3819: /*
 3820: ** CAPI3REF: Source Of Data In A Query Result
 3821: **
 3822: ** ^These routines provide a means to determine the database, table, and
 3823: ** table column that is the origin of a particular result column in
 3824: ** [SELECT] statement.
 3825: ** ^The name of the database or table or column can be returned as
 3826: ** either a UTF-8 or UTF-16 string.  ^The _database_ routines return
 3827: ** the database name, the _table_ routines return the table name, and
 3828: ** the origin_ routines return the column name.
 3829: ** ^The returned string is valid until the [prepared statement] is destroyed
 3830: ** using [sqlite3_finalize()] or until the statement is automatically
 3831: ** reprepared by the first call to [sqlite3_step()] for a particular run
 3832: ** or until the same information is requested
 3833: ** again in a different encoding.
 3834: **
 3835: ** ^The names returned are the original un-aliased names of the
 3836: ** database, table, and column.
 3837: **
 3838: ** ^The first argument to these interfaces is a [prepared statement].
 3839: ** ^These functions return information about the Nth result column returned by
 3840: ** the statement, where N is the second function argument.
 3841: ** ^The left-most column is column 0 for these routines.
 3842: **
 3843: ** ^If the Nth column returned by the statement is an expression or
 3844: ** subquery and is not a column value, then all of these functions return
 3845: ** NULL.  ^These routine might also return NULL if a memory allocation error
 3846: ** occurs.  ^Otherwise, they return the name of the attached database, table,
 3847: ** or column that query result column was extracted from.
 3848: **
 3849: ** ^As with all other SQLite APIs, those whose names end with "16" return
 3850: ** UTF-16 encoded strings and the other functions return UTF-8.
 3851: **
 3852: ** ^These APIs are only available if the library was compiled with the
 3853: ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol.
 3854: **
 3855: ** If two or more threads call one or more of these routines against the same
 3856: ** prepared statement and column at the same time then the results are
 3857: ** undefined.
 3858: **
 3859: ** If two or more threads call one or more
 3860: ** [sqlite3_column_database_name | column metadata interfaces]
 3861: ** for the same [prepared statement] and result column
 3862: ** at the same time then the results are undefined.
 3863: */
 3864: SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt*,int);
 3865: SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt*,int);
 3866: SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt*,int);
 3867: SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt*,int);
 3868: SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt*,int);
 3869: SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int);
 3870: 
 3871: /*
 3872: ** CAPI3REF: Declared Datatype Of A Query Result
 3873: **
 3874: ** ^(The first parameter is a [prepared statement].
 3875: ** If this statement is a [SELECT] statement and the Nth column of the
 3876: ** returned result set of that [SELECT] is a table column (not an
 3877: ** expression or subquery) then the declared type of the table
 3878: ** column is returned.)^  ^If the Nth column of the result set is an
 3879: ** expression or subquery, then a NULL pointer is returned.
 3880: ** ^The returned string is always UTF-8 encoded.
 3881: **
 3882: ** ^(For example, given the database schema:
 3883: **
 3884: ** CREATE TABLE t1(c1 VARIANT);
 3885: **
 3886: ** and the following statement to be compiled:
 3887: **
 3888: ** SELECT c1 + 1, c1 FROM t1;
 3889: **
 3890: ** this routine would return the string "VARIANT" for the second result
 3891: ** column (i==1), and a NULL pointer for the first result column (i==0).)^
 3892: **
 3893: ** ^SQLite uses dynamic run-time typing.  ^So just because a column
 3894: ** is declared to contain a particular type does not mean that the
 3895: ** data stored in that column is of the declared type.  SQLite is
 3896: ** strongly typed, but the typing is dynamic not static.  ^Type
 3897: ** is associated with individual values, not with the containers
 3898: ** used to hold those values.
 3899: */
 3900: SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt*,int);
 3901: SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
 3902: 
 3903: /*
 3904: ** CAPI3REF: Evaluate An SQL Statement
 3905: **
 3906: ** After a [prepared statement] has been prepared using either
 3907: ** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy
 3908: ** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function
 3909: ** must be called one or more times to evaluate the statement.
 3910: **
 3911: ** The details of the behavior of the sqlite3_step() interface depend
 3912: ** on whether the statement was prepared using the newer "v2" interface
 3913: ** [sqlite3_prepare_v2()] and [sqlite3_prepare16_v2()] or the older legacy
 3914: ** interface [sqlite3_prepare()] and [sqlite3_prepare16()].  The use of the
 3915: ** new "v2" interface is recommended for new applications but the legacy
 3916: ** interface will continue to be supported.
 3917: **
 3918: ** ^In the legacy interface, the return value will be either [SQLITE_BUSY],
 3919: ** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE].
 3920: ** ^With the "v2" interface, any of the other [result codes] or
 3921: ** [extended result codes] might be returned as well.
 3922: **
 3923: ** ^[SQLITE_BUSY] means that the database engine was unable to acquire the
 3924: ** database locks it needs to do its job.  ^If the statement is a [COMMIT]
 3925: ** or occurs outside of an explicit transaction, then you can retry the
 3926: ** statement.  If the statement is not a [COMMIT] and occurs within an
 3927: ** explicit transaction then you should rollback the transaction before
 3928: ** continuing.
 3929: **
 3930: ** ^[SQLITE_DONE] means that the statement has finished executing
 3931: ** successfully.  sqlite3_step() should not be called again on this virtual
 3932: ** machine without first calling [sqlite3_reset()] to reset the virtual
 3933: ** machine back to its initial state.
 3934: **
 3935: ** ^If the SQL statement being executed returns any data, then [SQLITE_ROW]
 3936: ** is returned each time a new row of data is ready for processing by the
 3937: ** caller. The values may be accessed using the [column access functions].
 3938: ** sqlite3_step() is called again to retrieve the next row of data.
 3939: **
 3940: ** ^[SQLITE_ERROR] means that a run-time error (such as a constraint
 3941: ** violation) has occurred.  sqlite3_step() should not be called again on
 3942: ** the VM. More information may be found by calling [sqlite3_errmsg()].
 3943: ** ^With the legacy interface, a more specific error code (for example,
 3944: ** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth)
 3945: ** can be obtained by calling [sqlite3_reset()] on the
 3946: ** [prepared statement].  ^In the "v2" interface,
 3947: ** the more specific error code is returned directly by sqlite3_step().
 3948: **
 3949: ** [SQLITE_MISUSE] means that the this routine was called inappropriately.
 3950: ** Perhaps it was called on a [prepared statement] that has
 3951: ** already been [sqlite3_finalize | finalized] or on one that had
 3952: ** previously returned [SQLITE_ERROR] or [SQLITE_DONE].  Or it could
 3953: ** be the case that the same database connection is being used by two or
 3954: ** more threads at the same moment in time.
 3955: **
 3956: ** For all versions of SQLite up to and including 3.6.23.1, a call to
 3957: ** [sqlite3_reset()] was required after sqlite3_step() returned anything
 3958: ** other than [SQLITE_ROW] before any subsequent invocation of
 3959: ** sqlite3_step().  Failure to reset the prepared statement using 
 3960: ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from
 3961: ** sqlite3_step().  But after version 3.6.23.1, sqlite3_step() began
 3962: ** calling [sqlite3_reset()] automatically in this circumstance rather
 3963: ** than returning [SQLITE_MISUSE].  This is not considered a compatibility
 3964: ** break because any application that ever receives an SQLITE_MISUSE error
 3965: ** is broken by definition.  The [SQLITE_OMIT_AUTORESET] compile-time option
 3966: ** can be used to restore the legacy behavior.
 3967: **
 3968: ** <b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step()
 3969: ** API always returns a generic error code, [SQLITE_ERROR], following any
 3970: ** error other than [SQLITE_BUSY] and [SQLITE_MISUSE].  You must call
 3971: ** [sqlite3_reset()] or [sqlite3_finalize()] in order to find one of the
 3972: ** specific [error codes] that better describes the error.
 3973: ** We admit that this is a goofy design.  The problem has been fixed
 3974: ** with the "v2" interface.  If you prepare all of your SQL statements
 3975: ** using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] instead
 3976: ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces,
 3977: ** then the more specific [error codes] are returned directly
 3978: ** by sqlite3_step().  The use of the "v2" interface is recommended.
 3979: */
 3980: SQLITE_API int sqlite3_step(sqlite3_stmt*);
 3981: 
 3982: /*
 3983: ** CAPI3REF: Number of columns in a result set
 3984: **
 3985: ** ^The sqlite3_data_count(P) interface returns the number of columns in the
 3986: ** current row of the result set of [prepared statement] P.
 3987: ** ^If prepared statement P does not have results ready to return
 3988: ** (via calls to the [sqlite3_column_int | sqlite3_column_*()] of
 3989: ** interfaces) then sqlite3_data_count(P) returns 0.
 3990: ** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer.
 3991: ** ^The sqlite3_data_count(P) routine returns 0 if the previous call to
 3992: ** [sqlite3_step](P) returned [SQLITE_DONE].  ^The sqlite3_data_count(P)
 3993: ** will return non-zero if previous call to [sqlite3_step](P) returned
 3994: ** [SQLITE_ROW], except in the case of the [PRAGMA incremental_vacuum]
 3995: ** where it always returns zero since each step of that multi-step
 3996: ** pragma returns 0 columns of data.
 3997: **
 3998: ** See also: [sqlite3_column_count()]
 3999: */
 4000: SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt);
 4001: 
 4002: /*
 4003: ** CAPI3REF: Fundamental Datatypes
 4004: ** KEYWORDS: SQLITE_TEXT
 4005: **
 4006: ** ^(Every value in SQLite has one of five fundamental datatypes:
 4007: **
 4008: ** <ul>
 4009: ** <li> 64-bit signed integer
 4010: ** <li> 64-bit IEEE floating point number
 4011: ** <li> string
 4012: ** <li> BLOB
 4013: ** <li> NULL
 4014: ** </ul>)^
 4015: **
 4016: ** These constants are codes for each of those types.
 4017: **
 4018: ** Note that the SQLITE_TEXT constant was also used in SQLite version 2
 4019: ** for a completely different meaning.  Software that links against both
 4020: ** SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not
 4021: ** SQLITE_TEXT.
 4022: */
 4023: #define SQLITE_INTEGER  1
 4024: #define SQLITE_FLOAT    2
 4025: #define SQLITE_BLOB     4
 4026: #define SQLITE_NULL     5
 4027: #ifdef SQLITE_TEXT
 4028: # undef SQLITE_TEXT
 4029: #else
 4030: # define SQLITE_TEXT     3
 4031: #endif
 4032: #define SQLITE3_TEXT     3
 4033: 
 4034: /*
 4035: ** CAPI3REF: Result Values From A Query
 4036: ** KEYWORDS: {column access functions}
 4037: **
 4038: ** These routines form the "result set" interface.
 4039: **
 4040: ** ^These routines return information about a single column of the current
 4041: ** result row of a query.  ^In every case the first argument is a pointer
 4042: ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*]
 4043: ** that was returned from [sqlite3_prepare_v2()] or one of its variants)
 4044: ** and the second argument is the index of the column for which information
 4045: ** should be returned. ^The leftmost column of the result set has the index 0.
 4046: ** ^The number of columns in the result can be determined using
 4047: ** [sqlite3_column_count()].
 4048: **
 4049: ** If the SQL statement does not currently point to a valid row, or if the
 4050: ** column index is out of range, the result is undefined.
 4051: ** These routines may only be called when the most recent call to
 4052: ** [sqlite3_step()] has returned [SQLITE_ROW] and neither
 4053: ** [sqlite3_reset()] nor [sqlite3_finalize()] have been called subsequently.
 4054: ** If any of these routines are called after [sqlite3_reset()] or
 4055: ** [sqlite3_finalize()] or after [sqlite3_step()] has returned
 4056: ** something other than [SQLITE_ROW], the results are undefined.
 4057: ** If [sqlite3_step()] or [sqlite3_reset()] or [sqlite3_finalize()]
 4058: ** are called from a different thread while any of these routines
 4059: ** are pending, then the results are undefined.
 4060: **
 4061: ** ^The sqlite3_column_type() routine returns the
 4062: ** [SQLITE_INTEGER | datatype code] for the initial data type
 4063: ** of the result column.  ^The returned value is one of [SQLITE_INTEGER],
 4064: ** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL].  The value
 4065: ** returned by sqlite3_column_type() is only meaningful if no type
 4066: ** conversions have occurred as described below.  After a type conversion,
 4067: ** the value returned by sqlite3_column_type() is undefined.  Future
 4068: ** versions of SQLite may change the behavior of sqlite3_column_type()
 4069: ** following a type conversion.
 4070: **
 4071: ** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes()
 4072: ** routine returns the number of bytes in that BLOB or string.
 4073: ** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts
 4074: ** the string to UTF-8 and then returns the number of bytes.
 4075: ** ^If the result is a numeric value then sqlite3_column_bytes() uses
 4076: ** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns
 4077: ** the number of bytes in that string.
 4078: ** ^If the result is NULL, then sqlite3_column_bytes() returns zero.
 4079: **
 4080: ** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16()
 4081: ** routine returns the number of bytes in that BLOB or string.
 4082: ** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts
 4083: ** the string to UTF-16 and then returns the number of bytes.
 4084: ** ^If the result is a numeric value then sqlite3_column_bytes16() uses
 4085: ** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns
 4086: ** the number of bytes in that string.
 4087: ** ^If the result is NULL, then sqlite3_column_bytes16() returns zero.
 4088: **
 4089: ** ^The values returned by [sqlite3_column_bytes()] and 
 4090: ** [sqlite3_column_bytes16()] do not include the zero terminators at the end
 4091: ** of the string.  ^For clarity: the values returned by
 4092: ** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of
 4093: ** bytes in the string, not the number of characters.
 4094: **
 4095: ** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(),
 4096: ** even empty strings, are always zero-terminated.  ^The return
 4097: ** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.
 4098: **
 4099: ** ^The object returned by [sqlite3_column_value()] is an
 4100: ** [unprotected sqlite3_value] object.  An unprotected sqlite3_value object
 4101: ** may only be used with [sqlite3_bind_value()] and [sqlite3_result_value()].
 4102: ** If the [unprotected sqlite3_value] object returned by
 4103: ** [sqlite3_column_value()] is used in any other way, including calls
 4104: ** to routines like [sqlite3_value_int()], [sqlite3_value_text()],
 4105: ** or [sqlite3_value_bytes()], then the behavior is undefined.
 4106: **
 4107: ** These routines attempt to convert the value where appropriate.  ^For
 4108: ** example, if the internal representation is FLOAT and a text result
 4109: ** is requested, [sqlite3_snprintf()] is used internally to perform the
 4110: ** conversion automatically.  ^(The following table details the conversions
 4111: ** that are applied:
 4112: **
 4113: ** <blockquote>
 4114: ** <table border="1">
 4115: ** <tr><th> Internal<br>Type <th> Requested<br>Type <th>  Conversion
 4116: **
 4117: ** <tr><td>  NULL    <td> INTEGER   <td> Result is 0
 4118: ** <tr><td>  NULL    <td>  FLOAT    <td> Result is 0.0
 4119: ** <tr><td>  NULL    <td>   TEXT    <td> Result is NULL pointer
 4120: ** <tr><td>  NULL    <td>   BLOB    <td> Result is NULL pointer
 4121: ** <tr><td> INTEGER  <td>  FLOAT    <td> Convert from integer to float
 4122: ** <tr><td> INTEGER  <td>   TEXT    <td> ASCII rendering of the integer
 4123: ** <tr><td> INTEGER  <td>   BLOB    <td> Same as INTEGER->TEXT
 4124: ** <tr><td>  FLOAT   <td> INTEGER   <td> Convert from float to integer
 4125: ** <tr><td>  FLOAT   <td>   TEXT    <td> ASCII rendering of the float
 4126: ** <tr><td>  FLOAT   <td>   BLOB    <td> Same as FLOAT->TEXT
 4127: ** <tr><td>  TEXT    <td> INTEGER   <td> Use atoi()
 4128: ** <tr><td>  TEXT    <td>  FLOAT    <td> Use atof()
 4129: ** <tr><td>  TEXT    <td>   BLOB    <td> No change
 4130: ** <tr><td>  BLOB    <td> INTEGER   <td> Convert to TEXT then use atoi()
 4131: ** <tr><td>  BLOB    <td>  FLOAT    <td> Convert to TEXT then use atof()
 4132: ** <tr><td>  BLOB    <td>   TEXT    <td> Add a zero terminator if needed
 4133: ** </table>
 4134: ** </blockquote>)^
 4135: **
 4136: ** The table above makes reference to standard C library functions atoi()
 4137: ** and atof().  SQLite does not really use these functions.  It has its
 4138: ** own equivalent internal routines.  The atoi() and atof() names are
 4139: ** used in the table for brevity and because they are familiar to most
 4140: ** C programmers.
 4141: **
 4142: ** Note that when type conversions occur, pointers returned by prior
 4143: ** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or
 4144: ** sqlite3_column_text16() may be invalidated.
 4145: ** Type conversions and pointer invalidations might occur
 4146: ** in the following cases:
 4147: **
 4148: ** <ul>
 4149: ** <li> The initial content is a BLOB and sqlite3_column_text() or
 4150: **      sqlite3_column_text16() is called.  A zero-terminator might
 4151: **      need to be added to the string.</li>
 4152: ** <li> The initial content is UTF-8 text and sqlite3_column_bytes16() or
 4153: **      sqlite3_column_text16() is called.  The content must be converted
 4154: **      to UTF-16.</li>
 4155: ** <li> The initial content is UTF-16 text and sqlite3_column_bytes() or
 4156: **      sqlite3_column_text() is called.  The content must be converted
 4157: **      to UTF-8.</li>
 4158: ** </ul>
 4159: **
 4160: ** ^Conversions between UTF-16be and UTF-16le are always done in place and do
 4161: ** not invalidate a prior pointer, though of course the content of the buffer
 4162: ** that the prior pointer references will have been modified.  Other kinds
 4163: ** of conversion are done in place when it is possible, but sometimes they
 4164: ** are not possible and in those cases prior pointers are invalidated.
 4165: **
 4166: ** The safest and easiest to remember policy is to invoke these routines
 4167: ** in one of the following ways:
 4168: **
 4169: ** <ul>
 4170: **  <li>sqlite3_column_text() followed by sqlite3_column_bytes()</li>
 4171: **  <li>sqlite3_column_blob() followed by sqlite3_column_bytes()</li>
 4172: **  <li>sqlite3_column_text16() followed by sqlite3_column_bytes16()</li>
 4173: ** </ul>
 4174: **
 4175: ** In other words, you should call sqlite3_column_text(),
 4176: ** sqlite3_column_blob(), or sqlite3_column_text16() first to force the result
 4177: ** into the desired format, then invoke sqlite3_column_bytes() or
 4178: ** sqlite3_column_bytes16() to find the size of the result.  Do not mix calls
 4179: ** to sqlite3_column_text() or sqlite3_column_blob() with calls to
 4180: ** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16()
 4181: ** with calls to sqlite3_column_bytes().
 4182: **
 4183: ** ^The pointers returned are valid until a type conversion occurs as
 4184: ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or
 4185: ** [sqlite3_finalize()] is called.  ^The memory space used to hold strings
 4186: ** and BLOBs is freed automatically.  Do <b>not</b> pass the pointers returned
 4187: ** [sqlite3_column_blob()], [sqlite3_column_text()], etc. into
 4188: ** [sqlite3_free()].
 4189: **
 4190: ** ^(If a memory allocation error occurs during the evaluation of any
 4191: ** of these routines, a default value is returned.  The default value
 4192: ** is either the integer 0, the floating point number 0.0, or a NULL
 4193: ** pointer.  Subsequent calls to [sqlite3_errcode()] will return
 4194: ** [SQLITE_NOMEM].)^
 4195: */
 4196: SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
 4197: SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
 4198: SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
 4199: SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol);
 4200: SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol);
 4201: SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
 4202: SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
 4203: SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
 4204: SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol);
 4205: SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);
 4206: 
 4207: /*
 4208: ** CAPI3REF: Destroy A Prepared Statement Object
 4209: **
 4210: ** ^The sqlite3_finalize() function is called to delete a [prepared statement].
 4211: ** ^If the most recent evaluation of the statement encountered no errors
 4212: ** or if the statement is never been evaluated, then sqlite3_finalize() returns
 4213: ** SQLITE_OK.  ^If the most recent evaluation of statement S failed, then
 4214: ** sqlite3_finalize(S) returns the appropriate [error code] or
 4215: ** [extended error code].
 4216: **
 4217: ** ^The sqlite3_finalize(S) routine can be called at any point during
 4218: ** the life cycle of [prepared statement] S:
 4219: ** before statement S is ever evaluated, after
 4220: ** one or more calls to [sqlite3_reset()], or after any call
 4221: ** to [sqlite3_step()] regardless of whether or not the statement has
 4222: ** completed execution.
 4223: **
 4224: ** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op.
 4225: **
 4226: ** The application must finalize every [prepared statement] in order to avoid
 4227: ** resource leaks.  It is a grievous error for the application to try to use
 4228: ** a prepared statement after it has been finalized.  Any use of a prepared
 4229: ** statement after it has been finalized can result in undefined and
 4230: ** undesirable behavior such as segfaults and heap corruption.
 4231: */
 4232: SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);
 4233: 
 4234: /*
 4235: ** CAPI3REF: Reset A Prepared Statement Object
 4236: **
 4237: ** The sqlite3_reset() function is called to reset a [prepared statement]
 4238: ** object back to its initial state, ready to be re-executed.
 4239: ** ^Any SQL statement variables that had values bound to them using
 4240: ** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values.
 4241: ** Use [sqlite3_clear_bindings()] to reset the bindings.
 4242: **
 4243: ** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S
 4244: ** back to the beginning of its program.
 4245: **
 4246: ** ^If the most recent call to [sqlite3_step(S)] for the
 4247: ** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE],
 4248: ** or if [sqlite3_step(S)] has never before been called on S,
 4249: ** then [sqlite3_reset(S)] returns [SQLITE_OK].
 4250: **
 4251: ** ^If the most recent call to [sqlite3_step(S)] for the
 4252: ** [prepared statement] S indicated an error, then
 4253: ** [sqlite3_reset(S)] returns an appropriate [error code].
 4254: **
 4255: ** ^The [sqlite3_reset(S)] interface does not change the values
 4256: ** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S.
 4257: */
 4258: SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
 4259: 
 4260: /*
 4261: ** CAPI3REF: Create Or Redefine SQL Functions
 4262: ** KEYWORDS: {function creation routines}
 4263: ** KEYWORDS: {application-defined SQL function}
 4264: ** KEYWORDS: {application-defined SQL functions}
 4265: **
 4266: ** ^These functions (collectively known as "function creation routines")
 4267: ** are used to add SQL functions or aggregates or to redefine the behavior
 4268: ** of existing SQL functions or aggregates.  The only differences between
 4269: ** these routines are the text encoding expected for
 4270: ** the second parameter (the name of the function being created)
 4271: ** and the presence or absence of a destructor callback for
 4272: ** the application data pointer.
 4273: **
 4274: ** ^The first parameter is the [database connection] to which the SQL
 4275: ** function is to be added.  ^If an application uses more than one database
 4276: ** connection then application-defined SQL functions must be added
 4277: ** to each database connection separately.
 4278: **
 4279: ** ^The second parameter is the name of the SQL function to be created or
 4280: ** redefined.  ^The length of the name is limited to 255 bytes in a UTF-8
 4281: ** representation, exclusive of the zero-terminator.  ^Note that the name
 4282: ** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes.  
 4283: ** ^Any attempt to create a function with a longer name
 4284: ** will result in [SQLITE_MISUSE] being returned.
 4285: **
 4286: ** ^The third parameter (nArg)
 4287: ** is the number of arguments that the SQL function or
 4288: ** aggregate takes. ^If this parameter is -1, then the SQL function or
 4289: ** aggregate may take any number of arguments between 0 and the limit
 4290: ** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]).  If the third
 4291: ** parameter is less than -1 or greater than 127 then the behavior is
 4292: ** undefined.
 4293: **
 4294: ** ^The fourth parameter, eTextRep, specifies what
 4295: ** [SQLITE_UTF8 | text encoding] this SQL function prefers for
 4296: ** its parameters.  Every SQL function implementation must be able to work
 4297: ** with UTF-8, UTF-16le, or UTF-16be.  But some implementations may be
 4298: ** more efficient with one encoding than another.  ^An application may
 4299: ** invoke sqlite3_create_function() or sqlite3_create_function16() multiple
 4300: ** times with the same function but with different values of eTextRep.
 4301: ** ^When multiple implementations of the same function are available, SQLite
 4302: ** will pick the one that involves the least amount of data conversion.
 4303: ** If there is only a single implementation which does not care what text
 4304: ** encoding is used, then the fourth argument should be [SQLITE_ANY].
 4305: **
 4306: ** ^(The fifth parameter is an arbitrary pointer.  The implementation of the
 4307: ** function can gain access to this pointer using [sqlite3_user_data()].)^
 4308: **
 4309: ** ^The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are
 4310: ** pointers to C-language functions that implement the SQL function or
 4311: ** aggregate. ^A scalar SQL function requires an implementation of the xFunc
 4312: ** callback only; NULL pointers must be passed as the xStep and xFinal
 4313: ** parameters. ^An aggregate SQL function requires an implementation of xStep
 4314: ** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing
 4315: ** SQL function or aggregate, pass NULL pointers for all three function
 4316: ** callbacks.
 4317: **
 4318: ** ^(If the ninth parameter to sqlite3_create_function_v2() is not NULL,
 4319: ** then it is destructor for the application data pointer. 
 4320: ** The destructor is invoked when the function is deleted, either by being
 4321: ** overloaded or when the database connection closes.)^
 4322: ** ^The destructor is also invoked if the call to
 4323: ** sqlite3_create_function_v2() fails.
 4324: ** ^When the destructor callback of the tenth parameter is invoked, it
 4325: ** is passed a single argument which is a copy of the application data 
 4326: ** pointer which was the fifth parameter to sqlite3_create_function_v2().
 4327: **
 4328: ** ^It is permitted to register multiple implementations of the same
 4329: ** functions with the same name but with either differing numbers of
 4330: ** arguments or differing preferred text encodings.  ^SQLite will use
 4331: ** the implementation that most closely matches the way in which the
 4332: ** SQL function is used.  ^A function implementation with a non-negative
 4333: ** nArg parameter is a better match than a function implementation with
 4334: ** a negative nArg.  ^A function where the preferred text encoding
 4335: ** matches the database encoding is a better
 4336: ** match than a function where the encoding is different.  
 4337: ** ^A function where the encoding difference is between UTF16le and UTF16be
 4338: ** is a closer match than a function where the encoding difference is
 4339: ** between UTF8 and UTF16.
 4340: **
 4341: ** ^Built-in functions may be overloaded by new application-defined functions.
 4342: **
 4343: ** ^An application-defined function is permitted to call other
 4344: ** SQLite interfaces.  However, such calls must not
 4345: ** close the database connection nor finalize or reset the prepared
 4346: ** statement in which the function is running.
 4347: */
 4348: SQLITE_API int sqlite3_create_function(
 4349:   sqlite3 *db,
 4350:   const char *zFunctionName,
 4351:   int nArg,
 4352:   int eTextRep,
 4353:   void *pApp,
 4354:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
 4355:   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
 4356:   void (*xFinal)(sqlite3_context*)
 4357: );
 4358: SQLITE_API int sqlite3_create_function16(
 4359:   sqlite3 *db,
 4360:   const void *zFunctionName,
 4361:   int nArg,
 4362:   int eTextRep,
 4363:   void *pApp,
 4364:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
 4365:   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
 4366:   void (*xFinal)(sqlite3_context*)
 4367: );
 4368: SQLITE_API int sqlite3_create_function_v2(
 4369:   sqlite3 *db,
 4370:   const char *zFunctionName,
 4371:   int nArg,
 4372:   int eTextRep,
 4373:   void *pApp,
 4374:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
 4375:   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
 4376:   void (*xFinal)(sqlite3_context*),
 4377:   void(*xDestroy)(void*)
 4378: );
 4379: 
 4380: /*
 4381: ** CAPI3REF: Text Encodings
 4382: **
 4383: ** These constant define integer codes that represent the various
 4384: ** text encodings supported by SQLite.
 4385: */
 4386: #define SQLITE_UTF8           1
 4387: #define SQLITE_UTF16LE        2
 4388: #define SQLITE_UTF16BE        3
 4389: #define SQLITE_UTF16          4    /* Use native byte order */
 4390: #define SQLITE_ANY            5    /* sqlite3_create_function only */
 4391: #define SQLITE_UTF16_ALIGNED  8    /* sqlite3_create_collation only */
 4392: 
 4393: /*
 4394: ** CAPI3REF: Deprecated Functions
 4395: ** DEPRECATED
 4396: **
 4397: ** These functions are [deprecated].  In order to maintain
 4398: ** backwards compatibility with older code, these functions continue 
 4399: ** to be supported.  However, new applications should avoid
 4400: ** the use of these functions.  To help encourage people to avoid
 4401: ** using these functions, we are not going to tell you what they do.
 4402: */
 4403: #ifndef SQLITE_OMIT_DEPRECATED
 4404: SQLITE_API SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*);
 4405: SQLITE_API SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*);
 4406: SQLITE_API SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*);
 4407: SQLITE_API SQLITE_DEPRECATED int sqlite3_global_recover(void);
 4408: SQLITE_API SQLITE_DEPRECATED void sqlite3_thread_cleanup(void);
 4409: SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void*,sqlite3_int64);
 4410: #endif
 4411: 
 4412: /*
 4413: ** CAPI3REF: Obtaining SQL Function Parameter Values
 4414: **
 4415: ** The C-language implementation of SQL functions and aggregates uses
 4416: ** this set of interface routines to access the parameter values on
 4417: ** the function or aggregate.
 4418: **
 4419: ** The xFunc (for scalar functions) or xStep (for aggregates) parameters
 4420: ** to [sqlite3_create_function()] and [sqlite3_create_function16()]
 4421: ** define callbacks that implement the SQL functions and aggregates.
 4422: ** The 3rd parameter to these callbacks is an array of pointers to
 4423: ** [protected sqlite3_value] objects.  There is one [sqlite3_value] object for
 4424: ** each parameter to the SQL function.  These routines are used to
 4425: ** extract values from the [sqlite3_value] objects.
 4426: **
 4427: ** These routines work only with [protected sqlite3_value] objects.
 4428: ** Any attempt to use these routines on an [unprotected sqlite3_value]
 4429: ** object results in undefined behavior.
 4430: **
 4431: ** ^These routines work just like the corresponding [column access functions]
 4432: ** except that  these routines take a single [protected sqlite3_value] object
 4433: ** pointer instead of a [sqlite3_stmt*] pointer and an integer column number.
 4434: **
 4435: ** ^The sqlite3_value_text16() interface extracts a UTF-16 string
 4436: ** in the native byte-order of the host machine.  ^The
 4437: ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces
 4438: ** extract UTF-16 strings as big-endian and little-endian respectively.
 4439: **
 4440: ** ^(The sqlite3_value_numeric_type() interface attempts to apply
 4441: ** numeric affinity to the value.  This means that an attempt is
 4442: ** made to convert the value to an integer or floating point.  If
 4443: ** such a conversion is possible without loss of information (in other
 4444: ** words, if the value is a string that looks like a number)
 4445: ** then the conversion is performed.  Otherwise no conversion occurs.
 4446: ** The [SQLITE_INTEGER | datatype] after conversion is returned.)^
 4447: **
 4448: ** Please pay particular attention to the fact that the pointer returned
 4449: ** from [sqlite3_value_blob()], [sqlite3_value_text()], or
 4450: ** [sqlite3_value_text16()] can be invalidated by a subsequent call to
 4451: ** [sqlite3_value_bytes()], [sqlite3_value_bytes16()], [sqlite3_value_text()],
 4452: ** or [sqlite3_value_text16()].
 4453: **
 4454: ** These routines must be called from the same thread as
 4455: ** the SQL function that supplied the [sqlite3_value*] parameters.
 4456: */
 4457: SQLITE_API const void *sqlite3_value_blob(sqlite3_value*);
 4458: SQLITE_API int sqlite3_value_bytes(sqlite3_value*);
 4459: SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
 4460: SQLITE_API double sqlite3_value_double(sqlite3_value*);
 4461: SQLITE_API int sqlite3_value_int(sqlite3_value*);
 4462: SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
 4463: SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*);
 4464: SQLITE_API const void *sqlite3_value_text16(sqlite3_value*);
 4465: SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*);
 4466: SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*);
 4467: SQLITE_API int sqlite3_value_type(sqlite3_value*);
 4468: SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
 4469: 
 4470: /*
 4471: ** CAPI3REF: Obtain Aggregate Function Context
 4472: **
 4473: ** Implementations of aggregate SQL functions use this
 4474: ** routine to allocate memory for storing their state.
 4475: **
 4476: ** ^The first time the sqlite3_aggregate_context(C,N) routine is called 
 4477: ** for a particular aggregate function, SQLite
 4478: ** allocates N of memory, zeroes out that memory, and returns a pointer
 4479: ** to the new memory. ^On second and subsequent calls to
 4480: ** sqlite3_aggregate_context() for the same aggregate function instance,
 4481: ** the same buffer is returned.  Sqlite3_aggregate_context() is normally
 4482: ** called once for each invocation of the xStep callback and then one
 4483: ** last time when the xFinal callback is invoked.  ^(When no rows match
 4484: ** an aggregate query, the xStep() callback of the aggregate function
 4485: ** implementation is never called and xFinal() is called exactly once.
 4486: ** In those cases, sqlite3_aggregate_context() might be called for the
 4487: ** first time from within xFinal().)^
 4488: **
 4489: ** ^The sqlite3_aggregate_context(C,N) routine returns a NULL pointer if N is
 4490: ** less than or equal to zero or if a memory allocate error occurs.
 4491: **
 4492: ** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is
 4493: ** determined by the N parameter on first successful call.  Changing the
 4494: ** value of N in subsequent call to sqlite3_aggregate_context() within
 4495: ** the same aggregate function instance will not resize the memory
 4496: ** allocation.)^
 4497: **
 4498: ** ^SQLite automatically frees the memory allocated by 
 4499: ** sqlite3_aggregate_context() when the aggregate query concludes.
 4500: **
 4501: ** The first parameter must be a copy of the
 4502: ** [sqlite3_context | SQL function context] that is the first parameter
 4503: ** to the xStep or xFinal callback routine that implements the aggregate
 4504: ** function.
 4505: **
 4506: ** This routine must be called from the same thread in which
 4507: ** the aggregate SQL function is running.
 4508: */
 4509: SQLITE_API void *sqlite3_aggregate_context(sqlite3_context*, int nBytes);
 4510: 
 4511: /*
 4512: ** CAPI3REF: User Data For Functions
 4513: **
 4514: ** ^The sqlite3_user_data() interface returns a copy of
 4515: ** the pointer that was the pUserData parameter (the 5th parameter)
 4516: ** of the [sqlite3_create_function()]
 4517: ** and [sqlite3_create_function16()] routines that originally
 4518: ** registered the application defined function.
 4519: **
 4520: ** This routine must be called from the same thread in which
 4521: ** the application-defined function is running.
 4522: */
 4523: SQLITE_API void *sqlite3_user_data(sqlite3_context*);
 4524: 
 4525: /*
 4526: ** CAPI3REF: Database Connection For Functions
 4527: **
 4528: ** ^The sqlite3_context_db_handle() interface returns a copy of
 4529: ** the pointer to the [database connection] (the 1st parameter)
 4530: ** of the [sqlite3_create_function()]
 4531: ** and [sqlite3_create_function16()] routines that originally
 4532: ** registered the application defined function.
 4533: */
 4534: SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
 4535: 
 4536: /*
 4537: ** CAPI3REF: Function Auxiliary Data
 4538: **
 4539: ** The following two functions may be used by scalar SQL functions to
 4540: ** associate metadata with argument values. If the same value is passed to
 4541: ** multiple invocations of the same SQL function during query execution, under
 4542: ** some circumstances the associated metadata may be preserved. This may
 4543: ** be used, for example, to add a regular-expression matching scalar
 4544: ** function. The compiled version of the regular expression is stored as
 4545: ** metadata associated with the SQL value passed as the regular expression
 4546: ** pattern.  The compiled regular expression can be reused on multiple
 4547: ** invocations of the same function so that the original pattern string
 4548: ** does not need to be recompiled on each invocation.
 4549: **
 4550: ** ^The sqlite3_get_auxdata() interface returns a pointer to the metadata
 4551: ** associated by the sqlite3_set_auxdata() function with the Nth argument
 4552: ** value to the application-defined function. ^If no metadata has been ever
 4553: ** been set for the Nth argument of the function, or if the corresponding
 4554: ** function parameter has changed since the meta-data was set,
 4555: ** then sqlite3_get_auxdata() returns a NULL pointer.
 4556: **
 4557: ** ^The sqlite3_set_auxdata() interface saves the metadata
 4558: ** pointed to by its 3rd parameter as the metadata for the N-th
 4559: ** argument of the application-defined function.  Subsequent
 4560: ** calls to sqlite3_get_auxdata() might return this data, if it has
 4561: ** not been destroyed.
 4562: ** ^If it is not NULL, SQLite will invoke the destructor
 4563: ** function given by the 4th parameter to sqlite3_set_auxdata() on
 4564: ** the metadata when the corresponding function parameter changes
 4565: ** or when the SQL statement completes, whichever comes first.
 4566: **
 4567: ** SQLite is free to call the destructor and drop metadata on any
 4568: ** parameter of any function at any time.  ^The only guarantee is that
 4569: ** the destructor will be called before the metadata is dropped.
 4570: **
 4571: ** ^(In practice, metadata is preserved between function calls for
 4572: ** expressions that are constant at compile time. This includes literal
 4573: ** values and [parameters].)^
 4574: **
 4575: ** These routines must be called from the same thread in which
 4576: ** the SQL function is running.
 4577: */
 4578: SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N);
 4579: SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*));
 4580: 
 4581: 
 4582: /*
 4583: ** CAPI3REF: Constants Defining Special Destructor Behavior
 4584: **
 4585: ** These are special values for the destructor that is passed in as the
 4586: ** final argument to routines like [sqlite3_result_blob()].  ^If the destructor
 4587: ** argument is SQLITE_STATIC, it means that the content pointer is constant
 4588: ** and will never change.  It does not need to be destroyed.  ^The
 4589: ** SQLITE_TRANSIENT value means that the content will likely change in
 4590: ** the near future and that SQLite should make its own private copy of
 4591: ** the content before returning.
 4592: **
 4593: ** The typedef is necessary to work around problems in certain
 4594: ** C++ compilers.  See ticket #2191.
 4595: */
 4596: typedef void (*sqlite3_destructor_type)(void*);
 4597: #define SQLITE_STATIC      ((sqlite3_destructor_type)0)
 4598: #define SQLITE_TRANSIENT   ((sqlite3_destructor_type)-1)
 4599: 
 4600: /*
 4601: ** CAPI3REF: Setting The Result Of An SQL Function
 4602: **
 4603: ** These routines are used by the xFunc or xFinal callbacks that
 4604: ** implement SQL functions and aggregates.  See
 4605: ** [sqlite3_create_function()] and [sqlite3_create_function16()]
 4606: ** for additional information.
 4607: **
 4608: ** These functions work very much like the [parameter binding] family of
 4609: ** functions used to bind values to host parameters in prepared statements.
 4610: ** Refer to the [SQL parameter] documentation for additional information.
 4611: **
 4612: ** ^The sqlite3_result_blob() interface sets the result from
 4613: ** an application-defined function to be the BLOB whose content is pointed
 4614: ** to by the second parameter and which is N bytes long where N is the
 4615: ** third parameter.
 4616: **
 4617: ** ^The sqlite3_result_zeroblob() interfaces set the result of
 4618: ** the application-defined function to be a BLOB containing all zero
 4619: ** bytes and N bytes in size, where N is the value of the 2nd parameter.
 4620: **
 4621: ** ^The sqlite3_result_double() interface sets the result from
 4622: ** an application-defined function to be a floating point value specified
 4623: ** by its 2nd argument.
 4624: **
 4625: ** ^The sqlite3_result_error() and sqlite3_result_error16() functions
 4626: ** cause the implemented SQL function to throw an exception.
 4627: ** ^SQLite uses the string pointed to by the
 4628: ** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16()
 4629: ** as the text of an error message.  ^SQLite interprets the error
 4630: ** message string from sqlite3_result_error() as UTF-8. ^SQLite
 4631: ** interprets the string from sqlite3_result_error16() as UTF-16 in native
 4632: ** byte order.  ^If the third parameter to sqlite3_result_error()
 4633: ** or sqlite3_result_error16() is negative then SQLite takes as the error
 4634: ** message all text up through the first zero character.
 4635: ** ^If the third parameter to sqlite3_result_error() or
 4636: ** sqlite3_result_error16() is non-negative then SQLite takes that many
 4637: ** bytes (not characters) from the 2nd parameter as the error message.
 4638: ** ^The sqlite3_result_error() and sqlite3_result_error16()
 4639: ** routines make a private copy of the error message text before
 4640: ** they return.  Hence, the calling function can deallocate or
 4641: ** modify the text after they return without harm.
 4642: ** ^The sqlite3_result_error_code() function changes the error code
 4643: ** returned by SQLite as a result of an error in a function.  ^By default,
 4644: ** the error code is SQLITE_ERROR.  ^A subsequent call to sqlite3_result_error()
 4645: ** or sqlite3_result_error16() resets the error code to SQLITE_ERROR.
 4646: **
 4647: ** ^The sqlite3_result_toobig() interface causes SQLite to throw an error
 4648: ** indicating that a string or BLOB is too long to represent.
 4649: **
 4650: ** ^The sqlite3_result_nomem() interface causes SQLite to throw an error
 4651: ** indicating that a memory allocation failed.
 4652: **
 4653: ** ^The sqlite3_result_int() interface sets the return value
 4654: ** of the application-defined function to be the 32-bit signed integer
 4655: ** value given in the 2nd argument.
 4656: ** ^The sqlite3_result_int64() interface sets the return value
 4657: ** of the application-defined function to be the 64-bit signed integer
 4658: ** value given in the 2nd argument.
 4659: **
 4660: ** ^The sqlite3_result_null() interface sets the return value
 4661: ** of the application-defined function to be NULL.
 4662: **
 4663: ** ^The sqlite3_result_text(), sqlite3_result_text16(),
 4664: ** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces
 4665: ** set the return value of the application-defined function to be
 4666: ** a text string which is represented as UTF-8, UTF-16 native byte order,
 4667: ** UTF-16 little endian, or UTF-16 big endian, respectively.
 4668: ** ^SQLite takes the text result from the application from
 4669: ** the 2nd parameter of the sqlite3_result_text* interfaces.
 4670: ** ^If the 3rd parameter to the sqlite3_result_text* interfaces
 4671: ** is negative, then SQLite takes result text from the 2nd parameter
 4672: ** through the first zero character.
 4673: ** ^If the 3rd parameter to the sqlite3_result_text* interfaces
 4674: ** is non-negative, then as many bytes (not characters) of the text
 4675: ** pointed to by the 2nd parameter are taken as the application-defined
 4676: ** function result.  If the 3rd parameter is non-negative, then it
 4677: ** must be the byte offset into the string where the NUL terminator would
 4678: ** appear if the string where NUL terminated.  If any NUL characters occur
 4679: ** in the string at a byte offset that is less than the value of the 3rd
 4680: ** parameter, then the resulting string will contain embedded NULs and the
 4681: ** result of expressions operating on strings with embedded NULs is undefined.
 4682: ** ^If the 4th parameter to the sqlite3_result_text* interfaces
 4683: ** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that
 4684: ** function as the destructor on the text or BLOB result when it has
 4685: ** finished using that result.
 4686: ** ^If the 4th parameter to the sqlite3_result_text* interfaces or to
 4687: ** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite
 4688: ** assumes that the text or BLOB result is in constant space and does not
 4689: ** copy the content of the parameter nor call a destructor on the content
 4690: ** when it has finished using that result.
 4691: ** ^If the 4th parameter to the sqlite3_result_text* interfaces
 4692: ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT
 4693: ** then SQLite makes a copy of the result into space obtained from
 4694: ** from [sqlite3_malloc()] before it returns.
 4695: **
 4696: ** ^The sqlite3_result_value() interface sets the result of
 4697: ** the application-defined function to be a copy the
 4698: ** [unprotected sqlite3_value] object specified by the 2nd parameter.  ^The
 4699: ** sqlite3_result_value() interface makes a copy of the [sqlite3_value]
 4700: ** so that the [sqlite3_value] specified in the parameter may change or
 4701: ** be deallocated after sqlite3_result_value() returns without harm.
 4702: ** ^A [protected sqlite3_value] object may always be used where an
 4703: ** [unprotected sqlite3_value] object is required, so either
 4704: ** kind of [sqlite3_value] object can be used with this interface.
 4705: **
 4706: ** If these routines are called from within the different thread
 4707: ** than the one containing the application-defined function that received
 4708: ** the [sqlite3_context] pointer, the results are undefined.
 4709: */
 4710: SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
 4711: SQLITE_API void sqlite3_result_double(sqlite3_context*, double);
 4712: SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int);
 4713: SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int);
 4714: SQLITE_API void sqlite3_result_error_toobig(sqlite3_context*);
 4715: SQLITE_API void sqlite3_result_error_nomem(sqlite3_context*);
 4716: SQLITE_API void sqlite3_result_error_code(sqlite3_context*, int);
 4717: SQLITE_API void sqlite3_result_int(sqlite3_context*, int);
 4718: SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
 4719: SQLITE_API void sqlite3_result_null(sqlite3_context*);
 4720: SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
 4721: SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
 4722: SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
 4723: SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
 4724: SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*);
 4725: SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n);
 4726: 
 4727: /*
 4728: ** CAPI3REF: Define New Collating Sequences
 4729: **
 4730: ** ^These functions add, remove, or modify a [collation] associated
 4731: ** with the [database connection] specified as the first argument.
 4732: **
 4733: ** ^The name of the collation is a UTF-8 string
 4734: ** for sqlite3_create_collation() and sqlite3_create_collation_v2()
 4735: ** and a UTF-16 string in native byte order for sqlite3_create_collation16().
 4736: ** ^Collation names that compare equal according to [sqlite3_strnicmp()] are
 4737: ** considered to be the same name.
 4738: **
 4739: ** ^(The third argument (eTextRep) must be one of the constants:
 4740: ** <ul>
 4741: ** <li> [SQLITE_UTF8],
 4742: ** <li> [SQLITE_UTF16LE],
 4743: ** <li> [SQLITE_UTF16BE],
 4744: ** <li> [SQLITE_UTF16], or
 4745: ** <li> [SQLITE_UTF16_ALIGNED].
 4746: ** </ul>)^
 4747: ** ^The eTextRep argument determines the encoding of strings passed
 4748: ** to the collating function callback, xCallback.
 4749: ** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep
 4750: ** force strings to be UTF16 with native byte order.
 4751: ** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin
 4752: ** on an even byte address.
 4753: **
 4754: ** ^The fourth argument, pArg, is an application data pointer that is passed
 4755: ** through as the first argument to the collating function callback.
 4756: **
 4757: ** ^The fifth argument, xCallback, is a pointer to the collating function.
 4758: ** ^Multiple collating functions can be registered using the same name but
 4759: ** with different eTextRep parameters and SQLite will use whichever
 4760: ** function requires the least amount of data transformation.
 4761: ** ^If the xCallback argument is NULL then the collating function is
 4762: ** deleted.  ^When all collating functions having the same name are deleted,
 4763: ** that collation is no longer usable.
 4764: **
 4765: ** ^The collating function callback is invoked with a copy of the pArg 
 4766: ** application data pointer and with two strings in the encoding specified
 4767: ** by the eTextRep argument.  The collating function must return an
 4768: ** integer that is negative, zero, or positive
 4769: ** if the first string is less than, equal to, or greater than the second,
 4770: ** respectively.  A collating function must always return the same answer
 4771: ** given the same inputs.  If two or more collating functions are registered
 4772: ** to the same collation name (using different eTextRep values) then all
 4773: ** must give an equivalent answer when invoked with equivalent strings.
 4774: ** The collating function must obey the following properties for all
 4775: ** strings A, B, and C:
 4776: **
 4777: ** <ol>
 4778: ** <li> If A==B then B==A.
 4779: ** <li> If A==B and B==C then A==C.
 4780: ** <li> If A&lt;B THEN B&gt;A.
 4781: ** <li> If A&lt;B and B&lt;C then A&lt;C.
 4782: ** </ol>
 4783: **
 4784: ** If a collating function fails any of the above constraints and that
 4785: ** collating function is  registered and used, then the behavior of SQLite
 4786: ** is undefined.
 4787: **
 4788: ** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation()
 4789: ** with the addition that the xDestroy callback is invoked on pArg when
 4790: ** the collating function is deleted.
 4791: ** ^Collating functions are deleted when they are overridden by later
 4792: ** calls to the collation creation functions or when the
 4793: ** [database connection] is closed using [sqlite3_close()].
 4794: **
 4795: ** ^The xDestroy callback is <u>not</u> called if the 
 4796: ** sqlite3_create_collation_v2() function fails.  Applications that invoke
 4797: ** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should 
 4798: ** check the return code and dispose of the application data pointer
 4799: ** themselves rather than expecting SQLite to deal with it for them.
 4800: ** This is different from every other SQLite interface.  The inconsistency 
 4801: ** is unfortunate but cannot be changed without breaking backwards 
 4802: ** compatibility.
 4803: **
 4804: ** See also:  [sqlite3_collation_needed()] and [sqlite3_collation_needed16()].
 4805: */
 4806: SQLITE_API int sqlite3_create_collation(
 4807:   sqlite3*, 
 4808:   const char *zName, 
 4809:   int eTextRep, 
 4810:   void *pArg,
 4811:   int(*xCompare)(void*,int,const void*,int,const void*)
 4812: );
 4813: SQLITE_API int sqlite3_create_collation_v2(
 4814:   sqlite3*, 
 4815:   const char *zName, 
 4816:   int eTextRep, 
 4817:   void *pArg,
 4818:   int(*xCompare)(void*,int,const void*,int,const void*),
 4819:   void(*xDestroy)(void*)
 4820: );
 4821: SQLITE_API int sqlite3_create_collation16(
 4822:   sqlite3*, 
 4823:   const void *zName,
 4824:   int eTextRep, 
 4825:   void *pArg,
 4826:   int(*xCompare)(void*,int,const void*,int,const void*)
 4827: );
 4828: 
 4829: /*
 4830: ** CAPI3REF: Collation Needed Callbacks
 4831: **
 4832: ** ^To avoid having to register all collation sequences before a database
 4833: ** can be used, a single callback function may be registered with the
 4834: ** [database connection] to be invoked whenever an undefined collation
 4835: ** sequence is required.
 4836: **
 4837: ** ^If the function is registered using the sqlite3_collation_needed() API,
 4838: ** then it is passed the names of undefined collation sequences as strings
 4839: ** encoded in UTF-8. ^If sqlite3_collation_needed16() is used,
 4840: ** the names are passed as UTF-16 in machine native byte order.
 4841: ** ^A call to either function replaces the existing collation-needed callback.
 4842: **
 4843: ** ^(When the callback is invoked, the first argument passed is a copy
 4844: ** of the second argument to sqlite3_collation_needed() or
 4845: ** sqlite3_collation_needed16().  The second argument is the database
 4846: ** connection.  The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE],
 4847: ** or [SQLITE_UTF16LE], indicating the most desirable form of the collation
 4848: ** sequence function required.  The fourth parameter is the name of the
 4849: ** required collation sequence.)^
 4850: **
 4851: ** The callback function should register the desired collation using
 4852: ** [sqlite3_create_collation()], [sqlite3_create_collation16()], or
 4853: ** [sqlite3_create_collation_v2()].
 4854: */
 4855: SQLITE_API int sqlite3_collation_needed(
 4856:   sqlite3*, 
 4857:   void*, 
 4858:   void(*)(void*,sqlite3*,int eTextRep,const char*)
 4859: );
 4860: SQLITE_API int sqlite3_collation_needed16(
 4861:   sqlite3*, 
 4862:   void*,
 4863:   void(*)(void*,sqlite3*,int eTextRep,const void*)
 4864: );
 4865: 
 4866: #ifdef SQLITE_HAS_CODEC
 4867: /*
 4868: ** Specify the key for an encrypted database.  This routine should be
 4869: ** called right after sqlite3_open().
 4870: **
 4871: ** The code to implement this API is not available in the public release
 4872: ** of SQLite.
 4873: */
 4874: SQLITE_API int sqlite3_key(
 4875:   sqlite3 *db,                   /* Database to be rekeyed */
 4876:   const void *pKey, int nKey     /* The key */
 4877: );
 4878: 
 4879: /*
 4880: ** Change the key on an open database.  If the current database is not
 4881: ** encrypted, this routine will encrypt it.  If pNew==0 or nNew==0, the
 4882: ** database is decrypted.
 4883: **
 4884: ** The code to implement this API is not available in the public release
 4885: ** of SQLite.
 4886: */
 4887: SQLITE_API int sqlite3_rekey(
 4888:   sqlite3 *db,                   /* Database to be rekeyed */
 4889:   const void *pKey, int nKey     /* The new key */
 4890: );
 4891: 
 4892: /*
 4893: ** Specify the activation key for a SEE database.  Unless 
 4894: ** activated, none of the SEE routines will work.
 4895: */
 4896: SQLITE_API void sqlite3_activate_see(
 4897:   const char *zPassPhrase        /* Activation phrase */
 4898: );
 4899: #endif
 4900: 
 4901: #ifdef SQLITE_ENABLE_CEROD
 4902: /*
 4903: ** Specify the activation key for a CEROD database.  Unless 
 4904: ** activated, none of the CEROD routines will work.
 4905: */
 4906: SQLITE_API void sqlite3_activate_cerod(
 4907:   const char *zPassPhrase        /* Activation phrase */
 4908: );
 4909: #endif
 4910: 
 4911: /*
 4912: ** CAPI3REF: Suspend Execution For A Short Time
 4913: **
 4914: ** The sqlite3_sleep() function causes the current thread to suspend execution
 4915: ** for at least a number of milliseconds specified in its parameter.
 4916: **
 4917: ** If the operating system does not support sleep requests with
 4918: ** millisecond time resolution, then the time will be rounded up to
 4919: ** the nearest second. The number of milliseconds of sleep actually
 4920: ** requested from the operating system is returned.
 4921: **
 4922: ** ^SQLite implements this interface by calling the xSleep()
 4923: ** method of the default [sqlite3_vfs] object.  If the xSleep() method
 4924: ** of the default VFS is not implemented correctly, or not implemented at
 4925: ** all, then the behavior of sqlite3_sleep() may deviate from the description
 4926: ** in the previous paragraphs.
 4927: */
 4928: SQLITE_API int sqlite3_sleep(int);
 4929: 
 4930: /*
 4931: ** CAPI3REF: Name Of The Folder Holding Temporary Files
 4932: **
 4933: ** ^(If this global variable is made to point to a string which is
 4934: ** the name of a folder (a.k.a. directory), then all temporary files
 4935: ** created by SQLite when using a built-in [sqlite3_vfs | VFS]
 4936: ** will be placed in that directory.)^  ^If this variable
 4937: ** is a NULL pointer, then SQLite performs a search for an appropriate
 4938: ** temporary file directory.
 4939: **
 4940: ** It is not safe to read or modify this variable in more than one
 4941: ** thread at a time.  It is not safe to read or modify this variable
 4942: ** if a [database connection] is being used at the same time in a separate
 4943: ** thread.
 4944: ** It is intended that this variable be set once
 4945: ** as part of process initialization and before any SQLite interface
 4946: ** routines have been called and that this variable remain unchanged
 4947: ** thereafter.
 4948: **
 4949: ** ^The [temp_store_directory pragma] may modify this variable and cause
 4950: ** it to point to memory obtained from [sqlite3_malloc].  ^Furthermore,
 4951: ** the [temp_store_directory pragma] always assumes that any string
 4952: ** that this variable points to is held in memory obtained from 
 4953: ** [sqlite3_malloc] and the pragma may attempt to free that memory
 4954: ** using [sqlite3_free].
 4955: ** Hence, if this variable is modified directly, either it should be
 4956: ** made NULL or made to point to memory obtained from [sqlite3_malloc]
 4957: ** or else the use of the [temp_store_directory pragma] should be avoided.
 4958: */
 4959: SQLITE_API char *sqlite3_temp_directory;
 4960: 
 4961: /*
 4962: ** CAPI3REF: Test For Auto-Commit Mode
 4963: ** KEYWORDS: {autocommit mode}
 4964: **
 4965: ** ^The sqlite3_get_autocommit() interface returns non-zero or
 4966: ** zero if the given database connection is or is not in autocommit mode,
 4967: ** respectively.  ^Autocommit mode is on by default.
 4968: ** ^Autocommit mode is disabled by a [BEGIN] statement.
 4969: ** ^Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK].
 4970: **
 4971: ** If certain kinds of errors occur on a statement within a multi-statement
 4972: ** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR],
 4973: ** [SQLITE_NOMEM], [SQLITE_BUSY], and [SQLITE_INTERRUPT]) then the
 4974: ** transaction might be rolled back automatically.  The only way to
 4975: ** find out whether SQLite automatically rolled back the transaction after
 4976: ** an error is to use this function.
 4977: **
 4978: ** If another thread changes the autocommit status of the database
 4979: ** connection while this routine is running, then the return value
 4980: ** is undefined.
 4981: */
 4982: SQLITE_API int sqlite3_get_autocommit(sqlite3*);
 4983: 
 4984: /*
 4985: ** CAPI3REF: Find The Database Handle Of A Prepared Statement
 4986: **
 4987: ** ^The sqlite3_db_handle interface returns the [database connection] handle
 4988: ** to which a [prepared statement] belongs.  ^The [database connection]
 4989: ** returned by sqlite3_db_handle is the same [database connection]
 4990: ** that was the first argument
 4991: ** to the [sqlite3_prepare_v2()] call (or its variants) that was used to
 4992: ** create the statement in the first place.
 4993: */
 4994: SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
 4995: 
 4996: /*
 4997: ** CAPI3REF: Return The Filename For A Database Connection
 4998: **
 4999: ** ^The sqlite3_db_filename(D,N) interface returns a pointer to a filename
 5000: ** associated with database N of connection D.  ^The main database file
 5001: ** has the name "main".  If there is no attached database N on the database
 5002: ** connection D, or if database N is a temporary or in-memory database, then
 5003: ** a NULL pointer is returned.
 5004: **
 5005: ** ^The filename returned by this function is the output of the
 5006: ** xFullPathname method of the [VFS].  ^In other words, the filename
 5007: ** will be an absolute pathname, even if the filename used
 5008: ** to open the database originally was a URI or relative pathname.
 5009: */
 5010: SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName);
 5011: 
 5012: /*
 5013: ** CAPI3REF: Find the next prepared statement
 5014: **
 5015: ** ^This interface returns a pointer to the next [prepared statement] after
 5016: ** pStmt associated with the [database connection] pDb.  ^If pStmt is NULL
 5017: ** then this interface returns a pointer to the first prepared statement
 5018: ** associated with the database connection pDb.  ^If no prepared statement
 5019: ** satisfies the conditions of this routine, it returns NULL.
 5020: **
 5021: ** The [database connection] pointer D in a call to
 5022: ** [sqlite3_next_stmt(D,S)] must refer to an open database
 5023: ** connection and in particular must not be a NULL pointer.
 5024: */
 5025: SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt);
 5026: 
 5027: /*
 5028: ** CAPI3REF: Commit And Rollback Notification Callbacks
 5029: **
 5030: ** ^The sqlite3_commit_hook() interface registers a callback
 5031: ** function to be invoked whenever a transaction is [COMMIT | committed].
 5032: ** ^Any callback set by a previous call to sqlite3_commit_hook()
 5033: ** for the same database connection is overridden.
 5034: ** ^The sqlite3_rollback_hook() interface registers a callback
 5035: ** function to be invoked whenever a transaction is [ROLLBACK | rolled back].
 5036: ** ^Any callback set by a previous call to sqlite3_rollback_hook()
 5037: ** for the same database connection is overridden.
 5038: ** ^The pArg argument is passed through to the callback.
 5039: ** ^If the callback on a commit hook function returns non-zero,
 5040: ** then the commit is converted into a rollback.
 5041: **
 5042: ** ^The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions
 5043: ** return the P argument from the previous call of the same function
 5044: ** on the same [database connection] D, or NULL for
 5045: ** the first call for each function on D.
 5046: **
 5047: ** The commit and rollback hook callbacks are not reentrant.
 5048: ** The callback implementation must not do anything that will modify
 5049: ** the database connection that invoked the callback.  Any actions
 5050: ** to modify the database connection must be deferred until after the
 5051: ** completion of the [sqlite3_step()] call that triggered the commit
 5052: ** or rollback hook in the first place.
 5053: ** Note that running any other SQL statements, including SELECT statements,
 5054: ** or merely calling [sqlite3_prepare_v2()] and [sqlite3_step()] will modify
 5055: ** the database connections for the meaning of "modify" in this paragraph.
 5056: **
 5057: ** ^Registering a NULL function disables the callback.
 5058: **
 5059: ** ^When the commit hook callback routine returns zero, the [COMMIT]
 5060: ** operation is allowed to continue normally.  ^If the commit hook
 5061: ** returns non-zero, then the [COMMIT] is converted into a [ROLLBACK].
 5062: ** ^The rollback hook is invoked on a rollback that results from a commit
 5063: ** hook returning non-zero, just as it would be with any other rollback.
 5064: **
 5065: ** ^For the purposes of this API, a transaction is said to have been
 5066: ** rolled back if an explicit "ROLLBACK" statement is executed, or
 5067: ** an error or constraint causes an implicit rollback to occur.
 5068: ** ^The rollback callback is not invoked if a transaction is
 5069: ** automatically rolled back because the database connection is closed.
 5070: **
 5071: ** See also the [sqlite3_update_hook()] interface.
 5072: */
 5073: SQLITE_API void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
 5074: SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
 5075: 
 5076: /*
 5077: ** CAPI3REF: Data Change Notification Callbacks
 5078: **
 5079: ** ^The sqlite3_update_hook() interface registers a callback function
 5080: ** with the [database connection] identified by the first argument
 5081: ** to be invoked whenever a row is updated, inserted or deleted.
 5082: ** ^Any callback set by a previous call to this function
 5083: ** for the same database connection is overridden.
 5084: **
 5085: ** ^The second argument is a pointer to the function to invoke when a
 5086: ** row is updated, inserted or deleted.
 5087: ** ^The first argument to the callback is a copy of the third argument
 5088: ** to sqlite3_update_hook().
 5089: ** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE],
 5090: ** or [SQLITE_UPDATE], depending on the operation that caused the callback
 5091: ** to be invoked.
 5092: ** ^The third and fourth arguments to the callback contain pointers to the
 5093: ** database and table name containing the affected row.
 5094: ** ^The final callback parameter is the [rowid] of the row.
 5095: ** ^In the case of an update, this is the [rowid] after the update takes place.
 5096: **
 5097: ** ^(The update hook is not invoked when internal system tables are
 5098: ** modified (i.e. sqlite_master and sqlite_sequence).)^
 5099: **
 5100: ** ^In the current implementation, the update hook
 5101: ** is not invoked when duplication rows are deleted because of an
 5102: ** [ON CONFLICT | ON CONFLICT REPLACE] clause.  ^Nor is the update hook
 5103: ** invoked when rows are deleted using the [truncate optimization].
 5104: ** The exceptions defined in this paragraph might change in a future
 5105: ** release of SQLite.
 5106: **
 5107: ** The update hook implementation must not do anything that will modify
 5108: ** the database connection that invoked the update hook.  Any actions
 5109: ** to modify the database connection must be deferred until after the
 5110: ** completion of the [sqlite3_step()] call that triggered the update hook.
 5111: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
 5112: ** database connections for the meaning of "modify" in this paragraph.
 5113: **
 5114: ** ^The sqlite3_update_hook(D,C,P) function
 5115: ** returns the P argument from the previous call
 5116: ** on the same [database connection] D, or NULL for
 5117: ** the first call on D.
 5118: **
 5119: ** See also the [sqlite3_commit_hook()] and [sqlite3_rollback_hook()]
 5120: ** interfaces.
 5121: */
 5122: SQLITE_API void *sqlite3_update_hook(
 5123:   sqlite3*, 
 5124:   void(*)(void *,int ,char const *,char const *,sqlite3_int64),
 5125:   void*
 5126: );
 5127: 
 5128: /*
 5129: ** CAPI3REF: Enable Or Disable Shared Pager Cache
 5130: ** KEYWORDS: {shared cache}
 5131: **
 5132: ** ^(This routine enables or disables the sharing of the database cache
 5133: ** and schema data structures between [database connection | connections]
 5134: ** to the same database. Sharing is enabled if the argument is true
 5135: ** and disabled if the argument is false.)^
 5136: **
 5137: ** ^Cache sharing is enabled and disabled for an entire process.
 5138: ** This is a change as of SQLite version 3.5.0. In prior versions of SQLite,
 5139: ** sharing was enabled or disabled for each thread separately.
 5140: **
 5141: ** ^(The cache sharing mode set by this interface effects all subsequent
 5142: ** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()].
 5143: ** Existing database connections continue use the sharing mode
 5144: ** that was in effect at the time they were opened.)^
 5145: **
 5146: ** ^(This routine returns [SQLITE_OK] if shared cache was enabled or disabled
 5147: ** successfully.  An [error code] is returned otherwise.)^
 5148: **
 5149: ** ^Shared cache is disabled by default. But this might change in
 5150: ** future releases of SQLite.  Applications that care about shared
 5151: ** cache setting should set it explicitly.
 5152: **
 5153: ** See Also:  [SQLite Shared-Cache Mode]
 5154: */
 5155: SQLITE_API int sqlite3_enable_shared_cache(int);
 5156: 
 5157: /*
 5158: ** CAPI3REF: Attempt To Free Heap Memory
 5159: **
 5160: ** ^The sqlite3_release_memory() interface attempts to free N bytes
 5161: ** of heap memory by deallocating non-essential memory allocations
 5162: ** held by the database library.   Memory used to cache database
 5163: ** pages to improve performance is an example of non-essential memory.
 5164: ** ^sqlite3_release_memory() returns the number of bytes actually freed,
 5165: ** which might be more or less than the amount requested.
 5166: ** ^The sqlite3_release_memory() routine is a no-op returning zero
 5167: ** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT].
 5168: **
 5169: ** See also: [sqlite3_db_release_memory()]
 5170: */
 5171: SQLITE_API int sqlite3_release_memory(int);
 5172: 
 5173: /*
 5174: ** CAPI3REF: Free Memory Used By A Database Connection
 5175: **
 5176: ** ^The sqlite3_db_release_memory(D) interface attempts to free as much heap
 5177: ** memory as possible from database connection D. Unlike the
 5178: ** [sqlite3_release_memory()] interface, this interface is effect even
 5179: ** when then [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is
 5180: ** omitted.
 5181: **
 5182: ** See also: [sqlite3_release_memory()]
 5183: */
 5184: SQLITE_API int sqlite3_db_release_memory(sqlite3*);
 5185: 
 5186: /*
 5187: ** CAPI3REF: Impose A Limit On Heap Size
 5188: **
 5189: ** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the
 5190: ** soft limit on the amount of heap memory that may be allocated by SQLite.
 5191: ** ^SQLite strives to keep heap memory utilization below the soft heap
 5192: ** limit by reducing the number of pages held in the page cache
 5193: ** as heap memory usages approaches the limit.
 5194: ** ^The soft heap limit is "soft" because even though SQLite strives to stay
 5195: ** below the limit, it will exceed the limit rather than generate
 5196: ** an [SQLITE_NOMEM] error.  In other words, the soft heap limit 
 5197: ** is advisory only.
 5198: **
 5199: ** ^The return value from sqlite3_soft_heap_limit64() is the size of
 5200: ** the soft heap limit prior to the call, or negative in the case of an
 5201: ** error.  ^If the argument N is negative
 5202: ** then no change is made to the soft heap limit.  Hence, the current
 5203: ** size of the soft heap limit can be determined by invoking
 5204: ** sqlite3_soft_heap_limit64() with a negative argument.
 5205: **
 5206: ** ^If the argument N is zero then the soft heap limit is disabled.
 5207: **
 5208: ** ^(The soft heap limit is not enforced in the current implementation
 5209: ** if one or more of following conditions are true:
 5210: **
 5211: ** <ul>
 5212: ** <li> The soft heap limit is set to zero.
 5213: ** <li> Memory accounting is disabled using a combination of the
 5214: **      [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and
 5215: **      the [SQLITE_DEFAULT_MEMSTATUS] compile-time option.
 5216: ** <li> An alternative page cache implementation is specified using
 5217: **      [sqlite3_config]([SQLITE_CONFIG_PCACHE2],...).
 5218: ** <li> The page cache allocates from its own memory pool supplied
 5219: **      by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than
 5220: **      from the heap.
 5221: ** </ul>)^
 5222: **
 5223: ** Beginning with SQLite version 3.7.3, the soft heap limit is enforced
 5224: ** regardless of whether or not the [SQLITE_ENABLE_MEMORY_MANAGEMENT]
 5225: ** compile-time option is invoked.  With [SQLITE_ENABLE_MEMORY_MANAGEMENT],
 5226: ** the soft heap limit is enforced on every memory allocation.  Without
 5227: ** [SQLITE_ENABLE_MEMORY_MANAGEMENT], the soft heap limit is only enforced
 5228: ** when memory is allocated by the page cache.  Testing suggests that because
 5229: ** the page cache is the predominate memory user in SQLite, most
 5230: ** applications will achieve adequate soft heap limit enforcement without
 5231: ** the use of [SQLITE_ENABLE_MEMORY_MANAGEMENT].
 5232: **
 5233: ** The circumstances under which SQLite will enforce the soft heap limit may
 5234: ** changes in future releases of SQLite.
 5235: */
 5236: SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
 5237: 
 5238: /*
 5239: ** CAPI3REF: Deprecated Soft Heap Limit Interface
 5240: ** DEPRECATED
 5241: **
 5242: ** This is a deprecated version of the [sqlite3_soft_heap_limit64()]
 5243: ** interface.  This routine is provided for historical compatibility
 5244: ** only.  All new applications should use the
 5245: ** [sqlite3_soft_heap_limit64()] interface rather than this one.
 5246: */
 5247: SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
 5248: 
 5249: 
 5250: /*
 5251: ** CAPI3REF: Extract Metadata About A Column Of A Table
 5252: **
 5253: ** ^This routine returns metadata about a specific column of a specific
 5254: ** database table accessible using the [database connection] handle
 5255: ** passed as the first function argument.
 5256: **
 5257: ** ^The column is identified by the second, third and fourth parameters to
 5258: ** this function. ^The second parameter is either the name of the database
 5259: ** (i.e. "main", "temp", or an attached database) containing the specified
 5260: ** table or NULL. ^If it is NULL, then all attached databases are searched
 5261: ** for the table using the same algorithm used by the database engine to
 5262: ** resolve unqualified table references.
 5263: **
 5264: ** ^The third and fourth parameters to this function are the table and column
 5265: ** name of the desired column, respectively. Neither of these parameters
 5266: ** may be NULL.
 5267: **
 5268: ** ^Metadata is returned by writing to the memory locations passed as the 5th
 5269: ** and subsequent parameters to this function. ^Any of these arguments may be
 5270: ** NULL, in which case the corresponding element of metadata is omitted.
 5271: **
 5272: ** ^(<blockquote>
 5273: ** <table border="1">
 5274: ** <tr><th> Parameter <th> Output<br>Type <th>  Description
 5275: **
 5276: ** <tr><td> 5th <td> const char* <td> Data type
 5277: ** <tr><td> 6th <td> const char* <td> Name of default collation sequence
 5278: ** <tr><td> 7th <td> int         <td> True if column has a NOT NULL constraint
 5279: ** <tr><td> 8th <td> int         <td> True if column is part of the PRIMARY KEY
 5280: ** <tr><td> 9th <td> int         <td> True if column is [AUTOINCREMENT]
 5281: ** </table>
 5282: ** </blockquote>)^
 5283: **
 5284: ** ^The memory pointed to by the character pointers returned for the
 5285: ** declaration type and collation sequence is valid only until the next
 5286: ** call to any SQLite API function.
 5287: **
 5288: ** ^If the specified table is actually a view, an [error code] is returned.
 5289: **
 5290: ** ^If the specified column is "rowid", "oid" or "_rowid_" and an
 5291: ** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output
 5292: ** parameters are set for the explicitly declared column. ^(If there is no
 5293: ** explicitly declared [INTEGER PRIMARY KEY] column, then the output
 5294: ** parameters are set as follows:
 5295: **
 5296: ** <pre>
 5297: **     data type: "INTEGER"
 5298: **     collation sequence: "BINARY"
 5299: **     not null: 0
 5300: **     primary key: 1
 5301: **     auto increment: 0
 5302: ** </pre>)^
 5303: **
 5304: ** ^(This function may load one or more schemas from database files. If an
 5305: ** error occurs during this process, or if the requested table or column
 5306: ** cannot be found, an [error code] is returned and an error message left
 5307: ** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^
 5308: **
 5309: ** ^This API is only available if the library was compiled with the
 5310: ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined.
 5311: */
 5312: SQLITE_API int sqlite3_table_column_metadata(
 5313:   sqlite3 *db,                /* Connection handle */
 5314:   const char *zDbName,        /* Database name or NULL */
 5315:   const char *zTableName,     /* Table name */
 5316:   const char *zColumnName,    /* Column name */
 5317:   char const **pzDataType,    /* OUTPUT: Declared data type */
 5318:   char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
 5319:   int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
 5320:   int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
 5321:   int *pAutoinc               /* OUTPUT: True if column is auto-increment */
 5322: );
 5323: 
 5324: /*
 5325: ** CAPI3REF: Load An Extension
 5326: **
 5327: ** ^This interface loads an SQLite extension library from the named file.
 5328: **
 5329: ** ^The sqlite3_load_extension() interface attempts to load an
 5330: ** SQLite extension library contained in the file zFile.
 5331: **
 5332: ** ^The entry point is zProc.
 5333: ** ^zProc may be 0, in which case the name of the entry point
 5334: ** defaults to "sqlite3_extension_init".
 5335: ** ^The sqlite3_load_extension() interface returns
 5336: ** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong.
 5337: ** ^If an error occurs and pzErrMsg is not 0, then the
 5338: ** [sqlite3_load_extension()] interface shall attempt to
 5339: ** fill *pzErrMsg with error message text stored in memory
 5340: ** obtained from [sqlite3_malloc()]. The calling function
 5341: ** should free this memory by calling [sqlite3_free()].
 5342: **
 5343: ** ^Extension loading must be enabled using
 5344: ** [sqlite3_enable_load_extension()] prior to calling this API,
 5345: ** otherwise an error will be returned.
 5346: **
 5347: ** See also the [load_extension() SQL function].
 5348: */
 5349: SQLITE_API int sqlite3_load_extension(
 5350:   sqlite3 *db,          /* Load the extension into this database connection */
 5351:   const char *zFile,    /* Name of the shared library containing extension */
 5352:   const char *zProc,    /* Entry point.  Derived from zFile if 0 */
 5353:   char **pzErrMsg       /* Put error message here if not 0 */
 5354: );
 5355: 
 5356: /*
 5357: ** CAPI3REF: Enable Or Disable Extension Loading
 5358: **
 5359: ** ^So as not to open security holes in older applications that are
 5360: ** unprepared to deal with extension loading, and as a means of disabling
 5361: ** extension loading while evaluating user-entered SQL, the following API
 5362: ** is provided to turn the [sqlite3_load_extension()] mechanism on and off.
 5363: **
 5364: ** ^Extension loading is off by default. See ticket #1863.
 5365: ** ^Call the sqlite3_enable_load_extension() routine with onoff==1
 5366: ** to turn extension loading on and call it with onoff==0 to turn
 5367: ** it back off again.
 5368: */
 5369: SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff);
 5370: 
 5371: /*
 5372: ** CAPI3REF: Automatically Load Statically Linked Extensions
 5373: **
 5374: ** ^This interface causes the xEntryPoint() function to be invoked for
 5375: ** each new [database connection] that is created.  The idea here is that
 5376: ** xEntryPoint() is the entry point for a statically linked SQLite extension
 5377: ** that is to be automatically loaded into all new database connections.
 5378: **
 5379: ** ^(Even though the function prototype shows that xEntryPoint() takes
 5380: ** no arguments and returns void, SQLite invokes xEntryPoint() with three
 5381: ** arguments and expects and integer result as if the signature of the
 5382: ** entry point where as follows:
 5383: **
 5384: ** <blockquote><pre>
 5385: ** &nbsp;  int xEntryPoint(
 5386: ** &nbsp;    sqlite3 *db,
 5387: ** &nbsp;    const char **pzErrMsg,
 5388: ** &nbsp;    const struct sqlite3_api_routines *pThunk
 5389: ** &nbsp;  );
 5390: ** </pre></blockquote>)^
 5391: **
 5392: ** If the xEntryPoint routine encounters an error, it should make *pzErrMsg
 5393: ** point to an appropriate error message (obtained from [sqlite3_mprintf()])
 5394: ** and return an appropriate [error code].  ^SQLite ensures that *pzErrMsg
 5395: ** is NULL before calling the xEntryPoint().  ^SQLite will invoke
 5396: ** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns.  ^If any
 5397: ** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()],
 5398: ** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail.
 5399: **
 5400: ** ^Calling sqlite3_auto_extension(X) with an entry point X that is already
 5401: ** on the list of automatic extensions is a harmless no-op. ^No entry point
 5402: ** will be called more than once for each database connection that is opened.
 5403: **
 5404: ** See also: [sqlite3_reset_auto_extension()].
 5405: */
 5406: SQLITE_API int sqlite3_auto_extension(void (*xEntryPoint)(void));
 5407: 
 5408: /*
 5409: ** CAPI3REF: Reset Automatic Extension Loading
 5410: **
 5411: ** ^This interface disables all automatic extensions previously
 5412: ** registered using [sqlite3_auto_extension()].
 5413: */
 5414: SQLITE_API void sqlite3_reset_auto_extension(void);
 5415: 
 5416: /*
 5417: ** The interface to the virtual-table mechanism is currently considered
 5418: ** to be experimental.  The interface might change in incompatible ways.
 5419: ** If this is a problem for you, do not use the interface at this time.
 5420: **
 5421: ** When the virtual-table mechanism stabilizes, we will declare the
 5422: ** interface fixed, support it indefinitely, and remove this comment.
 5423: */
 5424: 
 5425: /*
 5426: ** Structures used by the virtual table interface
 5427: */
 5428: typedef struct sqlite3_vtab sqlite3_vtab;
 5429: typedef struct sqlite3_index_info sqlite3_index_info;
 5430: typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor;
 5431: typedef struct sqlite3_module sqlite3_module;
 5432: 
 5433: /*
 5434: ** CAPI3REF: Virtual Table Object
 5435: ** KEYWORDS: sqlite3_module {virtual table module}
 5436: **
 5437: ** This structure, sometimes called a "virtual table module", 
 5438: ** defines the implementation of a [virtual tables].  
 5439: ** This structure consists mostly of methods for the module.
 5440: **
 5441: ** ^A virtual table module is created by filling in a persistent
 5442: ** instance of this structure and passing a pointer to that instance
 5443: ** to [sqlite3_create_module()] or [sqlite3_create_module_v2()].
 5444: ** ^The registration remains valid until it is replaced by a different
 5445: ** module or until the [database connection] closes.  The content
 5446: ** of this structure must not change while it is registered with
 5447: ** any database connection.
 5448: */
 5449: struct sqlite3_module {
 5450:   int iVersion;
 5451:   int (*xCreate)(sqlite3*, void *pAux,
 5452:                int argc, const char *const*argv,
 5453:                sqlite3_vtab **ppVTab, char**);
 5454:   int (*xConnect)(sqlite3*, void *pAux,
 5455:                int argc, const char *const*argv,
 5456:                sqlite3_vtab **ppVTab, char**);
 5457:   int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
 5458:   int (*xDisconnect)(sqlite3_vtab *pVTab);
 5459:   int (*xDestroy)(sqlite3_vtab *pVTab);
 5460:   int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
 5461:   int (*xClose)(sqlite3_vtab_cursor*);
 5462:   int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
 5463:                 int argc, sqlite3_value **argv);
 5464:   int (*xNext)(sqlite3_vtab_cursor*);
 5465:   int (*xEof)(sqlite3_vtab_cursor*);
 5466:   int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int);
 5467:   int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid);
 5468:   int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *);
 5469:   int (*xBegin)(sqlite3_vtab *pVTab);
 5470:   int (*xSync)(sqlite3_vtab *pVTab);
 5471:   int (*xCommit)(sqlite3_vtab *pVTab);
 5472:   int (*xRollback)(sqlite3_vtab *pVTab);
 5473:   int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName,
 5474:                        void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
 5475:                        void **ppArg);
 5476:   int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
 5477:   /* The methods above are in version 1 of the sqlite_module object. Those 
 5478:   ** below are for version 2 and greater. */
 5479:   int (*xSavepoint)(sqlite3_vtab *pVTab, int);
 5480:   int (*xRelease)(sqlite3_vtab *pVTab, int);
 5481:   int (*xRollbackTo)(sqlite3_vtab *pVTab, int);
 5482: };
 5483: 
 5484: /*
 5485: ** CAPI3REF: Virtual Table Indexing Information
 5486: ** KEYWORDS: sqlite3_index_info
 5487: **
 5488: ** The sqlite3_index_info structure and its substructures is used as part
 5489: ** of the [virtual table] interface to
 5490: ** pass information into and receive the reply from the [xBestIndex]
 5491: ** method of a [virtual table module].  The fields under **Inputs** are the
 5492: ** inputs to xBestIndex and are read-only.  xBestIndex inserts its
 5493: ** results into the **Outputs** fields.
 5494: **
 5495: ** ^(The aConstraint[] array records WHERE clause constraints of the form:
 5496: **
 5497: ** <blockquote>column OP expr</blockquote>
 5498: **
 5499: ** where OP is =, &lt;, &lt;=, &gt;, or &gt;=.)^  ^(The particular operator is
 5500: ** stored in aConstraint[].op using one of the
 5501: ** [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^
 5502: ** ^(The index of the column is stored in
 5503: ** aConstraint[].iColumn.)^  ^(aConstraint[].usable is TRUE if the
 5504: ** expr on the right-hand side can be evaluated (and thus the constraint
 5505: ** is usable) and false if it cannot.)^
 5506: **
 5507: ** ^The optimizer automatically inverts terms of the form "expr OP column"
 5508: ** and makes other simplifications to the WHERE clause in an attempt to
 5509: ** get as many WHERE clause terms into the form shown above as possible.
 5510: ** ^The aConstraint[] array only reports WHERE clause terms that are
 5511: ** relevant to the particular virtual table being queried.
 5512: **
 5513: ** ^Information about the ORDER BY clause is stored in aOrderBy[].
 5514: ** ^Each term of aOrderBy records a column of the ORDER BY clause.
 5515: **
 5516: ** The [xBestIndex] method must fill aConstraintUsage[] with information
 5517: ** about what parameters to pass to xFilter.  ^If argvIndex>0 then
 5518: ** the right-hand side of the corresponding aConstraint[] is evaluated
 5519: ** and becomes the argvIndex-th entry in argv.  ^(If aConstraintUsage[].omit
 5520: ** is true, then the constraint is assumed to be fully handled by the
 5521: ** virtual table and is not checked again by SQLite.)^
 5522: **
 5523: ** ^The idxNum and idxPtr values are recorded and passed into the
 5524: ** [xFilter] method.
 5525: ** ^[sqlite3_free()] is used to free idxPtr if and only if
 5526: ** needToFreeIdxPtr is true.
 5527: **
 5528: ** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in
 5529: ** the correct order to satisfy the ORDER BY clause so that no separate
 5530: ** sorting step is required.
 5531: **
 5532: ** ^The estimatedCost value is an estimate of the cost of doing the
 5533: ** particular lookup.  A full scan of a table with N entries should have
 5534: ** a cost of N.  A binary search of a table of N entries should have a
 5535: ** cost of approximately log(N).
 5536: */
 5537: struct sqlite3_index_info {
 5538:   /* Inputs */
 5539:   int nConstraint;           /* Number of entries in aConstraint */
 5540:   struct sqlite3_index_constraint {
 5541:      int iColumn;              /* Column on left-hand side of constraint */
 5542:      unsigned char op;         /* Constraint operator */
 5543:      unsigned char usable;     /* True if this constraint is usable */
 5544:      int iTermOffset;          /* Used internally - xBestIndex should ignore */
 5545:   } *aConstraint;            /* Table of WHERE clause constraints */
 5546:   int nOrderBy;              /* Number of terms in the ORDER BY clause */
 5547:   struct sqlite3_index_orderby {
 5548:      int iColumn;              /* Column number */
 5549:      unsigned char desc;       /* True for DESC.  False for ASC. */
 5550:   } *aOrderBy;               /* The ORDER BY clause */
 5551:   /* Outputs */
 5552:   struct sqlite3_index_constraint_usage {
 5553:     int argvIndex;           /* if >0, constraint is part of argv to xFilter */
 5554:     unsigned char omit;      /* Do not code a test for this constraint */
 5555:   } *aConstraintUsage;
 5556:   int idxNum;                /* Number used to identify the index */
 5557:   char *idxStr;              /* String, possibly obtained from sqlite3_malloc */
 5558:   int needToFreeIdxStr;      /* Free idxStr using sqlite3_free() if true */
 5559:   int orderByConsumed;       /* True if output is already ordered */
 5560:   double estimatedCost;      /* Estimated cost of using this index */
 5561: };
 5562: 
 5563: /*
 5564: ** CAPI3REF: Virtual Table Constraint Operator Codes
 5565: **
 5566: ** These macros defined the allowed values for the
 5567: ** [sqlite3_index_info].aConstraint[].op field.  Each value represents
 5568: ** an operator that is part of a constraint term in the wHERE clause of
 5569: ** a query that uses a [virtual table].
 5570: */
 5571: #define SQLITE_INDEX_CONSTRAINT_EQ    2
 5572: #define SQLITE_INDEX_CONSTRAINT_GT    4
 5573: #define SQLITE_INDEX_CONSTRAINT_LE    8
 5574: #define SQLITE_INDEX_CONSTRAINT_LT    16
 5575: #define SQLITE_INDEX_CONSTRAINT_GE    32
 5576: #define SQLITE_INDEX_CONSTRAINT_MATCH 64
 5577: 
 5578: /*
 5579: ** CAPI3REF: Register A Virtual Table Implementation
 5580: **
 5581: ** ^These routines are used to register a new [virtual table module] name.
 5582: ** ^Module names must be registered before
 5583: ** creating a new [virtual table] using the module and before using a
 5584: ** preexisting [virtual table] for the module.
 5585: **
 5586: ** ^The module name is registered on the [database connection] specified
 5587: ** by the first parameter.  ^The name of the module is given by the 
 5588: ** second parameter.  ^The third parameter is a pointer to
 5589: ** the implementation of the [virtual table module].   ^The fourth
 5590: ** parameter is an arbitrary client data pointer that is passed through
 5591: ** into the [xCreate] and [xConnect] methods of the virtual table module
 5592: ** when a new virtual table is be being created or reinitialized.
 5593: **
 5594: ** ^The sqlite3_create_module_v2() interface has a fifth parameter which
 5595: ** is a pointer to a destructor for the pClientData.  ^SQLite will
 5596: ** invoke the destructor function (if it is not NULL) when SQLite
 5597: ** no longer needs the pClientData pointer.  ^The destructor will also
 5598: ** be invoked if the call to sqlite3_create_module_v2() fails.
 5599: ** ^The sqlite3_create_module()
 5600: ** interface is equivalent to sqlite3_create_module_v2() with a NULL
 5601: ** destructor.
 5602: */
 5603: SQLITE_API int sqlite3_create_module(
 5604:   sqlite3 *db,               /* SQLite connection to register module with */
 5605:   const char *zName,         /* Name of the module */
 5606:   const sqlite3_module *p,   /* Methods for the module */
 5607:   void *pClientData          /* Client data for xCreate/xConnect */
 5608: );
 5609: SQLITE_API int sqlite3_create_module_v2(
 5610:   sqlite3 *db,               /* SQLite connection to register module with */
 5611:   const char *zName,         /* Name of the module */
 5612:   const sqlite3_module *p,   /* Methods for the module */
 5613:   void *pClientData,         /* Client data for xCreate/xConnect */
 5614:   void(*xDestroy)(void*)     /* Module destructor function */
 5615: );
 5616: 
 5617: /*
 5618: ** CAPI3REF: Virtual Table Instance Object
 5619: ** KEYWORDS: sqlite3_vtab
 5620: **
 5621: ** Every [virtual table module] implementation uses a subclass
 5622: ** of this object to describe a particular instance
 5623: ** of the [virtual table].  Each subclass will
 5624: ** be tailored to the specific needs of the module implementation.
 5625: ** The purpose of this superclass is to define certain fields that are
 5626: ** common to all module implementations.
 5627: **
 5628: ** ^Virtual tables methods can set an error message by assigning a
 5629: ** string obtained from [sqlite3_mprintf()] to zErrMsg.  The method should
 5630: ** take care that any prior string is freed by a call to [sqlite3_free()]
 5631: ** prior to assigning a new string to zErrMsg.  ^After the error message
 5632: ** is delivered up to the client application, the string will be automatically
 5633: ** freed by sqlite3_free() and the zErrMsg field will be zeroed.
 5634: */
 5635: struct sqlite3_vtab {
 5636:   const sqlite3_module *pModule;  /* The module for this virtual table */
 5637:   int nRef;                       /* NO LONGER USED */
 5638:   char *zErrMsg;                  /* Error message from sqlite3_mprintf() */
 5639:   /* Virtual table implementations will typically add additional fields */
 5640: };
 5641: 
 5642: /*
 5643: ** CAPI3REF: Virtual Table Cursor Object
 5644: ** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor}
 5645: **
 5646: ** Every [virtual table module] implementation uses a subclass of the
 5647: ** following structure to describe cursors that point into the
 5648: ** [virtual table] and are used
 5649: ** to loop through the virtual table.  Cursors are created using the
 5650: ** [sqlite3_module.xOpen | xOpen] method of the module and are destroyed
 5651: ** by the [sqlite3_module.xClose | xClose] method.  Cursors are used
 5652: ** by the [xFilter], [xNext], [xEof], [xColumn], and [xRowid] methods
 5653: ** of the module.  Each module implementation will define
 5654: ** the content of a cursor structure to suit its own needs.
 5655: **
 5656: ** This superclass exists in order to define fields of the cursor that
 5657: ** are common to all implementations.
 5658: */
 5659: struct sqlite3_vtab_cursor {
 5660:   sqlite3_vtab *pVtab;      /* Virtual table of this cursor */
 5661:   /* Virtual table implementations will typically add additional fields */
 5662: };
 5663: 
 5664: /*
 5665: ** CAPI3REF: Declare The Schema Of A Virtual Table
 5666: **
 5667: ** ^The [xCreate] and [xConnect] methods of a
 5668: ** [virtual table module] call this interface
 5669: ** to declare the format (the names and datatypes of the columns) of
 5670: ** the virtual tables they implement.
 5671: */
 5672: SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
 5673: 
 5674: /*
 5675: ** CAPI3REF: Overload A Function For A Virtual Table
 5676: **
 5677: ** ^(Virtual tables can provide alternative implementations of functions
 5678: ** using the [xFindFunction] method of the [virtual table module].  
 5679: ** But global versions of those functions
 5680: ** must exist in order to be overloaded.)^
 5681: **
 5682: ** ^(This API makes sure a global version of a function with a particular
 5683: ** name and number of parameters exists.  If no such function exists
 5684: ** before this API is called, a new function is created.)^  ^The implementation
 5685: ** of the new function always causes an exception to be thrown.  So
 5686: ** the new function is not good for anything by itself.  Its only
 5687: ** purpose is to be a placeholder function that can be overloaded
 5688: ** by a [virtual table].
 5689: */
 5690: SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
 5691: 
 5692: /*
 5693: ** The interface to the virtual-table mechanism defined above (back up
 5694: ** to a comment remarkably similar to this one) is currently considered
 5695: ** to be experimental.  The interface might change in incompatible ways.
 5696: ** If this is a problem for you, do not use the interface at this time.
 5697: **
 5698: ** When the virtual-table mechanism stabilizes, we will declare the
 5699: ** interface fixed, support it indefinitely, and remove this comment.
 5700: */
 5701: 
 5702: /*
 5703: ** CAPI3REF: A Handle To An Open BLOB
 5704: ** KEYWORDS: {BLOB handle} {BLOB handles}
 5705: **
 5706: ** An instance of this object represents an open BLOB on which
 5707: ** [sqlite3_blob_open | incremental BLOB I/O] can be performed.
 5708: ** ^Objects of this type are created by [sqlite3_blob_open()]
 5709: ** and destroyed by [sqlite3_blob_close()].
 5710: ** ^The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces
 5711: ** can be used to read or write small subsections of the BLOB.
 5712: ** ^The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes.
 5713: */
 5714: typedef struct sqlite3_blob sqlite3_blob;
 5715: 
 5716: /*
 5717: ** CAPI3REF: Open A BLOB For Incremental I/O
 5718: **
 5719: ** ^(This interfaces opens a [BLOB handle | handle] to the BLOB located
 5720: ** in row iRow, column zColumn, table zTable in database zDb;
 5721: ** in other words, the same BLOB that would be selected by:
 5722: **
 5723: ** <pre>
 5724: **     SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
 5725: ** </pre>)^
 5726: **
 5727: ** ^If the flags parameter is non-zero, then the BLOB is opened for read
 5728: ** and write access. ^If it is zero, the BLOB is opened for read access.
 5729: ** ^It is not possible to open a column that is part of an index or primary 
 5730: ** key for writing. ^If [foreign key constraints] are enabled, it is 
 5731: ** not possible to open a column that is part of a [child key] for writing.
 5732: **
 5733: ** ^Note that the database name is not the filename that contains
 5734: ** the database but rather the symbolic name of the database that
 5735: ** appears after the AS keyword when the database is connected using [ATTACH].
 5736: ** ^For the main database file, the database name is "main".
 5737: ** ^For TEMP tables, the database name is "temp".
 5738: **
 5739: ** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written
 5740: ** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set
 5741: ** to be a null pointer.)^
 5742: ** ^This function sets the [database connection] error code and message
 5743: ** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related
 5744: ** functions. ^Note that the *ppBlob variable is always initialized in a
 5745: ** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob
 5746: ** regardless of the success or failure of this routine.
 5747: **
 5748: ** ^(If the row that a BLOB handle points to is modified by an
 5749: ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
 5750: ** then the BLOB handle is marked as "expired".
 5751: ** This is true if any column of the row is changed, even a column
 5752: ** other than the one the BLOB handle is open on.)^
 5753: ** ^Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for
 5754: ** an expired BLOB handle fail with a return code of [SQLITE_ABORT].
 5755: ** ^(Changes written into a BLOB prior to the BLOB expiring are not
 5756: ** rolled back by the expiration of the BLOB.  Such changes will eventually
 5757: ** commit if the transaction continues to completion.)^
 5758: **
 5759: ** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
 5760: ** the opened blob.  ^The size of a blob may not be changed by this
 5761: ** interface.  Use the [UPDATE] SQL command to change the size of a
 5762: ** blob.
 5763: **
 5764: ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
 5765: ** and the built-in [zeroblob] SQL function can be used, if desired,
 5766: ** to create an empty, zero-filled blob in which to read or write using
 5767: ** this interface.
 5768: **
 5769: ** To avoid a resource leak, every open [BLOB handle] should eventually
 5770: ** be released by a call to [sqlite3_blob_close()].
 5771: */
 5772: SQLITE_API int sqlite3_blob_open(
 5773:   sqlite3*,
 5774:   const char *zDb,
 5775:   const char *zTable,
 5776:   const char *zColumn,
 5777:   sqlite3_int64 iRow,
 5778:   int flags,
 5779:   sqlite3_blob **ppBlob
 5780: );
 5781: 
 5782: /*
 5783: ** CAPI3REF: Move a BLOB Handle to a New Row
 5784: **
 5785: ** ^This function is used to move an existing blob handle so that it points
 5786: ** to a different row of the same database table. ^The new row is identified
 5787: ** by the rowid value passed as the second argument. Only the row can be
 5788: ** changed. ^The database, table and column on which the blob handle is open
 5789: ** remain the same. Moving an existing blob handle to a new row can be
 5790: ** faster than closing the existing handle and opening a new one.
 5791: **
 5792: ** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] -
 5793: ** it must exist and there must be either a blob or text value stored in
 5794: ** the nominated column.)^ ^If the new row is not present in the table, or if
 5795: ** it does not contain a blob or text value, or if another error occurs, an
 5796: ** SQLite error code is returned and the blob handle is considered aborted.
 5797: ** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or
 5798: ** [sqlite3_blob_reopen()] on an aborted blob handle immediately return
 5799: ** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle
 5800: ** always returns zero.
 5801: **
 5802: ** ^This function sets the database handle error code and message.
 5803: */
 5804: SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
 5805: 
 5806: /*
 5807: ** CAPI3REF: Close A BLOB Handle
 5808: **
 5809: ** ^Closes an open [BLOB handle].
 5810: **
 5811: ** ^Closing a BLOB shall cause the current transaction to commit
 5812: ** if there are no other BLOBs, no pending prepared statements, and the
 5813: ** database connection is in [autocommit mode].
 5814: ** ^If any writes were made to the BLOB, they might be held in cache
 5815: ** until the close operation if they will fit.
 5816: **
 5817: ** ^(Closing the BLOB often forces the changes
 5818: ** out to disk and so if any I/O errors occur, they will likely occur
 5819: ** at the time when the BLOB is closed.  Any errors that occur during
 5820: ** closing are reported as a non-zero return value.)^
 5821: **
 5822: ** ^(The BLOB is closed unconditionally.  Even if this routine returns
 5823: ** an error code, the BLOB is still closed.)^
 5824: **
 5825: ** ^Calling this routine with a null pointer (such as would be returned
 5826: ** by a failed call to [sqlite3_blob_open()]) is a harmless no-op.
 5827: */
 5828: SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
 5829: 
 5830: /*
 5831: ** CAPI3REF: Return The Size Of An Open BLOB
 5832: **
 5833: ** ^Returns the size in bytes of the BLOB accessible via the 
 5834: ** successfully opened [BLOB handle] in its only argument.  ^The
 5835: ** incremental blob I/O routines can only read or overwriting existing
 5836: ** blob content; they cannot change the size of a blob.
 5837: **
 5838: ** This routine only works on a [BLOB handle] which has been created
 5839: ** by a prior successful call to [sqlite3_blob_open()] and which has not
 5840: ** been closed by [sqlite3_blob_close()].  Passing any other pointer in
 5841: ** to this routine results in undefined and probably undesirable behavior.
 5842: */
 5843: SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *);
 5844: 
 5845: /*
 5846: ** CAPI3REF: Read Data From A BLOB Incrementally
 5847: **
 5848: ** ^(This function is used to read data from an open [BLOB handle] into a
 5849: ** caller-supplied buffer. N bytes of data are copied into buffer Z
 5850: ** from the open BLOB, starting at offset iOffset.)^
 5851: **
 5852: ** ^If offset iOffset is less than N bytes from the end of the BLOB,
 5853: ** [SQLITE_ERROR] is returned and no data is read.  ^If N or iOffset is
 5854: ** less than zero, [SQLITE_ERROR] is returned and no data is read.
 5855: ** ^The size of the blob (and hence the maximum value of N+iOffset)
 5856: ** can be determined using the [sqlite3_blob_bytes()] interface.
 5857: **
 5858: ** ^An attempt to read from an expired [BLOB handle] fails with an
 5859: ** error code of [SQLITE_ABORT].
 5860: **
 5861: ** ^(On success, sqlite3_blob_read() returns SQLITE_OK.
 5862: ** Otherwise, an [error code] or an [extended error code] is returned.)^
 5863: **
 5864: ** This routine only works on a [BLOB handle] which has been created
 5865: ** by a prior successful call to [sqlite3_blob_open()] and which has not
 5866: ** been closed by [sqlite3_blob_close()].  Passing any other pointer in
 5867: ** to this routine results in undefined and probably undesirable behavior.
 5868: **
 5869: ** See also: [sqlite3_blob_write()].
 5870: */
 5871: SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
 5872: 
 5873: /*
 5874: ** CAPI3REF: Write Data Into A BLOB Incrementally
 5875: **
 5876: ** ^This function is used to write data into an open [BLOB handle] from a
 5877: ** caller-supplied buffer. ^N bytes of data are copied from the buffer Z
 5878: ** into the open BLOB, starting at offset iOffset.
 5879: **
 5880: ** ^If the [BLOB handle] passed as the first argument was not opened for
 5881: ** writing (the flags parameter to [sqlite3_blob_open()] was zero),
 5882: ** this function returns [SQLITE_READONLY].
 5883: **
 5884: ** ^This function may only modify the contents of the BLOB; it is
 5885: ** not possible to increase the size of a BLOB using this API.
 5886: ** ^If offset iOffset is less than N bytes from the end of the BLOB,
 5887: ** [SQLITE_ERROR] is returned and no data is written.  ^If N is
 5888: ** less than zero [SQLITE_ERROR] is returned and no data is written.
 5889: ** The size of the BLOB (and hence the maximum value of N+iOffset)
 5890: ** can be determined using the [sqlite3_blob_bytes()] interface.
 5891: **
 5892: ** ^An attempt to write to an expired [BLOB handle] fails with an
 5893: ** error code of [SQLITE_ABORT].  ^Writes to the BLOB that occurred
 5894: ** before the [BLOB handle] expired are not rolled back by the
 5895: ** expiration of the handle, though of course those changes might
 5896: ** have been overwritten by the statement that expired the BLOB handle
 5897: ** or by other independent statements.
 5898: **
 5899: ** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
 5900: ** Otherwise, an  [error code] or an [extended error code] is returned.)^
 5901: **
 5902: ** This routine only works on a [BLOB handle] which has been created
 5903: ** by a prior successful call to [sqlite3_blob_open()] and which has not
 5904: ** been closed by [sqlite3_blob_close()].  Passing any other pointer in
 5905: ** to this routine results in undefined and probably undesirable behavior.
 5906: **
 5907: ** See also: [sqlite3_blob_read()].
 5908: */
 5909: SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset);
 5910: 
 5911: /*
 5912: ** CAPI3REF: Virtual File System Objects
 5913: **
 5914: ** A virtual filesystem (VFS) is an [sqlite3_vfs] object
 5915: ** that SQLite uses to interact
 5916: ** with the underlying operating system.  Most SQLite builds come with a
 5917: ** single default VFS that is appropriate for the host computer.
 5918: ** New VFSes can be registered and existing VFSes can be unregistered.
 5919: ** The following interfaces are provided.
 5920: **
 5921: ** ^The sqlite3_vfs_find() interface returns a pointer to a VFS given its name.
 5922: ** ^Names are case sensitive.
 5923: ** ^Names are zero-terminated UTF-8 strings.
 5924: ** ^If there is no match, a NULL pointer is returned.
 5925: ** ^If zVfsName is NULL then the default VFS is returned.
 5926: **
 5927: ** ^New VFSes are registered with sqlite3_vfs_register().
 5928: ** ^Each new VFS becomes the default VFS if the makeDflt flag is set.
 5929: ** ^The same VFS can be registered multiple times without injury.
 5930: ** ^To make an existing VFS into the default VFS, register it again
 5931: ** with the makeDflt flag set.  If two different VFSes with the
 5932: ** same name are registered, the behavior is undefined.  If a
 5933: ** VFS is registered with a name that is NULL or an empty string,
 5934: ** then the behavior is undefined.
 5935: **
 5936: ** ^Unregister a VFS with the sqlite3_vfs_unregister() interface.
 5937: ** ^(If the default VFS is unregistered, another VFS is chosen as
 5938: ** the default.  The choice for the new VFS is arbitrary.)^
 5939: */
 5940: SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
 5941: SQLITE_API int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
 5942: SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*);
 5943: 
 5944: /*
 5945: ** CAPI3REF: Mutexes
 5946: **
 5947: ** The SQLite core uses these routines for thread
 5948: ** synchronization. Though they are intended for internal
 5949: ** use by SQLite, code that links against SQLite is
 5950: ** permitted to use any of these routines.
 5951: **
 5952: ** The SQLite source code contains multiple implementations
 5953: ** of these mutex routines.  An appropriate implementation
 5954: ** is selected automatically at compile-time.  ^(The following
 5955: ** implementations are available in the SQLite core:
 5956: **
 5957: ** <ul>
 5958: ** <li>   SQLITE_MUTEX_OS2
 5959: ** <li>   SQLITE_MUTEX_PTHREADS
 5960: ** <li>   SQLITE_MUTEX_W32
 5961: ** <li>   SQLITE_MUTEX_NOOP
 5962: ** </ul>)^
 5963: **
 5964: ** ^The SQLITE_MUTEX_NOOP implementation is a set of routines
 5965: ** that does no real locking and is appropriate for use in
 5966: ** a single-threaded application.  ^The SQLITE_MUTEX_OS2,
 5967: ** SQLITE_MUTEX_PTHREADS, and SQLITE_MUTEX_W32 implementations
 5968: ** are appropriate for use on OS/2, Unix, and Windows.
 5969: **
 5970: ** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
 5971: ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
 5972: ** implementation is included with the library. In this case the
 5973: ** application must supply a custom mutex implementation using the
 5974: ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function
 5975: ** before calling sqlite3_initialize() or any other public sqlite3_
 5976: ** function that calls sqlite3_initialize().)^
 5977: **
 5978: ** ^The sqlite3_mutex_alloc() routine allocates a new
 5979: ** mutex and returns a pointer to it. ^If it returns NULL
 5980: ** that means that a mutex could not be allocated.  ^SQLite
 5981: ** will unwind its stack and return an error.  ^(The argument
 5982: ** to sqlite3_mutex_alloc() is one of these integer constants:
 5983: **
 5984: ** <ul>
 5985: ** <li>  SQLITE_MUTEX_FAST
 5986: ** <li>  SQLITE_MUTEX_RECURSIVE
 5987: ** <li>  SQLITE_MUTEX_STATIC_MASTER
 5988: ** <li>  SQLITE_MUTEX_STATIC_MEM
 5989: ** <li>  SQLITE_MUTEX_STATIC_MEM2
 5990: ** <li>  SQLITE_MUTEX_STATIC_PRNG
 5991: ** <li>  SQLITE_MUTEX_STATIC_LRU
 5992: ** <li>  SQLITE_MUTEX_STATIC_LRU2
 5993: ** </ul>)^
 5994: **
 5995: ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
 5996: ** cause sqlite3_mutex_alloc() to create
 5997: ** a new mutex.  ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
 5998: ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
 5999: ** The mutex implementation does not need to make a distinction
 6000: ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
 6001: ** not want to.  ^SQLite will only request a recursive mutex in
 6002: ** cases where it really needs one.  ^If a faster non-recursive mutex
 6003: ** implementation is available on the host platform, the mutex subsystem
 6004: ** might return such a mutex in response to SQLITE_MUTEX_FAST.
 6005: **
 6006: ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
 6007: ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
 6008: ** a pointer to a static preexisting mutex.  ^Six static mutexes are
 6009: ** used by the current version of SQLite.  Future versions of SQLite
 6010: ** may add additional static mutexes.  Static mutexes are for internal
 6011: ** use by SQLite only.  Applications that use SQLite mutexes should
 6012: ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
 6013: ** SQLITE_MUTEX_RECURSIVE.
 6014: **
 6015: ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
 6016: ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
 6017: ** returns a different mutex on every call.  ^But for the static
 6018: ** mutex types, the same mutex is returned on every call that has
 6019: ** the same type number.
 6020: **
 6021: ** ^The sqlite3_mutex_free() routine deallocates a previously
 6022: ** allocated dynamic mutex.  ^SQLite is careful to deallocate every
 6023: ** dynamic mutex that it allocates.  The dynamic mutexes must not be in
 6024: ** use when they are deallocated.  Attempting to deallocate a static
 6025: ** mutex results in undefined behavior.  ^SQLite never deallocates
 6026: ** a static mutex.
 6027: **
 6028: ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
 6029: ** to enter a mutex.  ^If another thread is already within the mutex,
 6030: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
 6031: ** SQLITE_BUSY.  ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
 6032: ** upon successful entry.  ^(Mutexes created using
 6033: ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
 6034: ** In such cases the,
 6035: ** mutex must be exited an equal number of times before another thread
 6036: ** can enter.)^  ^(If the same thread tries to enter any other
 6037: ** kind of mutex more than once, the behavior is undefined.
 6038: ** SQLite will never exhibit
 6039: ** such behavior in its own use of mutexes.)^
 6040: **
 6041: ** ^(Some systems (for example, Windows 95) do not support the operation
 6042: ** implemented by sqlite3_mutex_try().  On those systems, sqlite3_mutex_try()
 6043: ** will always return SQLITE_BUSY.  The SQLite core only ever uses
 6044: ** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^
 6045: **
 6046: ** ^The sqlite3_mutex_leave() routine exits a mutex that was
 6047: ** previously entered by the same thread.   ^(The behavior
 6048: ** is undefined if the mutex is not currently entered by the
 6049: ** calling thread or is not currently allocated.  SQLite will
 6050: ** never do either.)^
 6051: **
 6052: ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
 6053: ** sqlite3_mutex_leave() is a NULL pointer, then all three routines
 6054: ** behave as no-ops.
 6055: **
 6056: ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()].
 6057: */
 6058: SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int);
 6059: SQLITE_API void sqlite3_mutex_free(sqlite3_mutex*);
 6060: SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex*);
 6061: SQLITE_API int sqlite3_mutex_try(sqlite3_mutex*);
 6062: SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*);
 6063: 
 6064: /*
 6065: ** CAPI3REF: Mutex Methods Object
 6066: **
 6067: ** An instance of this structure defines the low-level routines
 6068: ** used to allocate and use mutexes.
 6069: **
 6070: ** Usually, the default mutex implementations provided by SQLite are
 6071: ** sufficient, however the user has the option of substituting a custom
 6072: ** implementation for specialized deployments or systems for which SQLite
 6073: ** does not provide a suitable implementation. In this case, the user
 6074: ** creates and populates an instance of this structure to pass
 6075: ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
 6076: ** Additionally, an instance of this structure can be used as an
 6077: ** output variable when querying the system for the current mutex
 6078: ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
 6079: **
 6080: ** ^The xMutexInit method defined by this structure is invoked as
 6081: ** part of system initialization by the sqlite3_initialize() function.
 6082: ** ^The xMutexInit routine is called by SQLite exactly once for each
 6083: ** effective call to [sqlite3_initialize()].
 6084: **
 6085: ** ^The xMutexEnd method defined by this structure is invoked as
 6086: ** part of system shutdown by the sqlite3_shutdown() function. The
 6087: ** implementation of this method is expected to release all outstanding
 6088: ** resources obtained by the mutex methods implementation, especially
 6089: ** those obtained by the xMutexInit method.  ^The xMutexEnd()
 6090: ** interface is invoked exactly once for each call to [sqlite3_shutdown()].
 6091: **
 6092: ** ^(The remaining seven methods defined by this structure (xMutexAlloc,
 6093: ** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and
 6094: ** xMutexNotheld) implement the following interfaces (respectively):
 6095: **
 6096: ** <ul>
 6097: **   <li>  [sqlite3_mutex_alloc()] </li>
 6098: **   <li>  [sqlite3_mutex_free()] </li>
 6099: **   <li>  [sqlite3_mutex_enter()] </li>
 6100: **   <li>  [sqlite3_mutex_try()] </li>
 6101: **   <li>  [sqlite3_mutex_leave()] </li>
 6102: **   <li>  [sqlite3_mutex_held()] </li>
 6103: **   <li>  [sqlite3_mutex_notheld()] </li>
 6104: ** </ul>)^
 6105: **
 6106: ** The only difference is that the public sqlite3_XXX functions enumerated
 6107: ** above silently ignore any invocations that pass a NULL pointer instead
 6108: ** of a valid mutex handle. The implementations of the methods defined
 6109: ** by this structure are not required to handle this case, the results
 6110: ** of passing a NULL pointer instead of a valid mutex handle are undefined
 6111: ** (i.e. it is acceptable to provide an implementation that segfaults if
 6112: ** it is passed a NULL pointer).
 6113: **
 6114: ** The xMutexInit() method must be threadsafe.  ^It must be harmless to
 6115: ** invoke xMutexInit() multiple times within the same process and without
 6116: ** intervening calls to xMutexEnd().  Second and subsequent calls to
 6117: ** xMutexInit() must be no-ops.
 6118: **
 6119: ** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
 6120: ** and its associates).  ^Similarly, xMutexAlloc() must not use SQLite memory
 6121: ** allocation for a static mutex.  ^However xMutexAlloc() may use SQLite
 6122: ** memory allocation for a fast or recursive mutex.
 6123: **
 6124: ** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
 6125: ** called, but only if the prior call to xMutexInit returned SQLITE_OK.
 6126: ** If xMutexInit fails in any way, it is expected to clean up after itself
 6127: ** prior to returning.
 6128: */
 6129: typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
 6130: struct sqlite3_mutex_methods {
 6131:   int (*xMutexInit)(void);
 6132:   int (*xMutexEnd)(void);
 6133:   sqlite3_mutex *(*xMutexAlloc)(int);
 6134:   void (*xMutexFree)(sqlite3_mutex *);
 6135:   void (*xMutexEnter)(sqlite3_mutex *);
 6136:   int (*xMutexTry)(sqlite3_mutex *);
 6137:   void (*xMutexLeave)(sqlite3_mutex *);
 6138:   int (*xMutexHeld)(sqlite3_mutex *);
 6139:   int (*xMutexNotheld)(sqlite3_mutex *);
 6140: };
 6141: 
 6142: /*
 6143: ** CAPI3REF: Mutex Verification Routines
 6144: **
 6145: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
 6146: ** are intended for use inside assert() statements.  ^The SQLite core
 6147: ** never uses these routines except inside an assert() and applications
 6148: ** are advised to follow the lead of the core.  ^The SQLite core only
 6149: ** provides implementations for these routines when it is compiled
 6150: ** with the SQLITE_DEBUG flag.  ^External mutex implementations
 6151: ** are only required to provide these routines if SQLITE_DEBUG is
 6152: ** defined and if NDEBUG is not defined.
 6153: **
 6154: ** ^These routines should return true if the mutex in their argument
 6155: ** is held or not held, respectively, by the calling thread.
 6156: **
 6157: ** ^The implementation is not required to provide versions of these
 6158: ** routines that actually work. If the implementation does not provide working
 6159: ** versions of these routines, it should at least provide stubs that always
 6160: ** return true so that one does not get spurious assertion failures.
 6161: **
 6162: ** ^If the argument to sqlite3_mutex_held() is a NULL pointer then
 6163: ** the routine should return 1.   This seems counter-intuitive since
 6164: ** clearly the mutex cannot be held if it does not exist.  But
 6165: ** the reason the mutex does not exist is because the build is not
 6166: ** using mutexes.  And we do not want the assert() containing the
 6167: ** call to sqlite3_mutex_held() to fail, so a non-zero return is
 6168: ** the appropriate thing to do.  ^The sqlite3_mutex_notheld()
 6169: ** interface should also return 1 when given a NULL pointer.
 6170: */
 6171: #ifndef NDEBUG
 6172: SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
 6173: SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
 6174: #endif
 6175: 
 6176: /*
 6177: ** CAPI3REF: Mutex Types
 6178: **
 6179: ** The [sqlite3_mutex_alloc()] interface takes a single argument
 6180: ** which is one of these integer constants.
 6181: **
 6182: ** The set of static mutexes may change from one SQLite release to the
 6183: ** next.  Applications that override the built-in mutex logic must be
 6184: ** prepared to accommodate additional static mutexes.
 6185: */
 6186: #define SQLITE_MUTEX_FAST             0
 6187: #define SQLITE_MUTEX_RECURSIVE        1
 6188: #define SQLITE_MUTEX_STATIC_MASTER    2
 6189: #define SQLITE_MUTEX_STATIC_MEM       3  /* sqlite3_malloc() */
 6190: #define SQLITE_MUTEX_STATIC_MEM2      4  /* NOT USED */
 6191: #define SQLITE_MUTEX_STATIC_OPEN      4  /* sqlite3BtreeOpen() */
 6192: #define SQLITE_MUTEX_STATIC_PRNG      5  /* sqlite3_random() */
 6193: #define SQLITE_MUTEX_STATIC_LRU       6  /* lru page list */
 6194: #define SQLITE_MUTEX_STATIC_LRU2      7  /* NOT USED */
 6195: #define SQLITE_MUTEX_STATIC_PMEM      7  /* sqlite3PageMalloc() */
 6196: 
 6197: /*
 6198: ** CAPI3REF: Retrieve the mutex for a database connection
 6199: **
 6200: ** ^This interface returns a pointer the [sqlite3_mutex] object that 
 6201: ** serializes access to the [database connection] given in the argument
 6202: ** when the [threading mode] is Serialized.
 6203: ** ^If the [threading mode] is Single-thread or Multi-thread then this
 6204: ** routine returns a NULL pointer.
 6205: */
 6206: SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
 6207: 
 6208: /*
 6209: ** CAPI3REF: Low-Level Control Of Database Files
 6210: **
 6211: ** ^The [sqlite3_file_control()] interface makes a direct call to the
 6212: ** xFileControl method for the [sqlite3_io_methods] object associated
 6213: ** with a particular database identified by the second argument. ^The
 6214: ** name of the database is "main" for the main database or "temp" for the
 6215: ** TEMP database, or the name that appears after the AS keyword for
 6216: ** databases that are added using the [ATTACH] SQL command.
 6217: ** ^A NULL pointer can be used in place of "main" to refer to the
 6218: ** main database file.
 6219: ** ^The third and fourth parameters to this routine
 6220: ** are passed directly through to the second and third parameters of
 6221: ** the xFileControl method.  ^The return value of the xFileControl
 6222: ** method becomes the return value of this routine.
 6223: **
 6224: ** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes
 6225: ** a pointer to the underlying [sqlite3_file] object to be written into
 6226: ** the space pointed to by the 4th parameter.  ^The SQLITE_FCNTL_FILE_POINTER
 6227: ** case is a short-circuit path which does not actually invoke the
 6228: ** underlying sqlite3_io_methods.xFileControl method.
 6229: **
 6230: ** ^If the second parameter (zDbName) does not match the name of any
 6231: ** open database file, then SQLITE_ERROR is returned.  ^This error
 6232: ** code is not remembered and will not be recalled by [sqlite3_errcode()]
 6233: ** or [sqlite3_errmsg()].  The underlying xFileControl method might
 6234: ** also return SQLITE_ERROR.  There is no way to distinguish between
 6235: ** an incorrect zDbName and an SQLITE_ERROR return from the underlying
 6236: ** xFileControl method.
 6237: **
 6238: ** See also: [SQLITE_FCNTL_LOCKSTATE]
 6239: */
 6240: SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
 6241: 
 6242: /*
 6243: ** CAPI3REF: Testing Interface
 6244: **
 6245: ** ^The sqlite3_test_control() interface is used to read out internal
 6246: ** state of SQLite and to inject faults into SQLite for testing
 6247: ** purposes.  ^The first parameter is an operation code that determines
 6248: ** the number, meaning, and operation of all subsequent parameters.
 6249: **
 6250: ** This interface is not for use by applications.  It exists solely
 6251: ** for verifying the correct operation of the SQLite library.  Depending
 6252: ** on how the SQLite library is compiled, this interface might not exist.
 6253: **
 6254: ** The details of the operation codes, their meanings, the parameters
 6255: ** they take, and what they do are all subject to change without notice.
 6256: ** Unlike most of the SQLite API, this function is not guaranteed to
 6257: ** operate consistently from one release to the next.
 6258: */
 6259: SQLITE_API int sqlite3_test_control(int op, ...);
 6260: 
 6261: /*
 6262: ** CAPI3REF: Testing Interface Operation Codes
 6263: **
 6264: ** These constants are the valid operation code parameters used
 6265: ** as the first argument to [sqlite3_test_control()].
 6266: **
 6267: ** These parameters and their meanings are subject to change
 6268: ** without notice.  These values are for testing purposes only.
 6269: ** Applications should not use any of these parameters or the
 6270: ** [sqlite3_test_control()] interface.
 6271: */
 6272: #define SQLITE_TESTCTRL_FIRST                    5
 6273: #define SQLITE_TESTCTRL_PRNG_SAVE                5
 6274: #define SQLITE_TESTCTRL_PRNG_RESTORE             6
 6275: #define SQLITE_TESTCTRL_PRNG_RESET               7
 6276: #define SQLITE_TESTCTRL_BITVEC_TEST              8
 6277: #define SQLITE_TESTCTRL_FAULT_INSTALL            9
 6278: #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS     10
 6279: #define SQLITE_TESTCTRL_PENDING_BYTE            11
 6280: #define SQLITE_TESTCTRL_ASSERT                  12
 6281: #define SQLITE_TESTCTRL_ALWAYS                  13
 6282: #define SQLITE_TESTCTRL_RESERVE                 14
 6283: #define SQLITE_TESTCTRL_OPTIMIZATIONS           15
 6284: #define SQLITE_TESTCTRL_ISKEYWORD               16
 6285: #define SQLITE_TESTCTRL_SCRATCHMALLOC           17
 6286: #define SQLITE_TESTCTRL_LOCALTIME_FAULT         18
 6287: #define SQLITE_TESTCTRL_EXPLAIN_STMT            19
 6288: #define SQLITE_TESTCTRL_LAST                    19
 6289: 
 6290: /*
 6291: ** CAPI3REF: SQLite Runtime Status
 6292: **
 6293: ** ^This interface is used to retrieve runtime status information
 6294: ** about the performance of SQLite, and optionally to reset various
 6295: ** highwater marks.  ^The first argument is an integer code for
 6296: ** the specific parameter to measure.  ^(Recognized integer codes
 6297: ** are of the form [status parameters | SQLITE_STATUS_...].)^
 6298: ** ^The current value of the parameter is returned into *pCurrent.
 6299: ** ^The highest recorded value is returned in *pHighwater.  ^If the
 6300: ** resetFlag is true, then the highest record value is reset after
 6301: ** *pHighwater is written.  ^(Some parameters do not record the highest
 6302: ** value.  For those parameters
 6303: ** nothing is written into *pHighwater and the resetFlag is ignored.)^
 6304: ** ^(Other parameters record only the highwater mark and not the current
 6305: ** value.  For these latter parameters nothing is written into *pCurrent.)^
 6306: **
 6307: ** ^The sqlite3_status() routine returns SQLITE_OK on success and a
 6308: ** non-zero [error code] on failure.
 6309: **
 6310: ** This routine is threadsafe but is not atomic.  This routine can be
 6311: ** called while other threads are running the same or different SQLite
 6312: ** interfaces.  However the values returned in *pCurrent and
 6313: ** *pHighwater reflect the status of SQLite at different points in time
 6314: ** and it is possible that another thread might change the parameter
 6315: ** in between the times when *pCurrent and *pHighwater are written.
 6316: **
 6317: ** See also: [sqlite3_db_status()]
 6318: */
 6319: SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
 6320: 
 6321: 
 6322: /*
 6323: ** CAPI3REF: Status Parameters
 6324: ** KEYWORDS: {status parameters}
 6325: **
 6326: ** These integer constants designate various run-time status parameters
 6327: ** that can be returned by [sqlite3_status()].
 6328: **
 6329: ** <dl>
 6330: ** [[SQLITE_STATUS_MEMORY_USED]] ^(<dt>SQLITE_STATUS_MEMORY_USED</dt>
 6331: ** <dd>This parameter is the current amount of memory checked out
 6332: ** using [sqlite3_malloc()], either directly or indirectly.  The
 6333: ** figure includes calls made to [sqlite3_malloc()] by the application
 6334: ** and internal memory usage by the SQLite library.  Scratch memory
 6335: ** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache
 6336: ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in
 6337: ** this parameter.  The amount returned is the sum of the allocation
 6338: ** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd>)^
 6339: **
 6340: ** [[SQLITE_STATUS_MALLOC_SIZE]] ^(<dt>SQLITE_STATUS_MALLOC_SIZE</dt>
 6341: ** <dd>This parameter records the largest memory allocation request
 6342: ** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their
 6343: ** internal equivalents).  Only the value returned in the
 6344: ** *pHighwater parameter to [sqlite3_status()] is of interest.  
 6345: ** The value written into the *pCurrent parameter is undefined.</dd>)^
 6346: **
 6347: ** [[SQLITE_STATUS_MALLOC_COUNT]] ^(<dt>SQLITE_STATUS_MALLOC_COUNT</dt>
 6348: ** <dd>This parameter records the number of separate memory allocations
 6349: ** currently checked out.</dd>)^
 6350: **
 6351: ** [[SQLITE_STATUS_PAGECACHE_USED]] ^(<dt>SQLITE_STATUS_PAGECACHE_USED</dt>
 6352: ** <dd>This parameter returns the number of pages used out of the
 6353: ** [pagecache memory allocator] that was configured using 
 6354: ** [SQLITE_CONFIG_PAGECACHE].  The
 6355: ** value returned is in pages, not in bytes.</dd>)^
 6356: **
 6357: ** [[SQLITE_STATUS_PAGECACHE_OVERFLOW]] 
 6358: ** ^(<dt>SQLITE_STATUS_PAGECACHE_OVERFLOW</dt>
 6359: ** <dd>This parameter returns the number of bytes of page cache
 6360: ** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE]
 6361: ** buffer and where forced to overflow to [sqlite3_malloc()].  The
 6362: ** returned value includes allocations that overflowed because they
 6363: ** where too large (they were larger than the "sz" parameter to
 6364: ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because
 6365: ** no space was left in the page cache.</dd>)^
 6366: **
 6367: ** [[SQLITE_STATUS_PAGECACHE_SIZE]] ^(<dt>SQLITE_STATUS_PAGECACHE_SIZE</dt>
 6368: ** <dd>This parameter records the largest memory allocation request
 6369: ** handed to [pagecache memory allocator].  Only the value returned in the
 6370: ** *pHighwater parameter to [sqlite3_status()] is of interest.  
 6371: ** The value written into the *pCurrent parameter is undefined.</dd>)^
 6372: **
 6373: ** [[SQLITE_STATUS_SCRATCH_USED]] ^(<dt>SQLITE_STATUS_SCRATCH_USED</dt>
 6374: ** <dd>This parameter returns the number of allocations used out of the
 6375: ** [scratch memory allocator] configured using
 6376: ** [SQLITE_CONFIG_SCRATCH].  The value returned is in allocations, not
 6377: ** in bytes.  Since a single thread may only have one scratch allocation
 6378: ** outstanding at time, this parameter also reports the number of threads
 6379: ** using scratch memory at the same time.</dd>)^
 6380: **
 6381: ** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
 6382: ** <dd>This parameter returns the number of bytes of scratch memory
 6383: ** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH]
 6384: ** buffer and where forced to overflow to [sqlite3_malloc()].  The values
 6385: ** returned include overflows because the requested allocation was too
 6386: ** larger (that is, because the requested allocation was larger than the
 6387: ** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer
 6388: ** slots were available.
 6389: ** </dd>)^
 6390: **
 6391: ** [[SQLITE_STATUS_SCRATCH_SIZE]] ^(<dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
 6392: ** <dd>This parameter records the largest memory allocation request
 6393: ** handed to [scratch memory allocator].  Only the value returned in the
 6394: ** *pHighwater parameter to [sqlite3_status()] is of interest.  
 6395: ** The value written into the *pCurrent parameter is undefined.</dd>)^
 6396: **
 6397: ** [[SQLITE_STATUS_PARSER_STACK]] ^(<dt>SQLITE_STATUS_PARSER_STACK</dt>
 6398: ** <dd>This parameter records the deepest parser stack.  It is only
 6399: ** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].</dd>)^
 6400: ** </dl>
 6401: **
 6402: ** New status parameters may be added from time to time.
 6403: */
 6404: #define SQLITE_STATUS_MEMORY_USED          0
 6405: #define SQLITE_STATUS_PAGECACHE_USED       1
 6406: #define SQLITE_STATUS_PAGECACHE_OVERFLOW   2
 6407: #define SQLITE_STATUS_SCRATCH_USED         3
 6408: #define SQLITE_STATUS_SCRATCH_OVERFLOW     4
 6409: #define SQLITE_STATUS_MALLOC_SIZE          5
 6410: #define SQLITE_STATUS_PARSER_STACK         6
 6411: #define SQLITE_STATUS_PAGECACHE_SIZE       7
 6412: #define SQLITE_STATUS_SCRATCH_SIZE         8
 6413: #define SQLITE_STATUS_MALLOC_COUNT         9
 6414: 
 6415: /*
 6416: ** CAPI3REF: Database Connection Status
 6417: **
 6418: ** ^This interface is used to retrieve runtime status information 
 6419: ** about a single [database connection].  ^The first argument is the
 6420: ** database connection object to be interrogated.  ^The second argument
 6421: ** is an integer constant, taken from the set of
 6422: ** [SQLITE_DBSTATUS options], that
 6423: ** determines the parameter to interrogate.  The set of 
 6424: ** [SQLITE_DBSTATUS options] is likely
 6425: ** to grow in future releases of SQLite.
 6426: **
 6427: ** ^The current value of the requested parameter is written into *pCur
 6428: ** and the highest instantaneous value is written into *pHiwtr.  ^If
 6429: ** the resetFlg is true, then the highest instantaneous value is
 6430: ** reset back down to the current value.
 6431: **
 6432: ** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a
 6433: ** non-zero [error code] on failure.
 6434: **
 6435: ** See also: [sqlite3_status()] and [sqlite3_stmt_status()].
 6436: */
 6437: SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
 6438: 
 6439: /*
 6440: ** CAPI3REF: Status Parameters for database connections
 6441: ** KEYWORDS: {SQLITE_DBSTATUS options}
 6442: **
 6443: ** These constants are the available integer "verbs" that can be passed as
 6444: ** the second argument to the [sqlite3_db_status()] interface.
 6445: **
 6446: ** New verbs may be added in future releases of SQLite. Existing verbs
 6447: ** might be discontinued. Applications should check the return code from
 6448: ** [sqlite3_db_status()] to make sure that the call worked.
 6449: ** The [sqlite3_db_status()] interface will return a non-zero error code
 6450: ** if a discontinued or unsupported verb is invoked.
 6451: **
 6452: ** <dl>
 6453: ** [[SQLITE_DBSTATUS_LOOKASIDE_USED]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_USED</dt>
 6454: ** <dd>This parameter returns the number of lookaside memory slots currently
 6455: ** checked out.</dd>)^
 6456: **
 6457: ** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
 6458: ** <dd>This parameter returns the number malloc attempts that were 
 6459: ** satisfied using lookaside memory. Only the high-water value is meaningful;
 6460: ** the current value is always zero.)^
 6461: **
 6462: ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]]
 6463: ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt>
 6464: ** <dd>This parameter returns the number malloc attempts that might have
 6465: ** been satisfied using lookaside memory but failed due to the amount of
 6466: ** memory requested being larger than the lookaside slot size.
 6467: ** Only the high-water value is meaningful;
 6468: ** the current value is always zero.)^
 6469: **
 6470: ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]]
 6471: ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt>
 6472: ** <dd>This parameter returns the number malloc attempts that might have
 6473: ** been satisfied using lookaside memory but failed due to all lookaside
 6474: ** memory already being in use.
 6475: ** Only the high-water value is meaningful;
 6476: ** the current value is always zero.)^
 6477: **
 6478: ** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt>
 6479: ** <dd>This parameter returns the approximate number of of bytes of heap
 6480: ** memory used by all pager caches associated with the database connection.)^
 6481: ** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
 6482: **
 6483: ** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
 6484: ** <dd>This parameter returns the approximate number of of bytes of heap
 6485: ** memory used to store the schema for all databases associated
 6486: ** with the connection - main, temp, and any [ATTACH]-ed databases.)^ 
 6487: ** ^The full amount of memory used by the schemas is reported, even if the
 6488: ** schema memory is shared with other database connections due to
 6489: ** [shared cache mode] being enabled.
 6490: ** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.
 6491: **
 6492: ** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt>
 6493: ** <dd>This parameter returns the approximate number of of bytes of heap
 6494: ** and lookaside memory used by all prepared statements associated with
 6495: ** the database connection.)^
 6496: ** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
 6497: ** </dd>
 6498: **
 6499: ** [[SQLITE_DBSTATUS_CACHE_HIT]] ^(<dt>SQLITE_DBSTATUS_CACHE_HIT</dt>
 6500: ** <dd>This parameter returns the number of pager cache hits that have
 6501: ** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT 
 6502: ** is always 0.
 6503: ** </dd>
 6504: **
 6505: ** [[SQLITE_DBSTATUS_CACHE_MISS]] ^(<dt>SQLITE_DBSTATUS_CACHE_MISS</dt>
 6506: ** <dd>This parameter returns the number of pager cache misses that have
 6507: ** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS 
 6508: ** is always 0.
 6509: ** </dd>
 6510: ** </dl>
 6511: */
 6512: #define SQLITE_DBSTATUS_LOOKASIDE_USED       0
 6513: #define SQLITE_DBSTATUS_CACHE_USED           1
 6514: #define SQLITE_DBSTATUS_SCHEMA_USED          2
 6515: #define SQLITE_DBSTATUS_STMT_USED            3
 6516: #define SQLITE_DBSTATUS_LOOKASIDE_HIT        4
 6517: #define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE  5
 6518: #define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL  6
 6519: #define SQLITE_DBSTATUS_CACHE_HIT            7
 6520: #define SQLITE_DBSTATUS_CACHE_MISS           8
 6521: #define SQLITE_DBSTATUS_MAX                  8   /* Largest defined DBSTATUS */
 6522: 
 6523: 
 6524: /*
 6525: ** CAPI3REF: Prepared Statement Status
 6526: **
 6527: ** ^(Each prepared statement maintains various
 6528: ** [SQLITE_STMTSTATUS counters] that measure the number
 6529: ** of times it has performed specific operations.)^  These counters can
 6530: ** be used to monitor the performance characteristics of the prepared
 6531: ** statements.  For example, if the number of table steps greatly exceeds
 6532: ** the number of table searches or result rows, that would tend to indicate
 6533: ** that the prepared statement is using a full table scan rather than
 6534: ** an index.  
 6535: **
 6536: ** ^(This interface is used to retrieve and reset counter values from
 6537: ** a [prepared statement].  The first argument is the prepared statement
 6538: ** object to be interrogated.  The second argument
 6539: ** is an integer code for a specific [SQLITE_STMTSTATUS counter]
 6540: ** to be interrogated.)^
 6541: ** ^The current value of the requested counter is returned.
 6542: ** ^If the resetFlg is true, then the counter is reset to zero after this
 6543: ** interface call returns.
 6544: **
 6545: ** See also: [sqlite3_status()] and [sqlite3_db_status()].
 6546: */
 6547: SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
 6548: 
 6549: /*
 6550: ** CAPI3REF: Status Parameters for prepared statements
 6551: ** KEYWORDS: {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters}
 6552: **
 6553: ** These preprocessor macros define integer codes that name counter
 6554: ** values associated with the [sqlite3_stmt_status()] interface.
 6555: ** The meanings of the various counters are as follows:
 6556: **
 6557: ** <dl>
 6558: ** [[SQLITE_STMTSTATUS_FULLSCAN_STEP]] <dt>SQLITE_STMTSTATUS_FULLSCAN_STEP</dt>
 6559: ** <dd>^This is the number of times that SQLite has stepped forward in
 6560: ** a table as part of a full table scan.  Large numbers for this counter
 6561: ** may indicate opportunities for performance improvement through 
 6562: ** careful use of indices.</dd>
 6563: **
 6564: ** [[SQLITE_STMTSTATUS_SORT]] <dt>SQLITE_STMTSTATUS_SORT</dt>
 6565: ** <dd>^This is the number of sort operations that have occurred.
 6566: ** A non-zero value in this counter may indicate an opportunity to
 6567: ** improvement performance through careful use of indices.</dd>
 6568: **
 6569: ** [[SQLITE_STMTSTATUS_AUTOINDEX]] <dt>SQLITE_STMTSTATUS_AUTOINDEX</dt>
 6570: ** <dd>^This is the number of rows inserted into transient indices that
 6571: ** were created automatically in order to help joins run faster.
 6572: ** A non-zero value in this counter may indicate an opportunity to
 6573: ** improvement performance by adding permanent indices that do not
 6574: ** need to be reinitialized each time the statement is run.</dd>
 6575: ** </dl>
 6576: */
 6577: #define SQLITE_STMTSTATUS_FULLSCAN_STEP     1
 6578: #define SQLITE_STMTSTATUS_SORT              2
 6579: #define SQLITE_STMTSTATUS_AUTOINDEX         3
 6580: 
 6581: /*
 6582: ** CAPI3REF: Custom Page Cache Object
 6583: **
 6584: ** The sqlite3_pcache type is opaque.  It is implemented by
 6585: ** the pluggable module.  The SQLite core has no knowledge of
 6586: ** its size or internal structure and never deals with the
 6587: ** sqlite3_pcache object except by holding and passing pointers
 6588: ** to the object.
 6589: **
 6590: ** See [sqlite3_pcache_methods2] for additional information.
 6591: */
 6592: typedef struct sqlite3_pcache sqlite3_pcache;
 6593: 
 6594: /*
 6595: ** CAPI3REF: Custom Page Cache Object
 6596: **
 6597: ** The sqlite3_pcache_page object represents a single page in the
 6598: ** page cache.  The page cache will allocate instances of this
 6599: ** object.  Various methods of the page cache use pointers to instances
 6600: ** of this object as parameters or as their return value.
 6601: **
 6602: ** See [sqlite3_pcache_methods2] for additional information.
 6603: */
 6604: typedef struct sqlite3_pcache_page sqlite3_pcache_page;
 6605: struct sqlite3_pcache_page {
 6606:   void *pBuf;        /* The content of the page */
 6607:   void *pExtra;      /* Extra information associated with the page */
 6608: };
 6609: 
 6610: /*
 6611: ** CAPI3REF: Application Defined Page Cache.
 6612: ** KEYWORDS: {page cache}
 6613: **
 6614: ** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE2], ...) interface can
 6615: ** register an alternative page cache implementation by passing in an 
 6616: ** instance of the sqlite3_pcache_methods2 structure.)^
 6617: ** In many applications, most of the heap memory allocated by 
 6618: ** SQLite is used for the page cache.
 6619: ** By implementing a 
 6620: ** custom page cache using this API, an application can better control
 6621: ** the amount of memory consumed by SQLite, the way in which 
 6622: ** that memory is allocated and released, and the policies used to 
 6623: ** determine exactly which parts of a database file are cached and for 
 6624: ** how long.
 6625: **
 6626: ** The alternative page cache mechanism is an
 6627: ** extreme measure that is only needed by the most demanding applications.
 6628: ** The built-in page cache is recommended for most uses.
 6629: **
 6630: ** ^(The contents of the sqlite3_pcache_methods2 structure are copied to an
 6631: ** internal buffer by SQLite within the call to [sqlite3_config].  Hence
 6632: ** the application may discard the parameter after the call to
 6633: ** [sqlite3_config()] returns.)^
 6634: **
 6635: ** [[the xInit() page cache method]]
 6636: ** ^(The xInit() method is called once for each effective 
 6637: ** call to [sqlite3_initialize()])^
 6638: ** (usually only once during the lifetime of the process). ^(The xInit()
 6639: ** method is passed a copy of the sqlite3_pcache_methods2.pArg value.)^
 6640: ** The intent of the xInit() method is to set up global data structures 
 6641: ** required by the custom page cache implementation. 
 6642: ** ^(If the xInit() method is NULL, then the 
 6643: ** built-in default page cache is used instead of the application defined
 6644: ** page cache.)^
 6645: **
 6646: ** [[the xShutdown() page cache method]]
 6647: ** ^The xShutdown() method is called by [sqlite3_shutdown()].
 6648: ** It can be used to clean up 
 6649: ** any outstanding resources before process shutdown, if required.
 6650: ** ^The xShutdown() method may be NULL.
 6651: **
 6652: ** ^SQLite automatically serializes calls to the xInit method,
 6653: ** so the xInit method need not be threadsafe.  ^The
 6654: ** xShutdown method is only called from [sqlite3_shutdown()] so it does
 6655: ** not need to be threadsafe either.  All other methods must be threadsafe
 6656: ** in multithreaded applications.
 6657: **
 6658: ** ^SQLite will never invoke xInit() more than once without an intervening
 6659: ** call to xShutdown().
 6660: **
 6661: ** [[the xCreate() page cache methods]]
 6662: ** ^SQLite invokes the xCreate() method to construct a new cache instance.
 6663: ** SQLite will typically create one cache instance for each open database file,
 6664: ** though this is not guaranteed. ^The
 6665: ** first parameter, szPage, is the size in bytes of the pages that must
 6666: ** be allocated by the cache.  ^szPage will always a power of two.  ^The
 6667: ** second parameter szExtra is a number of bytes of extra storage 
 6668: ** associated with each page cache entry.  ^The szExtra parameter will
 6669: ** a number less than 250.  SQLite will use the
 6670: ** extra szExtra bytes on each page to store metadata about the underlying
 6671: ** database page on disk.  The value passed into szExtra depends
 6672: ** on the SQLite version, the target platform, and how SQLite was compiled.
 6673: ** ^The third argument to xCreate(), bPurgeable, is true if the cache being
 6674: ** created will be used to cache database pages of a file stored on disk, or
 6675: ** false if it is used for an in-memory database. The cache implementation
 6676: ** does not have to do anything special based with the value of bPurgeable;
 6677: ** it is purely advisory.  ^On a cache where bPurgeable is false, SQLite will
 6678: ** never invoke xUnpin() except to deliberately delete a page.
 6679: ** ^In other words, calls to xUnpin() on a cache with bPurgeable set to
 6680: ** false will always have the "discard" flag set to true.  
 6681: ** ^Hence, a cache created with bPurgeable false will
 6682: ** never contain any unpinned pages.
 6683: **
 6684: ** [[the xCachesize() page cache method]]
 6685: ** ^(The xCachesize() method may be called at any time by SQLite to set the
 6686: ** suggested maximum cache-size (number of pages stored by) the cache
 6687: ** instance passed as the first argument. This is the value configured using
 6688: ** the SQLite "[PRAGMA cache_size]" command.)^  As with the bPurgeable
 6689: ** parameter, the implementation is not required to do anything with this
 6690: ** value; it is advisory only.
 6691: **
 6692: ** [[the xPagecount() page cache methods]]
 6693: ** The xPagecount() method must return the number of pages currently
 6694: ** stored in the cache, both pinned and unpinned.
 6695: ** 
 6696: ** [[the xFetch() page cache methods]]
 6697: ** The xFetch() method locates a page in the cache and returns a pointer to 
 6698: ** an sqlite3_pcache_page object associated with that page, or a NULL pointer.
 6699: ** The pBuf element of the returned sqlite3_pcache_page object will be a
 6700: ** pointer to a buffer of szPage bytes used to store the content of a 
 6701: ** single database page.  The pExtra element of sqlite3_pcache_page will be
 6702: ** a pointer to the szExtra bytes of extra storage that SQLite has requested
 6703: ** for each entry in the page cache.
 6704: **
 6705: ** The page to be fetched is determined by the key. ^The minimum key value
 6706: ** is 1.  After it has been retrieved using xFetch, the page is considered
 6707: ** to be "pinned".
 6708: **
 6709: ** If the requested page is already in the page cache, then the page cache
 6710: ** implementation must return a pointer to the page buffer with its content
 6711: ** intact.  If the requested page is not already in the cache, then the
 6712: ** cache implementation should use the value of the createFlag
 6713: ** parameter to help it determined what action to take:
 6714: **
 6715: ** <table border=1 width=85% align=center>
 6716: ** <tr><th> createFlag <th> Behaviour when page is not already in cache
 6717: ** <tr><td> 0 <td> Do not allocate a new page.  Return NULL.
 6718: ** <tr><td> 1 <td> Allocate a new page if it easy and convenient to do so.
 6719: **                 Otherwise return NULL.
 6720: ** <tr><td> 2 <td> Make every effort to allocate a new page.  Only return
 6721: **                 NULL if allocating a new page is effectively impossible.
 6722: ** </table>
 6723: **
 6724: ** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1.  SQLite
 6725: ** will only use a createFlag of 2 after a prior call with a createFlag of 1
 6726: ** failed.)^  In between the to xFetch() calls, SQLite may
 6727: ** attempt to unpin one or more cache pages by spilling the content of
 6728: ** pinned pages to disk and synching the operating system disk cache.
 6729: **
 6730: ** [[the xUnpin() page cache method]]
 6731: ** ^xUnpin() is called by SQLite with a pointer to a currently pinned page
 6732: ** as its second argument.  If the third parameter, discard, is non-zero,
 6733: ** then the page must be evicted from the cache.
 6734: ** ^If the discard parameter is
 6735: ** zero, then the page may be discarded or retained at the discretion of
 6736: ** page cache implementation. ^The page cache implementation
 6737: ** may choose to evict unpinned pages at any time.
 6738: **
 6739: ** The cache must not perform any reference counting. A single 
 6740: ** call to xUnpin() unpins the page regardless of the number of prior calls 
 6741: ** to xFetch().
 6742: **
 6743: ** [[the xRekey() page cache methods]]
 6744: ** The xRekey() method is used to change the key value associated with the
 6745: ** page passed as the second argument. If the cache
 6746: ** previously contains an entry associated with newKey, it must be
 6747: ** discarded. ^Any prior cache entry associated with newKey is guaranteed not
 6748: ** to be pinned.
 6749: **
 6750: ** When SQLite calls the xTruncate() method, the cache must discard all
 6751: ** existing cache entries with page numbers (keys) greater than or equal
 6752: ** to the value of the iLimit parameter passed to xTruncate(). If any
 6753: ** of these pages are pinned, they are implicitly unpinned, meaning that
 6754: ** they can be safely discarded.
 6755: **
 6756: ** [[the xDestroy() page cache method]]
 6757: ** ^The xDestroy() method is used to delete a cache allocated by xCreate().
 6758: ** All resources associated with the specified cache should be freed. ^After
 6759: ** calling the xDestroy() method, SQLite considers the [sqlite3_pcache*]
 6760: ** handle invalid, and will not use it with any other sqlite3_pcache_methods2
 6761: ** functions.
 6762: **
 6763: ** [[the xShrink() page cache method]]
 6764: ** ^SQLite invokes the xShrink() method when it wants the page cache to
 6765: ** free up as much of heap memory as possible.  The page cache implementation
 6766: ** is not obligated to free any memory, but well-behaved implementations should
 6767: ** do their best.
 6768: */
 6769: typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2;
 6770: struct sqlite3_pcache_methods2 {
 6771:   int iVersion;
 6772:   void *pArg;
 6773:   int (*xInit)(void*);
 6774:   void (*xShutdown)(void*);
 6775:   sqlite3_pcache *(*xCreate)(int szPage, int szExtra, int bPurgeable);
 6776:   void (*xCachesize)(sqlite3_pcache*, int nCachesize);
 6777:   int (*xPagecount)(sqlite3_pcache*);
 6778:   sqlite3_pcache_page *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag);
 6779:   void (*xUnpin)(sqlite3_pcache*, sqlite3_pcache_page*, int discard);
 6780:   void (*xRekey)(sqlite3_pcache*, sqlite3_pcache_page*, 
 6781:       unsigned oldKey, unsigned newKey);
 6782:   void (*xTruncate)(sqlite3_pcache*, unsigned iLimit);
 6783:   void (*xDestroy)(sqlite3_pcache*);
 6784:   void (*xShrink)(sqlite3_pcache*);
 6785: };
 6786: 
 6787: /*
 6788: ** This is the obsolete pcache_methods object that has now been replaced
 6789: ** by sqlite3_pcache_methods2.  This object is not used by SQLite.  It is
 6790: ** retained in the header file for backwards compatibility only.
 6791: */
 6792: typedef struct sqlite3_pcache_methods sqlite3_pcache_methods;
 6793: struct sqlite3_pcache_methods {
 6794:   void *pArg;
 6795:   int (*xInit)(void*);
 6796:   void (*xShutdown)(void*);
 6797:   sqlite3_pcache *(*xCreate)(int szPage, int bPurgeable);
 6798:   void (*xCachesize)(sqlite3_pcache*, int nCachesize);
 6799:   int (*xPagecount)(sqlite3_pcache*);
 6800:   void *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag);
 6801:   void (*xUnpin)(sqlite3_pcache*, void*, int discard);
 6802:   void (*xRekey)(sqlite3_pcache*, void*, unsigned oldKey, unsigned newKey);
 6803:   void (*xTruncate)(sqlite3_pcache*, unsigned iLimit);
 6804:   void (*xDestroy)(sqlite3_pcache*);
 6805: };
 6806: 
 6807: 
 6808: /*
 6809: ** CAPI3REF: Online Backup Object
 6810: **
 6811: ** The sqlite3_backup object records state information about an ongoing
 6812: ** online backup operation.  ^The sqlite3_backup object is created by
 6813: ** a call to [sqlite3_backup_init()] and is destroyed by a call to
 6814: ** [sqlite3_backup_finish()].
 6815: **
 6816: ** See Also: [Using the SQLite Online Backup API]
 6817: */
 6818: typedef struct sqlite3_backup sqlite3_backup;
 6819: 
 6820: /*
 6821: ** CAPI3REF: Online Backup API.
 6822: **
 6823: ** The backup API copies the content of one database into another.
 6824: ** It is useful either for creating backups of databases or
 6825: ** for copying in-memory databases to or from persistent files. 
 6826: **
 6827: ** See Also: [Using the SQLite Online Backup API]
 6828: **
 6829: ** ^SQLite holds a write transaction open on the destination database file
 6830: ** for the duration of the backup operation.
 6831: ** ^The source database is read-locked only while it is being read;
 6832: ** it is not locked continuously for the entire backup operation.
 6833: ** ^Thus, the backup may be performed on a live source database without
 6834: ** preventing other database connections from
 6835: ** reading or writing to the source database while the backup is underway.
 6836: ** 
 6837: ** ^(To perform a backup operation: 
 6838: **   <ol>
 6839: **     <li><b>sqlite3_backup_init()</b> is called once to initialize the
 6840: **         backup, 
 6841: **     <li><b>sqlite3_backup_step()</b> is called one or more times to transfer 
 6842: **         the data between the two databases, and finally
 6843: **     <li><b>sqlite3_backup_finish()</b> is called to release all resources 
 6844: **         associated with the backup operation. 
 6845: **   </ol>)^
 6846: ** There should be exactly one call to sqlite3_backup_finish() for each
 6847: ** successful call to sqlite3_backup_init().
 6848: **
 6849: ** [[sqlite3_backup_init()]] <b>sqlite3_backup_init()</b>
 6850: **
 6851: ** ^The D and N arguments to sqlite3_backup_init(D,N,S,M) are the 
 6852: ** [database connection] associated with the destination database 
 6853: ** and the database name, respectively.
 6854: ** ^The database name is "main" for the main database, "temp" for the
 6855: ** temporary database, or the name specified after the AS keyword in
 6856: ** an [ATTACH] statement for an attached database.
 6857: ** ^The S and M arguments passed to 
 6858: ** sqlite3_backup_init(D,N,S,M) identify the [database connection]
 6859: ** and database name of the source database, respectively.
 6860: ** ^The source and destination [database connections] (parameters S and D)
 6861: ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
 6862: ** an error.
 6863: **
 6864: ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
 6865: ** returned and an error code and error message are stored in the
 6866: ** destination [database connection] D.
 6867: ** ^The error code and message for the failed call to sqlite3_backup_init()
 6868: ** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or
 6869: ** [sqlite3_errmsg16()] functions.
 6870: ** ^A successful call to sqlite3_backup_init() returns a pointer to an
 6871: ** [sqlite3_backup] object.
 6872: ** ^The [sqlite3_backup] object may be used with the sqlite3_backup_step() and
 6873: ** sqlite3_backup_finish() functions to perform the specified backup 
 6874: ** operation.
 6875: **
 6876: ** [[sqlite3_backup_step()]] <b>sqlite3_backup_step()</b>
 6877: **
 6878: ** ^Function sqlite3_backup_step(B,N) will copy up to N pages between 
 6879: ** the source and destination databases specified by [sqlite3_backup] object B.
 6880: ** ^If N is negative, all remaining source pages are copied. 
 6881: ** ^If sqlite3_backup_step(B,N) successfully copies N pages and there
 6882: ** are still more pages to be copied, then the function returns [SQLITE_OK].
 6883: ** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages
 6884: ** from source to destination, then it returns [SQLITE_DONE].
 6885: ** ^If an error occurs while running sqlite3_backup_step(B,N),
 6886: ** then an [error code] is returned. ^As well as [SQLITE_OK] and
 6887: ** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY],
 6888: ** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an
 6889: ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code.
 6890: **
 6891: ** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if
 6892: ** <ol>
 6893: ** <li> the destination database was opened read-only, or
 6894: ** <li> the destination database is using write-ahead-log journaling
 6895: ** and the destination and source page sizes differ, or
 6896: ** <li> the destination database is an in-memory database and the
 6897: ** destination and source page sizes differ.
 6898: ** </ol>)^
 6899: **
 6900: ** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then
 6901: ** the [sqlite3_busy_handler | busy-handler function]
 6902: ** is invoked (if one is specified). ^If the 
 6903: ** busy-handler returns non-zero before the lock is available, then 
 6904: ** [SQLITE_BUSY] is returned to the caller. ^In this case the call to
 6905: ** sqlite3_backup_step() can be retried later. ^If the source
 6906: ** [database connection]
 6907: ** is being used to write to the source database when sqlite3_backup_step()
 6908: ** is called, then [SQLITE_LOCKED] is returned immediately. ^Again, in this
 6909: ** case the call to sqlite3_backup_step() can be retried later on. ^(If
 6910: ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or
 6911: ** [SQLITE_READONLY] is returned, then 
 6912: ** there is no point in retrying the call to sqlite3_backup_step(). These 
 6913: ** errors are considered fatal.)^  The application must accept 
 6914: ** that the backup operation has failed and pass the backup operation handle 
 6915: ** to the sqlite3_backup_finish() to release associated resources.
 6916: **
 6917: ** ^The first call to sqlite3_backup_step() obtains an exclusive lock
 6918: ** on the destination file. ^The exclusive lock is not released until either 
 6919: ** sqlite3_backup_finish() is called or the backup operation is complete 
 6920: ** and sqlite3_backup_step() returns [SQLITE_DONE].  ^Every call to
 6921: ** sqlite3_backup_step() obtains a [shared lock] on the source database that
 6922: ** lasts for the duration of the sqlite3_backup_step() call.
 6923: ** ^Because the source database is not locked between calls to
 6924: ** sqlite3_backup_step(), the source database may be modified mid-way
 6925: ** through the backup process.  ^If the source database is modified by an
 6926: ** external process or via a database connection other than the one being
 6927: ** used by the backup operation, then the backup will be automatically
 6928: ** restarted by the next call to sqlite3_backup_step(). ^If the source 
 6929: ** database is modified by the using the same database connection as is used
 6930: ** by the backup operation, then the backup database is automatically
 6931: ** updated at the same time.
 6932: **
 6933: ** [[sqlite3_backup_finish()]] <b>sqlite3_backup_finish()</b>
 6934: **
 6935: ** When sqlite3_backup_step() has returned [SQLITE_DONE], or when the 
 6936: ** application wishes to abandon the backup operation, the application
 6937: ** should destroy the [sqlite3_backup] by passing it to sqlite3_backup_finish().
 6938: ** ^The sqlite3_backup_finish() interfaces releases all
 6939: ** resources associated with the [sqlite3_backup] object. 
 6940: ** ^If sqlite3_backup_step() has not yet returned [SQLITE_DONE], then any
 6941: ** active write-transaction on the destination database is rolled back.
 6942: ** The [sqlite3_backup] object is invalid
 6943: ** and may not be used following a call to sqlite3_backup_finish().
 6944: **
 6945: ** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no
 6946: ** sqlite3_backup_step() errors occurred, regardless or whether or not
 6947: ** sqlite3_backup_step() completed.
 6948: ** ^If an out-of-memory condition or IO error occurred during any prior
 6949: ** sqlite3_backup_step() call on the same [sqlite3_backup] object, then
 6950: ** sqlite3_backup_finish() returns the corresponding [error code].
 6951: **
 6952: ** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step()
 6953: ** is not a permanent error and does not affect the return value of
 6954: ** sqlite3_backup_finish().
 6955: **
 6956: ** [[sqlite3_backup__remaining()]] [[sqlite3_backup_pagecount()]]
 6957: ** <b>sqlite3_backup_remaining() and sqlite3_backup_pagecount()</b>
 6958: **
 6959: ** ^Each call to sqlite3_backup_step() sets two values inside
 6960: ** the [sqlite3_backup] object: the number of pages still to be backed
 6961: ** up and the total number of pages in the source database file.
 6962: ** The sqlite3_backup_remaining() and sqlite3_backup_pagecount() interfaces
 6963: ** retrieve these two values, respectively.
 6964: **
 6965: ** ^The values returned by these functions are only updated by
 6966: ** sqlite3_backup_step(). ^If the source database is modified during a backup
 6967: ** operation, then the values are not updated to account for any extra
 6968: ** pages that need to be updated or the size of the source database file
 6969: ** changing.
 6970: **
 6971: ** <b>Concurrent Usage of Database Handles</b>
 6972: **
 6973: ** ^The source [database connection] may be used by the application for other
 6974: ** purposes while a backup operation is underway or being initialized.
 6975: ** ^If SQLite is compiled and configured to support threadsafe database
 6976: ** connections, then the source database connection may be used concurrently
 6977: ** from within other threads.
 6978: **
 6979: ** However, the application must guarantee that the destination 
 6980: ** [database connection] is not passed to any other API (by any thread) after 
 6981: ** sqlite3_backup_init() is called and before the corresponding call to
 6982: ** sqlite3_backup_finish().  SQLite does not currently check to see
 6983: ** if the application incorrectly accesses the destination [database connection]
 6984: ** and so no error code is reported, but the operations may malfunction
 6985: ** nevertheless.  Use of the destination database connection while a
 6986: ** backup is in progress might also also cause a mutex deadlock.
 6987: **
 6988: ** If running in [shared cache mode], the application must
 6989: ** guarantee that the shared cache used by the destination database
 6990: ** is not accessed while the backup is running. In practice this means
 6991: ** that the application must guarantee that the disk file being 
 6992: ** backed up to is not accessed by any connection within the process,
 6993: ** not just the specific connection that was passed to sqlite3_backup_init().
 6994: **
 6995: ** The [sqlite3_backup] object itself is partially threadsafe. Multiple 
 6996: ** threads may safely make multiple concurrent calls to sqlite3_backup_step().
 6997: ** However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount()
 6998: ** APIs are not strictly speaking threadsafe. If they are invoked at the
 6999: ** same time as another thread is invoking sqlite3_backup_step() it is
 7000: ** possible that they return invalid values.
 7001: */
 7002: SQLITE_API sqlite3_backup *sqlite3_backup_init(
 7003:   sqlite3 *pDest,                        /* Destination database handle */
 7004:   const char *zDestName,                 /* Destination database name */
 7005:   sqlite3 *pSource,                      /* Source database handle */
 7006:   const char *zSourceName                /* Source database name */
 7007: );
 7008: SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage);
 7009: SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p);
 7010: SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p);
 7011: SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p);
 7012: 
 7013: /*
 7014: ** CAPI3REF: Unlock Notification
 7015: **
 7016: ** ^When running in shared-cache mode, a database operation may fail with
 7017: ** an [SQLITE_LOCKED] error if the required locks on the shared-cache or
 7018: ** individual tables within the shared-cache cannot be obtained. See
 7019: ** [SQLite Shared-Cache Mode] for a description of shared-cache locking. 
 7020: ** ^This API may be used to register a callback that SQLite will invoke 
 7021: ** when the connection currently holding the required lock relinquishes it.
 7022: ** ^This API is only available if the library was compiled with the
 7023: ** [SQLITE_ENABLE_UNLOCK_NOTIFY] C-preprocessor symbol defined.
 7024: **
 7025: ** See Also: [Using the SQLite Unlock Notification Feature].
 7026: **
 7027: ** ^Shared-cache locks are released when a database connection concludes
 7028: ** its current transaction, either by committing it or rolling it back. 
 7029: **
 7030: ** ^When a connection (known as the blocked connection) fails to obtain a
 7031: ** shared-cache lock and SQLITE_LOCKED is returned to the caller, the
 7032: ** identity of the database connection (the blocking connection) that
 7033: ** has locked the required resource is stored internally. ^After an 
 7034: ** application receives an SQLITE_LOCKED error, it may call the
 7035: ** sqlite3_unlock_notify() method with the blocked connection handle as 
 7036: ** the first argument to register for a callback that will be invoked
 7037: ** when the blocking connections current transaction is concluded. ^The
 7038: ** callback is invoked from within the [sqlite3_step] or [sqlite3_close]
 7039: ** call that concludes the blocking connections transaction.
 7040: **
 7041: ** ^(If sqlite3_unlock_notify() is called in a multi-threaded application,
 7042: ** there is a chance that the blocking connection will have already
 7043: ** concluded its transaction by the time sqlite3_unlock_notify() is invoked.
 7044: ** If this happens, then the specified callback is invoked immediately,
 7045: ** from within the call to sqlite3_unlock_notify().)^
 7046: **
 7047: ** ^If the blocked connection is attempting to obtain a write-lock on a
 7048: ** shared-cache table, and more than one other connection currently holds
 7049: ** a read-lock on the same table, then SQLite arbitrarily selects one of 
 7050: ** the other connections to use as the blocking connection.
 7051: **
 7052: ** ^(There may be at most one unlock-notify callback registered by a 
 7053: ** blocked connection. If sqlite3_unlock_notify() is called when the
 7054: ** blocked connection already has a registered unlock-notify callback,
 7055: ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is
 7056: ** called with a NULL pointer as its second argument, then any existing
 7057: ** unlock-notify callback is canceled. ^The blocked connections 
 7058: ** unlock-notify callback may also be canceled by closing the blocked
 7059: ** connection using [sqlite3_close()].
 7060: **
 7061: ** The unlock-notify callback is not reentrant. If an application invokes
 7062: ** any sqlite3_xxx API functions from within an unlock-notify callback, a
 7063: ** crash or deadlock may be the result.
 7064: **
 7065: ** ^Unless deadlock is detected (see below), sqlite3_unlock_notify() always
 7066: ** returns SQLITE_OK.
 7067: **
 7068: ** <b>Callback Invocation Details</b>
 7069: **
 7070: ** When an unlock-notify callback is registered, the application provides a 
 7071: ** single void* pointer that is passed to the callback when it is invoked.
 7072: ** However, the signature of the callback function allows SQLite to pass
 7073: ** it an array of void* context pointers. The first argument passed to
 7074: ** an unlock-notify callback is a pointer to an array of void* pointers,
 7075: ** and the second is the number of entries in the array.
 7076: **
 7077: ** When a blocking connections transaction is concluded, there may be
 7078: ** more than one blocked connection that has registered for an unlock-notify
 7079: ** callback. ^If two or more such blocked connections have specified the
 7080: ** same callback function, then instead of invoking the callback function
 7081: ** multiple times, it is invoked once with the set of void* context pointers
 7082: ** specified by the blocked connections bundled together into an array.
 7083: ** This gives the application an opportunity to prioritize any actions 
 7084: ** related to the set of unblocked database connections.
 7085: **
 7086: ** <b>Deadlock Detection</b>
 7087: **
 7088: ** Assuming that after registering for an unlock-notify callback a 
 7089: ** database waits for the callback to be issued before taking any further
 7090: ** action (a reasonable assumption), then using this API may cause the
 7091: ** application to deadlock. For example, if connection X is waiting for
 7092: ** connection Y's transaction to be concluded, and similarly connection
 7093: ** Y is waiting on connection X's transaction, then neither connection
 7094: ** will proceed and the system may remain deadlocked indefinitely.
 7095: **
 7096: ** To avoid this scenario, the sqlite3_unlock_notify() performs deadlock
 7097: ** detection. ^If a given call to sqlite3_unlock_notify() would put the
 7098: ** system in a deadlocked state, then SQLITE_LOCKED is returned and no
 7099: ** unlock-notify callback is registered. The system is said to be in
 7100: ** a deadlocked state if connection A has registered for an unlock-notify
 7101: ** callback on the conclusion of connection B's transaction, and connection
 7102: ** B has itself registered for an unlock-notify callback when connection
 7103: ** A's transaction is concluded. ^Indirect deadlock is also detected, so
 7104: ** the system is also considered to be deadlocked if connection B has
 7105: ** registered for an unlock-notify callback on the conclusion of connection
 7106: ** C's transaction, where connection C is waiting on connection A. ^Any
 7107: ** number of levels of indirection are allowed.
 7108: **
 7109: ** <b>The "DROP TABLE" Exception</b>
 7110: **
 7111: ** When a call to [sqlite3_step()] returns SQLITE_LOCKED, it is almost 
 7112: ** always appropriate to call sqlite3_unlock_notify(). There is however,
 7113: ** one exception. When executing a "DROP TABLE" or "DROP INDEX" statement,
 7114: ** SQLite checks if there are any currently executing SELECT statements
 7115: ** that belong to the same connection. If there are, SQLITE_LOCKED is
 7116: ** returned. In this case there is no "blocking connection", so invoking
 7117: ** sqlite3_unlock_notify() results in the unlock-notify callback being
 7118: ** invoked immediately. If the application then re-attempts the "DROP TABLE"
 7119: ** or "DROP INDEX" query, an infinite loop might be the result.
 7120: **
 7121: ** One way around this problem is to check the extended error code returned
 7122: ** by an sqlite3_step() call. ^(If there is a blocking connection, then the
 7123: ** extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in
 7124: ** the special "DROP TABLE/INDEX" case, the extended error code is just 
 7125: ** SQLITE_LOCKED.)^
 7126: */
 7127: SQLITE_API int sqlite3_unlock_notify(
 7128:   sqlite3 *pBlocked,                          /* Waiting connection */
 7129:   void (*xNotify)(void **apArg, int nArg),    /* Callback function to invoke */
 7130:   void *pNotifyArg                            /* Argument to pass to xNotify */
 7131: );
 7132: 
 7133: 
 7134: /*
 7135: ** CAPI3REF: String Comparison
 7136: **
 7137: ** ^The [sqlite3_strnicmp()] API allows applications and extensions to
 7138: ** compare the contents of two buffers containing UTF-8 strings in a
 7139: ** case-independent fashion, using the same definition of case independence 
 7140: ** that SQLite uses internally when comparing identifiers.
 7141: */
 7142: SQLITE_API int sqlite3_strnicmp(const char *, const char *, int);
 7143: 
 7144: /*
 7145: ** CAPI3REF: Error Logging Interface
 7146: **
 7147: ** ^The [sqlite3_log()] interface writes a message into the error log
 7148: ** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()].
 7149: ** ^If logging is enabled, the zFormat string and subsequent arguments are
 7150: ** used with [sqlite3_snprintf()] to generate the final output string.
 7151: **
 7152: ** The sqlite3_log() interface is intended for use by extensions such as
 7153: ** virtual tables, collating functions, and SQL functions.  While there is
 7154: ** nothing to prevent an application from calling sqlite3_log(), doing so
 7155: ** is considered bad form.
 7156: **
 7157: ** The zFormat string must not be NULL.
 7158: **
 7159: ** To avoid deadlocks and other threading problems, the sqlite3_log() routine
 7160: ** will not use dynamically allocated memory.  The log message is stored in
 7161: ** a fixed-length buffer on the stack.  If the log message is longer than
 7162: ** a few hundred characters, it will be truncated to the length of the
 7163: ** buffer.
 7164: */
 7165: SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...);
 7166: 
 7167: /*
 7168: ** CAPI3REF: Write-Ahead Log Commit Hook
 7169: **
 7170: ** ^The [sqlite3_wal_hook()] function is used to register a callback that
 7171: ** will be invoked each time a database connection commits data to a
 7172: ** [write-ahead log] (i.e. whenever a transaction is committed in
 7173: ** [journal_mode | journal_mode=WAL mode]). 
 7174: **
 7175: ** ^The callback is invoked by SQLite after the commit has taken place and 
 7176: ** the associated write-lock on the database released, so the implementation 
 7177: ** may read, write or [checkpoint] the database as required.
 7178: **
 7179: ** ^The first parameter passed to the callback function when it is invoked
 7180: ** is a copy of the third parameter passed to sqlite3_wal_hook() when
 7181: ** registering the callback. ^The second is a copy of the database handle.
 7182: ** ^The third parameter is the name of the database that was written to -
 7183: ** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter
 7184: ** is the number of pages currently in the write-ahead log file,
 7185: ** including those that were just committed.
 7186: **
 7187: ** The callback function should normally return [SQLITE_OK].  ^If an error
 7188: ** code is returned, that error will propagate back up through the
 7189: ** SQLite code base to cause the statement that provoked the callback
 7190: ** to report an error, though the commit will have still occurred. If the
 7191: ** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value
 7192: ** that does not correspond to any valid SQLite error code, the results
 7193: ** are undefined.
 7194: **
 7195: ** A single database handle may have at most a single write-ahead log callback 
 7196: ** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any
 7197: ** previously registered write-ahead log callback. ^Note that the
 7198: ** [sqlite3_wal_autocheckpoint()] interface and the
 7199: ** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will
 7200: ** those overwrite any prior [sqlite3_wal_hook()] settings.
 7201: */
 7202: SQLITE_API void *sqlite3_wal_hook(
 7203:   sqlite3*, 
 7204:   int(*)(void *,sqlite3*,const char*,int),
 7205:   void*
 7206: );
 7207: 
 7208: /*
 7209: ** CAPI3REF: Configure an auto-checkpoint
 7210: **
 7211: ** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around
 7212: ** [sqlite3_wal_hook()] that causes any database on [database connection] D
 7213: ** to automatically [checkpoint]
 7214: ** after committing a transaction if there are N or
 7215: ** more frames in the [write-ahead log] file.  ^Passing zero or 
 7216: ** a negative value as the nFrame parameter disables automatic
 7217: ** checkpoints entirely.
 7218: **
 7219: ** ^The callback registered by this function replaces any existing callback
 7220: ** registered using [sqlite3_wal_hook()].  ^Likewise, registering a callback
 7221: ** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism
 7222: ** configured by this function.
 7223: **
 7224: ** ^The [wal_autocheckpoint pragma] can be used to invoke this interface
 7225: ** from SQL.
 7226: **
 7227: ** ^Every new [database connection] defaults to having the auto-checkpoint
 7228: ** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT]
 7229: ** pages.  The use of this interface
 7230: ** is only necessary if the default setting is found to be suboptimal
 7231: ** for a particular application.
 7232: */
 7233: SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N);
 7234: 
 7235: /*
 7236: ** CAPI3REF: Checkpoint a database
 7237: **
 7238: ** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X
 7239: ** on [database connection] D to be [checkpointed].  ^If X is NULL or an
 7240: ** empty string, then a checkpoint is run on all databases of
 7241: ** connection D.  ^If the database connection D is not in
 7242: ** [WAL | write-ahead log mode] then this interface is a harmless no-op.
 7243: **
 7244: ** ^The [wal_checkpoint pragma] can be used to invoke this interface
 7245: ** from SQL.  ^The [sqlite3_wal_autocheckpoint()] interface and the
 7246: ** [wal_autocheckpoint pragma] can be used to cause this interface to be
 7247: ** run whenever the WAL reaches a certain size threshold.
 7248: **
 7249: ** See also: [sqlite3_wal_checkpoint_v2()]
 7250: */
 7251: SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb);
 7252: 
 7253: /*
 7254: ** CAPI3REF: Checkpoint a database
 7255: **
 7256: ** Run a checkpoint operation on WAL database zDb attached to database 
 7257: ** handle db. The specific operation is determined by the value of the 
 7258: ** eMode parameter:
 7259: **
 7260: ** <dl>
 7261: ** <dt>SQLITE_CHECKPOINT_PASSIVE<dd>
 7262: **   Checkpoint as many frames as possible without waiting for any database 
 7263: **   readers or writers to finish. Sync the db file if all frames in the log
 7264: **   are checkpointed. This mode is the same as calling 
 7265: **   sqlite3_wal_checkpoint(). The busy-handler callback is never invoked.
 7266: **
 7267: ** <dt>SQLITE_CHECKPOINT_FULL<dd>
 7268: **   This mode blocks (calls the busy-handler callback) until there is no
 7269: **   database writer and all readers are reading from the most recent database
 7270: **   snapshot. It then checkpoints all frames in the log file and syncs the
 7271: **   database file. This call blocks database writers while it is running,
 7272: **   but not database readers.
 7273: **
 7274: ** <dt>SQLITE_CHECKPOINT_RESTART<dd>
 7275: **   This mode works the same way as SQLITE_CHECKPOINT_FULL, except after 
 7276: **   checkpointing the log file it blocks (calls the busy-handler callback)
 7277: **   until all readers are reading from the database file only. This ensures 
 7278: **   that the next client to write to the database file restarts the log file 
 7279: **   from the beginning. This call blocks database writers while it is running,
 7280: **   but not database readers.
 7281: ** </dl>
 7282: **
 7283: ** If pnLog is not NULL, then *pnLog is set to the total number of frames in
 7284: ** the log file before returning. If pnCkpt is not NULL, then *pnCkpt is set to
 7285: ** the total number of checkpointed frames (including any that were already
 7286: ** checkpointed when this function is called). *pnLog and *pnCkpt may be
 7287: ** populated even if sqlite3_wal_checkpoint_v2() returns other than SQLITE_OK.
 7288: ** If no values are available because of an error, they are both set to -1
 7289: ** before returning to communicate this to the caller.
 7290: **
 7291: ** All calls obtain an exclusive "checkpoint" lock on the database file. If
 7292: ** any other process is running a checkpoint operation at the same time, the 
 7293: ** lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a 
 7294: ** busy-handler configured, it will not be invoked in this case.
 7295: **
 7296: ** The SQLITE_CHECKPOINT_FULL and RESTART modes also obtain the exclusive 
 7297: ** "writer" lock on the database file. If the writer lock cannot be obtained
 7298: ** immediately, and a busy-handler is configured, it is invoked and the writer
 7299: ** lock retried until either the busy-handler returns 0 or the lock is
 7300: ** successfully obtained. The busy-handler is also invoked while waiting for
 7301: ** database readers as described above. If the busy-handler returns 0 before
 7302: ** the writer lock is obtained or while waiting for database readers, the
 7303: ** checkpoint operation proceeds from that point in the same way as 
 7304: ** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible 
 7305: ** without blocking any further. SQLITE_BUSY is returned in this case.
 7306: **
 7307: ** If parameter zDb is NULL or points to a zero length string, then the
 7308: ** specified operation is attempted on all WAL databases. In this case the
 7309: ** values written to output parameters *pnLog and *pnCkpt are undefined. If 
 7310: ** an SQLITE_BUSY error is encountered when processing one or more of the 
 7311: ** attached WAL databases, the operation is still attempted on any remaining 
 7312: ** attached databases and SQLITE_BUSY is returned to the caller. If any other 
 7313: ** error occurs while processing an attached database, processing is abandoned 
 7314: ** and the error code returned to the caller immediately. If no error 
 7315: ** (SQLITE_BUSY or otherwise) is encountered while processing the attached 
 7316: ** databases, SQLITE_OK is returned.
 7317: **
 7318: ** If database zDb is the name of an attached database that is not in WAL
 7319: ** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If
 7320: ** zDb is not NULL (or a zero length string) and is not the name of any
 7321: ** attached database, SQLITE_ERROR is returned to the caller.
 7322: */
 7323: SQLITE_API int sqlite3_wal_checkpoint_v2(
 7324:   sqlite3 *db,                    /* Database handle */
 7325:   const char *zDb,                /* Name of attached database (or NULL) */
 7326:   int eMode,                      /* SQLITE_CHECKPOINT_* value */
 7327:   int *pnLog,                     /* OUT: Size of WAL log in frames */
 7328:   int *pnCkpt                     /* OUT: Total number of frames checkpointed */
 7329: );
 7330: 
 7331: /*
 7332: ** CAPI3REF: Checkpoint operation parameters
 7333: **
 7334: ** These constants can be used as the 3rd parameter to
 7335: ** [sqlite3_wal_checkpoint_v2()].  See the [sqlite3_wal_checkpoint_v2()]
 7336: ** documentation for additional information about the meaning and use of
 7337: ** each of these values.
 7338: */
 7339: #define SQLITE_CHECKPOINT_PASSIVE 0
 7340: #define SQLITE_CHECKPOINT_FULL    1
 7341: #define SQLITE_CHECKPOINT_RESTART 2
 7342: 
 7343: /*
 7344: ** CAPI3REF: Virtual Table Interface Configuration
 7345: **
 7346: ** This function may be called by either the [xConnect] or [xCreate] method
 7347: ** of a [virtual table] implementation to configure
 7348: ** various facets of the virtual table interface.
 7349: **
 7350: ** If this interface is invoked outside the context of an xConnect or
 7351: ** xCreate virtual table method then the behavior is undefined.
 7352: **
 7353: ** At present, there is only one option that may be configured using
 7354: ** this function. (See [SQLITE_VTAB_CONSTRAINT_SUPPORT].)  Further options
 7355: ** may be added in the future.
 7356: */
 7357: SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
 7358: 
 7359: /*
 7360: ** CAPI3REF: Virtual Table Configuration Options
 7361: **
 7362: ** These macros define the various options to the
 7363: ** [sqlite3_vtab_config()] interface that [virtual table] implementations
 7364: ** can use to customize and optimize their behavior.
 7365: **
 7366: ** <dl>
 7367: ** <dt>SQLITE_VTAB_CONSTRAINT_SUPPORT
 7368: ** <dd>Calls of the form
 7369: ** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported,
 7370: ** where X is an integer.  If X is zero, then the [virtual table] whose
 7371: ** [xCreate] or [xConnect] method invoked [sqlite3_vtab_config()] does not
 7372: ** support constraints.  In this configuration (which is the default) if
 7373: ** a call to the [xUpdate] method returns [SQLITE_CONSTRAINT], then the entire
 7374: ** statement is rolled back as if [ON CONFLICT | OR ABORT] had been
 7375: ** specified as part of the users SQL statement, regardless of the actual
 7376: ** ON CONFLICT mode specified.
 7377: **
 7378: ** If X is non-zero, then the virtual table implementation guarantees
 7379: ** that if [xUpdate] returns [SQLITE_CONSTRAINT], it will do so before
 7380: ** any modifications to internal or persistent data structures have been made.
 7381: ** If the [ON CONFLICT] mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite 
 7382: ** is able to roll back a statement or database transaction, and abandon
 7383: ** or continue processing the current SQL statement as appropriate. 
 7384: ** If the ON CONFLICT mode is REPLACE and the [xUpdate] method returns
 7385: ** [SQLITE_CONSTRAINT], SQLite handles this as if the ON CONFLICT mode
 7386: ** had been ABORT.
 7387: **
 7388: ** Virtual table implementations that are required to handle OR REPLACE
 7389: ** must do so within the [xUpdate] method. If a call to the 
 7390: ** [sqlite3_vtab_on_conflict()] function indicates that the current ON 
 7391: ** CONFLICT policy is REPLACE, the virtual table implementation should 
 7392: ** silently replace the appropriate rows within the xUpdate callback and
 7393: ** return SQLITE_OK. Or, if this is not possible, it may return
 7394: ** SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT 
 7395: ** constraint handling.
 7396: ** </dl>
 7397: */
 7398: #define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
 7399: 
 7400: /*
 7401: ** CAPI3REF: Determine The Virtual Table Conflict Policy
 7402: **
 7403: ** This function may only be called from within a call to the [xUpdate] method
 7404: ** of a [virtual table] implementation for an INSERT or UPDATE operation. ^The
 7405: ** value returned is one of [SQLITE_ROLLBACK], [SQLITE_IGNORE], [SQLITE_FAIL],
 7406: ** [SQLITE_ABORT], or [SQLITE_REPLACE], according to the [ON CONFLICT] mode
 7407: ** of the SQL statement that triggered the call to the [xUpdate] method of the
 7408: ** [virtual table].
 7409: */
 7410: SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *);
 7411: 
 7412: /*
 7413: ** CAPI3REF: Conflict resolution modes
 7414: **
 7415: ** These constants are returned by [sqlite3_vtab_on_conflict()] to
 7416: ** inform a [virtual table] implementation what the [ON CONFLICT] mode
 7417: ** is for the SQL statement being evaluated.
 7418: **
 7419: ** Note that the [SQLITE_IGNORE] constant is also used as a potential
 7420: ** return value from the [sqlite3_set_authorizer()] callback and that
 7421: ** [SQLITE_ABORT] is also a [result code].
 7422: */
 7423: #define SQLITE_ROLLBACK 1
 7424: /* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
 7425: #define SQLITE_FAIL     3
 7426: /* #define SQLITE_ABORT 4  // Also an error code */
 7427: #define SQLITE_REPLACE  5
 7428: 
 7429: 
 7430: 
 7431: /*
 7432: ** Undo the hack that converts floating point types to integer for
 7433: ** builds on processors without floating point support.
 7434: */
 7435: #ifdef SQLITE_OMIT_FLOATING_POINT
 7436: # undef double
 7437: #endif
 7438: 
 7439: #if 0
 7440: }  /* End of the 'extern "C"' block */
 7441: #endif
 7442: #endif
 7443: 
 7444: /*
 7445: ** 2010 August 30
 7446: **
 7447: ** The author disclaims copyright to this source code.  In place of
 7448: ** a legal notice, here is a blessing:
 7449: **
 7450: **    May you do good and not evil.
 7451: **    May you find forgiveness for yourself and forgive others.
 7452: **    May you share freely, never taking more than you give.
 7453: **
 7454: *************************************************************************
 7455: */
 7456: 
 7457: #ifndef _SQLITE3RTREE_H_
 7458: #define _SQLITE3RTREE_H_
 7459: 
 7460: 
 7461: #if 0
 7462: extern "C" {
 7463: #endif
 7464: 
 7465: typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
 7466: 
 7467: /*
 7468: ** Register a geometry callback named zGeom that can be used as part of an
 7469: ** R-Tree geometry query as follows:
 7470: **
 7471: **   SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zGeom(... params ...)
 7472: */
 7473: SQLITE_API int sqlite3_rtree_geometry_callback(
 7474:   sqlite3 *db,
 7475:   const char *zGeom,
 7476:   int (*xGeom)(sqlite3_rtree_geometry *, int nCoord, double *aCoord, int *pRes),
 7477:   void *pContext
 7478: );
 7479: 
 7480: 
 7481: /*
 7482: ** A pointer to a structure of the following type is passed as the first
 7483: ** argument to callbacks registered using rtree_geometry_callback().
 7484: */
 7485: struct sqlite3_rtree_geometry {
 7486:   void *pContext;                 /* Copy of pContext passed to s_r_g_c() */
 7487:   int nParam;                     /* Size of array aParam[] */
 7488:   double *aParam;                 /* Parameters passed to SQL geom function */
 7489:   void *pUser;                    /* Callback implementation user data */
 7490:   void (*xDelUser)(void *);       /* Called by SQLite to clean up pUser */
 7491: };
 7492: 
 7493: 
 7494: #if 0
 7495: }  /* end of the 'extern "C"' block */
 7496: #endif
 7497: 
 7498: #endif  /* ifndef _SQLITE3RTREE_H_ */
 7499: 
 7500: 
 7501: /************** End of sqlite3.h *********************************************/
 7502: /************** Continuing where we left off in sqliteInt.h ******************/
 7503: /************** Include hash.h in the middle of sqliteInt.h ******************/
 7504: /************** Begin file hash.h ********************************************/
 7505: /*
 7506: ** 2001 September 22
 7507: **
 7508: ** The author disclaims copyright to this source code.  In place of
 7509: ** a legal notice, here is a blessing:
 7510: **
 7511: **    May you do good and not evil.
 7512: **    May you find forgiveness for yourself and forgive others.
 7513: **    May you share freely, never taking more than you give.
 7514: **
 7515: *************************************************************************
 7516: ** This is the header file for the generic hash-table implemenation
 7517: ** used in SQLite.
 7518: */
 7519: #ifndef _SQLITE_HASH_H_
 7520: #define _SQLITE_HASH_H_
 7521: 
 7522: /* Forward declarations of structures. */
 7523: typedef struct Hash Hash;
 7524: typedef struct HashElem HashElem;
 7525: 
 7526: /* A complete hash table is an instance of the following structure.
 7527: ** The internals of this structure are intended to be opaque -- client
 7528: ** code should not attempt to access or modify the fields of this structure
 7529: ** directly.  Change this structure only by using the routines below.
 7530: ** However, some of the "procedures" and "functions" for modifying and
 7531: ** accessing this structure are really macros, so we can't really make
 7532: ** this structure opaque.
 7533: **
 7534: ** All elements of the hash table are on a single doubly-linked list.
 7535: ** Hash.first points to the head of this list.
 7536: **
 7537: ** There are Hash.htsize buckets.  Each bucket points to a spot in
 7538: ** the global doubly-linked list.  The contents of the bucket are the
 7539: ** element pointed to plus the next _ht.count-1 elements in the list.
 7540: **
 7541: ** Hash.htsize and Hash.ht may be zero.  In that case lookup is done
 7542: ** by a linear search of the global list.  For small tables, the 
 7543: ** Hash.ht table is never allocated because if there are few elements
 7544: ** in the table, it is faster to do a linear search than to manage
 7545: ** the hash table.
 7546: */
 7547: struct Hash {
 7548:   unsigned int htsize;      /* Number of buckets in the hash table */
 7549:   unsigned int count;       /* Number of entries in this table */
 7550:   HashElem *first;          /* The first element of the array */
 7551:   struct _ht {              /* the hash table */
 7552:     int count;                 /* Number of entries with this hash */
 7553:     HashElem *chain;           /* Pointer to first entry with this hash */
 7554:   } *ht;
 7555: };
 7556: 
 7557: /* Each element in the hash table is an instance of the following 
 7558: ** structure.  All elements are stored on a single doubly-linked list.
 7559: **
 7560: ** Again, this structure is intended to be opaque, but it can't really
 7561: ** be opaque because it is used by macros.
 7562: */
 7563: struct HashElem {
 7564:   HashElem *next, *prev;       /* Next and previous elements in the table */
 7565:   void *data;                  /* Data associated with this element */
 7566:   const char *pKey; int nKey;  /* Key associated with this element */
 7567: };
 7568: 
 7569: /*
 7570: ** Access routines.  To delete, insert a NULL pointer.
 7571: */
 7572: SQLITE_PRIVATE void sqlite3HashInit(Hash*);
 7573: SQLITE_PRIVATE void *sqlite3HashInsert(Hash*, const char *pKey, int nKey, void *pData);
 7574: SQLITE_PRIVATE void *sqlite3HashFind(const Hash*, const char *pKey, int nKey);
 7575: SQLITE_PRIVATE void sqlite3HashClear(Hash*);
 7576: 
 7577: /*
 7578: ** Macros for looping over all elements of a hash table.  The idiom is
 7579: ** like this:
 7580: **
 7581: **   Hash h;
 7582: **   HashElem *p;
 7583: **   ...
 7584: **   for(p=sqliteHashFirst(&h); p; p=sqliteHashNext(p)){
 7585: **     SomeStructure *pData = sqliteHashData(p);
 7586: **     // do something with pData
 7587: **   }
 7588: */
 7589: #define sqliteHashFirst(H)  ((H)->first)
 7590: #define sqliteHashNext(E)   ((E)->next)
 7591: #define sqliteHashData(E)   ((E)->data)
 7592: /* #define sqliteHashKey(E)    ((E)->pKey) // NOT USED */
 7593: /* #define sqliteHashKeysize(E) ((E)->nKey)  // NOT USED */
 7594: 
 7595: /*
 7596: ** Number of entries in a hash table
 7597: */
 7598: /* #define sqliteHashCount(H)  ((H)->count) // NOT USED */
 7599: 
 7600: #endif /* _SQLITE_HASH_H_ */
 7601: 
 7602: /************** End of hash.h ************************************************/
 7603: /************** Continuing where we left off in sqliteInt.h ******************/
 7604: /************** Include parse.h in the middle of sqliteInt.h *****************/
 7605: /************** Begin file parse.h *******************************************/
 7606: #define TK_SEMI                            1
 7607: #define TK_EXPLAIN                         2
 7608: #define TK_QUERY                           3
 7609: #define TK_PLAN                            4
 7610: #define TK_BEGIN                           5
 7611: #define TK_TRANSACTION                     6
 7612: #define TK_DEFERRED                        7
 7613: #define TK_IMMEDIATE                       8
 7614: #define TK_EXCLUSIVE                       9
 7615: #define TK_COMMIT                         10
 7616: #define TK_END                            11
 7617: #define TK_ROLLBACK                       12
 7618: #define TK_SAVEPOINT                      13
 7619: #define TK_RELEASE                        14
 7620: #define TK_TO                             15
 7621: #define TK_TABLE                          16
 7622: #define TK_CREATE                         17
 7623: #define TK_IF                             18
 7624: #define TK_NOT                            19
 7625: #define TK_EXISTS                         20
 7626: #define TK_TEMP                           21
 7627: #define TK_LP                             22
 7628: #define TK_RP                             23
 7629: #define TK_AS                             24
 7630: #define TK_COMMA                          25
 7631: #define TK_ID                             26
 7632: #define TK_INDEXED                        27
 7633: #define TK_ABORT                          28
 7634: #define TK_ACTION                         29
 7635: #define TK_AFTER                          30
 7636: #define TK_ANALYZE                        31
 7637: #define TK_ASC                            32
 7638: #define TK_ATTACH                         33
 7639: #define TK_BEFORE                         34
 7640: #define TK_BY                             35
 7641: #define TK_CASCADE                        36
 7642: #define TK_CAST                           37
 7643: #define TK_COLUMNKW                       38
 7644: #define TK_CONFLICT                       39
 7645: #define TK_DATABASE                       40
 7646: #define TK_DESC                           41
 7647: #define TK_DETACH                         42
 7648: #define TK_EACH                           43
 7649: #define TK_FAIL                           44
 7650: #define TK_FOR                            45
 7651: #define TK_IGNORE                         46
 7652: #define TK_INITIALLY                      47
 7653: #define TK_INSTEAD                        48
 7654: #define TK_LIKE_KW                        49
 7655: #define TK_MATCH                          50
 7656: #define TK_NO                             51
 7657: #define TK_KEY                            52
 7658: #define TK_OF                             53
 7659: #define TK_OFFSET                         54
 7660: #define TK_PRAGMA                         55
 7661: #define TK_RAISE                          56
 7662: #define TK_REPLACE                        57
 7663: #define TK_RESTRICT                       58
 7664: #define TK_ROW                            59
 7665: #define TK_TRIGGER                        60
 7666: #define TK_VACUUM                         61
 7667: #define TK_VIEW                           62
 7668: #define TK_VIRTUAL                        63
 7669: #define TK_REINDEX                        64
 7670: #define TK_RENAME                         65
 7671: #define TK_CTIME_KW                       66
 7672: #define TK_ANY                            67
 7673: #define TK_OR                             68
 7674: #define TK_AND                            69
 7675: #define TK_IS                             70
 7676: #define TK_BETWEEN                        71
 7677: #define TK_IN                             72
 7678: #define TK_ISNULL                         73
 7679: #define TK_NOTNULL                        74
 7680: #define TK_NE                             75
 7681: #define TK_EQ                             76
 7682: #define TK_GT                             77
 7683: #define TK_LE                             78
 7684: #define TK_LT                             79
 7685: #define TK_GE                             80
 7686: #define TK_ESCAPE                         81
 7687: #define TK_BITAND                         82
 7688: #define TK_BITOR                          83
 7689: #define TK_LSHIFT                         84
 7690: #define TK_RSHIFT                         85
 7691: #define TK_PLUS                           86
 7692: #define TK_MINUS                          87
 7693: #define TK_STAR                           88
 7694: #define TK_SLASH                          89
 7695: #define TK_REM                            90
 7696: #define TK_CONCAT                         91
 7697: #define TK_COLLATE                        92
 7698: #define TK_BITNOT                         93
 7699: #define TK_STRING                         94
 7700: #define TK_JOIN_KW                        95
 7701: #define TK_CONSTRAINT                     96
 7702: #define TK_DEFAULT                        97
 7703: #define TK_NULL                           98
 7704: #define TK_PRIMARY                        99
 7705: #define TK_UNIQUE                         100
 7706: #define TK_CHECK                          101
 7707: #define TK_REFERENCES                     102
 7708: #define TK_AUTOINCR                       103
 7709: #define TK_ON                             104
 7710: #define TK_INSERT                         105
 7711: #define TK_DELETE                         106
 7712: #define TK_UPDATE                         107
 7713: #define TK_SET                            108
 7714: #define TK_DEFERRABLE                     109
 7715: #define TK_FOREIGN                        110
 7716: #define TK_DROP                           111
 7717: #define TK_UNION                          112
 7718: #define TK_ALL                            113
 7719: #define TK_EXCEPT                         114
 7720: #define TK_INTERSECT                      115
 7721: #define TK_SELECT                         116
 7722: #define TK_DISTINCT                       117
 7723: #define TK_DOT                            118
 7724: #define TK_FROM                           119
 7725: #define TK_JOIN                           120
 7726: #define TK_USING                          121
 7727: #define TK_ORDER                          122
 7728: #define TK_GROUP                          123
 7729: #define TK_HAVING                         124
 7730: #define TK_LIMIT                          125
 7731: #define TK_WHERE                          126
 7732: #define TK_INTO                           127
 7733: #define TK_VALUES                         128
 7734: #define TK_INTEGER                        129
 7735: #define TK_FLOAT                          130
 7736: #define TK_BLOB                           131
 7737: #define TK_REGISTER                       132
 7738: #define TK_VARIABLE                       133
 7739: #define TK_CASE                           134
 7740: #define TK_WHEN                           135
 7741: #define TK_THEN                           136
 7742: #define TK_ELSE                           137
 7743: #define TK_INDEX                          138
 7744: #define TK_ALTER                          139
 7745: #define TK_ADD                            140
 7746: #define TK_TO_TEXT                        141
 7747: #define TK_TO_BLOB                        142
 7748: #define TK_TO_NUMERIC                     143
 7749: #define TK_TO_INT                         144
 7750: #define TK_TO_REAL                        145
 7751: #define TK_ISNOT                          146
 7752: #define TK_END_OF_FILE                    147
 7753: #define TK_ILLEGAL                        148
 7754: #define TK_SPACE                          149
 7755: #define TK_UNCLOSED_STRING                150
 7756: #define TK_FUNCTION                       151
 7757: #define TK_COLUMN                         152
 7758: #define TK_AGG_FUNCTION                   153
 7759: #define TK_AGG_COLUMN                     154
 7760: #define TK_CONST_FUNC                     155
 7761: #define TK_UMINUS                         156
 7762: #define TK_UPLUS                          157
 7763: 
 7764: /************** End of parse.h ***********************************************/
 7765: /************** Continuing where we left off in sqliteInt.h ******************/
 7766: #include <stdio.h>
 7767: #include <stdlib.h>
 7768: #include <string.h>
 7769: #include <assert.h>
 7770: #include <stddef.h>
 7771: 
 7772: /*
 7773: ** If compiling for a processor that lacks floating point support,
 7774: ** substitute integer for floating-point
 7775: */
 7776: #ifdef SQLITE_OMIT_FLOATING_POINT
 7777: # define double sqlite_int64
 7778: # define float sqlite_int64
 7779: # define LONGDOUBLE_TYPE sqlite_int64
 7780: # ifndef SQLITE_BIG_DBL
 7781: #   define SQLITE_BIG_DBL (((sqlite3_int64)1)<<50)
 7782: # endif
 7783: # define SQLITE_OMIT_DATETIME_FUNCS 1
 7784: # define SQLITE_OMIT_TRACE 1
 7785: # undef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
 7786: # undef SQLITE_HAVE_ISNAN
 7787: #else
 7788: # ifdef __vax__
 7789: #  include <float.h>
 7790: #  define SQLITE_BIG_DBL DBL_MAX
 7791: #  define SQLITE_HUGE_DBL DBL_MAX
 7792: # endif
 7793: #endif
 7794: #ifndef SQLITE_BIG_DBL
 7795: # define SQLITE_BIG_DBL (1e99)
 7796: #endif
 7797: #ifndef SQLITE_HUGE_DBL
 7798: # define SQLITE_HUGE_DBL (1.0e+308)
 7799: #endif
 7800: 
 7801: /*
 7802: ** OMIT_TEMPDB is set to 1 if SQLITE_OMIT_TEMPDB is defined, or 0
 7803: ** afterward. Having this macro allows us to cause the C compiler 
 7804: ** to omit code used by TEMP tables without messy #ifndef statements.
 7805: */
 7806: #ifdef SQLITE_OMIT_TEMPDB
 7807: #define OMIT_TEMPDB 1
 7808: #else
 7809: #define OMIT_TEMPDB 0
 7810: #endif
 7811: 
 7812: /*
 7813: ** The "file format" number is an integer that is incremented whenever
 7814: ** the VDBE-level file format changes.  The following macros define the
 7815: ** the default file format for new databases and the maximum file format
 7816: ** that the library can read.
 7817: */
 7818: #define SQLITE_MAX_FILE_FORMAT 4
 7819: #ifndef SQLITE_DEFAULT_FILE_FORMAT
 7820: # define SQLITE_DEFAULT_FILE_FORMAT 4
 7821: #endif
 7822: 
 7823: /*
 7824: ** Determine whether triggers are recursive by default.  This can be
 7825: ** changed at run-time using a pragma.
 7826: */
 7827: #ifndef SQLITE_DEFAULT_RECURSIVE_TRIGGERS
 7828: # define SQLITE_DEFAULT_RECURSIVE_TRIGGERS 0
 7829: #endif
 7830: 
 7831: /*
 7832: ** Provide a default value for SQLITE_TEMP_STORE in case it is not specified
 7833: ** on the command-line
 7834: */
 7835: #ifndef SQLITE_TEMP_STORE
 7836: # define SQLITE_TEMP_STORE 1
 7837: #endif
 7838: 
 7839: /*
 7840: ** GCC does not define the offsetof() macro so we'll have to do it
 7841: ** ourselves.
 7842: */
 7843: #ifndef offsetof
 7844: #define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD))
 7845: #endif
 7846: 
 7847: /*
 7848: ** Check to see if this machine uses EBCDIC.  (Yes, believe it or
 7849: ** not, there are still machines out there that use EBCDIC.)
 7850: */
 7851: #if 'A' == '\301'
 7852: # define SQLITE_EBCDIC 1
 7853: #else
 7854: # define SQLITE_ASCII 1
 7855: #endif
 7856: 
 7857: /*
 7858: ** Integers of known sizes.  These typedefs might change for architectures
 7859: ** where the sizes very.  Preprocessor macros are available so that the
 7860: ** types can be conveniently redefined at compile-type.  Like this:
 7861: **
 7862: **         cc '-DUINTPTR_TYPE=long long int' ...
 7863: */
 7864: #ifndef UINT32_TYPE
 7865: # ifdef HAVE_UINT32_T
 7866: #  define UINT32_TYPE uint32_t
 7867: # else
 7868: #  define UINT32_TYPE unsigned int
 7869: # endif
 7870: #endif
 7871: #ifndef UINT16_TYPE
 7872: # ifdef HAVE_UINT16_T
 7873: #  define UINT16_TYPE uint16_t
 7874: # else
 7875: #  define UINT16_TYPE unsigned short int
 7876: # endif
 7877: #endif
 7878: #ifndef INT16_TYPE
 7879: # ifdef HAVE_INT16_T
 7880: #  define INT16_TYPE int16_t
 7881: # else
 7882: #  define INT16_TYPE short int
 7883: # endif
 7884: #endif
 7885: #ifndef UINT8_TYPE
 7886: # ifdef HAVE_UINT8_T
 7887: #  define UINT8_TYPE uint8_t
 7888: # else
 7889: #  define UINT8_TYPE unsigned char
 7890: # endif
 7891: #endif
 7892: #ifndef INT8_TYPE
 7893: # ifdef HAVE_INT8_T
 7894: #  define INT8_TYPE int8_t
 7895: # else
 7896: #  define INT8_TYPE signed char
 7897: # endif
 7898: #endif
 7899: #ifndef LONGDOUBLE_TYPE
 7900: # define LONGDOUBLE_TYPE long double
 7901: #endif
 7902: typedef sqlite_int64 i64;          /* 8-byte signed integer */
 7903: typedef sqlite_uint64 u64;         /* 8-byte unsigned integer */
 7904: typedef UINT32_TYPE u32;           /* 4-byte unsigned integer */
 7905: typedef UINT16_TYPE u16;           /* 2-byte unsigned integer */
 7906: typedef INT16_TYPE i16;            /* 2-byte signed integer */
 7907: typedef UINT8_TYPE u8;             /* 1-byte unsigned integer */
 7908: typedef INT8_TYPE i8;              /* 1-byte signed integer */
 7909: 
 7910: /*
 7911: ** SQLITE_MAX_U32 is a u64 constant that is the maximum u64 value
 7912: ** that can be stored in a u32 without loss of data.  The value
 7913: ** is 0x00000000ffffffff.  But because of quirks of some compilers, we
 7914: ** have to specify the value in the less intuitive manner shown:
 7915: */
 7916: #define SQLITE_MAX_U32  ((((u64)1)<<32)-1)
 7917: 
 7918: /*
 7919: ** The datatype used to store estimates of the number of rows in a
 7920: ** table or index.  This is an unsigned integer type.  For 99.9% of
 7921: ** the world, a 32-bit integer is sufficient.  But a 64-bit integer
 7922: ** can be used at compile-time if desired.
 7923: */
 7924: #ifdef SQLITE_64BIT_STATS
 7925:  typedef u64 tRowcnt;    /* 64-bit only if requested at compile-time */
 7926: #else
 7927:  typedef u32 tRowcnt;    /* 32-bit is the default */
 7928: #endif
 7929: 
 7930: /*
 7931: ** Macros to determine whether the machine is big or little endian,
 7932: ** evaluated at runtime.
 7933: */
 7934: #ifdef SQLITE_AMALGAMATION
 7935: SQLITE_PRIVATE const int sqlite3one = 1;
 7936: #else
 7937: SQLITE_PRIVATE const int sqlite3one;
 7938: #endif
 7939: #if defined(i386) || defined(__i386__) || defined(_M_IX86)\
 7940:                              || defined(__x86_64) || defined(__x86_64__)
 7941: # define SQLITE_BIGENDIAN    0
 7942: # define SQLITE_LITTLEENDIAN 1
 7943: # define SQLITE_UTF16NATIVE  SQLITE_UTF16LE
 7944: #else
 7945: # define SQLITE_BIGENDIAN    (*(char *)(&sqlite3one)==0)
 7946: # define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1)
 7947: # define SQLITE_UTF16NATIVE (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE)
 7948: #endif
 7949: 
 7950: /*
 7951: ** Constants for the largest and smallest possible 64-bit signed integers.
 7952: ** These macros are designed to work correctly on both 32-bit and 64-bit
 7953: ** compilers.
 7954: */
 7955: #define LARGEST_INT64  (0xffffffff|(((i64)0x7fffffff)<<32))
 7956: #define SMALLEST_INT64 (((i64)-1) - LARGEST_INT64)
 7957: 
 7958: /* 
 7959: ** Round up a number to the next larger multiple of 8.  This is used
 7960: ** to force 8-byte alignment on 64-bit architectures.
 7961: */
 7962: #define ROUND8(x)     (((x)+7)&~7)
 7963: 
 7964: /*
 7965: ** Round down to the nearest multiple of 8
 7966: */
 7967: #define ROUNDDOWN8(x) ((x)&~7)
 7968: 
 7969: /*
 7970: ** Assert that the pointer X is aligned to an 8-byte boundary.  This
 7971: ** macro is used only within assert() to verify that the code gets
 7972: ** all alignment restrictions correct.
 7973: **
 7974: ** Except, if SQLITE_4_BYTE_ALIGNED_MALLOC is defined, then the
 7975: ** underlying malloc() implemention might return us 4-byte aligned
 7976: ** pointers.  In that case, only verify 4-byte alignment.
 7977: */
 7978: #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
 7979: # define EIGHT_BYTE_ALIGNMENT(X)   ((((char*)(X) - (char*)0)&3)==0)
 7980: #else
 7981: # define EIGHT_BYTE_ALIGNMENT(X)   ((((char*)(X) - (char*)0)&7)==0)
 7982: #endif
 7983: 
 7984: 
 7985: /*
 7986: ** An instance of the following structure is used to store the busy-handler
 7987: ** callback for a given sqlite handle. 
 7988: **
 7989: ** The sqlite.busyHandler member of the sqlite struct contains the busy
 7990: ** callback for the database handle. Each pager opened via the sqlite
 7991: ** handle is passed a pointer to sqlite.busyHandler. The busy-handler
 7992: ** callback is currently invoked only from within pager.c.
 7993: */
 7994: typedef struct BusyHandler BusyHandler;
 7995: struct BusyHandler {
 7996:   int (*xFunc)(void *,int);  /* The busy callback */
 7997:   void *pArg;                /* First arg to busy callback */
 7998:   int nBusy;                 /* Incremented with each busy call */
 7999: };
 8000: 
 8001: /*
 8002: ** Name of the master database table.  The master database table
 8003: ** is a special table that holds the names and attributes of all
 8004: ** user tables and indices.
 8005: */
 8006: #define MASTER_NAME       "sqlite_master"
 8007: #define TEMP_MASTER_NAME  "sqlite_temp_master"
 8008: 
 8009: /*
 8010: ** The root-page of the master database table.
 8011: */
 8012: #define MASTER_ROOT       1
 8013: 
 8014: /*
 8015: ** The name of the schema table.
 8016: */
 8017: #define SCHEMA_TABLE(x)  ((!OMIT_TEMPDB)&&(x==1)?TEMP_MASTER_NAME:MASTER_NAME)
 8018: 
 8019: /*
 8020: ** A convenience macro that returns the number of elements in
 8021: ** an array.
 8022: */
 8023: #define ArraySize(X)    ((int)(sizeof(X)/sizeof(X[0])))
 8024: 
 8025: /*
 8026: ** The following value as a destructor means to use sqlite3DbFree().
 8027: ** This is an internal extension to SQLITE_STATIC and SQLITE_TRANSIENT.
 8028: */
 8029: #define SQLITE_DYNAMIC   ((sqlite3_destructor_type)sqlite3DbFree)
 8030: 
 8031: /*
 8032: ** When SQLITE_OMIT_WSD is defined, it means that the target platform does
 8033: ** not support Writable Static Data (WSD) such as global and static variables.
 8034: ** All variables must either be on the stack or dynamically allocated from
 8035: ** the heap.  When WSD is unsupported, the variable declarations scattered
 8036: ** throughout the SQLite code must become constants instead.  The SQLITE_WSD
 8037: ** macro is used for this purpose.  And instead of referencing the variable
 8038: ** directly, we use its constant as a key to lookup the run-time allocated
 8039: ** buffer that holds real variable.  The constant is also the initializer
 8040: ** for the run-time allocated buffer.
 8041: **
 8042: ** In the usual case where WSD is supported, the SQLITE_WSD and GLOBAL
 8043: ** macros become no-ops and have zero performance impact.
 8044: */
 8045: #ifdef SQLITE_OMIT_WSD
 8046:   #define SQLITE_WSD const
 8047:   #define GLOBAL(t,v) (*(t*)sqlite3_wsd_find((void*)&(v), sizeof(v)))
 8048:   #define sqlite3GlobalConfig GLOBAL(struct Sqlite3Config, sqlite3Config)
 8049: SQLITE_API   int sqlite3_wsd_init(int N, int J);
 8050: SQLITE_API   void *sqlite3_wsd_find(void *K, int L);
 8051: #else
 8052:   #define SQLITE_WSD 
 8053:   #define GLOBAL(t,v) v
 8054:   #define sqlite3GlobalConfig sqlite3Config
 8055: #endif
 8056: 
 8057: /*
 8058: ** The following macros are used to suppress compiler warnings and to
 8059: ** make it clear to human readers when a function parameter is deliberately 
 8060: ** left unused within the body of a function. This usually happens when
 8061: ** a function is called via a function pointer. For example the 
 8062: ** implementation of an SQL aggregate step callback may not use the
 8063: ** parameter indicating the number of arguments passed to the aggregate,
 8064: ** if it knows that this is enforced elsewhere.
 8065: **
 8066: ** When a function parameter is not used at all within the body of a function,
 8067: ** it is generally named "NotUsed" or "NotUsed2" to make things even clearer.
 8068: ** However, these macros may also be used to suppress warnings related to
 8069: ** parameters that may or may not be used depending on compilation options.
 8070: ** For example those parameters only used in assert() statements. In these
 8071: ** cases the parameters are named as per the usual conventions.
 8072: */
 8073: #define UNUSED_PARAMETER(x) (void)(x)
 8074: #define UNUSED_PARAMETER2(x,y) UNUSED_PARAMETER(x),UNUSED_PARAMETER(y)
 8075: 
 8076: /*
 8077: ** Forward references to structures
 8078: */
 8079: typedef struct AggInfo AggInfo;
 8080: typedef struct AuthContext AuthContext;
 8081: typedef struct AutoincInfo AutoincInfo;
 8082: typedef struct Bitvec Bitvec;
 8083: typedef struct CollSeq CollSeq;
 8084: typedef struct Column Column;
 8085: typedef struct Db Db;
 8086: typedef struct Schema Schema;
 8087: typedef struct Expr Expr;
 8088: typedef struct ExprList ExprList;
 8089: typedef struct ExprSpan ExprSpan;
 8090: typedef struct FKey FKey;
 8091: typedef struct FuncDestructor FuncDestructor;
 8092: typedef struct FuncDef FuncDef;
 8093: typedef struct FuncDefHash FuncDefHash;
 8094: typedef struct IdList IdList;
 8095: typedef struct Index Index;
 8096: typedef struct IndexSample IndexSample;
 8097: typedef struct KeyClass KeyClass;
 8098: typedef struct KeyInfo KeyInfo;
 8099: typedef struct Lookaside Lookaside;
 8100: typedef struct LookasideSlot LookasideSlot;
 8101: typedef struct Module Module;
 8102: typedef struct NameContext NameContext;
 8103: typedef struct Parse Parse;
 8104: typedef struct RowSet RowSet;
 8105: typedef struct Savepoint Savepoint;
 8106: typedef struct Select Select;
 8107: typedef struct SrcList SrcList;
 8108: typedef struct StrAccum StrAccum;
 8109: typedef struct Table Table;
 8110: typedef struct TableLock TableLock;
 8111: typedef struct Token Token;
 8112: typedef struct Trigger Trigger;
 8113: typedef struct TriggerPrg TriggerPrg;
 8114: typedef struct TriggerStep TriggerStep;
 8115: typedef struct UnpackedRecord UnpackedRecord;
 8116: typedef struct VTable VTable;
 8117: typedef struct VtabCtx VtabCtx;
 8118: typedef struct Walker Walker;
 8119: typedef struct WherePlan WherePlan;
 8120: typedef struct WhereInfo WhereInfo;
 8121: typedef struct WhereLevel WhereLevel;
 8122: 
 8123: /*
 8124: ** Defer sourcing vdbe.h and btree.h until after the "u8" and 
 8125: ** "BusyHandler" typedefs. vdbe.h also requires a few of the opaque
 8126: ** pointer types (i.e. FuncDef) defined above.
 8127: */
 8128: /************** Include btree.h in the middle of sqliteInt.h *****************/
 8129: /************** Begin file btree.h *******************************************/
 8130: /*
 8131: ** 2001 September 15
 8132: **
 8133: ** The author disclaims copyright to this source code.  In place of
 8134: ** a legal notice, here is a blessing:
 8135: **
 8136: **    May you do good and not evil.
 8137: **    May you find forgiveness for yourself and forgive others.
 8138: **    May you share freely, never taking more than you give.
 8139: **
 8140: *************************************************************************
 8141: ** This header file defines the interface that the sqlite B-Tree file
 8142: ** subsystem.  See comments in the source code for a detailed description
 8143: ** of what each interface routine does.
 8144: */
 8145: #ifndef _BTREE_H_
 8146: #define _BTREE_H_
 8147: 
 8148: /* TODO: This definition is just included so other modules compile. It
 8149: ** needs to be revisited.
 8150: */
 8151: #define SQLITE_N_BTREE_META 10
 8152: 
 8153: /*
 8154: ** If defined as non-zero, auto-vacuum is enabled by default. Otherwise
 8155: ** it must be turned on for each database using "PRAGMA auto_vacuum = 1".
 8156: */
 8157: #ifndef SQLITE_DEFAULT_AUTOVACUUM
 8158:   #define SQLITE_DEFAULT_AUTOVACUUM 0
 8159: #endif
 8160: 
 8161: #define BTREE_AUTOVACUUM_NONE 0        /* Do not do auto-vacuum */
 8162: #define BTREE_AUTOVACUUM_FULL 1        /* Do full auto-vacuum */
 8163: #define BTREE_AUTOVACUUM_INCR 2        /* Incremental vacuum */
 8164: 
 8165: /*
 8166: ** Forward declarations of structure
 8167: */
 8168: typedef struct Btree Btree;
 8169: typedef struct BtCursor BtCursor;
 8170: typedef struct BtShared BtShared;
 8171: 
 8172: 
 8173: SQLITE_PRIVATE int sqlite3BtreeOpen(
 8174:   sqlite3_vfs *pVfs,       /* VFS to use with this b-tree */
 8175:   const char *zFilename,   /* Name of database file to open */
 8176:   sqlite3 *db,             /* Associated database connection */
 8177:   Btree **ppBtree,         /* Return open Btree* here */
 8178:   int flags,               /* Flags */
 8179:   int vfsFlags             /* Flags passed through to VFS open */
 8180: );
 8181: 
 8182: /* The flags parameter to sqlite3BtreeOpen can be the bitwise or of the
 8183: ** following values.
 8184: **
 8185: ** NOTE:  These values must match the corresponding PAGER_ values in
 8186: ** pager.h.
 8187: */
 8188: #define BTREE_OMIT_JOURNAL  1  /* Do not create or use a rollback journal */
 8189: #define BTREE_NO_READLOCK   2  /* Omit readlocks on readonly files */
 8190: #define BTREE_MEMORY        4  /* This is an in-memory DB */
 8191: #define BTREE_SINGLE        8  /* The file contains at most 1 b-tree */
 8192: #define BTREE_UNORDERED    16  /* Use of a hash implementation is OK */
 8193: 
 8194: SQLITE_PRIVATE int sqlite3BtreeClose(Btree*);
 8195: SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree*,int);
 8196: SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int,int);
 8197: SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree*);
 8198: SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int nPagesize, int nReserve, int eFix);
 8199: SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree*);
 8200: SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree*,int);
 8201: SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree*);
 8202: SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree*,int);
 8203: SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree*);
 8204: SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *, int);
 8205: SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *);
 8206: SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree*,int);
 8207: SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster);
 8208: SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree*, int);
 8209: SQLITE_PRIVATE int sqlite3BtreeCommit(Btree*);
 8210: SQLITE_PRIVATE int sqlite3BtreeRollback(Btree*);
 8211: SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree*,int);
 8212: SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree*, int*, int flags);
 8213: SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree*);
 8214: SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree*);
 8215: SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree*);
 8216: SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *, int, void(*)(void *));
 8217: SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *pBtree);
 8218: SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *pBtree, int iTab, u8 isWriteLock);
 8219: SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *, int, int);
 8220: 
 8221: SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *);
 8222: SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *);
 8223: SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *, Btree *);
 8224: 
 8225: SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *);
 8226: 
 8227: /* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR
 8228: ** of the flags shown below.
 8229: **
 8230: ** Every SQLite table must have either BTREE_INTKEY or BTREE_BLOBKEY set.
 8231: ** With BTREE_INTKEY, the table key is a 64-bit integer and arbitrary data
 8232: ** is stored in the leaves.  (BTREE_INTKEY is used for SQL tables.)  With
 8233: ** BTREE_BLOBKEY, the key is an arbitrary BLOB and no content is stored
 8234: ** anywhere - the key is the content.  (BTREE_BLOBKEY is used for SQL
 8235: ** indices.)
 8236: */
 8237: #define BTREE_INTKEY     1    /* Table has only 64-bit signed integer keys */
 8238: #define BTREE_BLOBKEY    2    /* Table has keys only - no data */
 8239: 
 8240: SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree*, int, int*);
 8241: SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree*, int, int*);
 8242: SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree*, int);
 8243: 
 8244: SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *pBtree, int idx, u32 *pValue);
 8245: SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value);
 8246: 
 8247: /*
 8248: ** The second parameter to sqlite3BtreeGetMeta or sqlite3BtreeUpdateMeta
 8249: ** should be one of the following values. The integer values are assigned 
 8250: ** to constants so that the offset of the corresponding field in an
 8251: ** SQLite database header may be found using the following formula:
 8252: **
 8253: **   offset = 36 + (idx * 4)
 8254: **
 8255: ** For example, the free-page-count field is located at byte offset 36 of
 8256: ** the database file header. The incr-vacuum-flag field is located at
 8257: ** byte offset 64 (== 36+4*7).
 8258: */
 8259: #define BTREE_FREE_PAGE_COUNT     0
 8260: #define BTREE_SCHEMA_VERSION      1
 8261: #define BTREE_FILE_FORMAT         2
 8262: #define BTREE_DEFAULT_CACHE_SIZE  3
 8263: #define BTREE_LARGEST_ROOT_PAGE   4
 8264: #define BTREE_TEXT_ENCODING       5
 8265: #define BTREE_USER_VERSION        6
 8266: #define BTREE_INCR_VACUUM         7
 8267: 
 8268: SQLITE_PRIVATE int sqlite3BtreeCursor(
 8269:   Btree*,                              /* BTree containing table to open */
 8270:   int iTable,                          /* Index of root page */
 8271:   int wrFlag,                          /* 1 for writing.  0 for read-only */
 8272:   struct KeyInfo*,                     /* First argument to compare function */
 8273:   BtCursor *pCursor                    /* Space to write cursor structure */
 8274: );
 8275: SQLITE_PRIVATE int sqlite3BtreeCursorSize(void);
 8276: SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor*);
 8277: 
 8278: SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor*);
 8279: SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
 8280:   BtCursor*,
 8281:   UnpackedRecord *pUnKey,
 8282:   i64 intKey,
 8283:   int bias,
 8284:   int *pRes
 8285: );
 8286: SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor*, int*);
 8287: SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor*);
 8288: SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const void *pKey, i64 nKey,
 8289:                                   const void *pData, int nData,
 8290:                                   int nZero, int bias, int seekResult);
 8291: SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor*, int *pRes);
 8292: SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor*, int *pRes);
 8293: SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int *pRes);
 8294: SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*);
 8295: SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int *pRes);
 8296: SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor*, i64 *pSize);
 8297: SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*);
 8298: SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor*, int *pAmt);
 8299: SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor*, int *pAmt);
 8300: SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor*, u32 *pSize);
 8301: SQLITE_PRIVATE int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*);
 8302: SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor*, sqlite3_int64);
 8303: SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor*);
 8304: 
 8305: SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(Btree*, int *aRoot, int nRoot, int, int*);
 8306: SQLITE_PRIVATE struct Pager *sqlite3BtreePager(Btree*);
 8307: 
 8308: SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*);
 8309: SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *);
 8310: SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *);
 8311: 
 8312: SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion);
 8313: 
 8314: #ifndef NDEBUG
 8315: SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*);
 8316: #endif
 8317: 
 8318: #ifndef SQLITE_OMIT_BTREECOUNT
 8319: SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *, i64 *);
 8320: #endif
 8321: 
 8322: #ifdef SQLITE_TEST
 8323: SQLITE_PRIVATE int sqlite3BtreeCursorInfo(BtCursor*, int*, int);
 8324: SQLITE_PRIVATE void sqlite3BtreeCursorList(Btree*);
 8325: #endif
 8326: 
 8327: #ifndef SQLITE_OMIT_WAL
 8328: SQLITE_PRIVATE   int sqlite3BtreeCheckpoint(Btree*, int, int *, int *);
 8329: #endif
 8330: 
 8331: /*
 8332: ** If we are not using shared cache, then there is no need to
 8333: ** use mutexes to access the BtShared structures.  So make the
 8334: ** Enter and Leave procedures no-ops.
 8335: */
 8336: #ifndef SQLITE_OMIT_SHARED_CACHE
 8337: SQLITE_PRIVATE   void sqlite3BtreeEnter(Btree*);
 8338: SQLITE_PRIVATE   void sqlite3BtreeEnterAll(sqlite3*);
 8339: #else
 8340: # define sqlite3BtreeEnter(X) 
 8341: # define sqlite3BtreeEnterAll(X)
 8342: #endif
 8343: 
 8344: #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE
 8345: SQLITE_PRIVATE   int sqlite3BtreeSharable(Btree*);
 8346: SQLITE_PRIVATE   void sqlite3BtreeLeave(Btree*);
 8347: SQLITE_PRIVATE   void sqlite3BtreeEnterCursor(BtCursor*);
 8348: SQLITE_PRIVATE   void sqlite3BtreeLeaveCursor(BtCursor*);
 8349: SQLITE_PRIVATE   void sqlite3BtreeLeaveAll(sqlite3*);
 8350: #ifndef NDEBUG
 8351:   /* These routines are used inside assert() statements only. */
 8352: SQLITE_PRIVATE   int sqlite3BtreeHoldsMutex(Btree*);
 8353: SQLITE_PRIVATE   int sqlite3BtreeHoldsAllMutexes(sqlite3*);
 8354: SQLITE_PRIVATE   int sqlite3SchemaMutexHeld(sqlite3*,int,Schema*);
 8355: #endif
 8356: #else
 8357: 
 8358: # define sqlite3BtreeSharable(X) 0
 8359: # define sqlite3BtreeLeave(X)
 8360: # define sqlite3BtreeEnterCursor(X)
 8361: # define sqlite3BtreeLeaveCursor(X)
 8362: # define sqlite3BtreeLeaveAll(X)
 8363: 
 8364: # define sqlite3BtreeHoldsMutex(X) 1
 8365: # define sqlite3BtreeHoldsAllMutexes(X) 1
 8366: # define sqlite3SchemaMutexHeld(X,Y,Z) 1
 8367: #endif
 8368: 
 8369: 
 8370: #endif /* _BTREE_H_ */
 8371: 
 8372: /************** End of btree.h ***********************************************/
 8373: /************** Continuing where we left off in sqliteInt.h ******************/
 8374: /************** Include vdbe.h in the middle of sqliteInt.h ******************/
 8375: /************** Begin file vdbe.h ********************************************/
 8376: /*
 8377: ** 2001 September 15
 8378: **
 8379: ** The author disclaims copyright to this source code.  In place of
 8380: ** a legal notice, here is a blessing:
 8381: **
 8382: **    May you do good and not evil.
 8383: **    May you find forgiveness for yourself and forgive others.
 8384: **    May you share freely, never taking more than you give.
 8385: **
 8386: *************************************************************************
 8387: ** Header file for the Virtual DataBase Engine (VDBE)
 8388: **
 8389: ** This header defines the interface to the virtual database engine
 8390: ** or VDBE.  The VDBE implements an abstract machine that runs a
 8391: ** simple program to access and modify the underlying database.
 8392: */
 8393: #ifndef _SQLITE_VDBE_H_
 8394: #define _SQLITE_VDBE_H_
 8395: /* #include <stdio.h> */
 8396: 
 8397: /*
 8398: ** A single VDBE is an opaque structure named "Vdbe".  Only routines
 8399: ** in the source file sqliteVdbe.c are allowed to see the insides
 8400: ** of this structure.
 8401: */
 8402: typedef struct Vdbe Vdbe;
 8403: 
 8404: /*
 8405: ** The names of the following types declared in vdbeInt.h are required
 8406: ** for the VdbeOp definition.
 8407: */
 8408: typedef struct VdbeFunc VdbeFunc;
 8409: typedef struct Mem Mem;
 8410: typedef struct SubProgram SubProgram;
 8411: 
 8412: /*
 8413: ** A single instruction of the virtual machine has an opcode
 8414: ** and as many as three operands.  The instruction is recorded
 8415: ** as an instance of the following structure:
 8416: */
 8417: struct VdbeOp {
 8418:   u8 opcode;          /* What operation to perform */
 8419:   signed char p4type; /* One of the P4_xxx constants for p4 */
 8420:   u8 opflags;         /* Mask of the OPFLG_* flags in opcodes.h */
 8421:   u8 p5;              /* Fifth parameter is an unsigned character */
 8422:   int p1;             /* First operand */
 8423:   int p2;             /* Second parameter (often the jump destination) */
 8424:   int p3;             /* The third parameter */
 8425:   union {             /* fourth parameter */
 8426:     int i;                 /* Integer value if p4type==P4_INT32 */
 8427:     void *p;               /* Generic pointer */
 8428:     char *z;               /* Pointer to data for string (char array) types */
 8429:     i64 *pI64;             /* Used when p4type is P4_INT64 */
 8430:     double *pReal;         /* Used when p4type is P4_REAL */
 8431:     FuncDef *pFunc;        /* Used when p4type is P4_FUNCDEF */
 8432:     VdbeFunc *pVdbeFunc;   /* Used when p4type is P4_VDBEFUNC */
 8433:     CollSeq *pColl;        /* Used when p4type is P4_COLLSEQ */
 8434:     Mem *pMem;             /* Used when p4type is P4_MEM */
 8435:     VTable *pVtab;         /* Used when p4type is P4_VTAB */
 8436:     KeyInfo *pKeyInfo;     /* Used when p4type is P4_KEYINFO */
 8437:     int *ai;               /* Used when p4type is P4_INTARRAY */
 8438:     SubProgram *pProgram;  /* Used when p4type is P4_SUBPROGRAM */
 8439:     int (*xAdvance)(BtCursor *, int *);
 8440:   } p4;
 8441: #ifdef SQLITE_DEBUG
 8442:   char *zComment;          /* Comment to improve readability */
 8443: #endif
 8444: #ifdef VDBE_PROFILE
 8445:   int cnt;                 /* Number of times this instruction was executed */
 8446:   u64 cycles;              /* Total time spent executing this instruction */
 8447: #endif
 8448: };
 8449: typedef struct VdbeOp VdbeOp;
 8450: 
 8451: 
 8452: /*
 8453: ** A sub-routine used to implement a trigger program.
 8454: */
 8455: struct SubProgram {
 8456:   VdbeOp *aOp;                  /* Array of opcodes for sub-program */
 8457:   int nOp;                      /* Elements in aOp[] */
 8458:   int nMem;                     /* Number of memory cells required */
 8459:   int nCsr;                     /* Number of cursors required */
 8460:   int nOnce;                    /* Number of OP_Once instructions */
 8461:   void *token;                  /* id that may be used to recursive triggers */
 8462:   SubProgram *pNext;            /* Next sub-program already visited */
 8463: };
 8464: 
 8465: /*
 8466: ** A smaller version of VdbeOp used for the VdbeAddOpList() function because
 8467: ** it takes up less space.
 8468: */
 8469: struct VdbeOpList {
 8470:   u8 opcode;          /* What operation to perform */
 8471:   signed char p1;     /* First operand */
 8472:   signed char p2;     /* Second parameter (often the jump destination) */
 8473:   signed char p3;     /* Third parameter */
 8474: };
 8475: typedef struct VdbeOpList VdbeOpList;
 8476: 
 8477: /*
 8478: ** Allowed values of VdbeOp.p4type
 8479: */
 8480: #define P4_NOTUSED    0   /* The P4 parameter is not used */
 8481: #define P4_DYNAMIC  (-1)  /* Pointer to a string obtained from sqliteMalloc() */
 8482: #define P4_STATIC   (-2)  /* Pointer to a static string */
 8483: #define P4_COLLSEQ  (-4)  /* P4 is a pointer to a CollSeq structure */
 8484: #define P4_FUNCDEF  (-5)  /* P4 is a pointer to a FuncDef structure */
 8485: #define P4_KEYINFO  (-6)  /* P4 is a pointer to a KeyInfo structure */
 8486: #define P4_VDBEFUNC (-7)  /* P4 is a pointer to a VdbeFunc structure */
 8487: #define P4_MEM      (-8)  /* P4 is a pointer to a Mem*    structure */
 8488: #define P4_TRANSIENT  0   /* P4 is a pointer to a transient string */
 8489: #define P4_VTAB     (-10) /* P4 is a pointer to an sqlite3_vtab structure */
 8490: #define P4_MPRINTF  (-11) /* P4 is a string obtained from sqlite3_mprintf() */
 8491: #define P4_REAL     (-12) /* P4 is a 64-bit floating point value */
 8492: #define P4_INT64    (-13) /* P4 is a 64-bit signed integer */
 8493: #define P4_INT32    (-14) /* P4 is a 32-bit signed integer */
 8494: #define P4_INTARRAY (-15) /* P4 is a vector of 32-bit integers */
 8495: #define P4_SUBPROGRAM  (-18) /* P4 is a pointer to a SubProgram structure */
 8496: #define P4_ADVANCE  (-19) /* P4 is a pointer to BtreeNext() or BtreePrev() */
 8497: 
 8498: /* When adding a P4 argument using P4_KEYINFO, a copy of the KeyInfo structure
 8499: ** is made.  That copy is freed when the Vdbe is finalized.  But if the
 8500: ** argument is P4_KEYINFO_HANDOFF, the passed in pointer is used.  It still
 8501: ** gets freed when the Vdbe is finalized so it still should be obtained
 8502: ** from a single sqliteMalloc().  But no copy is made and the calling
 8503: ** function should *not* try to free the KeyInfo.
 8504: */
 8505: #define P4_KEYINFO_HANDOFF (-16)
 8506: #define P4_KEYINFO_STATIC  (-17)
 8507: 
 8508: /*
 8509: ** The Vdbe.aColName array contains 5n Mem structures, where n is the 
 8510: ** number of columns of data returned by the statement.
 8511: */
 8512: #define COLNAME_NAME     0
 8513: #define COLNAME_DECLTYPE 1
 8514: #define COLNAME_DATABASE 2
 8515: #define COLNAME_TABLE    3
 8516: #define COLNAME_COLUMN   4
 8517: #ifdef SQLITE_ENABLE_COLUMN_METADATA
 8518: # define COLNAME_N        5      /* Number of COLNAME_xxx symbols */
 8519: #else
 8520: # ifdef SQLITE_OMIT_DECLTYPE
 8521: #   define COLNAME_N      1      /* Store only the name */
 8522: # else
 8523: #   define COLNAME_N      2      /* Store the name and decltype */
 8524: # endif
 8525: #endif
 8526: 
 8527: /*
 8528: ** The following macro converts a relative address in the p2 field
 8529: ** of a VdbeOp structure into a negative number so that 
 8530: ** sqlite3VdbeAddOpList() knows that the address is relative.  Calling
 8531: ** the macro again restores the address.
 8532: */
 8533: #define ADDR(X)  (-1-(X))
 8534: 
 8535: /*
 8536: ** The makefile scans the vdbe.c source file and creates the "opcodes.h"
 8537: ** header file that defines a number for each opcode used by the VDBE.
 8538: */
 8539: /************** Include opcodes.h in the middle of vdbe.h ********************/
 8540: /************** Begin file opcodes.h *****************************************/
 8541: /* Automatically generated.  Do not edit */
 8542: /* See the mkopcodeh.awk script for details */
 8543: #define OP_Goto                                 1
 8544: #define OP_Gosub                                2
 8545: #define OP_Return                               3
 8546: #define OP_Yield                                4
 8547: #define OP_HaltIfNull                           5
 8548: #define OP_Halt                                 6
 8549: #define OP_Integer                              7
 8550: #define OP_Int64                                8
 8551: #define OP_Real                               130   /* same as TK_FLOAT    */
 8552: #define OP_String8                             94   /* same as TK_STRING   */
 8553: #define OP_String                               9
 8554: #define OP_Null                                10
 8555: #define OP_Blob                                11
 8556: #define OP_Variable                            12
 8557: #define OP_Move                                13
 8558: #define OP_Copy                                14
 8559: #define OP_SCopy                               15
 8560: #define OP_ResultRow                           16
 8561: #define OP_Concat                              91   /* same as TK_CONCAT   */
 8562: #define OP_Add                                 86   /* same as TK_PLUS     */
 8563: #define OP_Subtract                            87   /* same as TK_MINUS    */
 8564: #define OP_Multiply                            88   /* same as TK_STAR     */
 8565: #define OP_Divide                              89   /* same as TK_SLASH    */
 8566: #define OP_Remainder                           90   /* same as TK_REM      */
 8567: #define OP_CollSeq                             17
 8568: #define OP_Function                            18
 8569: #define OP_BitAnd                              82   /* same as TK_BITAND   */
 8570: #define OP_BitOr                               83   /* same as TK_BITOR    */
 8571: #define OP_ShiftLeft                           84   /* same as TK_LSHIFT   */
 8572: #define OP_ShiftRight                          85   /* same as TK_RSHIFT   */
 8573: #define OP_AddImm                              20
 8574: #define OP_MustBeInt                           21
 8575: #define OP_RealAffinity                        22
 8576: #define OP_ToText                             141   /* same as TK_TO_TEXT  */
 8577: #define OP_ToBlob                             142   /* same as TK_TO_BLOB  */
 8578: #define OP_ToNumeric                          143   /* same as TK_TO_NUMERIC*/
 8579: #define OP_ToInt                              144   /* same as TK_TO_INT   */
 8580: #define OP_ToReal                             145   /* same as TK_TO_REAL  */
 8581: #define OP_Eq                                  76   /* same as TK_EQ       */
 8582: #define OP_Ne                                  75   /* same as TK_NE       */
 8583: #define OP_Lt                                  79   /* same as TK_LT       */
 8584: #define OP_Le                                  78   /* same as TK_LE       */
 8585: #define OP_Gt                                  77   /* same as TK_GT       */
 8586: #define OP_Ge                                  80   /* same as TK_GE       */
 8587: #define OP_Permutation                         23
 8588: #define OP_Compare                             24
 8589: #define OP_Jump                                25
 8590: #define OP_And                                 69   /* same as TK_AND      */
 8591: #define OP_Or                                  68   /* same as TK_OR       */
 8592: #define OP_Not                                 19   /* same as TK_NOT      */
 8593: #define OP_BitNot                              93   /* same as TK_BITNOT   */
 8594: #define OP_Once                                26
 8595: #define OP_If                                  27
 8596: #define OP_IfNot                               28
 8597: #define OP_IsNull                              73   /* same as TK_ISNULL   */
 8598: #define OP_NotNull                             74   /* same as TK_NOTNULL  */
 8599: #define OP_Column                              29
 8600: #define OP_Affinity                            30
 8601: #define OP_MakeRecord                          31
 8602: #define OP_Count                               32
 8603: #define OP_Savepoint                           33
 8604: #define OP_AutoCommit                          34
 8605: #define OP_Transaction                         35
 8606: #define OP_ReadCookie                          36
 8607: #define OP_SetCookie                           37
 8608: #define OP_VerifyCookie                        38
 8609: #define OP_OpenRead                            39
 8610: #define OP_OpenWrite                           40
 8611: #define OP_OpenAutoindex                       41
 8612: #define OP_OpenEphemeral                       42
 8613: #define OP_SorterOpen                          43
 8614: #define OP_OpenPseudo                          44
 8615: #define OP_Close                               45
 8616: #define OP_SeekLt                              46
 8617: #define OP_SeekLe                              47
 8618: #define OP_SeekGe                              48
 8619: #define OP_SeekGt                              49
 8620: #define OP_Seek                                50
 8621: #define OP_NotFound                            51
 8622: #define OP_Found                               52
 8623: #define OP_IsUnique                            53
 8624: #define OP_NotExists                           54
 8625: #define OP_Sequence                            55
 8626: #define OP_NewRowid                            56
 8627: #define OP_Insert                              57
 8628: #define OP_InsertInt                           58
 8629: #define OP_Delete                              59
 8630: #define OP_ResetCount                          60
 8631: #define OP_SorterCompare                       61
 8632: #define OP_SorterData                          62
 8633: #define OP_RowKey                              63
 8634: #define OP_RowData                             64
 8635: #define OP_Rowid                               65
 8636: #define OP_NullRow                             66
 8637: #define OP_Last                                67
 8638: #define OP_SorterSort                          70
 8639: #define OP_Sort                                71
 8640: #define OP_Rewind                              72
 8641: #define OP_SorterNext                          81
 8642: #define OP_Prev                                92
 8643: #define OP_Next                                95
 8644: #define OP_SorterInsert                        96
 8645: #define OP_IdxInsert                           97
 8646: #define OP_IdxDelete                           98
 8647: #define OP_IdxRowid                            99
 8648: #define OP_IdxLT                              100
 8649: #define OP_IdxGE                              101
 8650: #define OP_Destroy                            102
 8651: #define OP_Clear                              103
 8652: #define OP_CreateIndex                        104
 8653: #define OP_CreateTable                        105
 8654: #define OP_ParseSchema                        106
 8655: #define OP_LoadAnalysis                       107
 8656: #define OP_DropTable                          108
 8657: #define OP_DropIndex                          109
 8658: #define OP_DropTrigger                        110
 8659: #define OP_IntegrityCk                        111
 8660: #define OP_RowSetAdd                          112
 8661: #define OP_RowSetRead                         113
 8662: #define OP_RowSetTest                         114
 8663: #define OP_Program                            115
 8664: #define OP_Param                              116
 8665: #define OP_FkCounter                          117
 8666: #define OP_FkIfZero                           118
 8667: #define OP_MemMax                             119
 8668: #define OP_IfPos                              120
 8669: #define OP_IfNeg                              121
 8670: #define OP_IfZero                             122
 8671: #define OP_AggStep                            123
 8672: #define OP_AggFinal                           124
 8673: #define OP_Checkpoint                         125
 8674: #define OP_JournalMode                        126
 8675: #define OP_Vacuum                             127
 8676: #define OP_IncrVacuum                         128
 8677: #define OP_Expire                             129
 8678: #define OP_TableLock                          131
 8679: #define OP_VBegin                             132
 8680: #define OP_VCreate                            133
 8681: #define OP_VDestroy                           134
 8682: #define OP_VOpen                              135
 8683: #define OP_VFilter                            136
 8684: #define OP_VColumn                            137
 8685: #define OP_VNext                              138
 8686: #define OP_VRename                            139
 8687: #define OP_VUpdate                            140
 8688: #define OP_Pagecount                          146
 8689: #define OP_MaxPgcnt                           147
 8690: #define OP_Trace                              148
 8691: #define OP_Noop                               149
 8692: #define OP_Explain                            150
 8693: 
 8694: 
 8695: /* Properties such as "out2" or "jump" that are specified in
 8696: ** comments following the "case" for each opcode in the vdbe.c
 8697: ** are encoded into bitvectors as follows:
 8698: */
 8699: #define OPFLG_JUMP            0x0001  /* jump:  P2 holds jmp target */
 8700: #define OPFLG_OUT2_PRERELEASE 0x0002  /* out2-prerelease: */
 8701: #define OPFLG_IN1             0x0004  /* in1:   P1 is an input */
 8702: #define OPFLG_IN2             0x0008  /* in2:   P2 is an input */
 8703: #define OPFLG_IN3             0x0010  /* in3:   P3 is an input */
 8704: #define OPFLG_OUT2            0x0020  /* out2:  P2 is an output */
 8705: #define OPFLG_OUT3            0x0040  /* out3:  P3 is an output */
 8706: #define OPFLG_INITIALIZER {\
 8707: /*   0 */ 0x00, 0x01, 0x01, 0x04, 0x04, 0x10, 0x00, 0x02,\
 8708: /*   8 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x24, 0x24,\
 8709: /*  16 */ 0x00, 0x00, 0x00, 0x24, 0x04, 0x05, 0x04, 0x00,\
 8710: /*  24 */ 0x00, 0x01, 0x01, 0x05, 0x05, 0x00, 0x00, 0x00,\
 8711: /*  32 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00,\
 8712: /*  40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,\
 8713: /*  48 */ 0x11, 0x11, 0x08, 0x11, 0x11, 0x11, 0x11, 0x02,\
 8714: /*  56 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
 8715: /*  64 */ 0x00, 0x02, 0x00, 0x01, 0x4c, 0x4c, 0x01, 0x01,\
 8716: /*  72 */ 0x01, 0x05, 0x05, 0x15, 0x15, 0x15, 0x15, 0x15,\
 8717: /*  80 */ 0x15, 0x01, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,\
 8718: /*  88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x01, 0x24, 0x02, 0x01,\
 8719: /*  96 */ 0x08, 0x08, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00,\
 8720: /* 104 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
 8721: /* 112 */ 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01, 0x08,\
 8722: /* 120 */ 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00,\
 8723: /* 128 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,\
 8724: /* 136 */ 0x01, 0x00, 0x01, 0x00, 0x00, 0x04, 0x04, 0x04,\
 8725: /* 144 */ 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00,}
 8726: 
 8727: /************** End of opcodes.h *********************************************/
 8728: /************** Continuing where we left off in vdbe.h ***********************/
 8729: 
 8730: /*
 8731: ** Prototypes for the VDBE interface.  See comments on the implementation
 8732: ** for a description of what each of these routines does.
 8733: */
 8734: SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3*);
 8735: SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe*,int);
 8736: SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe*,int,int);
 8737: SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe*,int,int,int);
 8738: SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe*,int,int,int,int);
 8739: SQLITE_PRIVATE int sqlite3VdbeAddOp4(Vdbe*,int,int,int,int,const char *zP4,int);
 8740: SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(Vdbe*,int,int,int,int,int);
 8741: SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp);
 8742: SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe*,int,char*);
 8743: SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, u32 addr, int P1);
 8744: SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, u32 addr, int P2);
 8745: SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, u32 addr, int P3);
 8746: SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe*, u8 P5);
 8747: SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe*, int addr);
 8748: SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe*, int addr);
 8749: SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N);
 8750: SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int);
 8751: SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int);
 8752: SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe*);
 8753: SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*);
 8754: SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*);
 8755: SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3*,Vdbe*);
 8756: SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*);
 8757: SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe*);
 8758: SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe*, int);
 8759: SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe*);
 8760: #ifdef SQLITE_DEBUG
 8761: SQLITE_PRIVATE   int sqlite3VdbeAssertMayAbort(Vdbe *, int);
 8762: SQLITE_PRIVATE   void sqlite3VdbeTrace(Vdbe*,FILE*);
 8763: #endif
 8764: SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe*);
 8765: SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe*);
 8766: SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe*);
 8767: SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe*,int);
 8768: SQLITE_PRIVATE int sqlite3VdbeSetColName(Vdbe*, int, int, const char *, void(*)(void*));
 8769: SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe*);
 8770: SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe*);
 8771: SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, int);
 8772: SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe*,Vdbe*);
 8773: SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*);
 8774: SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe*, int, u8);
 8775: SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe*, int);
 8776: #ifndef SQLITE_OMIT_TRACE
 8777: SQLITE_PRIVATE   char *sqlite3VdbeExpandSql(Vdbe*, const char*);
 8778: #endif
 8779: 
 8780: SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,UnpackedRecord*);
 8781: SQLITE_PRIVATE int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*);
 8782: SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(KeyInfo *, char *, int, char **);
 8783: 
 8784: #ifndef SQLITE_OMIT_TRIGGER
 8785: SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *);
 8786: #endif
 8787: 
 8788: 
 8789: #ifndef NDEBUG
 8790: SQLITE_PRIVATE   void sqlite3VdbeComment(Vdbe*, const char*, ...);
 8791: # define VdbeComment(X)  sqlite3VdbeComment X
 8792: SQLITE_PRIVATE   void sqlite3VdbeNoopComment(Vdbe*, const char*, ...);
 8793: # define VdbeNoopComment(X)  sqlite3VdbeNoopComment X
 8794: #else
 8795: # define VdbeComment(X)
 8796: # define VdbeNoopComment(X)
 8797: #endif
 8798: 
 8799: #endif
 8800: 
 8801: /************** End of vdbe.h ************************************************/
 8802: /************** Continuing where we left off in sqliteInt.h ******************/
 8803: /************** Include pager.h in the middle of sqliteInt.h *****************/
 8804: /************** Begin file pager.h *******************************************/
 8805: /*
 8806: ** 2001 September 15
 8807: **
 8808: ** The author disclaims copyright to this source code.  In place of
 8809: ** a legal notice, here is a blessing:
 8810: **
 8811: **    May you do good and not evil.
 8812: **    May you find forgiveness for yourself and forgive others.
 8813: **    May you share freely, never taking more than you give.
 8814: **
 8815: *************************************************************************
 8816: ** This header file defines the interface that the sqlite page cache
 8817: ** subsystem.  The page cache subsystem reads and writes a file a page
 8818: ** at a time and provides a journal for rollback.
 8819: */
 8820: 
 8821: #ifndef _PAGER_H_
 8822: #define _PAGER_H_
 8823: 
 8824: /*
 8825: ** Default maximum size for persistent journal files. A negative 
 8826: ** value means no limit. This value may be overridden using the 
 8827: ** sqlite3PagerJournalSizeLimit() API. See also "PRAGMA journal_size_limit".
 8828: */
 8829: #ifndef SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT
 8830:   #define SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT -1
 8831: #endif
 8832: 
 8833: /*
 8834: ** The type used to represent a page number.  The first page in a file
 8835: ** is called page 1.  0 is used to represent "not a page".
 8836: */
 8837: typedef u32 Pgno;
 8838: 
 8839: /*
 8840: ** Each open file is managed by a separate instance of the "Pager" structure.
 8841: */
 8842: typedef struct Pager Pager;
 8843: 
 8844: /*
 8845: ** Handle type for pages.
 8846: */
 8847: typedef struct PgHdr DbPage;
 8848: 
 8849: /*
 8850: ** Page number PAGER_MJ_PGNO is never used in an SQLite database (it is
 8851: ** reserved for working around a windows/posix incompatibility). It is
 8852: ** used in the journal to signify that the remainder of the journal file 
 8853: ** is devoted to storing a master journal name - there are no more pages to
 8854: ** roll back. See comments for function writeMasterJournal() in pager.c 
 8855: ** for details.
 8856: */
 8857: #define PAGER_MJ_PGNO(x) ((Pgno)((PENDING_BYTE/((x)->pageSize))+1))
 8858: 
 8859: /*
 8860: ** Allowed values for the flags parameter to sqlite3PagerOpen().
 8861: **
 8862: ** NOTE: These values must match the corresponding BTREE_ values in btree.h.
 8863: */
 8864: #define PAGER_OMIT_JOURNAL  0x0001    /* Do not use a rollback journal */
 8865: #define PAGER_NO_READLOCK   0x0002    /* Omit readlocks on readonly files */
 8866: #define PAGER_MEMORY        0x0004    /* In-memory database */
 8867: 
 8868: /*
 8869: ** Valid values for the second argument to sqlite3PagerLockingMode().
 8870: */
 8871: #define PAGER_LOCKINGMODE_QUERY      -1
 8872: #define PAGER_LOCKINGMODE_NORMAL      0
 8873: #define PAGER_LOCKINGMODE_EXCLUSIVE   1
 8874: 
 8875: /*
 8876: ** Numeric constants that encode the journalmode.  
 8877: */
 8878: #define PAGER_JOURNALMODE_QUERY     (-1)  /* Query the value of journalmode */
 8879: #define PAGER_JOURNALMODE_DELETE      0   /* Commit by deleting journal file */
 8880: #define PAGER_JOURNALMODE_PERSIST     1   /* Commit by zeroing journal header */
 8881: #define PAGER_JOURNALMODE_OFF         2   /* Journal omitted.  */
 8882: #define PAGER_JOURNALMODE_TRUNCATE    3   /* Commit by truncating journal */
 8883: #define PAGER_JOURNALMODE_MEMORY      4   /* In-memory journal file */
 8884: #define PAGER_JOURNALMODE_WAL         5   /* Use write-ahead logging */
 8885: 
 8886: /*
 8887: ** The remainder of this file contains the declarations of the functions
 8888: ** that make up the Pager sub-system API. See source code comments for 
 8889: ** a detailed description of each routine.
 8890: */
 8891: 
 8892: /* Open and close a Pager connection. */ 
 8893: SQLITE_PRIVATE int sqlite3PagerOpen(
 8894:   sqlite3_vfs*,
 8895:   Pager **ppPager,
 8896:   const char*,
 8897:   int,
 8898:   int,
 8899:   int,
 8900:   void(*)(DbPage*)
 8901: );
 8902: SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager);
 8903: SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager*, int, unsigned char*);
 8904: 
 8905: /* Functions used to configure a Pager object. */
 8906: SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *);
 8907: SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager*, u32*, int);
 8908: SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager*, int);
 8909: SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager*, int);
 8910: SQLITE_PRIVATE void sqlite3PagerShrink(Pager*);
 8911: SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager*,int,int,int);
 8912: SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *, int);
 8913: SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *, int);
 8914: SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager*);
 8915: SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager*);
 8916: SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *, i64);
 8917: SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager*);
 8918: 
 8919: /* Functions used to obtain and release page references. */ 
 8920: SQLITE_PRIVATE int sqlite3PagerAcquire(Pager *pPager, Pgno pgno, DbPage **ppPage, int clrFlag);
 8921: #define sqlite3PagerGet(A,B,C) sqlite3PagerAcquire(A,B,C,0)
 8922: SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno);
 8923: SQLITE_PRIVATE void sqlite3PagerRef(DbPage*);
 8924: SQLITE_PRIVATE void sqlite3PagerUnref(DbPage*);
 8925: 
 8926: /* Operations on page references. */
 8927: SQLITE_PRIVATE int sqlite3PagerWrite(DbPage*);
 8928: SQLITE_PRIVATE void sqlite3PagerDontWrite(DbPage*);
 8929: SQLITE_PRIVATE int sqlite3PagerMovepage(Pager*,DbPage*,Pgno,int);
 8930: SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage*);
 8931: SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *); 
 8932: SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *); 
 8933: 
 8934: /* Functions used to manage pager transactions and savepoints. */
 8935: SQLITE_PRIVATE void sqlite3PagerPagecount(Pager*, int*);
 8936: SQLITE_PRIVATE int sqlite3PagerBegin(Pager*, int exFlag, int);
 8937: SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(Pager*,const char *zMaster, int);
 8938: SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager*);
 8939: SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager);
 8940: SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager*);
 8941: SQLITE_PRIVATE int sqlite3PagerRollback(Pager*);
 8942: SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int n);
 8943: SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint);
 8944: SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager);
 8945: 
 8946: SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int, int*, int*);
 8947: SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager);
 8948: SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager);
 8949: SQLITE_PRIVATE int sqlite3PagerOpenWal(Pager *pPager, int *pisOpen);
 8950: SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager);
 8951: 
 8952: /* Functions used to query pager state and configuration. */
 8953: SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager*);
 8954: SQLITE_PRIVATE int sqlite3PagerRefcount(Pager*);
 8955: SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager*);
 8956: SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager*);
 8957: SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager*);
 8958: SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager*);
 8959: SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager*);
 8960: SQLITE_PRIVATE int sqlite3PagerNosync(Pager*);
 8961: SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager*);
 8962: SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager*);
 8963: SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *, int, int, int *);
 8964: SQLITE_PRIVATE void sqlite3PagerClearCache(Pager *);
 8965: 
 8966: /* Functions used to truncate the database file. */
 8967: SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno);
 8968: 
 8969: #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL)
 8970: SQLITE_PRIVATE void *sqlite3PagerCodec(DbPage *);
 8971: #endif
 8972: 
 8973: /* Functions to support testing and debugging. */
 8974: #if !defined(NDEBUG) || defined(SQLITE_TEST)
 8975: SQLITE_PRIVATE   Pgno sqlite3PagerPagenumber(DbPage*);
 8976: SQLITE_PRIVATE   int sqlite3PagerIswriteable(DbPage*);
 8977: #endif
 8978: #ifdef SQLITE_TEST
 8979: SQLITE_PRIVATE   int *sqlite3PagerStats(Pager*);
 8980: SQLITE_PRIVATE   void sqlite3PagerRefdump(Pager*);
 8981:   void disable_simulated_io_errors(void);
 8982:   void enable_simulated_io_errors(void);
 8983: #else
 8984: # define disable_simulated_io_errors()
 8985: # define enable_simulated_io_errors()
 8986: #endif
 8987: 
 8988: #endif /* _PAGER_H_ */
 8989: 
 8990: /************** End of pager.h ***********************************************/
 8991: /************** Continuing where we left off in sqliteInt.h ******************/
 8992: /************** Include pcache.h in the middle of sqliteInt.h ****************/
 8993: /************** Begin file pcache.h ******************************************/
 8994: /*
 8995: ** 2008 August 05
 8996: **
 8997: ** The author disclaims copyright to this source code.  In place of
 8998: ** a legal notice, here is a blessing:
 8999: **
 9000: **    May you do good and not evil.
 9001: **    May you find forgiveness for yourself and forgive others.
 9002: **    May you share freely, never taking more than you give.
 9003: **
 9004: *************************************************************************
 9005: ** This header file defines the interface that the sqlite page cache
 9006: ** subsystem. 
 9007: */
 9008: 
 9009: #ifndef _PCACHE_H_
 9010: 
 9011: typedef struct PgHdr PgHdr;
 9012: typedef struct PCache PCache;
 9013: 
 9014: /*
 9015: ** Every page in the cache is controlled by an instance of the following
 9016: ** structure.
 9017: */
 9018: struct PgHdr {
 9019:   sqlite3_pcache_page *pPage;    /* Pcache object page handle */
 9020:   void *pData;                   /* Page data */
 9021:   void *pExtra;                  /* Extra content */
 9022:   PgHdr *pDirty;                 /* Transient list of dirty pages */
 9023:   Pgno pgno;                     /* Page number for this page */
 9024:   Pager *pPager;                 /* The pager this page is part of */
 9025: #ifdef SQLITE_CHECK_PAGES
 9026:   u32 pageHash;                  /* Hash of page content */
 9027: #endif
 9028:   u16 flags;                     /* PGHDR flags defined below */
 9029: 
 9030:   /**********************************************************************
 9031:   ** Elements above are public.  All that follows is private to pcache.c
 9032:   ** and should not be accessed by other modules.
 9033:   */
 9034:   i16 nRef;                      /* Number of users of this page */
 9035:   PCache *pCache;                /* Cache that owns this page */
 9036: 
 9037:   PgHdr *pDirtyNext;             /* Next element in list of dirty pages */
 9038:   PgHdr *pDirtyPrev;             /* Previous element in list of dirty pages */
 9039: };
 9040: 
 9041: /* Bit values for PgHdr.flags */
 9042: #define PGHDR_DIRTY             0x002  /* Page has changed */
 9043: #define PGHDR_NEED_SYNC         0x004  /* Fsync the rollback journal before
 9044:                                        ** writing this page to the database */
 9045: #define PGHDR_NEED_READ         0x008  /* Content is unread */
 9046: #define PGHDR_REUSE_UNLIKELY    0x010  /* A hint that reuse is unlikely */
 9047: #define PGHDR_DONT_WRITE        0x020  /* Do not write content to disk */
 9048: 
 9049: /* Initialize and shutdown the page cache subsystem */
 9050: SQLITE_PRIVATE int sqlite3PcacheInitialize(void);
 9051: SQLITE_PRIVATE void sqlite3PcacheShutdown(void);
 9052: 
 9053: /* Page cache buffer management:
 9054: ** These routines implement SQLITE_CONFIG_PAGECACHE.
 9055: */
 9056: SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *, int sz, int n);
 9057: 
 9058: /* Create a new pager cache.
 9059: ** Under memory stress, invoke xStress to try to make pages clean.
 9060: ** Only clean and unpinned pages can be reclaimed.
 9061: */
 9062: SQLITE_PRIVATE void sqlite3PcacheOpen(
 9063:   int szPage,                    /* Size of every page */
 9064:   int szExtra,                   /* Extra space associated with each page */
 9065:   int bPurgeable,                /* True if pages are on backing store */
 9066:   int (*xStress)(void*, PgHdr*), /* Call to try to make pages clean */
 9067:   void *pStress,                 /* Argument to xStress */
 9068:   PCache *pToInit                /* Preallocated space for the PCache */
 9069: );
 9070: 
 9071: /* Modify the page-size after the cache has been created. */
 9072: SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *, int);
 9073: 
 9074: /* Return the size in bytes of a PCache object.  Used to preallocate
 9075: ** storage space.
 9076: */
 9077: SQLITE_PRIVATE int sqlite3PcacheSize(void);
 9078: 
 9079: /* One release per successful fetch.  Page is pinned until released.
 9080: ** Reference counted. 
 9081: */
 9082: SQLITE_PRIVATE int sqlite3PcacheFetch(PCache*, Pgno, int createFlag, PgHdr**);
 9083: SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr*);
 9084: 
 9085: SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr*);         /* Remove page from cache */
 9086: SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr*);    /* Make sure page is marked dirty */
 9087: SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr*);    /* Mark a single page as clean */
 9088: SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache*);    /* Mark all dirty list pages as clean */
 9089: 
 9090: /* Change a page number.  Used by incr-vacuum. */
 9091: SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr*, Pgno);
 9092: 
 9093: /* Remove all pages with pgno>x.  Reset the cache if x==0 */
 9094: SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache*, Pgno x);
 9095: 
 9096: /* Get a list of all dirty pages in the cache, sorted by page number */
 9097: SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache*);
 9098: 
 9099: /* Reset and close the cache object */
 9100: SQLITE_PRIVATE void sqlite3PcacheClose(PCache*);
 9101: 
 9102: /* Clear flags from pages of the page cache */
 9103: SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *);
 9104: 
 9105: /* Discard the contents of the cache */
 9106: SQLITE_PRIVATE void sqlite3PcacheClear(PCache*);
 9107: 
 9108: /* Return the total number of outstanding page references */
 9109: SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache*);
 9110: 
 9111: /* Increment the reference count of an existing page */
 9112: SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr*);
 9113: 
 9114: SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr*);
 9115: 
 9116: /* Return the total number of pages stored in the cache */
 9117: SQLITE_PRIVATE int sqlite3PcachePagecount(PCache*);
 9118: 
 9119: #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
 9120: /* Iterate through all dirty pages currently stored in the cache. This
 9121: ** interface is only available if SQLITE_CHECK_PAGES is defined when the 
 9122: ** library is built.
 9123: */
 9124: SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *));
 9125: #endif
 9126: 
 9127: /* Set and get the suggested cache-size for the specified pager-cache.
 9128: **
 9129: ** If no global maximum is configured, then the system attempts to limit
 9130: ** the total number of pages cached by purgeable pager-caches to the sum
 9131: ** of the suggested cache-sizes.
 9132: */
 9133: SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *, int);
 9134: #ifdef SQLITE_TEST
 9135: SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *);
 9136: #endif
 9137: 
 9138: /* Free up as much memory as possible from the page cache */
 9139: SQLITE_PRIVATE void sqlite3PcacheShrink(PCache*);
 9140: 
 9141: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
 9142: /* Try to return memory used by the pcache module to the main memory heap */
 9143: SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int);
 9144: #endif
 9145: 
 9146: #ifdef SQLITE_TEST
 9147: SQLITE_PRIVATE void sqlite3PcacheStats(int*,int*,int*,int*);
 9148: #endif
 9149: 
 9150: SQLITE_PRIVATE void sqlite3PCacheSetDefault(void);
 9151: 
 9152: #endif /* _PCACHE_H_ */
 9153: 
 9154: /************** End of pcache.h **********************************************/
 9155: /************** Continuing where we left off in sqliteInt.h ******************/
 9156: 
 9157: /************** Include os.h in the middle of sqliteInt.h ********************/
 9158: /************** Begin file os.h **********************************************/
 9159: /*
 9160: ** 2001 September 16
 9161: **
 9162: ** The author disclaims copyright to this source code.  In place of
 9163: ** a legal notice, here is a blessing:
 9164: **
 9165: **    May you do good and not evil.
 9166: **    May you find forgiveness for yourself and forgive others.
 9167: **    May you share freely, never taking more than you give.
 9168: **
 9169: ******************************************************************************
 9170: **
 9171: ** This header file (together with is companion C source-code file
 9172: ** "os.c") attempt to abstract the underlying operating system so that
 9173: ** the SQLite library will work on both POSIX and windows systems.
 9174: **
 9175: ** This header file is #include-ed by sqliteInt.h and thus ends up
 9176: ** being included by every source file.
 9177: */
 9178: #ifndef _SQLITE_OS_H_
 9179: #define _SQLITE_OS_H_
 9180: 
 9181: /*
 9182: ** Figure out if we are dealing with Unix, Windows, or some other
 9183: ** operating system.  After the following block of preprocess macros,
 9184: ** all of SQLITE_OS_UNIX, SQLITE_OS_WIN, SQLITE_OS_OS2, and SQLITE_OS_OTHER 
 9185: ** will defined to either 1 or 0.  One of the four will be 1.  The other 
 9186: ** three will be 0.
 9187: */
 9188: #if defined(SQLITE_OS_OTHER)
 9189: # if SQLITE_OS_OTHER==1
 9190: #   undef SQLITE_OS_UNIX
 9191: #   define SQLITE_OS_UNIX 0
 9192: #   undef SQLITE_OS_WIN
 9193: #   define SQLITE_OS_WIN 0
 9194: #   undef SQLITE_OS_OS2
 9195: #   define SQLITE_OS_OS2 0
 9196: # else
 9197: #   undef SQLITE_OS_OTHER
 9198: # endif
 9199: #endif
 9200: #if !defined(SQLITE_OS_UNIX) && !defined(SQLITE_OS_OTHER)
 9201: # define SQLITE_OS_OTHER 0
 9202: # ifndef SQLITE_OS_WIN
 9203: #   if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__)
 9204: #     define SQLITE_OS_WIN 1
 9205: #     define SQLITE_OS_UNIX 0
 9206: #     define SQLITE_OS_OS2 0
 9207: #   elif defined(__EMX__) || defined(_OS2) || defined(OS2) || defined(_OS2_) || defined(__OS2__)
 9208: #     define SQLITE_OS_WIN 0
 9209: #     define SQLITE_OS_UNIX 0
 9210: #     define SQLITE_OS_OS2 1
 9211: #   else
 9212: #     define SQLITE_OS_WIN 0
 9213: #     define SQLITE_OS_UNIX 1
 9214: #     define SQLITE_OS_OS2 0
 9215: #  endif
 9216: # else
 9217: #  define SQLITE_OS_UNIX 0
 9218: #  define SQLITE_OS_OS2 0
 9219: # endif
 9220: #else
 9221: # ifndef SQLITE_OS_WIN
 9222: #  define SQLITE_OS_WIN 0
 9223: # endif
 9224: #endif
 9225: 
 9226: /*
 9227: ** Define the maximum size of a temporary filename
 9228: */
 9229: #if SQLITE_OS_WIN
 9230: # include <windows.h>
 9231: # define SQLITE_TEMPNAME_SIZE (MAX_PATH+50)
 9232: #elif SQLITE_OS_OS2
 9233: # if (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 3) && defined(OS2_HIGH_MEMORY)
 9234: #  include <os2safe.h> /* has to be included before os2.h for linking to work */
 9235: # endif
 9236: # define INCL_DOSDATETIME
 9237: # define INCL_DOSFILEMGR
 9238: # define INCL_DOSERRORS
 9239: # define INCL_DOSMISC
 9240: # define INCL_DOSPROCESS
 9241: # define INCL_DOSMODULEMGR
 9242: # define INCL_DOSSEMAPHORES
 9243: # include <os2.h>
 9244: # include <uconv.h>
 9245: # define SQLITE_TEMPNAME_SIZE (CCHMAXPATHCOMP)
 9246: #else
 9247: # define SQLITE_TEMPNAME_SIZE 200
 9248: #endif
 9249: 
 9250: /*
 9251: ** Determine if we are dealing with Windows NT.
 9252: */
 9253: #if defined(_WIN32_WINNT)
 9254: # define SQLITE_OS_WINNT 1
 9255: #else
 9256: # define SQLITE_OS_WINNT 0
 9257: #endif
 9258: 
 9259: /*
 9260: ** Determine if we are dealing with WindowsCE - which has a much
 9261: ** reduced API.
 9262: */
 9263: #if defined(_WIN32_WCE)
 9264: # define SQLITE_OS_WINCE 1
 9265: #else
 9266: # define SQLITE_OS_WINCE 0
 9267: #endif
 9268: 
 9269: /* If the SET_FULLSYNC macro is not defined above, then make it
 9270: ** a no-op
 9271: */
 9272: #ifndef SET_FULLSYNC
 9273: # define SET_FULLSYNC(x,y)
 9274: #endif
 9275: 
 9276: /*
 9277: ** The default size of a disk sector
 9278: */
 9279: #ifndef SQLITE_DEFAULT_SECTOR_SIZE
 9280: # define SQLITE_DEFAULT_SECTOR_SIZE 4096
 9281: #endif
 9282: 
 9283: /*
 9284: ** Temporary files are named starting with this prefix followed by 16 random
 9285: ** alphanumeric characters, and no file extension. They are stored in the
 9286: ** OS's standard temporary file directory, and are deleted prior to exit.
 9287: ** If sqlite is being embedded in another program, you may wish to change the
 9288: ** prefix to reflect your program's name, so that if your program exits
 9289: ** prematurely, old temporary files can be easily identified. This can be done
 9290: ** using -DSQLITE_TEMP_FILE_PREFIX=myprefix_ on the compiler command line.
 9291: **
 9292: ** 2006-10-31:  The default prefix used to be "sqlite_".  But then
 9293: ** Mcafee started using SQLite in their anti-virus product and it
 9294: ** started putting files with the "sqlite" name in the c:/temp folder.
 9295: ** This annoyed many windows users.  Those users would then do a 
 9296: ** Google search for "sqlite", find the telephone numbers of the
 9297: ** developers and call to wake them up at night and complain.
 9298: ** For this reason, the default name prefix is changed to be "sqlite" 
 9299: ** spelled backwards.  So the temp files are still identified, but
 9300: ** anybody smart enough to figure out the code is also likely smart
 9301: ** enough to know that calling the developer will not help get rid
 9302: ** of the file.
 9303: */
 9304: #ifndef SQLITE_TEMP_FILE_PREFIX
 9305: # define SQLITE_TEMP_FILE_PREFIX "etilqs_"
 9306: #endif
 9307: 
 9308: /*
 9309: ** The following values may be passed as the second argument to
 9310: ** sqlite3OsLock(). The various locks exhibit the following semantics:
 9311: **
 9312: ** SHARED:    Any number of processes may hold a SHARED lock simultaneously.
 9313: ** RESERVED:  A single process may hold a RESERVED lock on a file at
 9314: **            any time. Other processes may hold and obtain new SHARED locks.
 9315: ** PENDING:   A single process may hold a PENDING lock on a file at
 9316: **            any one time. Existing SHARED locks may persist, but no new
 9317: **            SHARED locks may be obtained by other processes.
 9318: ** EXCLUSIVE: An EXCLUSIVE lock precludes all other locks.
 9319: **
 9320: ** PENDING_LOCK may not be passed directly to sqlite3OsLock(). Instead, a
 9321: ** process that requests an EXCLUSIVE lock may actually obtain a PENDING
 9322: ** lock. This can be upgraded to an EXCLUSIVE lock by a subsequent call to
 9323: ** sqlite3OsLock().
 9324: */
 9325: #define NO_LOCK         0
 9326: #define SHARED_LOCK     1
 9327: #define RESERVED_LOCK   2
 9328: #define PENDING_LOCK    3
 9329: #define EXCLUSIVE_LOCK  4
 9330: 
 9331: /*
 9332: ** File Locking Notes:  (Mostly about windows but also some info for Unix)
 9333: **
 9334: ** We cannot use LockFileEx() or UnlockFileEx() on Win95/98/ME because
 9335: ** those functions are not available.  So we use only LockFile() and
 9336: ** UnlockFile().
 9337: **
 9338: ** LockFile() prevents not just writing but also reading by other processes.
 9339: ** A SHARED_LOCK is obtained by locking a single randomly-chosen 
 9340: ** byte out of a specific range of bytes. The lock byte is obtained at 
 9341: ** random so two separate readers can probably access the file at the 
 9342: ** same time, unless they are unlucky and choose the same lock byte.
 9343: ** An EXCLUSIVE_LOCK is obtained by locking all bytes in the range.
 9344: ** There can only be one writer.  A RESERVED_LOCK is obtained by locking
 9345: ** a single byte of the file that is designated as the reserved lock byte.
 9346: ** A PENDING_LOCK is obtained by locking a designated byte different from
 9347: ** the RESERVED_LOCK byte.
 9348: **
 9349: ** On WinNT/2K/XP systems, LockFileEx() and UnlockFileEx() are available,
 9350: ** which means we can use reader/writer locks.  When reader/writer locks
 9351: ** are used, the lock is placed on the same range of bytes that is used
 9352: ** for probabilistic locking in Win95/98/ME.  Hence, the locking scheme
 9353: ** will support two or more Win95 readers or two or more WinNT readers.
 9354: ** But a single Win95 reader will lock out all WinNT readers and a single
 9355: ** WinNT reader will lock out all other Win95 readers.
 9356: **
 9357: ** The following #defines specify the range of bytes used for locking.
 9358: ** SHARED_SIZE is the number of bytes available in the pool from which
 9359: ** a random byte is selected for a shared lock.  The pool of bytes for
 9360: ** shared locks begins at SHARED_FIRST. 
 9361: **
 9362: ** The same locking strategy and
 9363: ** byte ranges are used for Unix.  This leaves open the possiblity of having
 9364: ** clients on win95, winNT, and unix all talking to the same shared file
 9365: ** and all locking correctly.  To do so would require that samba (or whatever
 9366: ** tool is being used for file sharing) implements locks correctly between
 9367: ** windows and unix.  I'm guessing that isn't likely to happen, but by
 9368: ** using the same locking range we are at least open to the possibility.
 9369: **
 9370: ** Locking in windows is manditory.  For this reason, we cannot store
 9371: ** actual data in the bytes used for locking.  The pager never allocates
 9372: ** the pages involved in locking therefore.  SHARED_SIZE is selected so
 9373: ** that all locks will fit on a single page even at the minimum page size.
 9374: ** PENDING_BYTE defines the beginning of the locks.  By default PENDING_BYTE
 9375: ** is set high so that we don't have to allocate an unused page except
 9376: ** for very large databases.  But one should test the page skipping logic 
 9377: ** by setting PENDING_BYTE low and running the entire regression suite.
 9378: **
 9379: ** Changing the value of PENDING_BYTE results in a subtly incompatible
 9380: ** file format.  Depending on how it is changed, you might not notice
 9381: ** the incompatibility right away, even running a full regression test.
 9382: ** The default location of PENDING_BYTE is the first byte past the
 9383: ** 1GB boundary.
 9384: **
 9385: */
 9386: #ifdef SQLITE_OMIT_WSD
 9387: # define PENDING_BYTE     (0x40000000)
 9388: #else
 9389: # define PENDING_BYTE      sqlite3PendingByte
 9390: #endif
 9391: #define RESERVED_BYTE     (PENDING_BYTE+1)
 9392: #define SHARED_FIRST      (PENDING_BYTE+2)
 9393: #define SHARED_SIZE       510
 9394: 
 9395: /*
 9396: ** Wrapper around OS specific sqlite3_os_init() function.
 9397: */
 9398: SQLITE_PRIVATE int sqlite3OsInit(void);
 9399: 
 9400: /* 
 9401: ** Functions for accessing sqlite3_file methods 
 9402: */
 9403: SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file*);
 9404: SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file*, void*, int amt, i64 offset);
 9405: SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file*, const void*, int amt, i64 offset);
 9406: SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file*, i64 size);
 9407: SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file*, int);
 9408: SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file*, i64 *pSize);
 9409: SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file*, int);
 9410: SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file*, int);
 9411: SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut);
 9412: SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file*,int,void*);
 9413: SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file*,int,void*);
 9414: #define SQLITE_FCNTL_DB_UNCHANGED 0xca093fa0
 9415: SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id);
 9416: SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id);
 9417: SQLITE_PRIVATE int sqlite3OsShmMap(sqlite3_file *,int,int,int,void volatile **);
 9418: SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int, int, int);
 9419: SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id);
 9420: SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int);
 9421: 
 9422: 
 9423: /* 
 9424: ** Functions for accessing sqlite3_vfs methods 
 9425: */
 9426: SQLITE_PRIVATE int sqlite3OsOpen(sqlite3_vfs *, const char *, sqlite3_file*, int, int *);
 9427: SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *, const char *, int);
 9428: SQLITE_PRIVATE int sqlite3OsAccess(sqlite3_vfs *, const char *, int, int *pResOut);
 9429: SQLITE_PRIVATE int sqlite3OsFullPathname(sqlite3_vfs *, const char *, int, char *);
 9430: #ifndef SQLITE_OMIT_LOAD_EXTENSION
 9431: SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *, const char *);
 9432: SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *, int, char *);
 9433: SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void);
 9434: SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *, void *);
 9435: #endif /* SQLITE_OMIT_LOAD_EXTENSION */
 9436: SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *, int, char *);
 9437: SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *, int);
 9438: SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *, sqlite3_int64*);
 9439: 
 9440: /*
 9441: ** Convenience functions for opening and closing files using 
 9442: ** sqlite3_malloc() to obtain space for the file-handle structure.
 9443: */
 9444: SQLITE_PRIVATE int sqlite3OsOpenMalloc(sqlite3_vfs *, const char *, sqlite3_file **, int,int*);
 9445: SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *);
 9446: 
 9447: #endif /* _SQLITE_OS_H_ */
 9448: 
 9449: /************** End of os.h **************************************************/
 9450: /************** Continuing where we left off in sqliteInt.h ******************/
 9451: /************** Include mutex.h in the middle of sqliteInt.h *****************/
 9452: /************** Begin file mutex.h *******************************************/
 9453: /*
 9454: ** 2007 August 28
 9455: **
 9456: ** The author disclaims copyright to this source code.  In place of
 9457: ** a legal notice, here is a blessing:
 9458: **
 9459: **    May you do good and not evil.
 9460: **    May you find forgiveness for yourself and forgive others.
 9461: **    May you share freely, never taking more than you give.
 9462: **
 9463: *************************************************************************
 9464: **
 9465: ** This file contains the common header for all mutex implementations.
 9466: ** The sqliteInt.h header #includes this file so that it is available
 9467: ** to all source files.  We break it out in an effort to keep the code
 9468: ** better organized.
 9469: **
 9470: ** NOTE:  source files should *not* #include this header file directly.
 9471: ** Source files should #include the sqliteInt.h file and let that file
 9472: ** include this one indirectly.
 9473: */
 9474: 
 9475: 
 9476: /*
 9477: ** Figure out what version of the code to use.  The choices are
 9478: **
 9479: **   SQLITE_MUTEX_OMIT         No mutex logic.  Not even stubs.  The
 9480: **                             mutexes implemention cannot be overridden
 9481: **                             at start-time.
 9482: **
 9483: **   SQLITE_MUTEX_NOOP         For single-threaded applications.  No
 9484: **                             mutual exclusion is provided.  But this
 9485: **                             implementation can be overridden at
 9486: **                             start-time.
 9487: **
 9488: **   SQLITE_MUTEX_PTHREADS     For multi-threaded applications on Unix.
 9489: **
 9490: **   SQLITE_MUTEX_W32          For multi-threaded applications on Win32.
 9491: **
 9492: **   SQLITE_MUTEX_OS2          For multi-threaded applications on OS/2.
 9493: */
 9494: #if !SQLITE_THREADSAFE
 9495: # define SQLITE_MUTEX_OMIT
 9496: #endif
 9497: #if SQLITE_THREADSAFE && !defined(SQLITE_MUTEX_NOOP)
 9498: #  if SQLITE_OS_UNIX
 9499: #    define SQLITE_MUTEX_PTHREADS
 9500: #  elif SQLITE_OS_WIN
 9501: #    define SQLITE_MUTEX_W32
 9502: #  elif SQLITE_OS_OS2
 9503: #    define SQLITE_MUTEX_OS2
 9504: #  else
 9505: #    define SQLITE_MUTEX_NOOP
 9506: #  endif
 9507: #endif
 9508: 
 9509: #ifdef SQLITE_MUTEX_OMIT
 9510: /*
 9511: ** If this is a no-op implementation, implement everything as macros.
 9512: */
 9513: #define sqlite3_mutex_alloc(X)    ((sqlite3_mutex*)8)
 9514: #define sqlite3_mutex_free(X)
 9515: #define sqlite3_mutex_enter(X)    
 9516: #define sqlite3_mutex_try(X)      SQLITE_OK
 9517: #define sqlite3_mutex_leave(X)    
 9518: #define sqlite3_mutex_held(X)     ((void)(X),1)
 9519: #define sqlite3_mutex_notheld(X)  ((void)(X),1)
 9520: #define sqlite3MutexAlloc(X)      ((sqlite3_mutex*)8)
 9521: #define sqlite3MutexInit()        SQLITE_OK
 9522: #define sqlite3MutexEnd()
 9523: #define MUTEX_LOGIC(X)
 9524: #else
 9525: #define MUTEX_LOGIC(X)            X
 9526: #endif /* defined(SQLITE_MUTEX_OMIT) */
 9527: 
 9528: /************** End of mutex.h ***********************************************/
 9529: /************** Continuing where we left off in sqliteInt.h ******************/
 9530: 
 9531: 
 9532: /*
 9533: ** Each database file to be accessed by the system is an instance
 9534: ** of the following structure.  There are normally two of these structures
 9535: ** in the sqlite.aDb[] array.  aDb[0] is the main database file and
 9536: ** aDb[1] is the database file used to hold temporary tables.  Additional
 9537: ** databases may be attached.
 9538: */
 9539: struct Db {
 9540:   char *zName;         /* Name of this database */
 9541:   Btree *pBt;          /* The B*Tree structure for this database file */
 9542:   u8 inTrans;          /* 0: not writable.  1: Transaction.  2: Checkpoint */
 9543:   u8 safety_level;     /* How aggressive at syncing data to disk */
 9544:   Schema *pSchema;     /* Pointer to database schema (possibly shared) */
 9545: };
 9546: 
 9547: /*
 9548: ** An instance of the following structure stores a database schema.
 9549: **
 9550: ** Most Schema objects are associated with a Btree.  The exception is
 9551: ** the Schema for the TEMP databaes (sqlite3.aDb[1]) which is free-standing.
 9552: ** In shared cache mode, a single Schema object can be shared by multiple
 9553: ** Btrees that refer to the same underlying BtShared object.
 9554: ** 
 9555: ** Schema objects are automatically deallocated when the last Btree that
 9556: ** references them is destroyed.   The TEMP Schema is manually freed by
 9557: ** sqlite3_close().
 9558: *
 9559: ** A thread must be holding a mutex on the corresponding Btree in order
 9560: ** to access Schema content.  This implies that the thread must also be
 9561: ** holding a mutex on the sqlite3 connection pointer that owns the Btree.
 9562: ** For a TEMP Schema, only the connection mutex is required.
 9563: */
 9564: struct Schema {
 9565:   int schema_cookie;   /* Database schema version number for this file */
 9566:   int iGeneration;     /* Generation counter.  Incremented with each change */
 9567:   Hash tblHash;        /* All tables indexed by name */
 9568:   Hash idxHash;        /* All (named) indices indexed by name */
 9569:   Hash trigHash;       /* All triggers indexed by name */
 9570:   Hash fkeyHash;       /* All foreign keys by referenced table name */
 9571:   Table *pSeqTab;      /* The sqlite_sequence table used by AUTOINCREMENT */
 9572:   u8 file_format;      /* Schema format version for this file */
 9573:   u8 enc;              /* Text encoding used by this database */
 9574:   u16 flags;           /* Flags associated with this schema */
 9575:   int cache_size;      /* Number of pages to use in the cache */
 9576: };
 9577: 
 9578: /*
 9579: ** These macros can be used to test, set, or clear bits in the 
 9580: ** Db.pSchema->flags field.
 9581: */
 9582: #define DbHasProperty(D,I,P)     (((D)->aDb[I].pSchema->flags&(P))==(P))
 9583: #define DbHasAnyProperty(D,I,P)  (((D)->aDb[I].pSchema->flags&(P))!=0)
 9584: #define DbSetProperty(D,I,P)     (D)->aDb[I].pSchema->flags|=(P)
 9585: #define DbClearProperty(D,I,P)   (D)->aDb[I].pSchema->flags&=~(P)
 9586: 
 9587: /*
 9588: ** Allowed values for the DB.pSchema->flags field.
 9589: **
 9590: ** The DB_SchemaLoaded flag is set after the database schema has been
 9591: ** read into internal hash tables.
 9592: **
 9593: ** DB_UnresetViews means that one or more views have column names that
 9594: ** have been filled out.  If the schema changes, these column names might
 9595: ** changes and so the view will need to be reset.
 9596: */
 9597: #define DB_SchemaLoaded    0x0001  /* The schema has been loaded */
 9598: #define DB_UnresetViews    0x0002  /* Some views have defined column names */
 9599: #define DB_Empty           0x0004  /* The file is empty (length 0 bytes) */
 9600: 
 9601: /*
 9602: ** The number of different kinds of things that can be limited
 9603: ** using the sqlite3_limit() interface.
 9604: */
 9605: #define SQLITE_N_LIMIT (SQLITE_LIMIT_TRIGGER_DEPTH+1)
 9606: 
 9607: /*
 9608: ** Lookaside malloc is a set of fixed-size buffers that can be used
 9609: ** to satisfy small transient memory allocation requests for objects
 9610: ** associated with a particular database connection.  The use of
 9611: ** lookaside malloc provides a significant performance enhancement
 9612: ** (approx 10%) by avoiding numerous malloc/free requests while parsing
 9613: ** SQL statements.
 9614: **
 9615: ** The Lookaside structure holds configuration information about the
 9616: ** lookaside malloc subsystem.  Each available memory allocation in
 9617: ** the lookaside subsystem is stored on a linked list of LookasideSlot
 9618: ** objects.
 9619: **
 9620: ** Lookaside allocations are only allowed for objects that are associated
 9621: ** with a particular database connection.  Hence, schema information cannot
 9622: ** be stored in lookaside because in shared cache mode the schema information
 9623: ** is shared by multiple database connections.  Therefore, while parsing
 9624: ** schema information, the Lookaside.bEnabled flag is cleared so that
 9625: ** lookaside allocations are not used to construct the schema objects.
 9626: */
 9627: struct Lookaside {
 9628:   u16 sz;                 /* Size of each buffer in bytes */
 9629:   u8 bEnabled;            /* False to disable new lookaside allocations */
 9630:   u8 bMalloced;           /* True if pStart obtained from sqlite3_malloc() */
 9631:   int nOut;               /* Number of buffers currently checked out */
 9632:   int mxOut;              /* Highwater mark for nOut */
 9633:   int anStat[3];          /* 0: hits.  1: size misses.  2: full misses */
 9634:   LookasideSlot *pFree;   /* List of available buffers */
 9635:   void *pStart;           /* First byte of available memory space */
 9636:   void *pEnd;             /* First byte past end of available space */
 9637: };
 9638: struct LookasideSlot {
 9639:   LookasideSlot *pNext;    /* Next buffer in the list of free buffers */
 9640: };
 9641: 
 9642: /*
 9643: ** A hash table for function definitions.
 9644: **
 9645: ** Hash each FuncDef structure into one of the FuncDefHash.a[] slots.
 9646: ** Collisions are on the FuncDef.pHash chain.
 9647: */
 9648: struct FuncDefHash {
 9649:   FuncDef *a[23];       /* Hash table for functions */
 9650: };
 9651: 
 9652: /*
 9653: ** Each database connection is an instance of the following structure.
 9654: **
 9655: ** The sqlite.lastRowid records the last insert rowid generated by an
 9656: ** insert statement.  Inserts on views do not affect its value.  Each
 9657: ** trigger has its own context, so that lastRowid can be updated inside
 9658: ** triggers as usual.  The previous value will be restored once the trigger
 9659: ** exits.  Upon entering a before or instead of trigger, lastRowid is no
 9660: ** longer (since after version 2.8.12) reset to -1.
 9661: **
 9662: ** The sqlite.nChange does not count changes within triggers and keeps no
 9663: ** context.  It is reset at start of sqlite3_exec.
 9664: ** The sqlite.lsChange represents the number of changes made by the last
 9665: ** insert, update, or delete statement.  It remains constant throughout the
 9666: ** length of a statement and is then updated by OP_SetCounts.  It keeps a
 9667: ** context stack just like lastRowid so that the count of changes
 9668: ** within a trigger is not seen outside the trigger.  Changes to views do not
 9669: ** affect the value of lsChange.
 9670: ** The sqlite.csChange keeps track of the number of current changes (since
 9671: ** the last statement) and is used to update sqlite_lsChange.
 9672: **
 9673: ** The member variables sqlite.errCode, sqlite.zErrMsg and sqlite.zErrMsg16
 9674: ** store the most recent error code and, if applicable, string. The
 9675: ** internal function sqlite3Error() is used to set these variables
 9676: ** consistently.
 9677: */
 9678: struct sqlite3 {
 9679:   sqlite3_vfs *pVfs;            /* OS Interface */
 9680:   int nDb;                      /* Number of backends currently in use */
 9681:   Db *aDb;                      /* All backends */
 9682:   int flags;                    /* Miscellaneous flags. See below */
 9683:   unsigned int openFlags;       /* Flags passed to sqlite3_vfs.xOpen() */
 9684:   int errCode;                  /* Most recent error code (SQLITE_*) */
 9685:   int errMask;                  /* & result codes with this before returning */
 9686:   u8 autoCommit;                /* The auto-commit flag. */
 9687:   u8 temp_store;                /* 1: file 2: memory 0: default */
 9688:   u8 mallocFailed;              /* True if we have seen a malloc failure */
 9689:   u8 dfltLockMode;              /* Default locking-mode for attached dbs */
 9690:   signed char nextAutovac;      /* Autovac setting after VACUUM if >=0 */
 9691:   u8 suppressErr;               /* Do not issue error messages if true */
 9692:   u8 vtabOnConflict;            /* Value to return for s3_vtab_on_conflict() */
 9693:   int nextPagesize;             /* Pagesize after VACUUM if >0 */
 9694:   int nTable;                   /* Number of tables in the database */
 9695:   CollSeq *pDfltColl;           /* The default collating sequence (BINARY) */
 9696:   i64 lastRowid;                /* ROWID of most recent insert (see above) */
 9697:   u32 magic;                    /* Magic number for detect library misuse */
 9698:   int nChange;                  /* Value returned by sqlite3_changes() */
 9699:   int nTotalChange;             /* Value returned by sqlite3_total_changes() */
 9700:   sqlite3_mutex *mutex;         /* Connection mutex */
 9701:   int aLimit[SQLITE_N_LIMIT];   /* Limits */
 9702:   struct sqlite3InitInfo {      /* Information used during initialization */
 9703:     int iDb;                    /* When back is being initialized */
 9704:     int newTnum;                /* Rootpage of table being initialized */
 9705:     u8 busy;                    /* TRUE if currently initializing */
 9706:     u8 orphanTrigger;           /* Last statement is orphaned TEMP trigger */
 9707:   } init;
 9708:   int nExtension;               /* Number of loaded extensions */
 9709:   void **aExtension;            /* Array of shared library handles */
 9710:   struct Vdbe *pVdbe;           /* List of active virtual machines */
 9711:   int activeVdbeCnt;            /* Number of VDBEs currently executing */
 9712:   int writeVdbeCnt;             /* Number of active VDBEs that are writing */
 9713:   int vdbeExecCnt;              /* Number of nested calls to VdbeExec() */
 9714:   void (*xTrace)(void*,const char*);        /* Trace function */
 9715:   void *pTraceArg;                          /* Argument to the trace function */
 9716:   void (*xProfile)(void*,const char*,u64);  /* Profiling function */
 9717:   void *pProfileArg;                        /* Argument to profile function */
 9718:   void *pCommitArg;                 /* Argument to xCommitCallback() */   
 9719:   int (*xCommitCallback)(void*);    /* Invoked at every commit. */
 9720:   void *pRollbackArg;               /* Argument to xRollbackCallback() */   
 9721:   void (*xRollbackCallback)(void*); /* Invoked at every commit. */
 9722:   void *pUpdateArg;
 9723:   void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64);
 9724: #ifndef SQLITE_OMIT_WAL
 9725:   int (*xWalCallback)(void *, sqlite3 *, const char *, int);
 9726:   void *pWalArg;
 9727: #endif
 9728:   void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*);
 9729:   void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*);
 9730:   void *pCollNeededArg;
 9731:   sqlite3_value *pErr;          /* Most recent error message */
 9732:   char *zErrMsg;                /* Most recent error message (UTF-8 encoded) */
 9733:   char *zErrMsg16;              /* Most recent error message (UTF-16 encoded) */
 9734:   union {
 9735:     volatile int isInterrupted; /* True if sqlite3_interrupt has been called */
 9736:     double notUsed1;            /* Spacer */
 9737:   } u1;
 9738:   Lookaside lookaside;          /* Lookaside malloc configuration */
 9739: #ifndef SQLITE_OMIT_AUTHORIZATION
 9740:   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
 9741:                                 /* Access authorization function */
 9742:   void *pAuthArg;               /* 1st argument to the access auth function */
 9743: #endif
 9744: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
 9745:   int (*xProgress)(void *);     /* The progress callback */
 9746:   void *pProgressArg;           /* Argument to the progress callback */
 9747:   int nProgressOps;             /* Number of opcodes for progress callback */
 9748: #endif
 9749: #ifndef SQLITE_OMIT_VIRTUALTABLE
 9750:   Hash aModule;                 /* populated by sqlite3_create_module() */
 9751:   VtabCtx *pVtabCtx;            /* Context for active vtab connect/create */
 9752:   VTable **aVTrans;             /* Virtual tables with open transactions */
 9753:   int nVTrans;                  /* Allocated size of aVTrans */
 9754:   VTable *pDisconnect;    /* Disconnect these in next sqlite3_prepare() */
 9755: #endif
 9756:   FuncDefHash aFunc;            /* Hash table of connection functions */
 9757:   Hash aCollSeq;                /* All collating sequences */
 9758:   BusyHandler busyHandler;      /* Busy callback */
 9759:   int busyTimeout;              /* Busy handler timeout, in msec */
 9760:   Db aDbStatic[2];              /* Static space for the 2 default backends */
 9761:   Savepoint *pSavepoint;        /* List of active savepoints */
 9762:   int nSavepoint;               /* Number of non-transaction savepoints */
 9763:   int nStatement;               /* Number of nested statement-transactions  */
 9764:   u8 isTransactionSavepoint;    /* True if the outermost savepoint is a TS */
 9765:   i64 nDeferredCons;            /* Net deferred constraints this transaction. */
 9766:   int *pnBytesFreed;            /* If not NULL, increment this in DbFree() */
 9767: 
 9768: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
 9769:   /* The following variables are all protected by the STATIC_MASTER 
 9770:   ** mutex, not by sqlite3.mutex. They are used by code in notify.c. 
 9771:   **
 9772:   ** When X.pUnlockConnection==Y, that means that X is waiting for Y to
 9773:   ** unlock so that it can proceed.
 9774:   **
 9775:   ** When X.pBlockingConnection==Y, that means that something that X tried
 9776:   ** tried to do recently failed with an SQLITE_LOCKED error due to locks
 9777:   ** held by Y.
 9778:   */
 9779:   sqlite3 *pBlockingConnection; /* Connection that caused SQLITE_LOCKED */
 9780:   sqlite3 *pUnlockConnection;           /* Connection to watch for unlock */
 9781:   void *pUnlockArg;                     /* Argument to xUnlockNotify */
 9782:   void (*xUnlockNotify)(void **, int);  /* Unlock notify callback */
 9783:   sqlite3 *pNextBlocked;        /* Next in list of all blocked connections */
 9784: #endif
 9785: };
 9786: 
 9787: /*
 9788: ** A macro to discover the encoding of a database.
 9789: */
 9790: #define ENC(db) ((db)->aDb[0].pSchema->enc)
 9791: 
 9792: /*
 9793: ** Possible values for the sqlite3.flags.
 9794: */
 9795: #define SQLITE_VdbeTrace      0x00000100  /* True to trace VDBE execution */
 9796: #define SQLITE_InternChanges  0x00000200  /* Uncommitted Hash table changes */
 9797: #define SQLITE_FullColNames   0x00000400  /* Show full column names on SELECT */
 9798: #define SQLITE_ShortColNames  0x00000800  /* Show short columns names */
 9799: #define SQLITE_CountRows      0x00001000  /* Count rows changed by INSERT, */
 9800:                                           /*   DELETE, or UPDATE and return */
 9801:                                           /*   the count using a callback. */
 9802: #define SQLITE_NullCallback   0x00002000  /* Invoke the callback once if the */
 9803:                                           /*   result set is empty */
 9804: #define SQLITE_SqlTrace       0x00004000  /* Debug print SQL as it executes */
 9805: #define SQLITE_VdbeListing    0x00008000  /* Debug listings of VDBE programs */
 9806: #define SQLITE_WriteSchema    0x00010000  /* OK to update SQLITE_MASTER */
 9807: #define SQLITE_NoReadlock     0x00020000  /* Readlocks are omitted when 
 9808:                                           ** accessing read-only databases */
 9809: #define SQLITE_IgnoreChecks   0x00040000  /* Do not enforce check constraints */
 9810: #define SQLITE_ReadUncommitted 0x0080000  /* For shared-cache mode */
 9811: #define SQLITE_LegacyFileFmt  0x00100000  /* Create new databases in format 1 */
 9812: #define SQLITE_FullFSync      0x00200000  /* Use full fsync on the backend */
 9813: #define SQLITE_CkptFullFSync  0x00400000  /* Use full fsync for checkpoint */
 9814: #define SQLITE_RecoveryMode   0x00800000  /* Ignore schema errors */
 9815: #define SQLITE_ReverseOrder   0x01000000  /* Reverse unordered SELECTs */
 9816: #define SQLITE_RecTriggers    0x02000000  /* Enable recursive triggers */
 9817: #define SQLITE_ForeignKeys    0x04000000  /* Enforce foreign key constraints  */
 9818: #define SQLITE_AutoIndex      0x08000000  /* Enable automatic indexes */
 9819: #define SQLITE_PreferBuiltin  0x10000000  /* Preference to built-in funcs */
 9820: #define SQLITE_LoadExtension  0x20000000  /* Enable load_extension */
 9821: #define SQLITE_EnableTrigger  0x40000000  /* True to enable triggers */
 9822: 
 9823: /*
 9824: ** Bits of the sqlite3.flags field that are used by the
 9825: ** sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS,...) interface.
 9826: ** These must be the low-order bits of the flags field.
 9827: */
 9828: #define SQLITE_QueryFlattener 0x01        /* Disable query flattening */
 9829: #define SQLITE_ColumnCache    0x02        /* Disable the column cache */
 9830: #define SQLITE_IndexSort      0x04        /* Disable indexes for sorting */
 9831: #define SQLITE_IndexSearch    0x08        /* Disable indexes for searching */
 9832: #define SQLITE_IndexCover     0x10        /* Disable index covering table */
 9833: #define SQLITE_GroupByOrder   0x20        /* Disable GROUPBY cover of ORDERBY */
 9834: #define SQLITE_FactorOutConst 0x40        /* Disable factoring out constants */
 9835: #define SQLITE_IdxRealAsInt   0x80        /* Store REAL as INT in indices */
 9836: #define SQLITE_DistinctOpt    0x80        /* DISTINCT using indexes */
 9837: #define SQLITE_OptMask        0xff        /* Mask of all disablable opts */
 9838: 
 9839: /*
 9840: ** Possible values for the sqlite.magic field.
 9841: ** The numbers are obtained at random and have no special meaning, other
 9842: ** than being distinct from one another.
 9843: */
 9844: #define SQLITE_MAGIC_OPEN     0xa029a697  /* Database is open */
 9845: #define SQLITE_MAGIC_CLOSED   0x9f3c2d33  /* Database is closed */
 9846: #define SQLITE_MAGIC_SICK     0x4b771290  /* Error and awaiting close */
 9847: #define SQLITE_MAGIC_BUSY     0xf03b7906  /* Database currently in use */
 9848: #define SQLITE_MAGIC_ERROR    0xb5357930  /* An SQLITE_MISUSE error occurred */
 9849: 
 9850: /*
 9851: ** Each SQL function is defined by an instance of the following
 9852: ** structure.  A pointer to this structure is stored in the sqlite.aFunc
 9853: ** hash table.  When multiple functions have the same name, the hash table
 9854: ** points to a linked list of these structures.
 9855: */
 9856: struct FuncDef {
 9857:   i16 nArg;            /* Number of arguments.  -1 means unlimited */
 9858:   u8 iPrefEnc;         /* Preferred text encoding (SQLITE_UTF8, 16LE, 16BE) */
 9859:   u8 flags;            /* Some combination of SQLITE_FUNC_* */
 9860:   void *pUserData;     /* User data parameter */
 9861:   FuncDef *pNext;      /* Next function with same name */
 9862:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */
 9863:   void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */
 9864:   void (*xFinalize)(sqlite3_context*);                /* Aggregate finalizer */
 9865:   char *zName;         /* SQL name of the function. */
 9866:   FuncDef *pHash;      /* Next with a different name but the same hash */
 9867:   FuncDestructor *pDestructor;   /* Reference counted destructor function */
 9868: };
 9869: 
 9870: /*
 9871: ** This structure encapsulates a user-function destructor callback (as
 9872: ** configured using create_function_v2()) and a reference counter. When
 9873: ** create_function_v2() is called to create a function with a destructor,
 9874: ** a single object of this type is allocated. FuncDestructor.nRef is set to 
 9875: ** the number of FuncDef objects created (either 1 or 3, depending on whether
 9876: ** or not the specified encoding is SQLITE_ANY). The FuncDef.pDestructor
 9877: ** member of each of the new FuncDef objects is set to point to the allocated
 9878: ** FuncDestructor.
 9879: **
 9880: ** Thereafter, when one of the FuncDef objects is deleted, the reference
 9881: ** count on this object is decremented. When it reaches 0, the destructor
 9882: ** is invoked and the FuncDestructor structure freed.
 9883: */
 9884: struct FuncDestructor {
 9885:   int nRef;
 9886:   void (*xDestroy)(void *);
 9887:   void *pUserData;
 9888: };
 9889: 
 9890: /*
 9891: ** Possible values for FuncDef.flags
 9892: */
 9893: #define SQLITE_FUNC_LIKE     0x01 /* Candidate for the LIKE optimization */
 9894: #define SQLITE_FUNC_CASE     0x02 /* Case-sensitive LIKE-type function */
 9895: #define SQLITE_FUNC_EPHEM    0x04 /* Ephemeral.  Delete with VDBE */
 9896: #define SQLITE_FUNC_NEEDCOLL 0x08 /* sqlite3GetFuncCollSeq() might be called */
 9897: #define SQLITE_FUNC_PRIVATE  0x10 /* Allowed for internal use only */
 9898: #define SQLITE_FUNC_COUNT    0x20 /* Built-in count(*) aggregate */
 9899: #define SQLITE_FUNC_COALESCE 0x40 /* Built-in coalesce() or ifnull() function */
 9900: 
 9901: /*
 9902: ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are
 9903: ** used to create the initializers for the FuncDef structures.
 9904: **
 9905: **   FUNCTION(zName, nArg, iArg, bNC, xFunc)
 9906: **     Used to create a scalar function definition of a function zName 
 9907: **     implemented by C function xFunc that accepts nArg arguments. The
 9908: **     value passed as iArg is cast to a (void*) and made available
 9909: **     as the user-data (sqlite3_user_data()) for the function. If 
 9910: **     argument bNC is true, then the SQLITE_FUNC_NEEDCOLL flag is set.
 9911: **
 9912: **   AGGREGATE(zName, nArg, iArg, bNC, xStep, xFinal)
 9913: **     Used to create an aggregate function definition implemented by
 9914: **     the C functions xStep and xFinal. The first four parameters
 9915: **     are interpreted in the same way as the first 4 parameters to
 9916: **     FUNCTION().
 9917: **
 9918: **   LIKEFUNC(zName, nArg, pArg, flags)
 9919: **     Used to create a scalar function definition of a function zName 
 9920: **     that accepts nArg arguments and is implemented by a call to C 
 9921: **     function likeFunc. Argument pArg is cast to a (void *) and made
 9922: **     available as the function user-data (sqlite3_user_data()). The
 9923: **     FuncDef.flags variable is set to the value passed as the flags
 9924: **     parameter.
 9925: */
 9926: #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \
 9927:   {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \
 9928:    SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0}
 9929: #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \
 9930:   {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \
 9931:    pArg, 0, xFunc, 0, 0, #zName, 0, 0}
 9932: #define LIKEFUNC(zName, nArg, arg, flags) \
 9933:   {nArg, SQLITE_UTF8, flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0}
 9934: #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \
 9935:   {nArg, SQLITE_UTF8, nc*SQLITE_FUNC_NEEDCOLL, \
 9936:    SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0}
 9937: 
 9938: /*
 9939: ** All current savepoints are stored in a linked list starting at
 9940: ** sqlite3.pSavepoint. The first element in the list is the most recently
 9941: ** opened savepoint. Savepoints are added to the list by the vdbe
 9942: ** OP_Savepoint instruction.
 9943: */
 9944: struct Savepoint {
 9945:   char *zName;                        /* Savepoint name (nul-terminated) */
 9946:   i64 nDeferredCons;                  /* Number of deferred fk violations */
 9947:   Savepoint *pNext;                   /* Parent savepoint (if any) */
 9948: };
 9949: 
 9950: /*
 9951: ** The following are used as the second parameter to sqlite3Savepoint(),
 9952: ** and as the P1 argument to the OP_Savepoint instruction.
 9953: */
 9954: #define SAVEPOINT_BEGIN      0
 9955: #define SAVEPOINT_RELEASE    1
 9956: #define SAVEPOINT_ROLLBACK   2
 9957: 
 9958: 
 9959: /*
 9960: ** Each SQLite module (virtual table definition) is defined by an
 9961: ** instance of the following structure, stored in the sqlite3.aModule
 9962: ** hash table.
 9963: */
 9964: struct Module {
 9965:   const sqlite3_module *pModule;       /* Callback pointers */
 9966:   const char *zName;                   /* Name passed to create_module() */
 9967:   void *pAux;                          /* pAux passed to create_module() */
 9968:   void (*xDestroy)(void *);            /* Module destructor function */
 9969: };
 9970: 
 9971: /*
 9972: ** information about each column of an SQL table is held in an instance
 9973: ** of this structure.
 9974: */
 9975: struct Column {
 9976:   char *zName;     /* Name of this column */
 9977:   Expr *pDflt;     /* Default value of this column */
 9978:   char *zDflt;     /* Original text of the default value */
 9979:   char *zType;     /* Data type for this column */
 9980:   char *zColl;     /* Collating sequence.  If NULL, use the default */
 9981:   u8 notNull;      /* True if there is a NOT NULL constraint */
 9982:   u8 isPrimKey;    /* True if this column is part of the PRIMARY KEY */
 9983:   char affinity;   /* One of the SQLITE_AFF_... values */
 9984: #ifndef SQLITE_OMIT_VIRTUALTABLE
 9985:   u8 isHidden;     /* True if this column is 'hidden' */
 9986: #endif
 9987: };
 9988: 
 9989: /*
 9990: ** A "Collating Sequence" is defined by an instance of the following
 9991: ** structure. Conceptually, a collating sequence consists of a name and
 9992: ** a comparison routine that defines the order of that sequence.
 9993: **
 9994: ** There may two separate implementations of the collation function, one
 9995: ** that processes text in UTF-8 encoding (CollSeq.xCmp) and another that
 9996: ** processes text encoded in UTF-16 (CollSeq.xCmp16), using the machine
 9997: ** native byte order. When a collation sequence is invoked, SQLite selects
 9998: ** the version that will require the least expensive encoding
 9999: ** translations, if any.
10000: **
10001: ** The CollSeq.pUser member variable is an extra parameter that passed in
10002: ** as the first argument to the UTF-8 comparison function, xCmp.
10003: ** CollSeq.pUser16 is the equivalent for the UTF-16 comparison function,
10004: ** xCmp16.
10005: **
10006: ** If both CollSeq.xCmp and CollSeq.xCmp16 are NULL, it means that the
10007: ** collating sequence is undefined.  Indices built on an undefined
10008: ** collating sequence may not be read or written.
10009: */
10010: struct CollSeq {
10011:   char *zName;          /* Name of the collating sequence, UTF-8 encoded */
10012:   u8 enc;               /* Text encoding handled by xCmp() */
10013:   void *pUser;          /* First argument to xCmp() */
10014:   int (*xCmp)(void*,int, const void*, int, const void*);
10015:   void (*xDel)(void*);  /* Destructor for pUser */
10016: };
10017: 
10018: /*
10019: ** A sort order can be either ASC or DESC.
10020: */
10021: #define SQLITE_SO_ASC       0  /* Sort in ascending order */
10022: #define SQLITE_SO_DESC      1  /* Sort in ascending order */
10023: 
10024: /*
10025: ** Column affinity types.
10026: **
10027: ** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and
10028: ** 't' for SQLITE_AFF_TEXT.  But we can save a little space and improve
10029: ** the speed a little by numbering the values consecutively.  
10030: **
10031: ** But rather than start with 0 or 1, we begin with 'a'.  That way,
10032: ** when multiple affinity types are concatenated into a string and
10033: ** used as the P4 operand, they will be more readable.
10034: **
10035: ** Note also that the numeric types are grouped together so that testing
10036: ** for a numeric type is a single comparison.
10037: */
10038: #define SQLITE_AFF_TEXT     'a'
10039: #define SQLITE_AFF_NONE     'b'
10040: #define SQLITE_AFF_NUMERIC  'c'
10041: #define SQLITE_AFF_INTEGER  'd'
10042: #define SQLITE_AFF_REAL     'e'
10043: 
10044: #define sqlite3IsNumericAffinity(X)  ((X)>=SQLITE_AFF_NUMERIC)
10045: 
10046: /*
10047: ** The SQLITE_AFF_MASK values masks off the significant bits of an
10048: ** affinity value. 
10049: */
10050: #define SQLITE_AFF_MASK     0x67
10051: 
10052: /*
10053: ** Additional bit values that can be ORed with an affinity without
10054: ** changing the affinity.
10055: */
10056: #define SQLITE_JUMPIFNULL   0x08  /* jumps if either operand is NULL */
10057: #define SQLITE_STOREP2      0x10  /* Store result in reg[P2] rather than jump */
10058: #define SQLITE_NULLEQ       0x80  /* NULL=NULL */
10059: 
10060: /*
10061: ** An object of this type is created for each virtual table present in
10062: ** the database schema. 
10063: **
10064: ** If the database schema is shared, then there is one instance of this
10065: ** structure for each database connection (sqlite3*) that uses the shared
10066: ** schema. This is because each database connection requires its own unique
10067: ** instance of the sqlite3_vtab* handle used to access the virtual table 
10068: ** implementation. sqlite3_vtab* handles can not be shared between 
10069: ** database connections, even when the rest of the in-memory database 
10070: ** schema is shared, as the implementation often stores the database
10071: ** connection handle passed to it via the xConnect() or xCreate() method
10072: ** during initialization internally. This database connection handle may
10073: ** then be used by the virtual table implementation to access real tables 
10074: ** within the database. So that they appear as part of the callers 
10075: ** transaction, these accesses need to be made via the same database 
10076: ** connection as that used to execute SQL operations on the virtual table.
10077: **
10078: ** All VTable objects that correspond to a single table in a shared
10079: ** database schema are initially stored in a linked-list pointed to by
10080: ** the Table.pVTable member variable of the corresponding Table object.
10081: ** When an sqlite3_prepare() operation is required to access the virtual
10082: ** table, it searches the list for the VTable that corresponds to the
10083: ** database connection doing the preparing so as to use the correct
10084: ** sqlite3_vtab* handle in the compiled query.
10085: **
10086: ** When an in-memory Table object is deleted (for example when the
10087: ** schema is being reloaded for some reason), the VTable objects are not 
10088: ** deleted and the sqlite3_vtab* handles are not xDisconnect()ed 
10089: ** immediately. Instead, they are moved from the Table.pVTable list to
10090: ** another linked list headed by the sqlite3.pDisconnect member of the
10091: ** corresponding sqlite3 structure. They are then deleted/xDisconnected 
10092: ** next time a statement is prepared using said sqlite3*. This is done
10093: ** to avoid deadlock issues involving multiple sqlite3.mutex mutexes.
10094: ** Refer to comments above function sqlite3VtabUnlockList() for an
10095: ** explanation as to why it is safe to add an entry to an sqlite3.pDisconnect
10096: ** list without holding the corresponding sqlite3.mutex mutex.
10097: **
10098: ** The memory for objects of this type is always allocated by 
10099: ** sqlite3DbMalloc(), using the connection handle stored in VTable.db as 
10100: ** the first argument.
10101: */
10102: struct VTable {
10103:   sqlite3 *db;              /* Database connection associated with this table */
10104:   Module *pMod;             /* Pointer to module implementation */
10105:   sqlite3_vtab *pVtab;      /* Pointer to vtab instance */
10106:   int nRef;                 /* Number of pointers to this structure */
10107:   u8 bConstraint;           /* True if constraints are supported */
10108:   int iSavepoint;           /* Depth of the SAVEPOINT stack */
10109:   VTable *pNext;            /* Next in linked list (see above) */
10110: };
10111: 
10112: /*
10113: ** Each SQL table is represented in memory by an instance of the
10114: ** following structure.
10115: **
10116: ** Table.zName is the name of the table.  The case of the original
10117: ** CREATE TABLE statement is stored, but case is not significant for
10118: ** comparisons.
10119: **
10120: ** Table.nCol is the number of columns in this table.  Table.aCol is a
10121: ** pointer to an array of Column structures, one for each column.
10122: **
10123: ** If the table has an INTEGER PRIMARY KEY, then Table.iPKey is the index of
10124: ** the column that is that key.   Otherwise Table.iPKey is negative.  Note
10125: ** that the datatype of the PRIMARY KEY must be INTEGER for this field to
10126: ** be set.  An INTEGER PRIMARY KEY is used as the rowid for each row of
10127: ** the table.  If a table has no INTEGER PRIMARY KEY, then a random rowid
10128: ** is generated for each row of the table.  TF_HasPrimaryKey is set if
10129: ** the table has any PRIMARY KEY, INTEGER or otherwise.
10130: **
10131: ** Table.tnum is the page number for the root BTree page of the table in the
10132: ** database file.  If Table.iDb is the index of the database table backend
10133: ** in sqlite.aDb[].  0 is for the main database and 1 is for the file that
10134: ** holds temporary tables and indices.  If TF_Ephemeral is set
10135: ** then the table is stored in a file that is automatically deleted
10136: ** when the VDBE cursor to the table is closed.  In this case Table.tnum 
10137: ** refers VDBE cursor number that holds the table open, not to the root
10138: ** page number.  Transient tables are used to hold the results of a
10139: ** sub-query that appears instead of a real table name in the FROM clause 
10140: ** of a SELECT statement.
10141: */
10142: struct Table {
10143:   char *zName;         /* Name of the table or view */
10144:   int iPKey;           /* If not negative, use aCol[iPKey] as the primary key */
10145:   int nCol;            /* Number of columns in this table */
10146:   Column *aCol;        /* Information about each column */
10147:   Index *pIndex;       /* List of SQL indexes on this table. */
10148:   int tnum;            /* Root BTree node for this table (see note above) */
10149:   tRowcnt nRowEst;     /* Estimated rows in table - from sqlite_stat1 table */
10150:   Select *pSelect;     /* NULL for tables.  Points to definition if a view. */
10151:   u16 nRef;            /* Number of pointers to this Table */
10152:   u8 tabFlags;         /* Mask of TF_* values */
10153:   u8 keyConf;          /* What to do in case of uniqueness conflict on iPKey */
10154:   FKey *pFKey;         /* Linked list of all foreign keys in this table */
10155:   char *zColAff;       /* String defining the affinity of each column */
10156: #ifndef SQLITE_OMIT_CHECK
10157:   Expr *pCheck;        /* The AND of all CHECK constraints */
10158: #endif
10159: #ifndef SQLITE_OMIT_ALTERTABLE
10160:   int addColOffset;    /* Offset in CREATE TABLE stmt to add a new column */
10161: #endif
10162: #ifndef SQLITE_OMIT_VIRTUALTABLE
10163:   VTable *pVTable;     /* List of VTable objects. */
10164:   int nModuleArg;      /* Number of arguments to the module */
10165:   char **azModuleArg;  /* Text of all module args. [0] is module name */
10166: #endif
10167:   Trigger *pTrigger;   /* List of triggers stored in pSchema */
10168:   Schema *pSchema;     /* Schema that contains this table */
10169:   Table *pNextZombie;  /* Next on the Parse.pZombieTab list */
10170: };
10171: 
10172: /*
10173: ** Allowed values for Tabe.tabFlags.
10174: */
10175: #define TF_Readonly        0x01    /* Read-only system table */
10176: #define TF_Ephemeral       0x02    /* An ephemeral table */
10177: #define TF_HasPrimaryKey   0x04    /* Table has a primary key */
10178: #define TF_Autoincrement   0x08    /* Integer primary key is autoincrement */
10179: #define TF_Virtual         0x10    /* Is a virtual table */
10180: #define TF_NeedMetadata    0x20    /* aCol[].zType and aCol[].pColl missing */
10181: 
10182: 
10183: 
10184: /*
10185: ** Test to see whether or not a table is a virtual table.  This is
10186: ** done as a macro so that it will be optimized out when virtual
10187: ** table support is omitted from the build.
10188: */
10189: #ifndef SQLITE_OMIT_VIRTUALTABLE
10190: #  define IsVirtual(X)      (((X)->tabFlags & TF_Virtual)!=0)
10191: #  define IsHiddenColumn(X) ((X)->isHidden)
10192: #else
10193: #  define IsVirtual(X)      0
10194: #  define IsHiddenColumn(X) 0
10195: #endif
10196: 
10197: /*
10198: ** Each foreign key constraint is an instance of the following structure.
10199: **
10200: ** A foreign key is associated with two tables.  The "from" table is
10201: ** the table that contains the REFERENCES clause that creates the foreign
10202: ** key.  The "to" table is the table that is named in the REFERENCES clause.
10203: ** Consider this example:
10204: **
10205: **     CREATE TABLE ex1(
10206: **       a INTEGER PRIMARY KEY,
10207: **       b INTEGER CONSTRAINT fk1 REFERENCES ex2(x)
10208: **     );
10209: **
10210: ** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2".
10211: **
10212: ** Each REFERENCES clause generates an instance of the following structure
10213: ** which is attached to the from-table.  The to-table need not exist when
10214: ** the from-table is created.  The existence of the to-table is not checked.
10215: */
10216: struct FKey {
10217:   Table *pFrom;     /* Table containing the REFERENCES clause (aka: Child) */
10218:   FKey *pNextFrom;  /* Next foreign key in pFrom */
10219:   char *zTo;        /* Name of table that the key points to (aka: Parent) */
10220:   FKey *pNextTo;    /* Next foreign key on table named zTo */
10221:   FKey *pPrevTo;    /* Previous foreign key on table named zTo */
10222:   int nCol;         /* Number of columns in this key */
10223:   /* EV: R-30323-21917 */
10224:   u8 isDeferred;    /* True if constraint checking is deferred till COMMIT */
10225:   u8 aAction[2];          /* ON DELETE and ON UPDATE actions, respectively */
10226:   Trigger *apTrigger[2];  /* Triggers for aAction[] actions */
10227:   struct sColMap {  /* Mapping of columns in pFrom to columns in zTo */
10228:     int iFrom;         /* Index of column in pFrom */
10229:     char *zCol;        /* Name of column in zTo.  If 0 use PRIMARY KEY */
10230:   } aCol[1];        /* One entry for each of nCol column s */
10231: };
10232: 
10233: /*
10234: ** SQLite supports many different ways to resolve a constraint
10235: ** error.  ROLLBACK processing means that a constraint violation
10236: ** causes the operation in process to fail and for the current transaction
10237: ** to be rolled back.  ABORT processing means the operation in process
10238: ** fails and any prior changes from that one operation are backed out,
10239: ** but the transaction is not rolled back.  FAIL processing means that
10240: ** the operation in progress stops and returns an error code.  But prior
10241: ** changes due to the same operation are not backed out and no rollback
10242: ** occurs.  IGNORE means that the particular row that caused the constraint
10243: ** error is not inserted or updated.  Processing continues and no error
10244: ** is returned.  REPLACE means that preexisting database rows that caused
10245: ** a UNIQUE constraint violation are removed so that the new insert or
10246: ** update can proceed.  Processing continues and no error is reported.
10247: **
10248: ** RESTRICT, SETNULL, and CASCADE actions apply only to foreign keys.
10249: ** RESTRICT is the same as ABORT for IMMEDIATE foreign keys and the
10250: ** same as ROLLBACK for DEFERRED keys.  SETNULL means that the foreign
10251: ** key is set to NULL.  CASCADE means that a DELETE or UPDATE of the
10252: ** referenced table row is propagated into the row that holds the
10253: ** foreign key.
10254: ** 
10255: ** The following symbolic values are used to record which type
10256: ** of action to take.
10257: */
10258: #define OE_None     0   /* There is no constraint to check */
10259: #define OE_Rollback 1   /* Fail the operation and rollback the transaction */
10260: #define OE_Abort    2   /* Back out changes but do no rollback transaction */
10261: #define OE_Fail     3   /* Stop the operation but leave all prior changes */
10262: #define OE_Ignore   4   /* Ignore the error. Do not do the INSERT or UPDATE */
10263: #define OE_Replace  5   /* Delete existing record, then do INSERT or UPDATE */
10264: 
10265: #define OE_Restrict 6   /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */
10266: #define OE_SetNull  7   /* Set the foreign key value to NULL */
10267: #define OE_SetDflt  8   /* Set the foreign key value to its default */
10268: #define OE_Cascade  9   /* Cascade the changes */
10269: 
10270: #define OE_Default  99  /* Do whatever the default action is */
10271: 
10272: 
10273: /*
10274: ** An instance of the following structure is passed as the first
10275: ** argument to sqlite3VdbeKeyCompare and is used to control the 
10276: ** comparison of the two index keys.
10277: */
10278: struct KeyInfo {
10279:   sqlite3 *db;        /* The database connection */
10280:   u8 enc;             /* Text encoding - one of the SQLITE_UTF* values */
10281:   u16 nField;         /* Number of entries in aColl[] */
10282:   u8 *aSortOrder;     /* Sort order for each column.  May be NULL */
10283:   CollSeq *aColl[1];  /* Collating sequence for each term of the key */
10284: };
10285: 
10286: /*
10287: ** An instance of the following structure holds information about a
10288: ** single index record that has already been parsed out into individual
10289: ** values.
10290: **
10291: ** A record is an object that contains one or more fields of data.
10292: ** Records are used to store the content of a table row and to store
10293: ** the key of an index.  A blob encoding of a record is created by
10294: ** the OP_MakeRecord opcode of the VDBE and is disassembled by the
10295: ** OP_Column opcode.
10296: **
10297: ** This structure holds a record that has already been disassembled
10298: ** into its constituent fields.
10299: */
10300: struct UnpackedRecord {
10301:   KeyInfo *pKeyInfo;  /* Collation and sort-order information */
10302:   u16 nField;         /* Number of entries in apMem[] */
10303:   u8 flags;           /* Boolean settings.  UNPACKED_... below */
10304:   i64 rowid;          /* Used by UNPACKED_PREFIX_SEARCH */
10305:   Mem *aMem;          /* Values */
10306: };
10307: 
10308: /*
10309: ** Allowed values of UnpackedRecord.flags
10310: */
10311: #define UNPACKED_INCRKEY       0x01  /* Make this key an epsilon larger */
10312: #define UNPACKED_PREFIX_MATCH  0x02  /* A prefix match is considered OK */
10313: #define UNPACKED_PREFIX_SEARCH 0x04  /* Ignore final (rowid) field */
10314: 
10315: /*
10316: ** Each SQL index is represented in memory by an
10317: ** instance of the following structure.
10318: **
10319: ** The columns of the table that are to be indexed are described
10320: ** by the aiColumn[] field of this structure.  For example, suppose
10321: ** we have the following table and index:
10322: **
10323: **     CREATE TABLE Ex1(c1 int, c2 int, c3 text);
10324: **     CREATE INDEX Ex2 ON Ex1(c3,c1);
10325: **
10326: ** In the Table structure describing Ex1, nCol==3 because there are
10327: ** three columns in the table.  In the Index structure describing
10328: ** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed.
10329: ** The value of aiColumn is {2, 0}.  aiColumn[0]==2 because the 
10330: ** first column to be indexed (c3) has an index of 2 in Ex1.aCol[].
10331: ** The second column to be indexed (c1) has an index of 0 in
10332: ** Ex1.aCol[], hence Ex2.aiColumn[1]==0.
10333: **
10334: ** The Index.onError field determines whether or not the indexed columns
10335: ** must be unique and what to do if they are not.  When Index.onError=OE_None,
10336: ** it means this is not a unique index.  Otherwise it is a unique index
10337: ** and the value of Index.onError indicate the which conflict resolution 
10338: ** algorithm to employ whenever an attempt is made to insert a non-unique
10339: ** element.
10340: */
10341: struct Index {
10342:   char *zName;     /* Name of this index */
10343:   int nColumn;     /* Number of columns in the table used by this index */
10344:   int *aiColumn;   /* Which columns are used by this index.  1st is 0 */
10345:   tRowcnt *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */
10346:   Table *pTable;   /* The SQL table being indexed */
10347:   int tnum;        /* Page containing root of this index in database file */
10348:   u8 onError;      /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
10349:   u8 autoIndex;    /* True if is automatically created (ex: by UNIQUE) */
10350:   u8 bUnordered;   /* Use this index for == or IN queries only */
10351:   char *zColAff;   /* String defining the affinity of each column */
10352:   Index *pNext;    /* The next index associated with the same table */
10353:   Schema *pSchema; /* Schema containing this index */
10354:   u8 *aSortOrder;  /* Array of size Index.nColumn. True==DESC, False==ASC */
10355:   char **azColl;   /* Array of collation sequence names for index */
10356: #ifdef SQLITE_ENABLE_STAT3
10357:   int nSample;             /* Number of elements in aSample[] */
10358:   tRowcnt avgEq;           /* Average nEq value for key values not in aSample */
10359:   IndexSample *aSample;    /* Samples of the left-most key */
10360: #endif
10361: };
10362: 
10363: /*
10364: ** Each sample stored in the sqlite_stat3 table is represented in memory 
10365: ** using a structure of this type.  See documentation at the top of the
10366: ** analyze.c source file for additional information.
10367: */
10368: struct IndexSample {
10369:   union {
10370:     char *z;        /* Value if eType is SQLITE_TEXT or SQLITE_BLOB */
10371:     double r;       /* Value if eType is SQLITE_FLOAT */
10372:     i64 i;          /* Value if eType is SQLITE_INTEGER */
10373:   } u;
10374:   u8 eType;         /* SQLITE_NULL, SQLITE_INTEGER ... etc. */
10375:   int nByte;        /* Size in byte of text or blob. */
10376:   tRowcnt nEq;      /* Est. number of rows where the key equals this sample */
10377:   tRowcnt nLt;      /* Est. number of rows where key is less than this sample */
10378:   tRowcnt nDLt;     /* Est. number of distinct keys less than this sample */
10379: };
10380: 
10381: /*
10382: ** Each token coming out of the lexer is an instance of
10383: ** this structure.  Tokens are also used as part of an expression.
10384: **
10385: ** Note if Token.z==0 then Token.dyn and Token.n are undefined and
10386: ** may contain random values.  Do not make any assumptions about Token.dyn
10387: ** and Token.n when Token.z==0.
10388: */
10389: struct Token {
10390:   const char *z;     /* Text of the token.  Not NULL-terminated! */
10391:   unsigned int n;    /* Number of characters in this token */
10392: };
10393: 
10394: /*
10395: ** An instance of this structure contains information needed to generate
10396: ** code for a SELECT that contains aggregate functions.
10397: **
10398: ** If Expr.op==TK_AGG_COLUMN or TK_AGG_FUNCTION then Expr.pAggInfo is a
10399: ** pointer to this structure.  The Expr.iColumn field is the index in
10400: ** AggInfo.aCol[] or AggInfo.aFunc[] of information needed to generate
10401: ** code for that node.
10402: **
10403: ** AggInfo.pGroupBy and AggInfo.aFunc.pExpr point to fields within the
10404: ** original Select structure that describes the SELECT statement.  These
10405: ** fields do not need to be freed when deallocating the AggInfo structure.
10406: */
10407: struct AggInfo {
10408:   u8 directMode;          /* Direct rendering mode means take data directly
10409:                           ** from source tables rather than from accumulators */
10410:   u8 useSortingIdx;       /* In direct mode, reference the sorting index rather
10411:                           ** than the source table */
10412:   int sortingIdx;         /* Cursor number of the sorting index */
10413:   int sortingIdxPTab;     /* Cursor number of pseudo-table */
10414:   ExprList *pGroupBy;     /* The group by clause */
10415:   int nSortingColumn;     /* Number of columns in the sorting index */
10416:   struct AggInfo_col {    /* For each column used in source tables */
10417:     Table *pTab;             /* Source table */
10418:     int iTable;              /* Cursor number of the source table */
10419:     int iColumn;             /* Column number within the source table */
10420:     int iSorterColumn;       /* Column number in the sorting index */
10421:     int iMem;                /* Memory location that acts as accumulator */
10422:     Expr *pExpr;             /* The original expression */
10423:   } *aCol;
10424:   int nColumn;            /* Number of used entries in aCol[] */
10425:   int nColumnAlloc;       /* Number of slots allocated for aCol[] */
10426:   int nAccumulator;       /* Number of columns that show through to the output.
10427:                           ** Additional columns are used only as parameters to
10428:                           ** aggregate functions */
10429:   struct AggInfo_func {   /* For each aggregate function */
10430:     Expr *pExpr;             /* Expression encoding the function */
10431:     FuncDef *pFunc;          /* The aggregate function implementation */
10432:     int iMem;                /* Memory location that acts as accumulator */
10433:     int iDistinct;           /* Ephemeral table used to enforce DISTINCT */
10434:   } *aFunc;
10435:   int nFunc;              /* Number of entries in aFunc[] */
10436:   int nFuncAlloc;         /* Number of slots allocated for aFunc[] */
10437: };
10438: 
10439: /*
10440: ** The datatype ynVar is a signed integer, either 16-bit or 32-bit.
10441: ** Usually it is 16-bits.  But if SQLITE_MAX_VARIABLE_NUMBER is greater
10442: ** than 32767 we have to make it 32-bit.  16-bit is preferred because
10443: ** it uses less memory in the Expr object, which is a big memory user
10444: ** in systems with lots of prepared statements.  And few applications
10445: ** need more than about 10 or 20 variables.  But some extreme users want
10446: ** to have prepared statements with over 32767 variables, and for them
10447: ** the option is available (at compile-time).
10448: */
10449: #if SQLITE_MAX_VARIABLE_NUMBER<=32767
10450: typedef i16 ynVar;
10451: #else
10452: typedef int ynVar;
10453: #endif
10454: 
10455: /*
10456: ** Each node of an expression in the parse tree is an instance
10457: ** of this structure.
10458: **
10459: ** Expr.op is the opcode. The integer parser token codes are reused
10460: ** as opcodes here. For example, the parser defines TK_GE to be an integer
10461: ** code representing the ">=" operator. This same integer code is reused
10462: ** to represent the greater-than-or-equal-to operator in the expression
10463: ** tree.
10464: **
10465: ** If the expression is an SQL literal (TK_INTEGER, TK_FLOAT, TK_BLOB, 
10466: ** or TK_STRING), then Expr.token contains the text of the SQL literal. If
10467: ** the expression is a variable (TK_VARIABLE), then Expr.token contains the 
10468: ** variable name. Finally, if the expression is an SQL function (TK_FUNCTION),
10469: ** then Expr.token contains the name of the function.
10470: **
10471: ** Expr.pRight and Expr.pLeft are the left and right subexpressions of a
10472: ** binary operator. Either or both may be NULL.
10473: **
10474: ** Expr.x.pList is a list of arguments if the expression is an SQL function,
10475: ** a CASE expression or an IN expression of the form "<lhs> IN (<y>, <z>...)".
10476: ** Expr.x.pSelect is used if the expression is a sub-select or an expression of
10477: ** the form "<lhs> IN (SELECT ...)". If the EP_xIsSelect bit is set in the
10478: ** Expr.flags mask, then Expr.x.pSelect is valid. Otherwise, Expr.x.pList is 
10479: ** valid.
10480: **
10481: ** An expression of the form ID or ID.ID refers to a column in a table.
10482: ** For such expressions, Expr.op is set to TK_COLUMN and Expr.iTable is
10483: ** the integer cursor number of a VDBE cursor pointing to that table and
10484: ** Expr.iColumn is the column number for the specific column.  If the
10485: ** expression is used as a result in an aggregate SELECT, then the
10486: ** value is also stored in the Expr.iAgg column in the aggregate so that
10487: ** it can be accessed after all aggregates are computed.
10488: **
10489: ** If the expression is an unbound variable marker (a question mark 
10490: ** character '?' in the original SQL) then the Expr.iTable holds the index 
10491: ** number for that variable.
10492: **
10493: ** If the expression is a subquery then Expr.iColumn holds an integer
10494: ** register number containing the result of the subquery.  If the
10495: ** subquery gives a constant result, then iTable is -1.  If the subquery
10496: ** gives a different answer at different times during statement processing
10497: ** then iTable is the address of a subroutine that computes the subquery.
10498: **
10499: ** If the Expr is of type OP_Column, and the table it is selecting from
10500: ** is a disk table or the "old.*" pseudo-table, then pTab points to the
10501: ** corresponding table definition.
10502: **
10503: ** ALLOCATION NOTES:
10504: **
10505: ** Expr objects can use a lot of memory space in database schema.  To
10506: ** help reduce memory requirements, sometimes an Expr object will be
10507: ** truncated.  And to reduce the number of memory allocations, sometimes
10508: ** two or more Expr objects will be stored in a single memory allocation,
10509: ** together with Expr.zToken strings.
10510: **
10511: ** If the EP_Reduced and EP_TokenOnly flags are set when
10512: ** an Expr object is truncated.  When EP_Reduced is set, then all
10513: ** the child Expr objects in the Expr.pLeft and Expr.pRight subtrees
10514: ** are contained within the same memory allocation.  Note, however, that
10515: ** the subtrees in Expr.x.pList or Expr.x.pSelect are always separately
10516: ** allocated, regardless of whether or not EP_Reduced is set.
10517: */
10518: struct Expr {
10519:   u8 op;                 /* Operation performed by this node */
10520:   char affinity;         /* The affinity of the column or 0 if not a column */
10521:   u16 flags;             /* Various flags.  EP_* See below */
10522:   union {
10523:     char *zToken;          /* Token value. Zero terminated and dequoted */
10524:     int iValue;            /* Non-negative integer value if EP_IntValue */
10525:   } u;
10526: 
10527:   /* If the EP_TokenOnly flag is set in the Expr.flags mask, then no
10528:   ** space is allocated for the fields below this point. An attempt to
10529:   ** access them will result in a segfault or malfunction. 
10530:   *********************************************************************/
10531: 
10532:   Expr *pLeft;           /* Left subnode */
10533:   Expr *pRight;          /* Right subnode */
10534:   union {
10535:     ExprList *pList;     /* Function arguments or in "<expr> IN (<expr-list)" */
10536:     Select *pSelect;     /* Used for sub-selects and "<expr> IN (<select>)" */
10537:   } x;
10538:   CollSeq *pColl;        /* The collation type of the column or 0 */
10539: 
10540:   /* If the EP_Reduced flag is set in the Expr.flags mask, then no
10541:   ** space is allocated for the fields below this point. An attempt to
10542:   ** access them will result in a segfault or malfunction.
10543:   *********************************************************************/
10544: 
10545:   int iTable;            /* TK_COLUMN: cursor number of table holding column
10546:                          ** TK_REGISTER: register number
10547:                          ** TK_TRIGGER: 1 -> new, 0 -> old */
10548:   ynVar iColumn;         /* TK_COLUMN: column index.  -1 for rowid.
10549:                          ** TK_VARIABLE: variable number (always >= 1). */
10550:   i16 iAgg;              /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
10551:   i16 iRightJoinTable;   /* If EP_FromJoin, the right table of the join */
10552:   u8 flags2;             /* Second set of flags.  EP2_... */
10553:   u8 op2;                /* If a TK_REGISTER, the original value of Expr.op */
10554:   AggInfo *pAggInfo;     /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
10555:   Table *pTab;           /* Table for TK_COLUMN expressions. */
10556: #if SQLITE_MAX_EXPR_DEPTH>0
10557:   int nHeight;           /* Height of the tree headed by this node */
10558: #endif
10559: };
10560: 
10561: /*
10562: ** The following are the meanings of bits in the Expr.flags field.
10563: */
10564: #define EP_FromJoin   0x0001  /* Originated in ON or USING clause of a join */
10565: #define EP_Agg        0x0002  /* Contains one or more aggregate functions */
10566: #define EP_Resolved   0x0004  /* IDs have been resolved to COLUMNs */
10567: #define EP_Error      0x0008  /* Expression contains one or more errors */
10568: #define EP_Distinct   0x0010  /* Aggregate function with DISTINCT keyword */
10569: #define EP_VarSelect  0x0020  /* pSelect is correlated, not constant */
10570: #define EP_DblQuoted  0x0040  /* token.z was originally in "..." */
10571: #define EP_InfixFunc  0x0080  /* True for an infix function: LIKE, GLOB, etc */
10572: #define EP_ExpCollate 0x0100  /* Collating sequence specified explicitly */
10573: #define EP_FixedDest  0x0200  /* Result needed in a specific register */
10574: #define EP_IntValue   0x0400  /* Integer value contained in u.iValue */
10575: #define EP_xIsSelect  0x0800  /* x.pSelect is valid (otherwise x.pList is) */
10576: #define EP_Hint       0x1000  /* Optimizer hint. Not required for correctness */
10577: #define EP_Reduced    0x2000  /* Expr struct is EXPR_REDUCEDSIZE bytes only */
10578: #define EP_TokenOnly  0x4000  /* Expr struct is EXPR_TOKENONLYSIZE bytes only */
10579: #define EP_Static     0x8000  /* Held in memory not obtained from malloc() */
10580: 
10581: /*
10582: ** The following are the meanings of bits in the Expr.flags2 field.
10583: */
10584: #define EP2_MallocedToken  0x0001  /* Need to sqlite3DbFree() Expr.zToken */
10585: #define EP2_Irreducible    0x0002  /* Cannot EXPRDUP_REDUCE this Expr */
10586: 
10587: /*
10588: ** The pseudo-routine sqlite3ExprSetIrreducible sets the EP2_Irreducible
10589: ** flag on an expression structure.  This flag is used for VV&A only.  The
10590: ** routine is implemented as a macro that only works when in debugging mode,
10591: ** so as not to burden production code.
10592: */
10593: #ifdef SQLITE_DEBUG
10594: # define ExprSetIrreducible(X)  (X)->flags2 |= EP2_Irreducible
10595: #else
10596: # define ExprSetIrreducible(X)
10597: #endif
10598: 
10599: /*
10600: ** These macros can be used to test, set, or clear bits in the 
10601: ** Expr.flags field.
10602: */
10603: #define ExprHasProperty(E,P)     (((E)->flags&(P))==(P))
10604: #define ExprHasAnyProperty(E,P)  (((E)->flags&(P))!=0)
10605: #define ExprSetProperty(E,P)     (E)->flags|=(P)
10606: #define ExprClearProperty(E,P)   (E)->flags&=~(P)
10607: 
10608: /*
10609: ** Macros to determine the number of bytes required by a normal Expr 
10610: ** struct, an Expr struct with the EP_Reduced flag set in Expr.flags 
10611: ** and an Expr struct with the EP_TokenOnly flag set.
10612: */
10613: #define EXPR_FULLSIZE           sizeof(Expr)           /* Full size */
10614: #define EXPR_REDUCEDSIZE        offsetof(Expr,iTable)  /* Common features */
10615: #define EXPR_TOKENONLYSIZE      offsetof(Expr,pLeft)   /* Fewer features */
10616: 
10617: /*
10618: ** Flags passed to the sqlite3ExprDup() function. See the header comment 
10619: ** above sqlite3ExprDup() for details.
10620: */
10621: #define EXPRDUP_REDUCE         0x0001  /* Used reduced-size Expr nodes */
10622: 
10623: /*
10624: ** A list of expressions.  Each expression may optionally have a
10625: ** name.  An expr/name combination can be used in several ways, such
10626: ** as the list of "expr AS ID" fields following a "SELECT" or in the
10627: ** list of "ID = expr" items in an UPDATE.  A list of expressions can
10628: ** also be used as the argument to a function, in which case the a.zName
10629: ** field is not used.
10630: */
10631: struct ExprList {
10632:   int nExpr;             /* Number of expressions on the list */
10633:   int nAlloc;            /* Number of entries allocated below */
10634:   int iECursor;          /* VDBE Cursor associated with this ExprList */
10635:   struct ExprList_item {
10636:     Expr *pExpr;           /* The list of expressions */
10637:     char *zName;           /* Token associated with this expression */
10638:     char *zSpan;           /* Original text of the expression */
10639:     u8 sortOrder;          /* 1 for DESC or 0 for ASC */
10640:     u8 done;               /* A flag to indicate when processing is finished */
10641:     u16 iOrderByCol;       /* For ORDER BY, column number in result set */
10642:     u16 iAlias;            /* Index into Parse.aAlias[] for zName */
10643:   } *a;                  /* One entry for each expression */
10644: };
10645: 
10646: /*
10647: ** An instance of this structure is used by the parser to record both
10648: ** the parse tree for an expression and the span of input text for an
10649: ** expression.
10650: */
10651: struct ExprSpan {
10652:   Expr *pExpr;          /* The expression parse tree */
10653:   const char *zStart;   /* First character of input text */
10654:   const char *zEnd;     /* One character past the end of input text */
10655: };
10656: 
10657: /*
10658: ** An instance of this structure can hold a simple list of identifiers,
10659: ** such as the list "a,b,c" in the following statements:
10660: **
10661: **      INSERT INTO t(a,b,c) VALUES ...;
10662: **      CREATE INDEX idx ON t(a,b,c);
10663: **      CREATE TRIGGER trig BEFORE UPDATE ON t(a,b,c) ...;
10664: **
10665: ** The IdList.a.idx field is used when the IdList represents the list of
10666: ** column names after a table name in an INSERT statement.  In the statement
10667: **
10668: **     INSERT INTO t(a,b,c) ...
10669: **
10670: ** If "a" is the k-th column of table "t", then IdList.a[0].idx==k.
10671: */
10672: struct IdList {
10673:   struct IdList_item {
10674:     char *zName;      /* Name of the identifier */
10675:     int idx;          /* Index in some Table.aCol[] of a column named zName */
10676:   } *a;
10677:   int nId;         /* Number of identifiers on the list */
10678:   int nAlloc;      /* Number of entries allocated for a[] below */
10679: };
10680: 
10681: /*
10682: ** The bitmask datatype defined below is used for various optimizations.
10683: **
10684: ** Changing this from a 64-bit to a 32-bit type limits the number of
10685: ** tables in a join to 32 instead of 64.  But it also reduces the size
10686: ** of the library by 738 bytes on ix86.
10687: */
10688: typedef u64 Bitmask;
10689: 
10690: /*
10691: ** The number of bits in a Bitmask.  "BMS" means "BitMask Size".
10692: */
10693: #define BMS  ((int)(sizeof(Bitmask)*8))
10694: 
10695: /*
10696: ** The following structure describes the FROM clause of a SELECT statement.
10697: ** Each table or subquery in the FROM clause is a separate element of
10698: ** the SrcList.a[] array.
10699: **
10700: ** With the addition of multiple database support, the following structure
10701: ** can also be used to describe a particular table such as the table that
10702: ** is modified by an INSERT, DELETE, or UPDATE statement.  In standard SQL,
10703: ** such a table must be a simple name: ID.  But in SQLite, the table can
10704: ** now be identified by a database name, a dot, then the table name: ID.ID.
10705: **
10706: ** The jointype starts out showing the join type between the current table
10707: ** and the next table on the list.  The parser builds the list this way.
10708: ** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each
10709: ** jointype expresses the join between the table and the previous table.
10710: **
10711: ** In the colUsed field, the high-order bit (bit 63) is set if the table
10712: ** contains more than 63 columns and the 64-th or later column is used.
10713: */
10714: struct SrcList {
10715:   i16 nSrc;        /* Number of tables or subqueries in the FROM clause */
10716:   i16 nAlloc;      /* Number of entries allocated in a[] below */
10717:   struct SrcList_item {
10718:     char *zDatabase;  /* Name of database holding this table */
10719:     char *zName;      /* Name of the table */
10720:     char *zAlias;     /* The "B" part of a "A AS B" phrase.  zName is the "A" */
10721:     Table *pTab;      /* An SQL table corresponding to zName */
10722:     Select *pSelect;  /* A SELECT statement used in place of a table name */
10723:     int addrFillSub;  /* Address of subroutine to manifest a subquery */
10724:     int regReturn;    /* Register holding return address of addrFillSub */
10725:     u8 jointype;      /* Type of join between this able and the previous */
10726:     u8 notIndexed;    /* True if there is a NOT INDEXED clause */
10727:     u8 isCorrelated;  /* True if sub-query is correlated */
10728: #ifndef SQLITE_OMIT_EXPLAIN
10729:     u8 iSelectId;     /* If pSelect!=0, the id of the sub-select in EQP */
10730: #endif
10731:     int iCursor;      /* The VDBE cursor number used to access this table */
10732:     Expr *pOn;        /* The ON clause of a join */
10733:     IdList *pUsing;   /* The USING clause of a join */
10734:     Bitmask colUsed;  /* Bit N (1<<N) set if column N of pTab is used */
10735:     char *zIndex;     /* Identifier from "INDEXED BY <zIndex>" clause */
10736:     Index *pIndex;    /* Index structure corresponding to zIndex, if any */
10737:   } a[1];             /* One entry for each identifier on the list */
10738: };
10739: 
10740: /*
10741: ** Permitted values of the SrcList.a.jointype field
10742: */
10743: #define JT_INNER     0x0001    /* Any kind of inner or cross join */
10744: #define JT_CROSS     0x0002    /* Explicit use of the CROSS keyword */
10745: #define JT_NATURAL   0x0004    /* True for a "natural" join */
10746: #define JT_LEFT      0x0008    /* Left outer join */
10747: #define JT_RIGHT     0x0010    /* Right outer join */
10748: #define JT_OUTER     0x0020    /* The "OUTER" keyword is present */
10749: #define JT_ERROR     0x0040    /* unknown or unsupported join type */
10750: 
10751: 
10752: /*
10753: ** A WherePlan object holds information that describes a lookup
10754: ** strategy.
10755: **
10756: ** This object is intended to be opaque outside of the where.c module.
10757: ** It is included here only so that that compiler will know how big it
10758: ** is.  None of the fields in this object should be used outside of
10759: ** the where.c module.
10760: **
10761: ** Within the union, pIdx is only used when wsFlags&WHERE_INDEXED is true.
10762: ** pTerm is only used when wsFlags&WHERE_MULTI_OR is true.  And pVtabIdx
10763: ** is only used when wsFlags&WHERE_VIRTUALTABLE is true.  It is never the
10764: ** case that more than one of these conditions is true.
10765: */
10766: struct WherePlan {
10767:   u32 wsFlags;                   /* WHERE_* flags that describe the strategy */
10768:   u32 nEq;                       /* Number of == constraints */
10769:   double nRow;                   /* Estimated number of rows (for EQP) */
10770:   union {
10771:     Index *pIdx;                   /* Index when WHERE_INDEXED is true */
10772:     struct WhereTerm *pTerm;       /* WHERE clause term for OR-search */
10773:     sqlite3_index_info *pVtabIdx;  /* Virtual table index to use */
10774:   } u;
10775: };
10776: 
10777: /*
10778: ** For each nested loop in a WHERE clause implementation, the WhereInfo
10779: ** structure contains a single instance of this structure.  This structure
10780: ** is intended to be private the the where.c module and should not be
10781: ** access or modified by other modules.
10782: **
10783: ** The pIdxInfo field is used to help pick the best index on a
10784: ** virtual table.  The pIdxInfo pointer contains indexing
10785: ** information for the i-th table in the FROM clause before reordering.
10786: ** All the pIdxInfo pointers are freed by whereInfoFree() in where.c.
10787: ** All other information in the i-th WhereLevel object for the i-th table
10788: ** after FROM clause ordering.
10789: */
10790: struct WhereLevel {
10791:   WherePlan plan;       /* query plan for this element of the FROM clause */
10792:   int iLeftJoin;        /* Memory cell used to implement LEFT OUTER JOIN */
10793:   int iTabCur;          /* The VDBE cursor used to access the table */
10794:   int iIdxCur;          /* The VDBE cursor used to access pIdx */
10795:   int addrBrk;          /* Jump here to break out of the loop */
10796:   int addrNxt;          /* Jump here to start the next IN combination */
10797:   int addrCont;         /* Jump here to continue with the next loop cycle */
10798:   int addrFirst;        /* First instruction of interior of the loop */
10799:   u8 iFrom;             /* Which entry in the FROM clause */
10800:   u8 op, p5;            /* Opcode and P5 of the opcode that ends the loop */
10801:   int p1, p2;           /* Operands of the opcode used to ends the loop */
10802:   union {               /* Information that depends on plan.wsFlags */
10803:     struct {
10804:       int nIn;              /* Number of entries in aInLoop[] */
10805:       struct InLoop {
10806:         int iCur;              /* The VDBE cursor used by this IN operator */
10807:         int addrInTop;         /* Top of the IN loop */
10808:       } *aInLoop;           /* Information about each nested IN operator */
10809:     } in;                 /* Used when plan.wsFlags&WHERE_IN_ABLE */
10810:   } u;
10811: 
10812:   /* The following field is really not part of the current level.  But
10813:   ** we need a place to cache virtual table index information for each
10814:   ** virtual table in the FROM clause and the WhereLevel structure is
10815:   ** a convenient place since there is one WhereLevel for each FROM clause
10816:   ** element.
10817:   */
10818:   sqlite3_index_info *pIdxInfo;  /* Index info for n-th source table */
10819: };
10820: 
10821: /*
10822: ** Flags appropriate for the wctrlFlags parameter of sqlite3WhereBegin()
10823: ** and the WhereInfo.wctrlFlags member.
10824: */
10825: #define WHERE_ORDERBY_NORMAL   0x0000 /* No-op */
10826: #define WHERE_ORDERBY_MIN      0x0001 /* ORDER BY processing for min() func */
10827: #define WHERE_ORDERBY_MAX      0x0002 /* ORDER BY processing for max() func */
10828: #define WHERE_ONEPASS_DESIRED  0x0004 /* Want to do one-pass UPDATE/DELETE */
10829: #define WHERE_DUPLICATES_OK    0x0008 /* Ok to return a row more than once */
10830: #define WHERE_OMIT_OPEN_CLOSE  0x0010 /* Table cursors are already open */
10831: #define WHERE_FORCE_TABLE      0x0020 /* Do not use an index-only search */
10832: #define WHERE_ONETABLE_ONLY    0x0040 /* Only code the 1st table in pTabList */
10833: #define WHERE_AND_ONLY         0x0080 /* Don't use indices for OR terms */
10834: 
10835: /*
10836: ** The WHERE clause processing routine has two halves.  The
10837: ** first part does the start of the WHERE loop and the second
10838: ** half does the tail of the WHERE loop.  An instance of
10839: ** this structure is returned by the first half and passed
10840: ** into the second half to give some continuity.
10841: */
10842: struct WhereInfo {
10843:   Parse *pParse;       /* Parsing and code generating context */
10844:   u16 wctrlFlags;      /* Flags originally passed to sqlite3WhereBegin() */
10845:   u8 okOnePass;        /* Ok to use one-pass algorithm for UPDATE or DELETE */
10846:   u8 untestedTerms;    /* Not all WHERE terms resolved by outer loop */
10847:   u8 eDistinct;
10848:   SrcList *pTabList;             /* List of tables in the join */
10849:   int iTop;                      /* The very beginning of the WHERE loop */
10850:   int iContinue;                 /* Jump here to continue with next record */
10851:   int iBreak;                    /* Jump here to break out of the loop */
10852:   int nLevel;                    /* Number of nested loop */
10853:   struct WhereClause *pWC;       /* Decomposition of the WHERE clause */
10854:   double savedNQueryLoop;        /* pParse->nQueryLoop outside the WHERE loop */
10855:   double nRowOut;                /* Estimated number of output rows */
10856:   WhereLevel a[1];               /* Information about each nest loop in WHERE */
10857: };
10858: 
10859: #define WHERE_DISTINCT_UNIQUE 1
10860: #define WHERE_DISTINCT_ORDERED 2
10861: 
10862: /*
10863: ** A NameContext defines a context in which to resolve table and column
10864: ** names.  The context consists of a list of tables (the pSrcList) field and
10865: ** a list of named expression (pEList).  The named expression list may
10866: ** be NULL.  The pSrc corresponds to the FROM clause of a SELECT or
10867: ** to the table being operated on by INSERT, UPDATE, or DELETE.  The
10868: ** pEList corresponds to the result set of a SELECT and is NULL for
10869: ** other statements.
10870: **
10871: ** NameContexts can be nested.  When resolving names, the inner-most 
10872: ** context is searched first.  If no match is found, the next outer
10873: ** context is checked.  If there is still no match, the next context
10874: ** is checked.  This process continues until either a match is found
10875: ** or all contexts are check.  When a match is found, the nRef member of
10876: ** the context containing the match is incremented. 
10877: **
10878: ** Each subquery gets a new NameContext.  The pNext field points to the
10879: ** NameContext in the parent query.  Thus the process of scanning the
10880: ** NameContext list corresponds to searching through successively outer
10881: ** subqueries looking for a match.
10882: */
10883: struct NameContext {
10884:   Parse *pParse;       /* The parser */
10885:   SrcList *pSrcList;   /* One or more tables used to resolve names */
10886:   ExprList *pEList;    /* Optional list of named expressions */
10887:   int nRef;            /* Number of names resolved by this context */
10888:   int nErr;            /* Number of errors encountered while resolving names */
10889:   u8 allowAgg;         /* Aggregate functions allowed here */
10890:   u8 hasAgg;           /* True if aggregates are seen */
10891:   u8 isCheck;          /* True if resolving names in a CHECK constraint */
10892:   int nDepth;          /* Depth of subquery recursion. 1 for no recursion */
10893:   AggInfo *pAggInfo;   /* Information about aggregates at this level */
10894:   NameContext *pNext;  /* Next outer name context.  NULL for outermost */
10895: };
10896: 
10897: /*
10898: ** An instance of the following structure contains all information
10899: ** needed to generate code for a single SELECT statement.
10900: **
10901: ** nLimit is set to -1 if there is no LIMIT clause.  nOffset is set to 0.
10902: ** If there is a LIMIT clause, the parser sets nLimit to the value of the
10903: ** limit and nOffset to the value of the offset (or 0 if there is not
10904: ** offset).  But later on, nLimit and nOffset become the memory locations
10905: ** in the VDBE that record the limit and offset counters.
10906: **
10907: ** addrOpenEphm[] entries contain the address of OP_OpenEphemeral opcodes.
10908: ** These addresses must be stored so that we can go back and fill in
10909: ** the P4_KEYINFO and P2 parameters later.  Neither the KeyInfo nor
10910: ** the number of columns in P2 can be computed at the same time
10911: ** as the OP_OpenEphm instruction is coded because not
10912: ** enough information about the compound query is known at that point.
10913: ** The KeyInfo for addrOpenTran[0] and [1] contains collating sequences
10914: ** for the result set.  The KeyInfo for addrOpenTran[2] contains collating
10915: ** sequences for the ORDER BY clause.
10916: */
10917: struct Select {
10918:   ExprList *pEList;      /* The fields of the result */
10919:   u8 op;                 /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */
10920:   char affinity;         /* MakeRecord with this affinity for SRT_Set */
10921:   u16 selFlags;          /* Various SF_* values */
10922:   SrcList *pSrc;         /* The FROM clause */
10923:   Expr *pWhere;          /* The WHERE clause */
10924:   ExprList *pGroupBy;    /* The GROUP BY clause */
10925:   Expr *pHaving;         /* The HAVING clause */
10926:   ExprList *pOrderBy;    /* The ORDER BY clause */
10927:   Select *pPrior;        /* Prior select in a compound select statement */
10928:   Select *pNext;         /* Next select to the left in a compound */
10929:   Select *pRightmost;    /* Right-most select in a compound select statement */
10930:   Expr *pLimit;          /* LIMIT expression. NULL means not used. */
10931:   Expr *pOffset;         /* OFFSET expression. NULL means not used. */
10932:   int iLimit, iOffset;   /* Memory registers holding LIMIT & OFFSET counters */
10933:   int addrOpenEphm[3];   /* OP_OpenEphem opcodes related to this select */
10934:   double nSelectRow;     /* Estimated number of result rows */
10935: };
10936: 
10937: /*
10938: ** Allowed values for Select.selFlags.  The "SF" prefix stands for
10939: ** "Select Flag".
10940: */
10941: #define SF_Distinct        0x01  /* Output should be DISTINCT */
10942: #define SF_Resolved        0x02  /* Identifiers have been resolved */
10943: #define SF_Aggregate       0x04  /* Contains aggregate functions */
10944: #define SF_UsesEphemeral   0x08  /* Uses the OpenEphemeral opcode */
10945: #define SF_Expanded        0x10  /* sqlite3SelectExpand() called on this */
10946: #define SF_HasTypeInfo     0x20  /* FROM subqueries have Table metadata */
10947: #define SF_UseSorter       0x40  /* Sort using a sorter */
10948: 
10949: 
10950: /*
10951: ** The results of a select can be distributed in several ways.  The
10952: ** "SRT" prefix means "SELECT Result Type".
10953: */
10954: #define SRT_Union        1  /* Store result as keys in an index */
10955: #define SRT_Except       2  /* Remove result from a UNION index */
10956: #define SRT_Exists       3  /* Store 1 if the result is not empty */
10957: #define SRT_Discard      4  /* Do not save the results anywhere */
10958: 
10959: /* The ORDER BY clause is ignored for all of the above */
10960: #define IgnorableOrderby(X) ((X->eDest)<=SRT_Discard)
10961: 
10962: #define SRT_Output       5  /* Output each row of result */
10963: #define SRT_Mem          6  /* Store result in a memory cell */
10964: #define SRT_Set          7  /* Store results as keys in an index */
10965: #define SRT_Table        8  /* Store result as data with an automatic rowid */
10966: #define SRT_EphemTab     9  /* Create transient tab and store like SRT_Table */
10967: #define SRT_Coroutine   10  /* Generate a single row of result */
10968: 
10969: /*
10970: ** A structure used to customize the behavior of sqlite3Select(). See
10971: ** comments above sqlite3Select() for details.
10972: */
10973: typedef struct SelectDest SelectDest;
10974: struct SelectDest {
10975:   u8 eDest;         /* How to dispose of the results */
10976:   u8 affinity;      /* Affinity used when eDest==SRT_Set */
10977:   int iParm;        /* A parameter used by the eDest disposal method */
10978:   int iMem;         /* Base register where results are written */
10979:   int nMem;         /* Number of registers allocated */
10980: };
10981: 
10982: /*
10983: ** During code generation of statements that do inserts into AUTOINCREMENT 
10984: ** tables, the following information is attached to the Table.u.autoInc.p
10985: ** pointer of each autoincrement table to record some side information that
10986: ** the code generator needs.  We have to keep per-table autoincrement
10987: ** information in case inserts are down within triggers.  Triggers do not
10988: ** normally coordinate their activities, but we do need to coordinate the
10989: ** loading and saving of autoincrement information.
10990: */
10991: struct AutoincInfo {
10992:   AutoincInfo *pNext;   /* Next info block in a list of them all */
10993:   Table *pTab;          /* Table this info block refers to */
10994:   int iDb;              /* Index in sqlite3.aDb[] of database holding pTab */
10995:   int regCtr;           /* Memory register holding the rowid counter */
10996: };
10997: 
10998: /*
10999: ** Size of the column cache
11000: */
11001: #ifndef SQLITE_N_COLCACHE
11002: # define SQLITE_N_COLCACHE 10
11003: #endif
11004: 
11005: /*
11006: ** At least one instance of the following structure is created for each 
11007: ** trigger that may be fired while parsing an INSERT, UPDATE or DELETE
11008: ** statement. All such objects are stored in the linked list headed at
11009: ** Parse.pTriggerPrg and deleted once statement compilation has been
11010: ** completed.
11011: **
11012: ** A Vdbe sub-program that implements the body and WHEN clause of trigger
11013: ** TriggerPrg.pTrigger, assuming a default ON CONFLICT clause of
11014: ** TriggerPrg.orconf, is stored in the TriggerPrg.pProgram variable.
11015: ** The Parse.pTriggerPrg list never contains two entries with the same
11016: ** values for both pTrigger and orconf.
11017: **
11018: ** The TriggerPrg.aColmask[0] variable is set to a mask of old.* columns
11019: ** accessed (or set to 0 for triggers fired as a result of INSERT 
11020: ** statements). Similarly, the TriggerPrg.aColmask[1] variable is set to
11021: ** a mask of new.* columns used by the program.
11022: */
11023: struct TriggerPrg {
11024:   Trigger *pTrigger;      /* Trigger this program was coded from */
11025:   int orconf;             /* Default ON CONFLICT policy */
11026:   SubProgram *pProgram;   /* Program implementing pTrigger/orconf */
11027:   u32 aColmask[2];        /* Masks of old.*, new.* columns accessed */
11028:   TriggerPrg *pNext;      /* Next entry in Parse.pTriggerPrg list */
11029: };
11030: 
11031: /*
11032: ** The yDbMask datatype for the bitmask of all attached databases.
11033: */
11034: #if SQLITE_MAX_ATTACHED>30
11035:   typedef sqlite3_uint64 yDbMask;
11036: #else
11037:   typedef unsigned int yDbMask;
11038: #endif
11039: 
11040: /*
11041: ** An SQL parser context.  A copy of this structure is passed through
11042: ** the parser and down into all the parser action routine in order to
11043: ** carry around information that is global to the entire parse.
11044: **
11045: ** The structure is divided into two parts.  When the parser and code
11046: ** generate call themselves recursively, the first part of the structure
11047: ** is constant but the second part is reset at the beginning and end of
11048: ** each recursion.
11049: **
11050: ** The nTableLock and aTableLock variables are only used if the shared-cache 
11051: ** feature is enabled (if sqlite3Tsd()->useSharedData is true). They are
11052: ** used to store the set of table-locks required by the statement being
11053: ** compiled. Function sqlite3TableLock() is used to add entries to the
11054: ** list.
11055: */
11056: struct Parse {
11057:   sqlite3 *db;         /* The main database structure */
11058:   int rc;              /* Return code from execution */
11059:   char *zErrMsg;       /* An error message */
11060:   Vdbe *pVdbe;         /* An engine for executing database bytecode */
11061:   u8 colNamesSet;      /* TRUE after OP_ColumnName has been issued to pVdbe */
11062:   u8 checkSchema;      /* Causes schema cookie check after an error */
11063:   u8 nested;           /* Number of nested calls to the parser/code generator */
11064:   u8 nTempReg;         /* Number of temporary registers in aTempReg[] */
11065:   u8 nTempInUse;       /* Number of aTempReg[] currently checked out */
11066:   int aTempReg[8];     /* Holding area for temporary registers */
11067:   int nRangeReg;       /* Size of the temporary register block */
11068:   int iRangeReg;       /* First register in temporary register block */
11069:   int nErr;            /* Number of errors seen */
11070:   int nTab;            /* Number of previously allocated VDBE cursors */
11071:   int nMem;            /* Number of memory cells used so far */
11072:   int nSet;            /* Number of sets used so far */
11073:   int nOnce;           /* Number of OP_Once instructions so far */
11074:   int ckBase;          /* Base register of data during check constraints */
11075:   int iCacheLevel;     /* ColCache valid when aColCache[].iLevel<=iCacheLevel */
11076:   int iCacheCnt;       /* Counter used to generate aColCache[].lru values */
11077:   u8 nColCache;        /* Number of entries in aColCache[] */
11078:   u8 iColCache;        /* Next entry in aColCache[] to replace */
11079:   struct yColCache {
11080:     int iTable;           /* Table cursor number */
11081:     int iColumn;          /* Table column number */
11082:     u8 tempReg;           /* iReg is a temp register that needs to be freed */
11083:     int iLevel;           /* Nesting level */
11084:     int iReg;             /* Reg with value of this column. 0 means none. */
11085:     int lru;              /* Least recently used entry has the smallest value */
11086:   } aColCache[SQLITE_N_COLCACHE];  /* One for each column cache entry */
11087:   yDbMask writeMask;   /* Start a write transaction on these databases */
11088:   yDbMask cookieMask;  /* Bitmask of schema verified databases */
11089:   u8 isMultiWrite;     /* True if statement may affect/insert multiple rows */
11090:   u8 mayAbort;         /* True if statement may throw an ABORT exception */
11091:   int cookieGoto;      /* Address of OP_Goto to cookie verifier subroutine */
11092:   int cookieValue[SQLITE_MAX_ATTACHED+2];  /* Values of cookies to verify */
11093: #ifndef SQLITE_OMIT_SHARED_CACHE
11094:   int nTableLock;        /* Number of locks in aTableLock */
11095:   TableLock *aTableLock; /* Required table locks for shared-cache mode */
11096: #endif
11097:   int regRowid;        /* Register holding rowid of CREATE TABLE entry */
11098:   int regRoot;         /* Register holding root page number for new objects */
11099:   AutoincInfo *pAinc;  /* Information about AUTOINCREMENT counters */
11100:   int nMaxArg;         /* Max args passed to user function by sub-program */
11101: 
11102:   /* Information used while coding trigger programs. */
11103:   Parse *pToplevel;    /* Parse structure for main program (or NULL) */
11104:   Table *pTriggerTab;  /* Table triggers are being coded for */
11105:   u32 oldmask;         /* Mask of old.* columns referenced */
11106:   u32 newmask;         /* Mask of new.* columns referenced */
11107:   u8 eTriggerOp;       /* TK_UPDATE, TK_INSERT or TK_DELETE */
11108:   u8 eOrconf;          /* Default ON CONFLICT policy for trigger steps */
11109:   u8 disableTriggers;  /* True to disable triggers */
11110:   double nQueryLoop;   /* Estimated number of iterations of a query */
11111: 
11112:   /* Above is constant between recursions.  Below is reset before and after
11113:   ** each recursion */
11114: 
11115:   int nVar;            /* Number of '?' variables seen in the SQL so far */
11116:   int nzVar;           /* Number of available slots in azVar[] */
11117:   char **azVar;        /* Pointers to names of parameters */
11118:   Vdbe *pReprepare;    /* VM being reprepared (sqlite3Reprepare()) */
11119:   int nAlias;          /* Number of aliased result set columns */
11120:   int *aAlias;         /* Register used to hold aliased result */
11121:   u8 explain;          /* True if the EXPLAIN flag is found on the query */
11122:   Token sNameToken;    /* Token with unqualified schema object name */
11123:   Token sLastToken;    /* The last token parsed */
11124:   const char *zTail;   /* All SQL text past the last semicolon parsed */
11125:   Table *pNewTable;    /* A table being constructed by CREATE TABLE */
11126:   Trigger *pNewTrigger;     /* Trigger under construct by a CREATE TRIGGER */
11127:   const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */
11128: #ifndef SQLITE_OMIT_VIRTUALTABLE
11129:   Token sArg;                /* Complete text of a module argument */
11130:   u8 declareVtab;            /* True if inside sqlite3_declare_vtab() */
11131:   int nVtabLock;             /* Number of virtual tables to lock */
11132:   Table **apVtabLock;        /* Pointer to virtual tables needing locking */
11133: #endif
11134:   int nHeight;            /* Expression tree height of current sub-select */
11135:   Table *pZombieTab;      /* List of Table objects to delete after code gen */
11136:   TriggerPrg *pTriggerPrg;    /* Linked list of coded triggers */
11137: 
11138: #ifndef SQLITE_OMIT_EXPLAIN
11139:   int iSelectId;
11140:   int iNextSelectId;
11141: #endif
11142: };
11143: 
11144: #ifdef SQLITE_OMIT_VIRTUALTABLE
11145:   #define IN_DECLARE_VTAB 0
11146: #else
11147:   #define IN_DECLARE_VTAB (pParse->declareVtab)
11148: #endif
11149: 
11150: /*
11151: ** An instance of the following structure can be declared on a stack and used
11152: ** to save the Parse.zAuthContext value so that it can be restored later.
11153: */
11154: struct AuthContext {
11155:   const char *zAuthContext;   /* Put saved Parse.zAuthContext here */
11156:   Parse *pParse;              /* The Parse structure */
11157: };
11158: 
11159: /*
11160: ** Bitfield flags for P5 value in OP_Insert and OP_Delete
11161: */
11162: #define OPFLAG_NCHANGE       0x01    /* Set to update db->nChange */
11163: #define OPFLAG_LASTROWID     0x02    /* Set to update db->lastRowid */
11164: #define OPFLAG_ISUPDATE      0x04    /* This OP_Insert is an sql UPDATE */
11165: #define OPFLAG_APPEND        0x08    /* This is likely to be an append */
11166: #define OPFLAG_USESEEKRESULT 0x10    /* Try to avoid a seek in BtreeInsert() */
11167: #define OPFLAG_CLEARCACHE    0x20    /* Clear pseudo-table cache in OP_Column */
11168: 
11169: /*
11170:  * Each trigger present in the database schema is stored as an instance of
11171:  * struct Trigger. 
11172:  *
11173:  * Pointers to instances of struct Trigger are stored in two ways.
11174:  * 1. In the "trigHash" hash table (part of the sqlite3* that represents the 
11175:  *    database). This allows Trigger structures to be retrieved by name.
11176:  * 2. All triggers associated with a single table form a linked list, using the
11177:  *    pNext member of struct Trigger. A pointer to the first element of the
11178:  *    linked list is stored as the "pTrigger" member of the associated
11179:  *    struct Table.
11180:  *
11181:  * The "step_list" member points to the first element of a linked list
11182:  * containing the SQL statements specified as the trigger program.
11183:  */
11184: struct Trigger {
11185:   char *zName;            /* The name of the trigger                        */
11186:   char *table;            /* The table or view to which the trigger applies */
11187:   u8 op;                  /* One of TK_DELETE, TK_UPDATE, TK_INSERT         */
11188:   u8 tr_tm;               /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
11189:   Expr *pWhen;            /* The WHEN clause of the expression (may be NULL) */
11190:   IdList *pColumns;       /* If this is an UPDATE OF <column-list> trigger,
11191:                              the <column-list> is stored here */
11192:   Schema *pSchema;        /* Schema containing the trigger */
11193:   Schema *pTabSchema;     /* Schema containing the table */
11194:   TriggerStep *step_list; /* Link list of trigger program steps             */
11195:   Trigger *pNext;         /* Next trigger associated with the table */
11196: };
11197: 
11198: /*
11199: ** A trigger is either a BEFORE or an AFTER trigger.  The following constants
11200: ** determine which. 
11201: **
11202: ** If there are multiple triggers, you might of some BEFORE and some AFTER.
11203: ** In that cases, the constants below can be ORed together.
11204: */
11205: #define TRIGGER_BEFORE  1
11206: #define TRIGGER_AFTER   2
11207: 
11208: /*
11209:  * An instance of struct TriggerStep is used to store a single SQL statement
11210:  * that is a part of a trigger-program. 
11211:  *
11212:  * Instances of struct TriggerStep are stored in a singly linked list (linked
11213:  * using the "pNext" member) referenced by the "step_list" member of the 
11214:  * associated struct Trigger instance. The first element of the linked list is
11215:  * the first step of the trigger-program.
11216:  * 
11217:  * The "op" member indicates whether this is a "DELETE", "INSERT", "UPDATE" or
11218:  * "SELECT" statement. The meanings of the other members is determined by the 
11219:  * value of "op" as follows:
11220:  *
11221:  * (op == TK_INSERT)
11222:  * orconf    -> stores the ON CONFLICT algorithm
11223:  * pSelect   -> If this is an INSERT INTO ... SELECT ... statement, then
11224:  *              this stores a pointer to the SELECT statement. Otherwise NULL.
11225:  * target    -> A token holding the quoted name of the table to insert into.
11226:  * pExprList -> If this is an INSERT INTO ... VALUES ... statement, then
11227:  *              this stores values to be inserted. Otherwise NULL.
11228:  * pIdList   -> If this is an INSERT INTO ... (<column-names>) VALUES ... 
11229:  *              statement, then this stores the column-names to be
11230:  *              inserted into.
11231:  *
11232:  * (op == TK_DELETE)
11233:  * target    -> A token holding the quoted name of the table to delete from.
11234:  * pWhere    -> The WHERE clause of the DELETE statement if one is specified.
11235:  *              Otherwise NULL.
11236:  * 
11237:  * (op == TK_UPDATE)
11238:  * target    -> A token holding the quoted name of the table to update rows of.
11239:  * pWhere    -> The WHERE clause of the UPDATE statement if one is specified.
11240:  *              Otherwise NULL.
11241:  * pExprList -> A list of the columns to update and the expressions to update
11242:  *              them to. See sqlite3Update() documentation of "pChanges"
11243:  *              argument.
11244:  * 
11245:  */
11246: struct TriggerStep {
11247:   u8 op;               /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */
11248:   u8 orconf;           /* OE_Rollback etc. */
11249:   Trigger *pTrig;      /* The trigger that this step is a part of */
11250:   Select *pSelect;     /* SELECT statment or RHS of INSERT INTO .. SELECT ... */
11251:   Token target;        /* Target table for DELETE, UPDATE, INSERT */
11252:   Expr *pWhere;        /* The WHERE clause for DELETE or UPDATE steps */
11253:   ExprList *pExprList; /* SET clause for UPDATE.  VALUES clause for INSERT */
11254:   IdList *pIdList;     /* Column names for INSERT */
11255:   TriggerStep *pNext;  /* Next in the link-list */
11256:   TriggerStep *pLast;  /* Last element in link-list. Valid for 1st elem only */
11257: };
11258: 
11259: /*
11260: ** The following structure contains information used by the sqliteFix...
11261: ** routines as they walk the parse tree to make database references
11262: ** explicit.  
11263: */
11264: typedef struct DbFixer DbFixer;
11265: struct DbFixer {
11266:   Parse *pParse;      /* The parsing context.  Error messages written here */
11267:   const char *zDb;    /* Make sure all objects are contained in this database */
11268:   const char *zType;  /* Type of the container - used for error messages */
11269:   const Token *pName; /* Name of the container - used for error messages */
11270: };
11271: 
11272: /*
11273: ** An objected used to accumulate the text of a string where we
11274: ** do not necessarily know how big the string will be in the end.
11275: */
11276: struct StrAccum {
11277:   sqlite3 *db;         /* Optional database for lookaside.  Can be NULL */
11278:   char *zBase;         /* A base allocation.  Not from malloc. */
11279:   char *zText;         /* The string collected so far */
11280:   int  nChar;          /* Length of the string so far */
11281:   int  nAlloc;         /* Amount of space allocated in zText */
11282:   int  mxAlloc;        /* Maximum allowed string length */
11283:   u8   mallocFailed;   /* Becomes true if any memory allocation fails */
11284:   u8   useMalloc;      /* 0: none,  1: sqlite3DbMalloc,  2: sqlite3_malloc */
11285:   u8   tooBig;         /* Becomes true if string size exceeds limits */
11286: };
11287: 
11288: /*
11289: ** A pointer to this structure is used to communicate information
11290: ** from sqlite3Init and OP_ParseSchema into the sqlite3InitCallback.
11291: */
11292: typedef struct {
11293:   sqlite3 *db;        /* The database being initialized */
11294:   int iDb;            /* 0 for main database.  1 for TEMP, 2.. for ATTACHed */
11295:   char **pzErrMsg;    /* Error message stored here */
11296:   int rc;             /* Result code stored here */
11297: } InitData;
11298: 
11299: /*
11300: ** Structure containing global configuration data for the SQLite library.
11301: **
11302: ** This structure also contains some state information.
11303: */
11304: struct Sqlite3Config {
11305:   int bMemstat;                     /* True to enable memory status */
11306:   int bCoreMutex;                   /* True to enable core mutexing */
11307:   int bFullMutex;                   /* True to enable full mutexing */
11308:   int bOpenUri;                     /* True to interpret filenames as URIs */
11309:   int mxStrlen;                     /* Maximum string length */
11310:   int szLookaside;                  /* Default lookaside buffer size */
11311:   int nLookaside;                   /* Default lookaside buffer count */
11312:   sqlite3_mem_methods m;            /* Low-level memory allocation interface */
11313:   sqlite3_mutex_methods mutex;      /* Low-level mutex interface */
11314:   sqlite3_pcache_methods2 pcache2;  /* Low-level page-cache interface */
11315:   void *pHeap;                      /* Heap storage space */
11316:   int nHeap;                        /* Size of pHeap[] */
11317:   int mnReq, mxReq;                 /* Min and max heap requests sizes */
11318:   void *pScratch;                   /* Scratch memory */
11319:   int szScratch;                    /* Size of each scratch buffer */
11320:   int nScratch;                     /* Number of scratch buffers */
11321:   void *pPage;                      /* Page cache memory */
11322:   int szPage;                       /* Size of each page in pPage[] */
11323:   int nPage;                        /* Number of pages in pPage[] */
11324:   int mxParserStack;                /* maximum depth of the parser stack */
11325:   int sharedCacheEnabled;           /* true if shared-cache mode enabled */
11326:   /* The above might be initialized to non-zero.  The following need to always
11327:   ** initially be zero, however. */
11328:   int isInit;                       /* True after initialization has finished */
11329:   int inProgress;                   /* True while initialization in progress */
11330:   int isMutexInit;                  /* True after mutexes are initialized */
11331:   int isMallocInit;                 /* True after malloc is initialized */
11332:   int isPCacheInit;                 /* True after malloc is initialized */
11333:   sqlite3_mutex *pInitMutex;        /* Mutex used by sqlite3_initialize() */
11334:   int nRefInitMutex;                /* Number of users of pInitMutex */
11335:   void (*xLog)(void*,int,const char*); /* Function for logging */
11336:   void *pLogArg;                       /* First argument to xLog() */
11337:   int bLocaltimeFault;              /* True to fail localtime() calls */
11338: };
11339: 
11340: /*
11341: ** Context pointer passed down through the tree-walk.
11342: */
11343: struct Walker {
11344:   int (*xExprCallback)(Walker*, Expr*);     /* Callback for expressions */
11345:   int (*xSelectCallback)(Walker*,Select*);  /* Callback for SELECTs */
11346:   Parse *pParse;                            /* Parser context.  */
11347:   union {                                   /* Extra data for callback */
11348:     NameContext *pNC;                          /* Naming context */
11349:     int i;                                     /* Integer value */
11350:   } u;
11351: };
11352: 
11353: /* Forward declarations */
11354: SQLITE_PRIVATE int sqlite3WalkExpr(Walker*, Expr*);
11355: SQLITE_PRIVATE int sqlite3WalkExprList(Walker*, ExprList*);
11356: SQLITE_PRIVATE int sqlite3WalkSelect(Walker*, Select*);
11357: SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker*, Select*);
11358: SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker*, Select*);
11359: 
11360: /*
11361: ** Return code from the parse-tree walking primitives and their
11362: ** callbacks.
11363: */
11364: #define WRC_Continue    0   /* Continue down into children */
11365: #define WRC_Prune       1   /* Omit children but continue walking siblings */
11366: #define WRC_Abort       2   /* Abandon the tree walk */
11367: 
11368: /*
11369: ** Assuming zIn points to the first byte of a UTF-8 character,
11370: ** advance zIn to point to the first byte of the next UTF-8 character.
11371: */
11372: #define SQLITE_SKIP_UTF8(zIn) {                        \
11373:   if( (*(zIn++))>=0xc0 ){                              \
11374:     while( (*zIn & 0xc0)==0x80 ){ zIn++; }             \
11375:   }                                                    \
11376: }
11377: 
11378: /*
11379: ** The SQLITE_*_BKPT macros are substitutes for the error codes with
11380: ** the same name but without the _BKPT suffix.  These macros invoke
11381: ** routines that report the line-number on which the error originated
11382: ** using sqlite3_log().  The routines also provide a convenient place
11383: ** to set a debugger breakpoint.
11384: */
11385: SQLITE_PRIVATE int sqlite3CorruptError(int);
11386: SQLITE_PRIVATE int sqlite3MisuseError(int);
11387: SQLITE_PRIVATE int sqlite3CantopenError(int);
11388: #define SQLITE_CORRUPT_BKPT sqlite3CorruptError(__LINE__)
11389: #define SQLITE_MISUSE_BKPT sqlite3MisuseError(__LINE__)
11390: #define SQLITE_CANTOPEN_BKPT sqlite3CantopenError(__LINE__)
11391: 
11392: 
11393: /*
11394: ** FTS4 is really an extension for FTS3.  It is enabled using the
11395: ** SQLITE_ENABLE_FTS3 macro.  But to avoid confusion we also all
11396: ** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3.
11397: */
11398: #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3)
11399: # define SQLITE_ENABLE_FTS3
11400: #endif
11401: 
11402: /*
11403: ** The ctype.h header is needed for non-ASCII systems.  It is also
11404: ** needed by FTS3 when FTS3 is included in the amalgamation.
11405: */
11406: #if !defined(SQLITE_ASCII) || \
11407:     (defined(SQLITE_ENABLE_FTS3) && defined(SQLITE_AMALGAMATION))
11408: # include <ctype.h>
11409: #endif
11410: 
11411: /*
11412: ** The following macros mimic the standard library functions toupper(),
11413: ** isspace(), isalnum(), isdigit() and isxdigit(), respectively. The
11414: ** sqlite versions only work for ASCII characters, regardless of locale.
11415: */
11416: #ifdef SQLITE_ASCII
11417: # define sqlite3Toupper(x)  ((x)&~(sqlite3CtypeMap[(unsigned char)(x)]&0x20))
11418: # define sqlite3Isspace(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x01)
11419: # define sqlite3Isalnum(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x06)
11420: # define sqlite3Isalpha(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x02)
11421: # define sqlite3Isdigit(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x04)
11422: # define sqlite3Isxdigit(x)  (sqlite3CtypeMap[(unsigned char)(x)]&0x08)
11423: # define sqlite3Tolower(x)   (sqlite3UpperToLower[(unsigned char)(x)])
11424: #else
11425: # define sqlite3Toupper(x)   toupper((unsigned char)(x))
11426: # define sqlite3Isspace(x)   isspace((unsigned char)(x))
11427: # define sqlite3Isalnum(x)   isalnum((unsigned char)(x))
11428: # define sqlite3Isalpha(x)   isalpha((unsigned char)(x))
11429: # define sqlite3Isdigit(x)   isdigit((unsigned char)(x))
11430: # define sqlite3Isxdigit(x)  isxdigit((unsigned char)(x))
11431: # define sqlite3Tolower(x)   tolower((unsigned char)(x))
11432: #endif
11433: 
11434: /*
11435: ** Internal function prototypes
11436: */
11437: SQLITE_PRIVATE int sqlite3StrICmp(const char *, const char *);
11438: SQLITE_PRIVATE int sqlite3Strlen30(const char*);
11439: #define sqlite3StrNICmp sqlite3_strnicmp
11440: 
11441: SQLITE_PRIVATE int sqlite3MallocInit(void);
11442: SQLITE_PRIVATE void sqlite3MallocEnd(void);
11443: SQLITE_PRIVATE void *sqlite3Malloc(int);
11444: SQLITE_PRIVATE void *sqlite3MallocZero(int);
11445: SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3*, int);
11446: SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3*, int);
11447: SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3*,const char*);
11448: SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3*,const char*, int);
11449: SQLITE_PRIVATE void *sqlite3Realloc(void*, int);
11450: SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, int);
11451: SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, int);
11452: SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*);
11453: SQLITE_PRIVATE int sqlite3MallocSize(void*);
11454: SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, void*);
11455: SQLITE_PRIVATE void *sqlite3ScratchMalloc(int);
11456: SQLITE_PRIVATE void sqlite3ScratchFree(void*);
11457: SQLITE_PRIVATE void *sqlite3PageMalloc(int);
11458: SQLITE_PRIVATE void sqlite3PageFree(void*);
11459: SQLITE_PRIVATE void sqlite3MemSetDefault(void);
11460: SQLITE_PRIVATE void sqlite3BenignMallocHooks(void (*)(void), void (*)(void));
11461: SQLITE_PRIVATE int sqlite3HeapNearlyFull(void);
11462: 
11463: /*
11464: ** On systems with ample stack space and that support alloca(), make
11465: ** use of alloca() to obtain space for large automatic objects.  By default,
11466: ** obtain space from malloc().
11467: **
11468: ** The alloca() routine never returns NULL.  This will cause code paths
11469: ** that deal with sqlite3StackAlloc() failures to be unreachable.
11470: */
11471: #ifdef SQLITE_USE_ALLOCA
11472: # define sqlite3StackAllocRaw(D,N)   alloca(N)
11473: # define sqlite3StackAllocZero(D,N)  memset(alloca(N), 0, N)
11474: # define sqlite3StackFree(D,P)       
11475: #else
11476: # define sqlite3StackAllocRaw(D,N)   sqlite3DbMallocRaw(D,N)
11477: # define sqlite3StackAllocZero(D,N)  sqlite3DbMallocZero(D,N)
11478: # define sqlite3StackFree(D,P)       sqlite3DbFree(D,P)
11479: #endif
11480: 
11481: #ifdef SQLITE_ENABLE_MEMSYS3
11482: SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void);
11483: #endif
11484: #ifdef SQLITE_ENABLE_MEMSYS5
11485: SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void);
11486: #endif
11487: 
11488: 
11489: #ifndef SQLITE_MUTEX_OMIT
11490: SQLITE_PRIVATE   sqlite3_mutex_methods const *sqlite3DefaultMutex(void);
11491: SQLITE_PRIVATE   sqlite3_mutex_methods const *sqlite3NoopMutex(void);
11492: SQLITE_PRIVATE   sqlite3_mutex *sqlite3MutexAlloc(int);
11493: SQLITE_PRIVATE   int sqlite3MutexInit(void);
11494: SQLITE_PRIVATE   int sqlite3MutexEnd(void);
11495: #endif
11496: 
11497: SQLITE_PRIVATE int sqlite3StatusValue(int);
11498: SQLITE_PRIVATE void sqlite3StatusAdd(int, int);
11499: SQLITE_PRIVATE void sqlite3StatusSet(int, int);
11500: 
11501: #ifndef SQLITE_OMIT_FLOATING_POINT
11502: SQLITE_PRIVATE   int sqlite3IsNaN(double);
11503: #else
11504: # define sqlite3IsNaN(X)  0
11505: #endif
11506: 
11507: SQLITE_PRIVATE void sqlite3VXPrintf(StrAccum*, int, const char*, va_list);
11508: #ifndef SQLITE_OMIT_TRACE
11509: SQLITE_PRIVATE void sqlite3XPrintf(StrAccum*, const char*, ...);
11510: #endif
11511: SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3*,const char*, ...);
11512: SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
11513: SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3*,char*,const char*,...);
11514: #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
11515: SQLITE_PRIVATE   void sqlite3DebugPrintf(const char*, ...);
11516: #endif
11517: #if defined(SQLITE_TEST)
11518: SQLITE_PRIVATE   void *sqlite3TestTextToPtr(const char*);
11519: #endif
11520: 
11521: /* Output formatting for SQLITE_TESTCTRL_EXPLAIN */
11522: #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
11523: SQLITE_PRIVATE   void sqlite3ExplainBegin(Vdbe*);
11524: SQLITE_PRIVATE   void sqlite3ExplainPrintf(Vdbe*, const char*, ...);
11525: SQLITE_PRIVATE   void sqlite3ExplainNL(Vdbe*);
11526: SQLITE_PRIVATE   void sqlite3ExplainPush(Vdbe*);
11527: SQLITE_PRIVATE   void sqlite3ExplainPop(Vdbe*);
11528: SQLITE_PRIVATE   void sqlite3ExplainFinish(Vdbe*);
11529: SQLITE_PRIVATE   void sqlite3ExplainSelect(Vdbe*, Select*);
11530: SQLITE_PRIVATE   void sqlite3ExplainExpr(Vdbe*, Expr*);
11531: SQLITE_PRIVATE   void sqlite3ExplainExprList(Vdbe*, ExprList*);
11532: SQLITE_PRIVATE   const char *sqlite3VdbeExplanation(Vdbe*);
11533: #else
11534: # define sqlite3ExplainBegin(X)
11535: # define sqlite3ExplainSelect(A,B)
11536: # define sqlite3ExplainExpr(A,B)
11537: # define sqlite3ExplainExprList(A,B)
11538: # define sqlite3ExplainFinish(X)
11539: # define sqlite3VdbeExplanation(X) 0
11540: #endif
11541: 
11542: 
11543: SQLITE_PRIVATE void sqlite3SetString(char **, sqlite3*, const char*, ...);
11544: SQLITE_PRIVATE void sqlite3ErrorMsg(Parse*, const char*, ...);
11545: SQLITE_PRIVATE int sqlite3Dequote(char*);
11546: SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char*, int);
11547: SQLITE_PRIVATE int sqlite3RunParser(Parse*, const char*, char **);
11548: SQLITE_PRIVATE void sqlite3FinishCoding(Parse*);
11549: SQLITE_PRIVATE int sqlite3GetTempReg(Parse*);
11550: SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse*,int);
11551: SQLITE_PRIVATE int sqlite3GetTempRange(Parse*,int);
11552: SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse*,int,int);
11553: SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse*);
11554: SQLITE_PRIVATE Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int);
11555: SQLITE_PRIVATE Expr *sqlite3Expr(sqlite3*,int,const char*);
11556: SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*);
11557: SQLITE_PRIVATE Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*);
11558: SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*);
11559: SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*);
11560: SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*);
11561: SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*);
11562: SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*);
11563: SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int);
11564: SQLITE_PRIVATE void sqlite3ExprListSetSpan(Parse*,ExprList*,ExprSpan*);
11565: SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3*, ExprList*);
11566: SQLITE_PRIVATE int sqlite3Init(sqlite3*, char**);
11567: SQLITE_PRIVATE int sqlite3InitCallback(void*, int, char**, char**);
11568: SQLITE_PRIVATE void sqlite3Pragma(Parse*,Token*,Token*,Token*,int);
11569: SQLITE_PRIVATE void sqlite3ResetInternalSchema(sqlite3*, int);
11570: SQLITE_PRIVATE void sqlite3BeginParse(Parse*,int);
11571: SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3*);
11572: SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse*,Select*);
11573: SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *, int);
11574: SQLITE_PRIVATE void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int);
11575: SQLITE_PRIVATE void sqlite3AddColumn(Parse*,Token*);
11576: SQLITE_PRIVATE void sqlite3AddNotNull(Parse*, int);
11577: SQLITE_PRIVATE void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int);
11578: SQLITE_PRIVATE void sqlite3AddCheckConstraint(Parse*, Expr*);
11579: SQLITE_PRIVATE void sqlite3AddColumnType(Parse*,Token*);
11580: SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,ExprSpan*);
11581: SQLITE_PRIVATE void sqlite3AddCollateType(Parse*, Token*);
11582: SQLITE_PRIVATE void sqlite3EndTable(Parse*,Token*,Token*,Select*);
11583: SQLITE_PRIVATE int sqlite3ParseUri(const char*,const char*,unsigned int*,
11584:                     sqlite3_vfs**,char**,char **);
11585: SQLITE_PRIVATE int sqlite3CodeOnce(Parse *);
11586: 
11587: SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32);
11588: SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec*, u32);
11589: SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec*, u32);
11590: SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec*, u32, void*);
11591: SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec*);
11592: SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec*);
11593: SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int,int*);
11594: 
11595: SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3*, void*, unsigned int);
11596: SQLITE_PRIVATE void sqlite3RowSetClear(RowSet*);
11597: SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet*, i64);
11598: SQLITE_PRIVATE int sqlite3RowSetTest(RowSet*, u8 iBatch, i64);
11599: SQLITE_PRIVATE int sqlite3RowSetNext(RowSet*, i64*);
11600: 
11601: SQLITE_PRIVATE void sqlite3CreateView(Parse*,Token*,Token*,Token*,Select*,int,int);
11602: 
11603: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
11604: SQLITE_PRIVATE   int sqlite3ViewGetColumnNames(Parse*,Table*);
11605: #else
11606: # define sqlite3ViewGetColumnNames(A,B) 0
11607: #endif
11608: 
11609: SQLITE_PRIVATE void sqlite3DropTable(Parse*, SrcList*, int, int);
11610: SQLITE_PRIVATE void sqlite3CodeDropTable(Parse*, Table*, int, int);
11611: SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3*, Table*);
11612: #ifndef SQLITE_OMIT_AUTOINCREMENT
11613: SQLITE_PRIVATE   void sqlite3AutoincrementBegin(Parse *pParse);
11614: SQLITE_PRIVATE   void sqlite3AutoincrementEnd(Parse *pParse);
11615: #else
11616: # define sqlite3AutoincrementBegin(X)
11617: # define sqlite3AutoincrementEnd(X)
11618: #endif
11619: SQLITE_PRIVATE void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int);
11620: SQLITE_PRIVATE void *sqlite3ArrayAllocate(sqlite3*,void*,int,int,int*,int*,int*);
11621: SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*);
11622: SQLITE_PRIVATE int sqlite3IdListIndex(IdList*,const char*);
11623: SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(sqlite3*, SrcList*, int, int);
11624: SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(sqlite3*, SrcList*, Token*, Token*);
11625: SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(Parse*, SrcList*, Token*, Token*,
11626:                                       Token*, Select*, Expr*, IdList*);
11627: SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *, SrcList *, Token *);
11628: SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *, struct SrcList_item *);
11629: SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList*);
11630: SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse*, SrcList*);
11631: SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3*, IdList*);
11632: SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3*, SrcList*);
11633: SQLITE_PRIVATE Index *sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*,
11634:                         Token*, int, int);
11635: SQLITE_PRIVATE void sqlite3DropIndex(Parse*, SrcList*, int);
11636: SQLITE_PRIVATE int sqlite3Select(Parse*, Select*, SelectDest*);
11637: SQLITE_PRIVATE Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*,
11638:                          Expr*,ExprList*,int,Expr*,Expr*);
11639: SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*);
11640: SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*);
11641: SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, int);
11642: SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
11643: #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
11644: SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse *, SrcList *, Expr *, ExprList *, Expr *, Expr *, char *);
11645: #endif
11646: SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
11647: SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
11648: SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**,ExprList*,u16);
11649: SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*);
11650: SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int);
11651: SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int);
11652: SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse*, int, int, int);
11653: SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse*, int, int, int);
11654: SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse*, int, int, int);
11655: SQLITE_PRIVATE void sqlite3ExprCachePush(Parse*);
11656: SQLITE_PRIVATE void sqlite3ExprCachePop(Parse*, int);
11657: SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse*, int, int);
11658: SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse*);
11659: SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse*, int, int);
11660: SQLITE_PRIVATE int sqlite3ExprCode(Parse*, Expr*, int);
11661: SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse*, Expr*, int*);
11662: SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse*, Expr*, int);
11663: SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse*, Expr*, int);
11664: SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse*, Expr*);
11665: SQLITE_PRIVATE int sqlite3ExprCodeExprList(Parse*, ExprList*, int, int);
11666: SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse*, Expr*, int, int);
11667: SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse*, Expr*, int, int);
11668: SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3*,const char*, const char*);
11669: SQLITE_PRIVATE Table *sqlite3LocateTable(Parse*,int isView,const char*, const char*);
11670: SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3*,const char*, const char*);
11671: SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*);
11672: SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*);
11673: SQLITE_PRIVATE void sqlite3Vacuum(Parse*);
11674: SQLITE_PRIVATE int sqlite3RunVacuum(char**, sqlite3*);
11675: SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3*, Token*);
11676: SQLITE_PRIVATE int sqlite3ExprCompare(Expr*, Expr*);
11677: SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList*, ExprList*);
11678: SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*);
11679: SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*);
11680: SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse*);
11681: SQLITE_PRIVATE void sqlite3PrngSaveState(void);
11682: SQLITE_PRIVATE void sqlite3PrngRestoreState(void);
11683: SQLITE_PRIVATE void sqlite3PrngResetState(void);
11684: SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3*);
11685: SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse*, int);
11686: SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse*, const char *zDb);
11687: SQLITE_PRIVATE void sqlite3BeginTransaction(Parse*, int);
11688: SQLITE_PRIVATE void sqlite3CommitTransaction(Parse*);
11689: SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse*);
11690: SQLITE_PRIVATE void sqlite3Savepoint(Parse*, int, Token*);
11691: SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *);
11692: SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*);
11693: SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*);
11694: SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*);
11695: SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr*, int*);
11696: SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*);
11697: SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump(Vdbe*, const Expr*, int, int);
11698: SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char);
11699: SQLITE_PRIVATE int sqlite3IsRowid(const char*);
11700: SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*, Table*, int, int, int, Trigger *, int);
11701: SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int*);
11702: SQLITE_PRIVATE int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int);
11703: SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(Parse*,Table*,int,int,
11704:                                      int*,int,int,int,int,int*);
11705: SQLITE_PRIVATE void sqlite3CompleteInsertion(Parse*, Table*, int, int, int*, int, int, int);
11706: SQLITE_PRIVATE int sqlite3OpenTableAndIndices(Parse*, Table*, int, int);
11707: SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse*, int, int);
11708: SQLITE_PRIVATE void sqlite3MultiWrite(Parse*);
11709: SQLITE_PRIVATE void sqlite3MayAbort(Parse*);
11710: SQLITE_PRIVATE void sqlite3HaltConstraint(Parse*, int, char*, int);
11711: SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3*,Expr*,int);
11712: SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3*,ExprList*,int);
11713: SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int);
11714: SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3*,IdList*);
11715: SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3*,Select*,int);
11716: SQLITE_PRIVATE void sqlite3FuncDefInsert(FuncDefHash*, FuncDef*);
11717: SQLITE_PRIVATE FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,int);
11718: SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3*);
11719: SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void);
11720: SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void);
11721: SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3*);
11722: SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3*);
11723: SQLITE_PRIVATE void sqlite3ChangeCookie(Parse*, int);
11724: 
11725: #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
11726: SQLITE_PRIVATE void sqlite3MaterializeView(Parse*, Table*, Expr*, int);
11727: #endif
11728: 
11729: #ifndef SQLITE_OMIT_TRIGGER
11730: SQLITE_PRIVATE   void sqlite3BeginTrigger(Parse*, Token*,Token*,int,int,IdList*,SrcList*,
11731:                            Expr*,int, int);
11732: SQLITE_PRIVATE   void sqlite3FinishTrigger(Parse*, TriggerStep*, Token*);
11733: SQLITE_PRIVATE   void sqlite3DropTrigger(Parse*, SrcList*, int);
11734: SQLITE_PRIVATE   void sqlite3DropTriggerPtr(Parse*, Trigger*);
11735: SQLITE_PRIVATE   Trigger *sqlite3TriggersExist(Parse *, Table*, int, ExprList*, int *pMask);
11736: SQLITE_PRIVATE   Trigger *sqlite3TriggerList(Parse *, Table *);
11737: SQLITE_PRIVATE   void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, int, Table *,
11738:                             int, int, int);
11739: SQLITE_PRIVATE   void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int);
11740:   void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*);
11741: SQLITE_PRIVATE   void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*);
11742: SQLITE_PRIVATE   TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*);
11743: SQLITE_PRIVATE   TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*,
11744:                                         ExprList*,Select*,u8);
11745: SQLITE_PRIVATE   TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8);
11746: SQLITE_PRIVATE   TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*);
11747: SQLITE_PRIVATE   void sqlite3DeleteTrigger(sqlite3*, Trigger*);
11748: SQLITE_PRIVATE   void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*);
11749: SQLITE_PRIVATE   u32 sqlite3TriggerColmask(Parse*,Trigger*,ExprList*,int,int,Table*,int);
11750: # define sqlite3ParseToplevel(p) ((p)->pToplevel ? (p)->pToplevel : (p))
11751: #else
11752: # define sqlite3TriggersExist(B,C,D,E,F) 0
11753: # define sqlite3DeleteTrigger(A,B)
11754: # define sqlite3DropTriggerPtr(A,B)
11755: # define sqlite3UnlinkAndDeleteTrigger(A,B,C)
11756: # define sqlite3CodeRowTrigger(A,B,C,D,E,F,G,H,I)
11757: # define sqlite3CodeRowTriggerDirect(A,B,C,D,E,F)
11758: # define sqlite3TriggerList(X, Y) 0
11759: # define sqlite3ParseToplevel(p) p
11760: # define sqlite3TriggerColmask(A,B,C,D,E,F,G) 0
11761: #endif
11762: 
11763: SQLITE_PRIVATE int sqlite3JoinType(Parse*, Token*, Token*, Token*);
11764: SQLITE_PRIVATE void sqlite3CreateForeignKey(Parse*, ExprList*, Token*, ExprList*, int);
11765: SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse*, int);
11766: #ifndef SQLITE_OMIT_AUTHORIZATION
11767: SQLITE_PRIVATE   void sqlite3AuthRead(Parse*,Expr*,Schema*,SrcList*);
11768: SQLITE_PRIVATE   int sqlite3AuthCheck(Parse*,int, const char*, const char*, const char*);
11769: SQLITE_PRIVATE   void sqlite3AuthContextPush(Parse*, AuthContext*, const char*);
11770: SQLITE_PRIVATE   void sqlite3AuthContextPop(AuthContext*);
11771: SQLITE_PRIVATE   int sqlite3AuthReadCol(Parse*, const char *, const char *, int);
11772: #else
11773: # define sqlite3AuthRead(a,b,c,d)
11774: # define sqlite3AuthCheck(a,b,c,d,e)    SQLITE_OK
11775: # define sqlite3AuthContextPush(a,b,c)
11776: # define sqlite3AuthContextPop(a)  ((void)(a))
11777: #endif
11778: SQLITE_PRIVATE void sqlite3Attach(Parse*, Expr*, Expr*, Expr*);
11779: SQLITE_PRIVATE void sqlite3Detach(Parse*, Expr*);
11780: SQLITE_PRIVATE int sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Token*);
11781: SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*);
11782: SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*);
11783: SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
11784: SQLITE_PRIVATE int sqlite3FixExprList(DbFixer*, ExprList*);
11785: SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
11786: SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
11787: SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
11788: SQLITE_PRIVATE int sqlite3Atoi(const char*);
11789: SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *pData, int nChar);
11790: SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *pData, int nByte);
11791: SQLITE_PRIVATE u32 sqlite3Utf8Read(const u8*, const u8**);
11792: 
11793: /*
11794: ** Routines to read and write variable-length integers.  These used to
11795: ** be defined locally, but now we use the varint routines in the util.c
11796: ** file.  Code should use the MACRO forms below, as the Varint32 versions
11797: ** are coded to assume the single byte case is already handled (which 
11798: ** the MACRO form does).
11799: */
11800: SQLITE_PRIVATE int sqlite3PutVarint(unsigned char*, u64);
11801: SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char*, u32);
11802: SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *, u64 *);
11803: SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *, u32 *);
11804: SQLITE_PRIVATE int sqlite3VarintLen(u64 v);
11805: 
11806: /*
11807: ** The header of a record consists of a sequence variable-length integers.
11808: ** These integers are almost always small and are encoded as a single byte.
11809: ** The following macros take advantage this fact to provide a fast encode
11810: ** and decode of the integers in a record header.  It is faster for the common
11811: ** case where the integer is a single byte.  It is a little slower when the
11812: ** integer is two or more bytes.  But overall it is faster.
11813: **
11814: ** The following expressions are equivalent:
11815: **
11816: **     x = sqlite3GetVarint32( A, &B );
11817: **     x = sqlite3PutVarint32( A, B );
11818: **
11819: **     x = getVarint32( A, B );
11820: **     x = putVarint32( A, B );
11821: **
11822: */
11823: #define getVarint32(A,B)  (u8)((*(A)<(u8)0x80) ? ((B) = (u32)*(A)),1 : sqlite3GetVarint32((A), (u32 *)&(B)))
11824: #define putVarint32(A,B)  (u8)(((u32)(B)<(u32)0x80) ? (*(A) = (unsigned char)(B)),1 : sqlite3PutVarint32((A), (B)))
11825: #define getVarint    sqlite3GetVarint
11826: #define putVarint    sqlite3PutVarint
11827: 
11828: 
11829: SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *, Index *);
11830: SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *, Table *);
11831: SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2);
11832: SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity);
11833: SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr);
11834: SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8);
11835: SQLITE_PRIVATE void sqlite3Error(sqlite3*, int, const char*,...);
11836: SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
11837: SQLITE_PRIVATE u8 sqlite3HexToInt(int h);
11838: SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
11839: SQLITE_PRIVATE const char *sqlite3ErrStr(int);
11840: SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse);
11841: SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int);
11842: SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName);
11843: SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr);
11844: SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Expr*, CollSeq*);
11845: SQLITE_PRIVATE Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr*, Token*);
11846: SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *, CollSeq *);
11847: SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *, const char *);
11848: SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *, int);
11849: SQLITE_PRIVATE int sqlite3AddInt64(i64*,i64);
11850: SQLITE_PRIVATE int sqlite3SubInt64(i64*,i64);
11851: SQLITE_PRIVATE int sqlite3MulInt64(i64*,i64);
11852: SQLITE_PRIVATE int sqlite3AbsInt32(int);
11853: #ifdef SQLITE_ENABLE_8_3_NAMES
11854: SQLITE_PRIVATE void sqlite3FileSuffix3(const char*, char*);
11855: #else
11856: # define sqlite3FileSuffix3(X,Y)
11857: #endif
11858: SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z);
11859: 
11860: SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value*, u8);
11861: SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value*, u8);
11862: SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, 
11863:                         void(*)(void*));
11864: SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value*);
11865: SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *);
11866: SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8);
11867: #ifdef SQLITE_ENABLE_STAT3
11868: SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *, u8, char *, int, int *);
11869: #endif
11870: SQLITE_PRIVATE int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **);
11871: SQLITE_PRIVATE void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8);
11872: #ifndef SQLITE_AMALGAMATION
11873: SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[];
11874: SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[];
11875: SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[];
11876: SQLITE_PRIVATE const Token sqlite3IntTokens[];
11877: SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config;
11878: SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions;
11879: #ifndef SQLITE_OMIT_WSD
11880: SQLITE_PRIVATE int sqlite3PendingByte;
11881: #endif
11882: #endif
11883: SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3*, int, int, int);
11884: SQLITE_PRIVATE void sqlite3Reindex(Parse*, Token*, Token*);
11885: SQLITE_PRIVATE void sqlite3AlterFunctions(void);
11886: SQLITE_PRIVATE void sqlite3AlterRenameTable(Parse*, SrcList*, Token*);
11887: SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *, int *);
11888: SQLITE_PRIVATE void sqlite3NestedParse(Parse*, const char*, ...);
11889: SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3*);
11890: SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *, Expr *, int, int);
11891: SQLITE_PRIVATE void sqlite3SelectPrep(Parse*, Select*, NameContext*);
11892: SQLITE_PRIVATE int sqlite3ResolveExprNames(NameContext*, Expr*);
11893: SQLITE_PRIVATE void sqlite3ResolveSelectNames(Parse*, Select*, NameContext*);
11894: SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(Parse*, Select*, ExprList*, const char*);
11895: SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *, Table *, int, int);
11896: SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *, Token *);
11897: SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *, SrcList *);
11898: SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(sqlite3*, u8, CollSeq *, const char*);
11899: SQLITE_PRIVATE char sqlite3AffinityType(const char*);
11900: SQLITE_PRIVATE void sqlite3Analyze(Parse*, Token*, Token*);
11901: SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler*);
11902: SQLITE_PRIVATE int sqlite3FindDb(sqlite3*, Token*);
11903: SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *, const char *);
11904: SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3*,int iDB);
11905: SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3*,Index*);
11906: SQLITE_PRIVATE void sqlite3DefaultRowEst(Index*);
11907: SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3*, int);
11908: SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3*,Expr*,int*,char*);
11909: SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse*, int, int);
11910: SQLITE_PRIVATE void sqlite3SchemaClear(void *);
11911: SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *, Btree *);
11912: SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *);
11913: SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *, Index *);
11914: SQLITE_PRIVATE int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, 
11915:   void (*)(sqlite3_context*,int,sqlite3_value **),
11916:   void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*),
11917:   FuncDestructor *pDestructor
11918: );
11919: SQLITE_PRIVATE int sqlite3ApiExit(sqlite3 *db, int);
11920: SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *);
11921: 
11922: SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum*, char*, int, int);
11923: SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum*,const char*,int);
11924: SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum*,int);
11925: SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum*);
11926: SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum*);
11927: SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest*,int,int);
11928: SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *, SrcList *, int, int);
11929: 
11930: SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *);
11931: SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *, Pgno, const u8 *);
11932: 
11933: /*
11934: ** The interface to the LEMON-generated parser
11935: */
11936: SQLITE_PRIVATE void *sqlite3ParserAlloc(void*(*)(size_t));
11937: SQLITE_PRIVATE void sqlite3ParserFree(void*, void(*)(void*));
11938: SQLITE_PRIVATE void sqlite3Parser(void*, int, Token, Parse*);
11939: #ifdef YYTRACKMAXSTACKDEPTH
11940: SQLITE_PRIVATE   int sqlite3ParserStackPeak(void*);
11941: #endif
11942: 
11943: SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3*);
11944: #ifndef SQLITE_OMIT_LOAD_EXTENSION
11945: SQLITE_PRIVATE   void sqlite3CloseExtensions(sqlite3*);
11946: #else
11947: # define sqlite3CloseExtensions(X)
11948: #endif
11949: 
11950: #ifndef SQLITE_OMIT_SHARED_CACHE
11951: SQLITE_PRIVATE   void sqlite3TableLock(Parse *, int, int, u8, const char *);
11952: #else
11953:   #define sqlite3TableLock(v,w,x,y,z)
11954: #endif
11955: 
11956: #ifdef SQLITE_TEST
11957: SQLITE_PRIVATE   int sqlite3Utf8To8(unsigned char*);
11958: #endif
11959: 
11960: #ifdef SQLITE_OMIT_VIRTUALTABLE
11961: #  define sqlite3VtabClear(Y)
11962: #  define sqlite3VtabSync(X,Y) SQLITE_OK
11963: #  define sqlite3VtabRollback(X)
11964: #  define sqlite3VtabCommit(X)
11965: #  define sqlite3VtabInSync(db) 0
11966: #  define sqlite3VtabLock(X) 
11967: #  define sqlite3VtabUnlock(X)
11968: #  define sqlite3VtabUnlockList(X)
11969: #  define sqlite3VtabSavepoint(X, Y, Z) SQLITE_OK
11970: #  define sqlite3GetVTable(X,Y)  ((VTable*)0)
11971: #else
11972: SQLITE_PRIVATE    void sqlite3VtabClear(sqlite3 *db, Table*);
11973: SQLITE_PRIVATE    int sqlite3VtabSync(sqlite3 *db, char **);
11974: SQLITE_PRIVATE    int sqlite3VtabRollback(sqlite3 *db);
11975: SQLITE_PRIVATE    int sqlite3VtabCommit(sqlite3 *db);
11976: SQLITE_PRIVATE    void sqlite3VtabLock(VTable *);
11977: SQLITE_PRIVATE    void sqlite3VtabUnlock(VTable *);
11978: SQLITE_PRIVATE    void sqlite3VtabUnlockList(sqlite3*);
11979: SQLITE_PRIVATE    int sqlite3VtabSavepoint(sqlite3 *, int, int);
11980: SQLITE_PRIVATE    VTable *sqlite3GetVTable(sqlite3*, Table*);
11981: #  define sqlite3VtabInSync(db) ((db)->nVTrans>0 && (db)->aVTrans==0)
11982: #endif
11983: SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse*,Table*);
11984: SQLITE_PRIVATE void sqlite3VtabBeginParse(Parse*, Token*, Token*, Token*);
11985: SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse*, Token*);
11986: SQLITE_PRIVATE void sqlite3VtabArgInit(Parse*);
11987: SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse*, Token*);
11988: SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3*, int, const char *, char **);
11989: SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse*, Table*);
11990: SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3*, int, const char *);
11991: SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *, VTable *);
11992: SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*);
11993: SQLITE_PRIVATE void sqlite3InvalidFunction(sqlite3_context*,int,sqlite3_value**);
11994: SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe*, const char*, int);
11995: SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *);
11996: SQLITE_PRIVATE int sqlite3Reprepare(Vdbe*);
11997: SQLITE_PRIVATE void sqlite3ExprListCheckLength(Parse*, ExprList*, const char*);
11998: SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(Parse *, Expr *, Expr *);
11999: SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3*);
12000: SQLITE_PRIVATE const char *sqlite3JournalModename(int);
12001: SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3*, int, int, int*, int*);
12002: SQLITE_PRIVATE int sqlite3WalDefaultHook(void*,sqlite3*,const char*,int);
12003: 
12004: /* Declarations for functions in fkey.c. All of these are replaced by
12005: ** no-op macros if OMIT_FOREIGN_KEY is defined. In this case no foreign
12006: ** key functionality is available. If OMIT_TRIGGER is defined but
12007: ** OMIT_FOREIGN_KEY is not, only some of the functions are no-oped. In
12008: ** this case foreign keys are parsed, but no other functionality is 
12009: ** provided (enforcement of FK constraints requires the triggers sub-system).
12010: */
12011: #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
12012: SQLITE_PRIVATE   void sqlite3FkCheck(Parse*, Table*, int, int);
12013: SQLITE_PRIVATE   void sqlite3FkDropTable(Parse*, SrcList *, Table*);
12014: SQLITE_PRIVATE   void sqlite3FkActions(Parse*, Table*, ExprList*, int);
12015: SQLITE_PRIVATE   int sqlite3FkRequired(Parse*, Table*, int*, int);
12016: SQLITE_PRIVATE   u32 sqlite3FkOldmask(Parse*, Table*);
12017: SQLITE_PRIVATE   FKey *sqlite3FkReferences(Table *);
12018: #else
12019:   #define sqlite3FkActions(a,b,c,d)
12020:   #define sqlite3FkCheck(a,b,c,d)
12021:   #define sqlite3FkDropTable(a,b,c)
12022:   #define sqlite3FkOldmask(a,b)      0
12023:   #define sqlite3FkRequired(a,b,c,d) 0
12024: #endif
12025: #ifndef SQLITE_OMIT_FOREIGN_KEY
12026: SQLITE_PRIVATE   void sqlite3FkDelete(sqlite3 *, Table*);
12027: #else
12028:   #define sqlite3FkDelete(a,b)
12029: #endif
12030: 
12031: 
12032: /*
12033: ** Available fault injectors.  Should be numbered beginning with 0.
12034: */
12035: #define SQLITE_FAULTINJECTOR_MALLOC     0
12036: #define SQLITE_FAULTINJECTOR_COUNT      1
12037: 
12038: /*
12039: ** The interface to the code in fault.c used for identifying "benign"
12040: ** malloc failures. This is only present if SQLITE_OMIT_BUILTIN_TEST
12041: ** is not defined.
12042: */
12043: #ifndef SQLITE_OMIT_BUILTIN_TEST
12044: SQLITE_PRIVATE   void sqlite3BeginBenignMalloc(void);
12045: SQLITE_PRIVATE   void sqlite3EndBenignMalloc(void);
12046: #else
12047:   #define sqlite3BeginBenignMalloc()
12048:   #define sqlite3EndBenignMalloc()
12049: #endif
12050: 
12051: #define IN_INDEX_ROWID           1
12052: #define IN_INDEX_EPH             2
12053: #define IN_INDEX_INDEX           3
12054: SQLITE_PRIVATE int sqlite3FindInIndex(Parse *, Expr *, int*);
12055: 
12056: #ifdef SQLITE_ENABLE_ATOMIC_WRITE
12057: SQLITE_PRIVATE   int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int);
12058: SQLITE_PRIVATE   int sqlite3JournalSize(sqlite3_vfs *);
12059: SQLITE_PRIVATE   int sqlite3JournalCreate(sqlite3_file *);
12060: #else
12061:   #define sqlite3JournalSize(pVfs) ((pVfs)->szOsFile)
12062: #endif
12063: 
12064: SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *);
12065: SQLITE_PRIVATE int sqlite3MemJournalSize(void);
12066: SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *);
12067: 
12068: #if SQLITE_MAX_EXPR_DEPTH>0
12069: SQLITE_PRIVATE   void sqlite3ExprSetHeight(Parse *pParse, Expr *p);
12070: SQLITE_PRIVATE   int sqlite3SelectExprHeight(Select *);
12071: SQLITE_PRIVATE   int sqlite3ExprCheckHeight(Parse*, int);
12072: #else
12073:   #define sqlite3ExprSetHeight(x,y)
12074:   #define sqlite3SelectExprHeight(x) 0
12075:   #define sqlite3ExprCheckHeight(x,y)
12076: #endif
12077: 
12078: SQLITE_PRIVATE u32 sqlite3Get4byte(const u8*);
12079: SQLITE_PRIVATE void sqlite3Put4byte(u8*, u32);
12080: 
12081: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
12082: SQLITE_PRIVATE   void sqlite3ConnectionBlocked(sqlite3 *, sqlite3 *);
12083: SQLITE_PRIVATE   void sqlite3ConnectionUnlocked(sqlite3 *db);
12084: SQLITE_PRIVATE   void sqlite3ConnectionClosed(sqlite3 *db);
12085: #else
12086:   #define sqlite3ConnectionBlocked(x,y)
12087:   #define sqlite3ConnectionUnlocked(x)
12088:   #define sqlite3ConnectionClosed(x)
12089: #endif
12090: 
12091: #ifdef SQLITE_DEBUG
12092: SQLITE_PRIVATE   void sqlite3ParserTrace(FILE*, char *);
12093: #endif
12094: 
12095: /*
12096: ** If the SQLITE_ENABLE IOTRACE exists then the global variable
12097: ** sqlite3IoTrace is a pointer to a printf-like routine used to
12098: ** print I/O tracing messages. 
12099: */
12100: #ifdef SQLITE_ENABLE_IOTRACE
12101: # define IOTRACE(A)  if( sqlite3IoTrace ){ sqlite3IoTrace A; }
12102: SQLITE_PRIVATE   void sqlite3VdbeIOTraceSql(Vdbe*);
12103: SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*,...);
12104: #else
12105: # define IOTRACE(A)
12106: # define sqlite3VdbeIOTraceSql(X)
12107: #endif
12108: 
12109: /*
12110: ** These routines are available for the mem2.c debugging memory allocator
12111: ** only.  They are used to verify that different "types" of memory
12112: ** allocations are properly tracked by the system.
12113: **
12114: ** sqlite3MemdebugSetType() sets the "type" of an allocation to one of
12115: ** the MEMTYPE_* macros defined below.  The type must be a bitmask with
12116: ** a single bit set.
12117: **
12118: ** sqlite3MemdebugHasType() returns true if any of the bits in its second
12119: ** argument match the type set by the previous sqlite3MemdebugSetType().
12120: ** sqlite3MemdebugHasType() is intended for use inside assert() statements.
12121: **
12122: ** sqlite3MemdebugNoType() returns true if none of the bits in its second
12123: ** argument match the type set by the previous sqlite3MemdebugSetType().
12124: **
12125: ** Perhaps the most important point is the difference between MEMTYPE_HEAP
12126: ** and MEMTYPE_LOOKASIDE.  If an allocation is MEMTYPE_LOOKASIDE, that means
12127: ** it might have been allocated by lookaside, except the allocation was
12128: ** too large or lookaside was already full.  It is important to verify
12129: ** that allocations that might have been satisfied by lookaside are not
12130: ** passed back to non-lookaside free() routines.  Asserts such as the
12131: ** example above are placed on the non-lookaside free() routines to verify
12132: ** this constraint. 
12133: **
12134: ** All of this is no-op for a production build.  It only comes into
12135: ** play when the SQLITE_MEMDEBUG compile-time option is used.
12136: */
12137: #ifdef SQLITE_MEMDEBUG
12138: SQLITE_PRIVATE   void sqlite3MemdebugSetType(void*,u8);
12139: SQLITE_PRIVATE   int sqlite3MemdebugHasType(void*,u8);
12140: SQLITE_PRIVATE   int sqlite3MemdebugNoType(void*,u8);
12141: #else
12142: # define sqlite3MemdebugSetType(X,Y)  /* no-op */
12143: # define sqlite3MemdebugHasType(X,Y)  1
12144: # define sqlite3MemdebugNoType(X,Y)   1
12145: #endif
12146: #define MEMTYPE_HEAP       0x01  /* General heap allocations */
12147: #define MEMTYPE_LOOKASIDE  0x02  /* Might have been lookaside memory */
12148: #define MEMTYPE_SCRATCH    0x04  /* Scratch allocations */
12149: #define MEMTYPE_PCACHE     0x08  /* Page cache allocations */
12150: #define MEMTYPE_DB         0x10  /* Uses sqlite3DbMalloc, not sqlite_malloc */
12151: 
12152: #endif /* _SQLITEINT_H_ */
12153: 
12154: /************** End of sqliteInt.h *******************************************/
12155: /************** Begin file global.c ******************************************/
12156: /*
12157: ** 2008 June 13
12158: **
12159: ** The author disclaims copyright to this source code.  In place of
12160: ** a legal notice, here is a blessing:
12161: **
12162: **    May you do good and not evil.
12163: **    May you find forgiveness for yourself and forgive others.
12164: **    May you share freely, never taking more than you give.
12165: **
12166: *************************************************************************
12167: **
12168: ** This file contains definitions of global variables and contants.
12169: */
12170: 
12171: /* An array to map all upper-case characters into their corresponding
12172: ** lower-case character. 
12173: **
12174: ** SQLite only considers US-ASCII (or EBCDIC) characters.  We do not
12175: ** handle case conversions for the UTF character set since the tables
12176: ** involved are nearly as big or bigger than SQLite itself.
12177: */
12178: SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[] = {
12179: #ifdef SQLITE_ASCII
12180:       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
12181:      18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
12182:      36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
12183:      54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,
12184:     104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,
12185:     122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,
12186:     108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
12187:     126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
12188:     144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,
12189:     162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,
12190:     180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,
12191:     198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
12192:     216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,
12193:     234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,
12194:     252,253,254,255
12195: #endif
12196: #ifdef SQLITE_EBCDIC
12197:       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, /* 0x */
12198:      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* 1x */
12199:      32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, /* 2x */
12200:      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, /* 3x */
12201:      64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, /* 4x */
12202:      80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, /* 5x */
12203:      96, 97, 66, 67, 68, 69, 70, 71, 72, 73,106,107,108,109,110,111, /* 6x */
12204:     112, 81, 82, 83, 84, 85, 86, 87, 88, 89,122,123,124,125,126,127, /* 7x */
12205:     128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, /* 8x */
12206:     144,145,146,147,148,149,150,151,152,153,154,155,156,157,156,159, /* 9x */
12207:     160,161,162,163,164,165,166,167,168,169,170,171,140,141,142,175, /* Ax */
12208:     176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, /* Bx */
12209:     192,129,130,131,132,133,134,135,136,137,202,203,204,205,206,207, /* Cx */
12210:     208,145,146,147,148,149,150,151,152,153,218,219,220,221,222,223, /* Dx */
12211:     224,225,162,163,164,165,166,167,168,169,232,203,204,205,206,207, /* Ex */
12212:     239,240,241,242,243,244,245,246,247,248,249,219,220,221,222,255, /* Fx */
12213: #endif
12214: };
12215: 
12216: /*
12217: ** The following 256 byte lookup table is used to support SQLites built-in
12218: ** equivalents to the following standard library functions:
12219: **
12220: **   isspace()                        0x01
12221: **   isalpha()                        0x02
12222: **   isdigit()                        0x04
12223: **   isalnum()                        0x06
12224: **   isxdigit()                       0x08
12225: **   toupper()                        0x20
12226: **   SQLite identifier character      0x40
12227: **
12228: ** Bit 0x20 is set if the mapped character requires translation to upper
12229: ** case. i.e. if the character is a lower-case ASCII character.
12230: ** If x is a lower-case ASCII character, then its upper-case equivalent
12231: ** is (x - 0x20). Therefore toupper() can be implemented as:
12232: **
12233: **   (x & ~(map[x]&0x20))
12234: **
12235: ** Standard function tolower() is implemented using the sqlite3UpperToLower[]
12236: ** array. tolower() is used more often than toupper() by SQLite.
12237: **
12238: ** Bit 0x40 is set if the character non-alphanumeric and can be used in an 
12239: ** SQLite identifier.  Identifiers are alphanumerics, "_", "$", and any
12240: ** non-ASCII UTF character. Hence the test for whether or not a character is
12241: ** part of an identifier is 0x46.
12242: **
12243: ** SQLite's versions are identical to the standard versions assuming a
12244: ** locale of "C". They are implemented as macros in sqliteInt.h.
12245: */
12246: #ifdef SQLITE_ASCII
12247: SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = {
12248:   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 00..07    ........ */
12249:   0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,  /* 08..0f    ........ */
12250:   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 10..17    ........ */
12251:   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 18..1f    ........ */
12252:   0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,  /* 20..27     !"#$%&' */
12253:   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 28..2f    ()*+,-./ */
12254:   0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,  /* 30..37    01234567 */
12255:   0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 38..3f    89:;<=>? */
12256: 
12257:   0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x02,  /* 40..47    @ABCDEFG */
12258:   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,  /* 48..4f    HIJKLMNO */
12259:   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,  /* 50..57    PQRSTUVW */
12260:   0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40,  /* 58..5f    XYZ[\]^_ */
12261:   0x00, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x22,  /* 60..67    `abcdefg */
12262:   0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,  /* 68..6f    hijklmno */
12263:   0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,  /* 70..77    pqrstuvw */
12264:   0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 78..7f    xyz{|}~. */
12265: 
12266:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 80..87    ........ */
12267:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 88..8f    ........ */
12268:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 90..97    ........ */
12269:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 98..9f    ........ */
12270:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* a0..a7    ........ */
12271:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* a8..af    ........ */
12272:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* b0..b7    ........ */
12273:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* b8..bf    ........ */
12274: 
12275:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* c0..c7    ........ */
12276:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* c8..cf    ........ */
12277:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* d0..d7    ........ */
12278:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* d8..df    ........ */
12279:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* e0..e7    ........ */
12280:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* e8..ef    ........ */
12281:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* f0..f7    ........ */
12282:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40   /* f8..ff    ........ */
12283: };
12284: #endif
12285: 
12286: #ifndef SQLITE_USE_URI
12287: # define  SQLITE_USE_URI 0
12288: #endif
12289: 
12290: /*
12291: ** The following singleton contains the global configuration for
12292: ** the SQLite library.
12293: */
12294: SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = {
12295:    SQLITE_DEFAULT_MEMSTATUS,  /* bMemstat */
12296:    1,                         /* bCoreMutex */
12297:    SQLITE_THREADSAFE==1,      /* bFullMutex */
12298:    SQLITE_USE_URI,            /* bOpenUri */
12299:    0x7ffffffe,                /* mxStrlen */
12300:    128,                       /* szLookaside */
12301:    500,                       /* nLookaside */
12302:    {0,0,0,0,0,0,0,0},         /* m */
12303:    {0,0,0,0,0,0,0,0,0},       /* mutex */
12304:    {0,0,0,0,0,0,0,0,0,0,0,0,0},/* pcache2 */
12305:    (void*)0,                  /* pHeap */
12306:    0,                         /* nHeap */
12307:    0, 0,                      /* mnHeap, mxHeap */
12308:    (void*)0,                  /* pScratch */
12309:    0,                         /* szScratch */
12310:    0,                         /* nScratch */
12311:    (void*)0,                  /* pPage */
12312:    0,                         /* szPage */
12313:    0,                         /* nPage */
12314:    0,                         /* mxParserStack */
12315:    0,                         /* sharedCacheEnabled */
12316:    /* All the rest should always be initialized to zero */
12317:    0,                         /* isInit */
12318:    0,                         /* inProgress */
12319:    0,                         /* isMutexInit */
12320:    0,                         /* isMallocInit */
12321:    0,                         /* isPCacheInit */
12322:    0,                         /* pInitMutex */
12323:    0,                         /* nRefInitMutex */
12324:    0,                         /* xLog */
12325:    0,                         /* pLogArg */
12326:    0,                         /* bLocaltimeFault */
12327: };
12328: 
12329: 
12330: /*
12331: ** Hash table for global functions - functions common to all
12332: ** database connections.  After initialization, this table is
12333: ** read-only.
12334: */
12335: SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions;
12336: 
12337: /*
12338: ** Constant tokens for values 0 and 1.
12339: */
12340: SQLITE_PRIVATE const Token sqlite3IntTokens[] = {
12341:    { "0", 1 },
12342:    { "1", 1 }
12343: };
12344: 
12345: 
12346: /*
12347: ** The value of the "pending" byte must be 0x40000000 (1 byte past the
12348: ** 1-gibabyte boundary) in a compatible database.  SQLite never uses
12349: ** the database page that contains the pending byte.  It never attempts
12350: ** to read or write that page.  The pending byte page is set assign
12351: ** for use by the VFS layers as space for managing file locks.
12352: **
12353: ** During testing, it is often desirable to move the pending byte to
12354: ** a different position in the file.  This allows code that has to
12355: ** deal with the pending byte to run on files that are much smaller
12356: ** than 1 GiB.  The sqlite3_test_control() interface can be used to
12357: ** move the pending byte.
12358: **
12359: ** IMPORTANT:  Changing the pending byte to any value other than
12360: ** 0x40000000 results in an incompatible database file format!
12361: ** Changing the pending byte during operating results in undefined
12362: ** and dileterious behavior.
12363: */
12364: #ifndef SQLITE_OMIT_WSD
12365: SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000;
12366: #endif
12367: 
12368: /*
12369: ** Properties of opcodes.  The OPFLG_INITIALIZER macro is
12370: ** created by mkopcodeh.awk during compilation.  Data is obtained
12371: ** from the comments following the "case OP_xxxx:" statements in
12372: ** the vdbe.c file.  
12373: */
12374: SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[] = OPFLG_INITIALIZER;
12375: 
12376: /************** End of global.c **********************************************/
12377: /************** Begin file ctime.c *******************************************/
12378: /*
12379: ** 2010 February 23
12380: **
12381: ** The author disclaims copyright to this source code.  In place of
12382: ** a legal notice, here is a blessing:
12383: **
12384: **    May you do good and not evil.
12385: **    May you find forgiveness for yourself and forgive others.
12386: **    May you share freely, never taking more than you give.
12387: **
12388: *************************************************************************
12389: **
12390: ** This file implements routines used to report what compile-time options
12391: ** SQLite was built with.
12392: */
12393: 
12394: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
12395: 
12396: 
12397: /*
12398: ** An array of names of all compile-time options.  This array should 
12399: ** be sorted A-Z.
12400: **
12401: ** This array looks large, but in a typical installation actually uses
12402: ** only a handful of compile-time options, so most times this array is usually
12403: ** rather short and uses little memory space.
12404: */
12405: static const char * const azCompileOpt[] = {
12406: 
12407: /* These macros are provided to "stringify" the value of the define
12408: ** for those options in which the value is meaningful. */
12409: #define CTIMEOPT_VAL_(opt) #opt
12410: #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt)
12411: 
12412: #ifdef SQLITE_32BIT_ROWID
12413:   "32BIT_ROWID",
12414: #endif
12415: #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
12416:   "4_BYTE_ALIGNED_MALLOC",
12417: #endif
12418: #ifdef SQLITE_CASE_SENSITIVE_LIKE
12419:   "CASE_SENSITIVE_LIKE",
12420: #endif
12421: #ifdef SQLITE_CHECK_PAGES
12422:   "CHECK_PAGES",
12423: #endif
12424: #ifdef SQLITE_COVERAGE_TEST
12425:   "COVERAGE_TEST",
12426: #endif
12427: #ifdef SQLITE_DEBUG
12428:   "DEBUG",
12429: #endif
12430: #ifdef SQLITE_DEFAULT_LOCKING_MODE
12431:   "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE),
12432: #endif
12433: #ifdef SQLITE_DISABLE_DIRSYNC
12434:   "DISABLE_DIRSYNC",
12435: #endif
12436: #ifdef SQLITE_DISABLE_LFS
12437:   "DISABLE_LFS",
12438: #endif
12439: #ifdef SQLITE_ENABLE_ATOMIC_WRITE
12440:   "ENABLE_ATOMIC_WRITE",
12441: #endif
12442: #ifdef SQLITE_ENABLE_CEROD
12443:   "ENABLE_CEROD",
12444: #endif
12445: #ifdef SQLITE_ENABLE_COLUMN_METADATA
12446:   "ENABLE_COLUMN_METADATA",
12447: #endif
12448: #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
12449:   "ENABLE_EXPENSIVE_ASSERT",
12450: #endif
12451: #ifdef SQLITE_ENABLE_FTS1
12452:   "ENABLE_FTS1",
12453: #endif
12454: #ifdef SQLITE_ENABLE_FTS2
12455:   "ENABLE_FTS2",
12456: #endif
12457: #ifdef SQLITE_ENABLE_FTS3
12458:   "ENABLE_FTS3",
12459: #endif
12460: #ifdef SQLITE_ENABLE_FTS3_PARENTHESIS
12461:   "ENABLE_FTS3_PARENTHESIS",
12462: #endif
12463: #ifdef SQLITE_ENABLE_FTS4
12464:   "ENABLE_FTS4",
12465: #endif
12466: #ifdef SQLITE_ENABLE_ICU
12467:   "ENABLE_ICU",
12468: #endif
12469: #ifdef SQLITE_ENABLE_IOTRACE
12470:   "ENABLE_IOTRACE",
12471: #endif
12472: #ifdef SQLITE_ENABLE_LOAD_EXTENSION
12473:   "ENABLE_LOAD_EXTENSION",
12474: #endif
12475: #ifdef SQLITE_ENABLE_LOCKING_STYLE
12476:   "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE),
12477: #endif
12478: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
12479:   "ENABLE_MEMORY_MANAGEMENT",
12480: #endif
12481: #ifdef SQLITE_ENABLE_MEMSYS3
12482:   "ENABLE_MEMSYS3",
12483: #endif
12484: #ifdef SQLITE_ENABLE_MEMSYS5
12485:   "ENABLE_MEMSYS5",
12486: #endif
12487: #ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK
12488:   "ENABLE_OVERSIZE_CELL_CHECK",
12489: #endif
12490: #ifdef SQLITE_ENABLE_RTREE
12491:   "ENABLE_RTREE",
12492: #endif
12493: #ifdef SQLITE_ENABLE_STAT3
12494:   "ENABLE_STAT3",
12495: #endif
12496: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
12497:   "ENABLE_UNLOCK_NOTIFY",
12498: #endif
12499: #ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
12500:   "ENABLE_UPDATE_DELETE_LIMIT",
12501: #endif
12502: #ifdef SQLITE_HAS_CODEC
12503:   "HAS_CODEC",
12504: #endif
12505: #ifdef SQLITE_HAVE_ISNAN
12506:   "HAVE_ISNAN",
12507: #endif
12508: #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
12509:   "HOMEGROWN_RECURSIVE_MUTEX",
12510: #endif
12511: #ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS
12512:   "IGNORE_AFP_LOCK_ERRORS",
12513: #endif
12514: #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
12515:   "IGNORE_FLOCK_LOCK_ERRORS",
12516: #endif
12517: #ifdef SQLITE_INT64_TYPE
12518:   "INT64_TYPE",
12519: #endif
12520: #ifdef SQLITE_LOCK_TRACE
12521:   "LOCK_TRACE",
12522: #endif
12523: #ifdef SQLITE_MAX_SCHEMA_RETRY
12524:   "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY),
12525: #endif
12526: #ifdef SQLITE_MEMDEBUG
12527:   "MEMDEBUG",
12528: #endif
12529: #ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
12530:   "MIXED_ENDIAN_64BIT_FLOAT",
12531: #endif
12532: #ifdef SQLITE_NO_SYNC
12533:   "NO_SYNC",
12534: #endif
12535: #ifdef SQLITE_OMIT_ALTERTABLE
12536:   "OMIT_ALTERTABLE",
12537: #endif
12538: #ifdef SQLITE_OMIT_ANALYZE
12539:   "OMIT_ANALYZE",
12540: #endif
12541: #ifdef SQLITE_OMIT_ATTACH
12542:   "OMIT_ATTACH",
12543: #endif
12544: #ifdef SQLITE_OMIT_AUTHORIZATION
12545:   "OMIT_AUTHORIZATION",
12546: #endif
12547: #ifdef SQLITE_OMIT_AUTOINCREMENT
12548:   "OMIT_AUTOINCREMENT",
12549: #endif
12550: #ifdef SQLITE_OMIT_AUTOINIT
12551:   "OMIT_AUTOINIT",
12552: #endif
12553: #ifdef SQLITE_OMIT_AUTOMATIC_INDEX
12554:   "OMIT_AUTOMATIC_INDEX",
12555: #endif
12556: #ifdef SQLITE_OMIT_AUTORESET
12557:   "OMIT_AUTORESET",
12558: #endif
12559: #ifdef SQLITE_OMIT_AUTOVACUUM
12560:   "OMIT_AUTOVACUUM",
12561: #endif
12562: #ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION
12563:   "OMIT_BETWEEN_OPTIMIZATION",
12564: #endif
12565: #ifdef SQLITE_OMIT_BLOB_LITERAL
12566:   "OMIT_BLOB_LITERAL",
12567: #endif
12568: #ifdef SQLITE_OMIT_BTREECOUNT
12569:   "OMIT_BTREECOUNT",
12570: #endif
12571: #ifdef SQLITE_OMIT_BUILTIN_TEST
12572:   "OMIT_BUILTIN_TEST",
12573: #endif
12574: #ifdef SQLITE_OMIT_CAST
12575:   "OMIT_CAST",
12576: #endif
12577: #ifdef SQLITE_OMIT_CHECK
12578:   "OMIT_CHECK",
12579: #endif
12580: /* // redundant
12581: ** #ifdef SQLITE_OMIT_COMPILEOPTION_DIAGS
12582: **   "OMIT_COMPILEOPTION_DIAGS",
12583: ** #endif
12584: */
12585: #ifdef SQLITE_OMIT_COMPLETE
12586:   "OMIT_COMPLETE",
12587: #endif
12588: #ifdef SQLITE_OMIT_COMPOUND_SELECT
12589:   "OMIT_COMPOUND_SELECT",
12590: #endif
12591: #ifdef SQLITE_OMIT_DATETIME_FUNCS
12592:   "OMIT_DATETIME_FUNCS",
12593: #endif
12594: #ifdef SQLITE_OMIT_DECLTYPE
12595:   "OMIT_DECLTYPE",
12596: #endif
12597: #ifdef SQLITE_OMIT_DEPRECATED
12598:   "OMIT_DEPRECATED",
12599: #endif
12600: #ifdef SQLITE_OMIT_DISKIO
12601:   "OMIT_DISKIO",
12602: #endif
12603: #ifdef SQLITE_OMIT_EXPLAIN
12604:   "OMIT_EXPLAIN",
12605: #endif
12606: #ifdef SQLITE_OMIT_FLAG_PRAGMAS
12607:   "OMIT_FLAG_PRAGMAS",
12608: #endif
12609: #ifdef SQLITE_OMIT_FLOATING_POINT
12610:   "OMIT_FLOATING_POINT",
12611: #endif
12612: #ifdef SQLITE_OMIT_FOREIGN_KEY
12613:   "OMIT_FOREIGN_KEY",
12614: #endif
12615: #ifdef SQLITE_OMIT_GET_TABLE
12616:   "OMIT_GET_TABLE",
12617: #endif
12618: #ifdef SQLITE_OMIT_INCRBLOB
12619:   "OMIT_INCRBLOB",
12620: #endif
12621: #ifdef SQLITE_OMIT_INTEGRITY_CHECK
12622:   "OMIT_INTEGRITY_CHECK",
12623: #endif
12624: #ifdef SQLITE_OMIT_LIKE_OPTIMIZATION
12625:   "OMIT_LIKE_OPTIMIZATION",
12626: #endif
12627: #ifdef SQLITE_OMIT_LOAD_EXTENSION
12628:   "OMIT_LOAD_EXTENSION",
12629: #endif
12630: #ifdef SQLITE_OMIT_LOCALTIME
12631:   "OMIT_LOCALTIME",
12632: #endif
12633: #ifdef SQLITE_OMIT_LOOKASIDE
12634:   "OMIT_LOOKASIDE",
12635: #endif
12636: #ifdef SQLITE_OMIT_MEMORYDB
12637:   "OMIT_MEMORYDB",
12638: #endif
12639: #ifdef SQLITE_OMIT_MERGE_SORT
12640:   "OMIT_MERGE_SORT",
12641: #endif
12642: #ifdef SQLITE_OMIT_OR_OPTIMIZATION
12643:   "OMIT_OR_OPTIMIZATION",
12644: #endif
12645: #ifdef SQLITE_OMIT_PAGER_PRAGMAS
12646:   "OMIT_PAGER_PRAGMAS",
12647: #endif
12648: #ifdef SQLITE_OMIT_PRAGMA
12649:   "OMIT_PRAGMA",
12650: #endif
12651: #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
12652:   "OMIT_PROGRESS_CALLBACK",
12653: #endif
12654: #ifdef SQLITE_OMIT_QUICKBALANCE
12655:   "OMIT_QUICKBALANCE",
12656: #endif
12657: #ifdef SQLITE_OMIT_REINDEX
12658:   "OMIT_REINDEX",
12659: #endif
12660: #ifdef SQLITE_OMIT_SCHEMA_PRAGMAS
12661:   "OMIT_SCHEMA_PRAGMAS",
12662: #endif
12663: #ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
12664:   "OMIT_SCHEMA_VERSION_PRAGMAS",
12665: #endif
12666: #ifdef SQLITE_OMIT_SHARED_CACHE
12667:   "OMIT_SHARED_CACHE",
12668: #endif
12669: #ifdef SQLITE_OMIT_SUBQUERY
12670:   "OMIT_SUBQUERY",
12671: #endif
12672: #ifdef SQLITE_OMIT_TCL_VARIABLE
12673:   "OMIT_TCL_VARIABLE",
12674: #endif
12675: #ifdef SQLITE_OMIT_TEMPDB
12676:   "OMIT_TEMPDB",
12677: #endif
12678: #ifdef SQLITE_OMIT_TRACE
12679:   "OMIT_TRACE",
12680: #endif
12681: #ifdef SQLITE_OMIT_TRIGGER
12682:   "OMIT_TRIGGER",
12683: #endif
12684: #ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
12685:   "OMIT_TRUNCATE_OPTIMIZATION",
12686: #endif
12687: #ifdef SQLITE_OMIT_UTF16
12688:   "OMIT_UTF16",
12689: #endif
12690: #ifdef SQLITE_OMIT_VACUUM
12691:   "OMIT_VACUUM",
12692: #endif
12693: #ifdef SQLITE_OMIT_VIEW
12694:   "OMIT_VIEW",
12695: #endif
12696: #ifdef SQLITE_OMIT_VIRTUALTABLE
12697:   "OMIT_VIRTUALTABLE",
12698: #endif
12699: #ifdef SQLITE_OMIT_WAL
12700:   "OMIT_WAL",
12701: #endif
12702: #ifdef SQLITE_OMIT_WSD
12703:   "OMIT_WSD",
12704: #endif
12705: #ifdef SQLITE_OMIT_XFER_OPT
12706:   "OMIT_XFER_OPT",
12707: #endif
12708: #ifdef SQLITE_PERFORMANCE_TRACE
12709:   "PERFORMANCE_TRACE",
12710: #endif
12711: #ifdef SQLITE_PROXY_DEBUG
12712:   "PROXY_DEBUG",
12713: #endif
12714: #ifdef SQLITE_SECURE_DELETE
12715:   "SECURE_DELETE",
12716: #endif
12717: #ifdef SQLITE_SMALL_STACK
12718:   "SMALL_STACK",
12719: #endif
12720: #ifdef SQLITE_SOUNDEX
12721:   "SOUNDEX",
12722: #endif
12723: #ifdef SQLITE_TCL
12724:   "TCL",
12725: #endif
12726: #ifdef SQLITE_TEMP_STORE
12727:   "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE),
12728: #endif
12729: #ifdef SQLITE_TEST
12730:   "TEST",
12731: #endif
12732: #ifdef SQLITE_THREADSAFE
12733:   "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE),
12734: #endif
12735: #ifdef SQLITE_USE_ALLOCA
12736:   "USE_ALLOCA",
12737: #endif
12738: #ifdef SQLITE_ZERO_MALLOC
12739:   "ZERO_MALLOC"
12740: #endif
12741: };
12742: 
12743: /*
12744: ** Given the name of a compile-time option, return true if that option
12745: ** was used and false if not.
12746: **
12747: ** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix
12748: ** is not required for a match.
12749: */
12750: SQLITE_API int sqlite3_compileoption_used(const char *zOptName){
12751:   int i, n;
12752:   if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7;
12753:   n = sqlite3Strlen30(zOptName);
12754: 
12755:   /* Since ArraySize(azCompileOpt) is normally in single digits, a
12756:   ** linear search is adequate.  No need for a binary search. */
12757:   for(i=0; i<ArraySize(azCompileOpt); i++){
12758:     if(   (sqlite3StrNICmp(zOptName, azCompileOpt[i], n)==0)
12759:        && ( (azCompileOpt[i][n]==0) || (azCompileOpt[i][n]=='=') ) ) return 1;
12760:   }
12761:   return 0;
12762: }
12763: 
12764: /*
12765: ** Return the N-th compile-time option string.  If N is out of range,
12766: ** return a NULL pointer.
12767: */
12768: SQLITE_API const char *sqlite3_compileoption_get(int N){
12769:   if( N>=0 && N<ArraySize(azCompileOpt) ){
12770:     return azCompileOpt[N];
12771:   }
12772:   return 0;
12773: }
12774: 
12775: #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
12776: 
12777: /************** End of ctime.c ***********************************************/
12778: /************** Begin file status.c ******************************************/
12779: /*
12780: ** 2008 June 18
12781: **
12782: ** The author disclaims copyright to this source code.  In place of
12783: ** a legal notice, here is a blessing:
12784: **
12785: **    May you do good and not evil.
12786: **    May you find forgiveness for yourself and forgive others.
12787: **    May you share freely, never taking more than you give.
12788: **
12789: *************************************************************************
12790: **
12791: ** This module implements the sqlite3_status() interface and related
12792: ** functionality.
12793: */
12794: /************** Include vdbeInt.h in the middle of status.c ******************/
12795: /************** Begin file vdbeInt.h *****************************************/
12796: /*
12797: ** 2003 September 6
12798: **
12799: ** The author disclaims copyright to this source code.  In place of
12800: ** a legal notice, here is a blessing:
12801: **
12802: **    May you do good and not evil.
12803: **    May you find forgiveness for yourself and forgive others.
12804: **    May you share freely, never taking more than you give.
12805: **
12806: *************************************************************************
12807: ** This is the header file for information that is private to the
12808: ** VDBE.  This information used to all be at the top of the single
12809: ** source code file "vdbe.c".  When that file became too big (over
12810: ** 6000 lines long) it was split up into several smaller files and
12811: ** this header information was factored out.
12812: */
12813: #ifndef _VDBEINT_H_
12814: #define _VDBEINT_H_
12815: 
12816: /*
12817: ** SQL is translated into a sequence of instructions to be
12818: ** executed by a virtual machine.  Each instruction is an instance
12819: ** of the following structure.
12820: */
12821: typedef struct VdbeOp Op;
12822: 
12823: /*
12824: ** Boolean values
12825: */
12826: typedef unsigned char Bool;
12827: 
12828: /* Opaque type used by code in vdbesort.c */
12829: typedef struct VdbeSorter VdbeSorter;
12830: 
12831: /* Opaque type used by the explainer */
12832: typedef struct Explain Explain;
12833: 
12834: /*
12835: ** A cursor is a pointer into a single BTree within a database file.
12836: ** The cursor can seek to a BTree entry with a particular key, or
12837: ** loop over all entries of the Btree.  You can also insert new BTree
12838: ** entries or retrieve the key or data from the entry that the cursor
12839: ** is currently pointing to.
12840: ** 
12841: ** Every cursor that the virtual machine has open is represented by an
12842: ** instance of the following structure.
12843: */
12844: struct VdbeCursor {
12845:   BtCursor *pCursor;    /* The cursor structure of the backend */
12846:   Btree *pBt;           /* Separate file holding temporary table */
12847:   KeyInfo *pKeyInfo;    /* Info about index keys needed by index cursors */
12848:   int iDb;              /* Index of cursor database in db->aDb[] (or -1) */
12849:   int pseudoTableReg;   /* Register holding pseudotable content. */
12850:   int nField;           /* Number of fields in the header */
12851:   Bool zeroed;          /* True if zeroed out and ready for reuse */
12852:   Bool rowidIsValid;    /* True if lastRowid is valid */
12853:   Bool atFirst;         /* True if pointing to first entry */
12854:   Bool useRandomRowid;  /* Generate new record numbers semi-randomly */
12855:   Bool nullRow;         /* True if pointing to a row with no data */
12856:   Bool deferredMoveto;  /* A call to sqlite3BtreeMoveto() is needed */
12857:   Bool isTable;         /* True if a table requiring integer keys */
12858:   Bool isIndex;         /* True if an index containing keys only - no data */
12859:   Bool isOrdered;       /* True if the underlying table is BTREE_UNORDERED */
12860:   Bool isSorter;        /* True if a new-style sorter */
12861:   sqlite3_vtab_cursor *pVtabCursor;  /* The cursor for a virtual table */
12862:   const sqlite3_module *pModule;     /* Module for cursor pVtabCursor */
12863:   i64 seqCount;         /* Sequence counter */
12864:   i64 movetoTarget;     /* Argument to the deferred sqlite3BtreeMoveto() */
12865:   i64 lastRowid;        /* Last rowid from a Next or NextIdx operation */
12866:   VdbeSorter *pSorter;  /* Sorter object for OP_SorterOpen cursors */
12867: 
12868:   /* Result of last sqlite3BtreeMoveto() done by an OP_NotExists or 
12869:   ** OP_IsUnique opcode on this cursor. */
12870:   int seekResult;
12871: 
12872:   /* Cached information about the header for the data record that the
12873:   ** cursor is currently pointing to.  Only valid if cacheStatus matches
12874:   ** Vdbe.cacheCtr.  Vdbe.cacheCtr will never take on the value of
12875:   ** CACHE_STALE and so setting cacheStatus=CACHE_STALE guarantees that
12876:   ** the cache is out of date.
12877:   **
12878:   ** aRow might point to (ephemeral) data for the current row, or it might
12879:   ** be NULL.
12880:   */
12881:   u32 cacheStatus;      /* Cache is valid if this matches Vdbe.cacheCtr */
12882:   int payloadSize;      /* Total number of bytes in the record */
12883:   u32 *aType;           /* Type values for all entries in the record */
12884:   u32 *aOffset;         /* Cached offsets to the start of each columns data */
12885:   u8 *aRow;             /* Data for the current row, if all on one page */
12886: };
12887: typedef struct VdbeCursor VdbeCursor;
12888: 
12889: /*
12890: ** When a sub-program is executed (OP_Program), a structure of this type
12891: ** is allocated to store the current value of the program counter, as
12892: ** well as the current memory cell array and various other frame specific
12893: ** values stored in the Vdbe struct. When the sub-program is finished, 
12894: ** these values are copied back to the Vdbe from the VdbeFrame structure,
12895: ** restoring the state of the VM to as it was before the sub-program
12896: ** began executing.
12897: **
12898: ** The memory for a VdbeFrame object is allocated and managed by a memory
12899: ** cell in the parent (calling) frame. When the memory cell is deleted or
12900: ** overwritten, the VdbeFrame object is not freed immediately. Instead, it
12901: ** is linked into the Vdbe.pDelFrame list. The contents of the Vdbe.pDelFrame
12902: ** list is deleted when the VM is reset in VdbeHalt(). The reason for doing
12903: ** this instead of deleting the VdbeFrame immediately is to avoid recursive
12904: ** calls to sqlite3VdbeMemRelease() when the memory cells belonging to the
12905: ** child frame are released.
12906: **
12907: ** The currently executing frame is stored in Vdbe.pFrame. Vdbe.pFrame is
12908: ** set to NULL if the currently executing frame is the main program.
12909: */
12910: typedef struct VdbeFrame VdbeFrame;
12911: struct VdbeFrame {
12912:   Vdbe *v;                /* VM this frame belongs to */
12913:   int pc;                 /* Program Counter in parent (calling) frame */
12914:   Op *aOp;                /* Program instructions for parent frame */
12915:   int nOp;                /* Size of aOp array */
12916:   Mem *aMem;              /* Array of memory cells for parent frame */
12917:   int nMem;               /* Number of entries in aMem */
12918:   u8 *aOnceFlag;          /* Array of OP_Once flags for parent frame */
12919:   int nOnceFlag;          /* Number of entries in aOnceFlag */
12920:   VdbeCursor **apCsr;     /* Array of Vdbe cursors for parent frame */
12921:   u16 nCursor;            /* Number of entries in apCsr */
12922:   void *token;            /* Copy of SubProgram.token */
12923:   int nChildMem;          /* Number of memory cells for child frame */
12924:   int nChildCsr;          /* Number of cursors for child frame */
12925:   i64 lastRowid;          /* Last insert rowid (sqlite3.lastRowid) */
12926:   int nChange;            /* Statement changes (Vdbe.nChanges)     */
12927:   VdbeFrame *pParent;     /* Parent of this frame, or NULL if parent is main */
12928: };
12929: 
12930: #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
12931: 
12932: /*
12933: ** A value for VdbeCursor.cacheValid that means the cache is always invalid.
12934: */
12935: #define CACHE_STALE 0
12936: 
12937: /*
12938: ** Internally, the vdbe manipulates nearly all SQL values as Mem
12939: ** structures. Each Mem struct may cache multiple representations (string,
12940: ** integer etc.) of the same value.
12941: */
12942: struct Mem {
12943:   sqlite3 *db;        /* The associated database connection */
12944:   char *z;            /* String or BLOB value */
12945:   double r;           /* Real value */
12946:   union {
12947:     i64 i;              /* Integer value used when MEM_Int is set in flags */
12948:     int nZero;          /* Used when bit MEM_Zero is set in flags */
12949:     FuncDef *pDef;      /* Used only when flags==MEM_Agg */
12950:     RowSet *pRowSet;    /* Used only when flags==MEM_RowSet */
12951:     VdbeFrame *pFrame;  /* Used when flags==MEM_Frame */
12952:   } u;
12953:   int n;              /* Number of characters in string value, excluding '\0' */
12954:   u16 flags;          /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
12955:   u8  type;           /* One of SQLITE_NULL, SQLITE_TEXT, SQLITE_INTEGER, etc */
12956:   u8  enc;            /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
12957: #ifdef SQLITE_DEBUG
12958:   Mem *pScopyFrom;    /* This Mem is a shallow copy of pScopyFrom */
12959:   void *pFiller;      /* So that sizeof(Mem) is a multiple of 8 */
12960: #endif
12961:   void (*xDel)(void *);  /* If not null, call this function to delete Mem.z */
12962:   char *zMalloc;      /* Dynamic buffer allocated by sqlite3_malloc() */
12963: };
12964: 
12965: /* One or more of the following flags are set to indicate the validOK
12966: ** representations of the value stored in the Mem struct.
12967: **
12968: ** If the MEM_Null flag is set, then the value is an SQL NULL value.
12969: ** No other flags may be set in this case.
12970: **
12971: ** If the MEM_Str flag is set then Mem.z points at a string representation.
12972: ** Usually this is encoded in the same unicode encoding as the main
12973: ** database (see below for exceptions). If the MEM_Term flag is also
12974: ** set, then the string is nul terminated. The MEM_Int and MEM_Real 
12975: ** flags may coexist with the MEM_Str flag.
12976: */
12977: #define MEM_Null      0x0001   /* Value is NULL */
12978: #define MEM_Str       0x0002   /* Value is a string */
12979: #define MEM_Int       0x0004   /* Value is an integer */
12980: #define MEM_Real      0x0008   /* Value is a real number */
12981: #define MEM_Blob      0x0010   /* Value is a BLOB */
12982: #define MEM_RowSet    0x0020   /* Value is a RowSet object */
12983: #define MEM_Frame     0x0040   /* Value is a VdbeFrame object */
12984: #define MEM_Invalid   0x0080   /* Value is undefined */
12985: #define MEM_TypeMask  0x00ff   /* Mask of type bits */
12986: 
12987: /* Whenever Mem contains a valid string or blob representation, one of
12988: ** the following flags must be set to determine the memory management
12989: ** policy for Mem.z.  The MEM_Term flag tells us whether or not the
12990: ** string is \000 or \u0000 terminated
12991: */
12992: #define MEM_Term      0x0200   /* String rep is nul terminated */
12993: #define MEM_Dyn       0x0400   /* Need to call sqliteFree() on Mem.z */
12994: #define MEM_Static    0x0800   /* Mem.z points to a static string */
12995: #define MEM_Ephem     0x1000   /* Mem.z points to an ephemeral string */
12996: #define MEM_Agg       0x2000   /* Mem.z points to an agg function context */
12997: #define MEM_Zero      0x4000   /* Mem.i contains count of 0s appended to blob */
12998: #ifdef SQLITE_OMIT_INCRBLOB
12999:   #undef MEM_Zero
13000:   #define MEM_Zero 0x0000
13001: #endif
13002: 
13003: /*
13004: ** Clear any existing type flags from a Mem and replace them with f
13005: */
13006: #define MemSetTypeFlag(p, f) \
13007:    ((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f)
13008: 
13009: /*
13010: ** Return true if a memory cell is not marked as invalid.  This macro
13011: ** is for use inside assert() statements only.
13012: */
13013: #ifdef SQLITE_DEBUG
13014: #define memIsValid(M)  ((M)->flags & MEM_Invalid)==0
13015: #endif
13016: 
13017: 
13018: /* A VdbeFunc is just a FuncDef (defined in sqliteInt.h) that contains
13019: ** additional information about auxiliary information bound to arguments
13020: ** of the function.  This is used to implement the sqlite3_get_auxdata()
13021: ** and sqlite3_set_auxdata() APIs.  The "auxdata" is some auxiliary data
13022: ** that can be associated with a constant argument to a function.  This
13023: ** allows functions such as "regexp" to compile their constant regular
13024: ** expression argument once and reused the compiled code for multiple
13025: ** invocations.
13026: */
13027: struct VdbeFunc {
13028:   FuncDef *pFunc;               /* The definition of the function */
13029:   int nAux;                     /* Number of entries allocated for apAux[] */
13030:   struct AuxData {
13031:     void *pAux;                   /* Aux data for the i-th argument */
13032:     void (*xDelete)(void *);      /* Destructor for the aux data */
13033:   } apAux[1];                   /* One slot for each function argument */
13034: };
13035: 
13036: /*
13037: ** The "context" argument for a installable function.  A pointer to an
13038: ** instance of this structure is the first argument to the routines used
13039: ** implement the SQL functions.
13040: **
13041: ** There is a typedef for this structure in sqlite.h.  So all routines,
13042: ** even the public interface to SQLite, can use a pointer to this structure.
13043: ** But this file is the only place where the internal details of this
13044: ** structure are known.
13045: **
13046: ** This structure is defined inside of vdbeInt.h because it uses substructures
13047: ** (Mem) which are only defined there.
13048: */
13049: struct sqlite3_context {
13050:   FuncDef *pFunc;       /* Pointer to function information.  MUST BE FIRST */
13051:   VdbeFunc *pVdbeFunc;  /* Auxilary data, if created. */
13052:   Mem s;                /* The return value is stored here */
13053:   Mem *pMem;            /* Memory cell used to store aggregate context */
13054:   int isError;          /* Error code returned by the function. */
13055:   CollSeq *pColl;       /* Collating sequence */
13056: };
13057: 
13058: /*
13059: ** An Explain object accumulates indented output which is helpful
13060: ** in describing recursive data structures.
13061: */
13062: struct Explain {
13063:   Vdbe *pVdbe;       /* Attach the explanation to this Vdbe */
13064:   StrAccum str;      /* The string being accumulated */
13065:   int nIndent;       /* Number of elements in aIndent */
13066:   u16 aIndent[100];  /* Levels of indentation */
13067:   char zBase[100];   /* Initial space */
13068: };
13069: 
13070: /*
13071: ** An instance of the virtual machine.  This structure contains the complete
13072: ** state of the virtual machine.
13073: **
13074: ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
13075: ** is really a pointer to an instance of this structure.
13076: **
13077: ** The Vdbe.inVtabMethod variable is set to non-zero for the duration of
13078: ** any virtual table method invocations made by the vdbe program. It is
13079: ** set to 2 for xDestroy method calls and 1 for all other methods. This
13080: ** variable is used for two purposes: to allow xDestroy methods to execute
13081: ** "DROP TABLE" statements and to prevent some nasty side effects of
13082: ** malloc failure when SQLite is invoked recursively by a virtual table 
13083: ** method function.
13084: */
13085: struct Vdbe {
13086:   sqlite3 *db;            /* The database connection that owns this statement */
13087:   Op *aOp;                /* Space to hold the virtual machine's program */
13088:   Mem *aMem;              /* The memory locations */
13089:   Mem **apArg;            /* Arguments to currently executing user function */
13090:   Mem *aColName;          /* Column names to return */
13091:   Mem *pResultSet;        /* Pointer to an array of results */
13092:   int nMem;               /* Number of memory locations currently allocated */
13093:   int nOp;                /* Number of instructions in the program */
13094:   int nOpAlloc;           /* Number of slots allocated for aOp[] */
13095:   int nLabel;             /* Number of labels used */
13096:   int nLabelAlloc;        /* Number of slots allocated in aLabel[] */
13097:   int *aLabel;            /* Space to hold the labels */
13098:   u16 nResColumn;         /* Number of columns in one row of the result set */
13099:   u16 nCursor;            /* Number of slots in apCsr[] */
13100:   u32 magic;              /* Magic number for sanity checking */
13101:   char *zErrMsg;          /* Error message written here */
13102:   Vdbe *pPrev,*pNext;     /* Linked list of VDBEs with the same Vdbe.db */
13103:   VdbeCursor **apCsr;     /* One element of this array for each open cursor */
13104:   Mem *aVar;              /* Values for the OP_Variable opcode. */
13105:   char **azVar;           /* Name of variables */
13106:   ynVar nVar;             /* Number of entries in aVar[] */
13107:   ynVar nzVar;            /* Number of entries in azVar[] */
13108:   u32 cacheCtr;           /* VdbeCursor row cache generation counter */
13109:   int pc;                 /* The program counter */
13110:   int rc;                 /* Value to return */
13111:   u8 errorAction;         /* Recovery action to do in case of an error */
13112:   u8 explain;             /* True if EXPLAIN present on SQL command */
13113:   u8 changeCntOn;         /* True to update the change-counter */
13114:   u8 expired;             /* True if the VM needs to be recompiled */
13115:   u8 runOnlyOnce;         /* Automatically expire on reset */
13116:   u8 minWriteFileFormat;  /* Minimum file format for writable database files */
13117:   u8 inVtabMethod;        /* See comments above */
13118:   u8 usesStmtJournal;     /* True if uses a statement journal */
13119:   u8 readOnly;            /* True for read-only statements */
13120:   u8 isPrepareV2;         /* True if prepared with prepare_v2() */
13121:   int nChange;            /* Number of db changes made since last reset */
13122:   yDbMask btreeMask;      /* Bitmask of db->aDb[] entries referenced */
13123:   yDbMask lockMask;       /* Subset of btreeMask that requires a lock */
13124:   int iStatement;         /* Statement number (or 0 if has not opened stmt) */
13125:   int aCounter[3];        /* Counters used by sqlite3_stmt_status() */
13126: #ifndef SQLITE_OMIT_TRACE
13127:   i64 startTime;          /* Time when query started - used for profiling */
13128: #endif
13129:   i64 nFkConstraint;      /* Number of imm. FK constraints this VM */
13130:   i64 nStmtDefCons;       /* Number of def. constraints when stmt started */
13131:   char *zSql;             /* Text of the SQL statement that generated this */
13132:   void *pFree;            /* Free this when deleting the vdbe */
13133: #ifdef SQLITE_DEBUG
13134:   FILE *trace;            /* Write an execution trace here, if not NULL */
13135: #endif
13136: #ifdef SQLITE_ENABLE_TREE_EXPLAIN
13137:   Explain *pExplain;      /* The explainer */
13138:   char *zExplain;         /* Explanation of data structures */
13139: #endif
13140:   VdbeFrame *pFrame;      /* Parent frame */
13141:   VdbeFrame *pDelFrame;   /* List of frame objects to free on VM reset */
13142:   int nFrame;             /* Number of frames in pFrame list */
13143:   u32 expmask;            /* Binding to these vars invalidates VM */
13144:   SubProgram *pProgram;   /* Linked list of all sub-programs used by VM */
13145:   int nOnceFlag;          /* Size of array aOnceFlag[] */
13146:   u8 *aOnceFlag;          /* Flags for OP_Once */
13147: };
13148: 
13149: /*
13150: ** The following are allowed values for Vdbe.magic
13151: */
13152: #define VDBE_MAGIC_INIT     0x26bceaa5    /* Building a VDBE program */
13153: #define VDBE_MAGIC_RUN      0xbdf20da3    /* VDBE is ready to execute */
13154: #define VDBE_MAGIC_HALT     0x519c2973    /* VDBE has completed execution */
13155: #define VDBE_MAGIC_DEAD     0xb606c3c8    /* The VDBE has been deallocated */
13156: 
13157: /*
13158: ** Function prototypes
13159: */
13160: SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*);
13161: void sqliteVdbePopStack(Vdbe*,int);
13162: SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor*);
13163: #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
13164: SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, Op*);
13165: #endif
13166: SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32);
13167: SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem*, int);
13168: SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(unsigned char*, int, Mem*, int);
13169: SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*);
13170: SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc*, int);
13171: 
13172: int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *);
13173: SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(VdbeCursor*,UnpackedRecord*,int*);
13174: SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3*, BtCursor *, i64 *);
13175: SQLITE_PRIVATE int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*);
13176: SQLITE_PRIVATE int sqlite3VdbeExec(Vdbe*);
13177: SQLITE_PRIVATE int sqlite3VdbeList(Vdbe*);
13178: SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe*);
13179: SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *, int);
13180: SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem*);
13181: SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem*, const Mem*);
13182: SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem*, const Mem*, int);
13183: SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem*, Mem*);
13184: SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem*);
13185: SQLITE_PRIVATE int sqlite3VdbeMemSetStr(Mem*, const char*, int, u8, void(*)(void*));
13186: SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem*, i64);
13187: #ifdef SQLITE_OMIT_FLOATING_POINT
13188: # define sqlite3VdbeMemSetDouble sqlite3VdbeMemSetInt64
13189: #else
13190: SQLITE_PRIVATE   void sqlite3VdbeMemSetDouble(Mem*, double);
13191: #endif
13192: SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem*);
13193: SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem*,int);
13194: SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem*);
13195: SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem*);
13196: SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, int);
13197: SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem*);
13198: SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem*);
13199: SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem*);
13200: SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem*);
13201: SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*);
13202: SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*);
13203: SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,int,int,int,Mem*);
13204: SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p);
13205: SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p);
13206: #define VdbeMemRelease(X)  \
13207:   if((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame)) \
13208:     sqlite3VdbeMemReleaseExternal(X);
13209: SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem*, FuncDef*);
13210: SQLITE_PRIVATE const char *sqlite3OpcodeName(int);
13211: SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve);
13212: SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *, int);
13213: SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame*);
13214: SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *);
13215: SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem);
13216: SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p);
13217: 
13218: #ifdef SQLITE_OMIT_MERGE_SORT
13219: # define sqlite3VdbeSorterInit(Y,Z)      SQLITE_OK
13220: # define sqlite3VdbeSorterWrite(X,Y,Z)   SQLITE_OK
13221: # define sqlite3VdbeSorterClose(Y,Z)
13222: # define sqlite3VdbeSorterRowkey(Y,Z)    SQLITE_OK
13223: # define sqlite3VdbeSorterRewind(X,Y,Z)  SQLITE_OK
13224: # define sqlite3VdbeSorterNext(X,Y,Z)    SQLITE_OK
13225: # define sqlite3VdbeSorterCompare(X,Y,Z) SQLITE_OK
13226: #else
13227: SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *, VdbeCursor *);
13228: SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *, VdbeCursor *);
13229: SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(VdbeCursor *, Mem *);
13230: SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *, VdbeCursor *, int *);
13231: SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *, VdbeCursor *, int *);
13232: SQLITE_PRIVATE int sqlite3VdbeSorterWrite(sqlite3 *, VdbeCursor *, Mem *);
13233: SQLITE_PRIVATE int sqlite3VdbeSorterCompare(VdbeCursor *, Mem *, int *);
13234: #endif
13235: 
13236: #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
13237: SQLITE_PRIVATE   void sqlite3VdbeEnter(Vdbe*);
13238: SQLITE_PRIVATE   void sqlite3VdbeLeave(Vdbe*);
13239: #else
13240: # define sqlite3VdbeEnter(X)
13241: # define sqlite3VdbeLeave(X)
13242: #endif
13243: 
13244: #ifdef SQLITE_DEBUG
13245: SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe*,Mem*);
13246: #endif
13247: 
13248: #ifndef SQLITE_OMIT_FOREIGN_KEY
13249: SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *, int);
13250: #else
13251: # define sqlite3VdbeCheckFk(p,i) 0
13252: #endif
13253: 
13254: SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem*, u8);
13255: #ifdef SQLITE_DEBUG
13256: SQLITE_PRIVATE   void sqlite3VdbePrintSql(Vdbe*);
13257: SQLITE_PRIVATE   void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf);
13258: #endif
13259: SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem);
13260: 
13261: #ifndef SQLITE_OMIT_INCRBLOB
13262: SQLITE_PRIVATE   int sqlite3VdbeMemExpandBlob(Mem *);
13263:   #define ExpandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0)
13264: #else
13265:   #define sqlite3VdbeMemExpandBlob(x) SQLITE_OK
13266:   #define ExpandBlob(P) SQLITE_OK
13267: #endif
13268: 
13269: #endif /* !defined(_VDBEINT_H_) */
13270: 
13271: /************** End of vdbeInt.h *********************************************/
13272: /************** Continuing where we left off in status.c *********************/
13273: 
13274: /*
13275: ** Variables in which to record status information.
13276: */
13277: typedef struct sqlite3StatType sqlite3StatType;
13278: static SQLITE_WSD struct sqlite3StatType {
13279:   int nowValue[10];         /* Current value */
13280:   int mxValue[10];          /* Maximum value */
13281: } sqlite3Stat = { {0,}, {0,} };
13282: 
13283: 
13284: /* The "wsdStat" macro will resolve to the status information
13285: ** state vector.  If writable static data is unsupported on the target,
13286: ** we have to locate the state vector at run-time.  In the more common
13287: ** case where writable static data is supported, wsdStat can refer directly
13288: ** to the "sqlite3Stat" state vector declared above.
13289: */
13290: #ifdef SQLITE_OMIT_WSD
13291: # define wsdStatInit  sqlite3StatType *x = &GLOBAL(sqlite3StatType,sqlite3Stat)
13292: # define wsdStat x[0]
13293: #else
13294: # define wsdStatInit
13295: # define wsdStat sqlite3Stat
13296: #endif
13297: 
13298: /*
13299: ** Return the current value of a status parameter.
13300: */
13301: SQLITE_PRIVATE int sqlite3StatusValue(int op){
13302:   wsdStatInit;
13303:   assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
13304:   return wsdStat.nowValue[op];
13305: }
13306: 
13307: /*
13308: ** Add N to the value of a status record.  It is assumed that the
13309: ** caller holds appropriate locks.
13310: */
13311: SQLITE_PRIVATE void sqlite3StatusAdd(int op, int N){
13312:   wsdStatInit;
13313:   assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
13314:   wsdStat.nowValue[op] += N;
13315:   if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){
13316:     wsdStat.mxValue[op] = wsdStat.nowValue[op];
13317:   }
13318: }
13319: 
13320: /*
13321: ** Set the value of a status to X.
13322: */
13323: SQLITE_PRIVATE void sqlite3StatusSet(int op, int X){
13324:   wsdStatInit;
13325:   assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
13326:   wsdStat.nowValue[op] = X;
13327:   if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){
13328:     wsdStat.mxValue[op] = wsdStat.nowValue[op];
13329:   }
13330: }
13331: 
13332: /*
13333: ** Query status information.
13334: **
13335: ** This implementation assumes that reading or writing an aligned
13336: ** 32-bit integer is an atomic operation.  If that assumption is not true,
13337: ** then this routine is not threadsafe.
13338: */
13339: SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){
13340:   wsdStatInit;
13341:   if( op<0 || op>=ArraySize(wsdStat.nowValue) ){
13342:     return SQLITE_MISUSE_BKPT;
13343:   }
13344:   *pCurrent = wsdStat.nowValue[op];
13345:   *pHighwater = wsdStat.mxValue[op];
13346:   if( resetFlag ){
13347:     wsdStat.mxValue[op] = wsdStat.nowValue[op];
13348:   }
13349:   return SQLITE_OK;
13350: }
13351: 
13352: /*
13353: ** Query status information for a single database connection
13354: */
13355: SQLITE_API int sqlite3_db_status(
13356:   sqlite3 *db,          /* The database connection whose status is desired */
13357:   int op,               /* Status verb */
13358:   int *pCurrent,        /* Write current value here */
13359:   int *pHighwater,      /* Write high-water mark here */
13360:   int resetFlag         /* Reset high-water mark if true */
13361: ){
13362:   int rc = SQLITE_OK;   /* Return code */
13363:   sqlite3_mutex_enter(db->mutex);
13364:   switch( op ){
13365:     case SQLITE_DBSTATUS_LOOKASIDE_USED: {
13366:       *pCurrent = db->lookaside.nOut;
13367:       *pHighwater = db->lookaside.mxOut;
13368:       if( resetFlag ){
13369:         db->lookaside.mxOut = db->lookaside.nOut;
13370:       }
13371:       break;
13372:     }
13373: 
13374:     case SQLITE_DBSTATUS_LOOKASIDE_HIT:
13375:     case SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE:
13376:     case SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: {
13377:       testcase( op==SQLITE_DBSTATUS_LOOKASIDE_HIT );
13378:       testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE );
13379:       testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL );
13380:       assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)>=0 );
13381:       assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)<3 );
13382:       *pCurrent = 0;
13383:       *pHighwater = db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT];
13384:       if( resetFlag ){
13385:         db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT] = 0;
13386:       }
13387:       break;
13388:     }
13389: 
13390:     /* 
13391:     ** Return an approximation for the amount of memory currently used
13392:     ** by all pagers associated with the given database connection.  The
13393:     ** highwater mark is meaningless and is returned as zero.
13394:     */
13395:     case SQLITE_DBSTATUS_CACHE_USED: {
13396:       int totalUsed = 0;
13397:       int i;
13398:       sqlite3BtreeEnterAll(db);
13399:       for(i=0; i<db->nDb; i++){
13400:         Btree *pBt = db->aDb[i].pBt;
13401:         if( pBt ){
13402:           Pager *pPager = sqlite3BtreePager(pBt);
13403:           totalUsed += sqlite3PagerMemUsed(pPager);
13404:         }
13405:       }
13406:       sqlite3BtreeLeaveAll(db);
13407:       *pCurrent = totalUsed;
13408:       *pHighwater = 0;
13409:       break;
13410:     }
13411: 
13412:     /*
13413:     ** *pCurrent gets an accurate estimate of the amount of memory used
13414:     ** to store the schema for all databases (main, temp, and any ATTACHed
13415:     ** databases.  *pHighwater is set to zero.
13416:     */
13417:     case SQLITE_DBSTATUS_SCHEMA_USED: {
13418:       int i;                      /* Used to iterate through schemas */
13419:       int nByte = 0;              /* Used to accumulate return value */
13420: 
13421:       sqlite3BtreeEnterAll(db);
13422:       db->pnBytesFreed = &nByte;
13423:       for(i=0; i<db->nDb; i++){
13424:         Schema *pSchema = db->aDb[i].pSchema;
13425:         if( ALWAYS(pSchema!=0) ){
13426:           HashElem *p;
13427: 
13428:           nByte += sqlite3GlobalConfig.m.xRoundup(sizeof(HashElem)) * (
13429:               pSchema->tblHash.count 
13430:             + pSchema->trigHash.count
13431:             + pSchema->idxHash.count
13432:             + pSchema->fkeyHash.count
13433:           );
13434:           nByte += sqlite3MallocSize(pSchema->tblHash.ht);
13435:           nByte += sqlite3MallocSize(pSchema->trigHash.ht);
13436:           nByte += sqlite3MallocSize(pSchema->idxHash.ht);
13437:           nByte += sqlite3MallocSize(pSchema->fkeyHash.ht);
13438: 
13439:           for(p=sqliteHashFirst(&pSchema->trigHash); p; p=sqliteHashNext(p)){
13440:             sqlite3DeleteTrigger(db, (Trigger*)sqliteHashData(p));
13441:           }
13442:           for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){
13443:             sqlite3DeleteTable(db, (Table *)sqliteHashData(p));
13444:           }
13445:         }
13446:       }
13447:       db->pnBytesFreed = 0;
13448:       sqlite3BtreeLeaveAll(db);
13449: 
13450:       *pHighwater = 0;
13451:       *pCurrent = nByte;
13452:       break;
13453:     }
13454: 
13455:     /*
13456:     ** *pCurrent gets an accurate estimate of the amount of memory used
13457:     ** to store all prepared statements.
13458:     ** *pHighwater is set to zero.
13459:     */
13460:     case SQLITE_DBSTATUS_STMT_USED: {
13461:       struct Vdbe *pVdbe;         /* Used to iterate through VMs */
13462:       int nByte = 0;              /* Used to accumulate return value */
13463: 
13464:       db->pnBytesFreed = &nByte;
13465:       for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
13466:         sqlite3VdbeDeleteObject(db, pVdbe);
13467:       }
13468:       db->pnBytesFreed = 0;
13469: 
13470:       *pHighwater = 0;
13471:       *pCurrent = nByte;
13472: 
13473:       break;
13474:     }
13475: 
13476:     /*
13477:     ** Set *pCurrent to the total cache hits or misses encountered by all
13478:     ** pagers the database handle is connected to. *pHighwater is always set 
13479:     ** to zero.
13480:     */
13481:     case SQLITE_DBSTATUS_CACHE_HIT:
13482:     case SQLITE_DBSTATUS_CACHE_MISS: {
13483:       int i;
13484:       int nRet = 0;
13485:       assert( SQLITE_DBSTATUS_CACHE_MISS==SQLITE_DBSTATUS_CACHE_HIT+1 );
13486: 
13487:       for(i=0; i<db->nDb; i++){
13488:         if( db->aDb[i].pBt ){
13489:           Pager *pPager = sqlite3BtreePager(db->aDb[i].pBt);
13490:           sqlite3PagerCacheStat(pPager, op, resetFlag, &nRet);
13491:         }
13492:       }
13493:       *pHighwater = 0;
13494:       *pCurrent = nRet;
13495:       break;
13496:     }
13497: 
13498:     default: {
13499:       rc = SQLITE_ERROR;
13500:     }
13501:   }
13502:   sqlite3_mutex_leave(db->mutex);
13503:   return rc;
13504: }
13505: 
13506: /************** End of status.c **********************************************/
13507: /************** Begin file date.c ********************************************/
13508: /*
13509: ** 2003 October 31
13510: **
13511: ** The author disclaims copyright to this source code.  In place of
13512: ** a legal notice, here is a blessing:
13513: **
13514: **    May you do good and not evil.
13515: **    May you find forgiveness for yourself and forgive others.
13516: **    May you share freely, never taking more than you give.
13517: **
13518: *************************************************************************
13519: ** This file contains the C functions that implement date and time
13520: ** functions for SQLite.  
13521: **
13522: ** There is only one exported symbol in this file - the function
13523: ** sqlite3RegisterDateTimeFunctions() found at the bottom of the file.
13524: ** All other code has file scope.
13525: **
13526: ** SQLite processes all times and dates as Julian Day numbers.  The
13527: ** dates and times are stored as the number of days since noon
13528: ** in Greenwich on November 24, 4714 B.C. according to the Gregorian
13529: ** calendar system. 
13530: **
13531: ** 1970-01-01 00:00:00 is JD 2440587.5
13532: ** 2000-01-01 00:00:00 is JD 2451544.5
13533: **
13534: ** This implemention requires years to be expressed as a 4-digit number
13535: ** which means that only dates between 0000-01-01 and 9999-12-31 can
13536: ** be represented, even though julian day numbers allow a much wider
13537: ** range of dates.
13538: **
13539: ** The Gregorian calendar system is used for all dates and times,
13540: ** even those that predate the Gregorian calendar.  Historians usually
13541: ** use the Julian calendar for dates prior to 1582-10-15 and for some
13542: ** dates afterwards, depending on locale.  Beware of this difference.
13543: **
13544: ** The conversion algorithms are implemented based on descriptions
13545: ** in the following text:
13546: **
13547: **      Jean Meeus
13548: **      Astronomical Algorithms, 2nd Edition, 1998
13549: **      ISBM 0-943396-61-1
13550: **      Willmann-Bell, Inc
13551: **      Richmond, Virginia (USA)
13552: */
13553: /* #include <stdlib.h> */
13554: /* #include <assert.h> */
13555: #include <time.h>
13556: 
13557: #ifndef SQLITE_OMIT_DATETIME_FUNCS
13558: 
13559: 
13560: /*
13561: ** A structure for holding a single date and time.
13562: */
13563: typedef struct DateTime DateTime;
13564: struct DateTime {
13565:   sqlite3_int64 iJD; /* The julian day number times 86400000 */
13566:   int Y, M, D;       /* Year, month, and day */
13567:   int h, m;          /* Hour and minutes */
13568:   int tz;            /* Timezone offset in minutes */
13569:   double s;          /* Seconds */
13570:   char validYMD;     /* True (1) if Y,M,D are valid */
13571:   char validHMS;     /* True (1) if h,m,s are valid */
13572:   char validJD;      /* True (1) if iJD is valid */
13573:   char validTZ;      /* True (1) if tz is valid */
13574: };
13575: 
13576: 
13577: /*
13578: ** Convert zDate into one or more integers.  Additional arguments
13579: ** come in groups of 5 as follows:
13580: **
13581: **       N       number of digits in the integer
13582: **       min     minimum allowed value of the integer
13583: **       max     maximum allowed value of the integer
13584: **       nextC   first character after the integer
13585: **       pVal    where to write the integers value.
13586: **
13587: ** Conversions continue until one with nextC==0 is encountered.
13588: ** The function returns the number of successful conversions.
13589: */
13590: static int getDigits(const char *zDate, ...){
13591:   va_list ap;
13592:   int val;
13593:   int N;
13594:   int min;
13595:   int max;
13596:   int nextC;
13597:   int *pVal;
13598:   int cnt = 0;
13599:   va_start(ap, zDate);
13600:   do{
13601:     N = va_arg(ap, int);
13602:     min = va_arg(ap, int);
13603:     max = va_arg(ap, int);
13604:     nextC = va_arg(ap, int);
13605:     pVal = va_arg(ap, int*);
13606:     val = 0;
13607:     while( N-- ){
13608:       if( !sqlite3Isdigit(*zDate) ){
13609:         goto end_getDigits;
13610:       }
13611:       val = val*10 + *zDate - '0';
13612:       zDate++;
13613:     }
13614:     if( val<min || val>max || (nextC!=0 && nextC!=*zDate) ){
13615:       goto end_getDigits;
13616:     }
13617:     *pVal = val;
13618:     zDate++;
13619:     cnt++;
13620:   }while( nextC );
13621: end_getDigits:
13622:   va_end(ap);
13623:   return cnt;
13624: }
13625: 
13626: /*
13627: ** Parse a timezone extension on the end of a date-time.
13628: ** The extension is of the form:
13629: **
13630: **        (+/-)HH:MM
13631: **
13632: ** Or the "zulu" notation:
13633: **
13634: **        Z
13635: **
13636: ** If the parse is successful, write the number of minutes
13637: ** of change in p->tz and return 0.  If a parser error occurs,
13638: ** return non-zero.
13639: **
13640: ** A missing specifier is not considered an error.
13641: */
13642: static int parseTimezone(const char *zDate, DateTime *p){
13643:   int sgn = 0;
13644:   int nHr, nMn;
13645:   int c;
13646:   while( sqlite3Isspace(*zDate) ){ zDate++; }
13647:   p->tz = 0;
13648:   c = *zDate;
13649:   if( c=='-' ){
13650:     sgn = -1;
13651:   }else if( c=='+' ){
13652:     sgn = +1;
13653:   }else if( c=='Z' || c=='z' ){
13654:     zDate++;
13655:     goto zulu_time;
13656:   }else{
13657:     return c!=0;
13658:   }
13659:   zDate++;
13660:   if( getDigits(zDate, 2, 0, 14, ':', &nHr, 2, 0, 59, 0, &nMn)!=2 ){
13661:     return 1;
13662:   }
13663:   zDate += 5;
13664:   p->tz = sgn*(nMn + nHr*60);
13665: zulu_time:
13666:   while( sqlite3Isspace(*zDate) ){ zDate++; }
13667:   return *zDate!=0;
13668: }
13669: 
13670: /*
13671: ** Parse times of the form HH:MM or HH:MM:SS or HH:MM:SS.FFFF.
13672: ** The HH, MM, and SS must each be exactly 2 digits.  The
13673: ** fractional seconds FFFF can be one or more digits.
13674: **
13675: ** Return 1 if there is a parsing error and 0 on success.
13676: */
13677: static int parseHhMmSs(const char *zDate, DateTime *p){
13678:   int h, m, s;
13679:   double ms = 0.0;
13680:   if( getDigits(zDate, 2, 0, 24, ':', &h, 2, 0, 59, 0, &m)!=2 ){
13681:     return 1;
13682:   }
13683:   zDate += 5;
13684:   if( *zDate==':' ){
13685:     zDate++;
13686:     if( getDigits(zDate, 2, 0, 59, 0, &s)!=1 ){
13687:       return 1;
13688:     }
13689:     zDate += 2;
13690:     if( *zDate=='.' && sqlite3Isdigit(zDate[1]) ){
13691:       double rScale = 1.0;
13692:       zDate++;
13693:       while( sqlite3Isdigit(*zDate) ){
13694:         ms = ms*10.0 + *zDate - '0';
13695:         rScale *= 10.0;
13696:         zDate++;
13697:       }
13698:       ms /= rScale;
13699:     }
13700:   }else{
13701:     s = 0;
13702:   }
13703:   p->validJD = 0;
13704:   p->validHMS = 1;
13705:   p->h = h;
13706:   p->m = m;
13707:   p->s = s + ms;
13708:   if( parseTimezone(zDate, p) ) return 1;
13709:   p->validTZ = (p->tz!=0)?1:0;
13710:   return 0;
13711: }
13712: 
13713: /*
13714: ** Convert from YYYY-MM-DD HH:MM:SS to julian day.  We always assume
13715: ** that the YYYY-MM-DD is according to the Gregorian calendar.
13716: **
13717: ** Reference:  Meeus page 61
13718: */
13719: static void computeJD(DateTime *p){
13720:   int Y, M, D, A, B, X1, X2;
13721: 
13722:   if( p->validJD ) return;
13723:   if( p->validYMD ){
13724:     Y = p->Y;
13725:     M = p->M;
13726:     D = p->D;
13727:   }else{
13728:     Y = 2000;  /* If no YMD specified, assume 2000-Jan-01 */
13729:     M = 1;
13730:     D = 1;
13731:   }
13732:   if( M<=2 ){
13733:     Y--;
13734:     M += 12;
13735:   }
13736:   A = Y/100;
13737:   B = 2 - A + (A/4);
13738:   X1 = 36525*(Y+4716)/100;
13739:   X2 = 306001*(M+1)/10000;
13740:   p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000);
13741:   p->validJD = 1;
13742:   if( p->validHMS ){
13743:     p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000);
13744:     if( p->validTZ ){
13745:       p->iJD -= p->tz*60000;
13746:       p->validYMD = 0;
13747:       p->validHMS = 0;
13748:       p->validTZ = 0;
13749:     }
13750:   }
13751: }
13752: 
13753: /*
13754: ** Parse dates of the form
13755: **
13756: **     YYYY-MM-DD HH:MM:SS.FFF
13757: **     YYYY-MM-DD HH:MM:SS
13758: **     YYYY-MM-DD HH:MM
13759: **     YYYY-MM-DD
13760: **
13761: ** Write the result into the DateTime structure and return 0
13762: ** on success and 1 if the input string is not a well-formed
13763: ** date.
13764: */
13765: static int parseYyyyMmDd(const char *zDate, DateTime *p){
13766:   int Y, M, D, neg;
13767: 
13768:   if( zDate[0]=='-' ){
13769:     zDate++;
13770:     neg = 1;
13771:   }else{
13772:     neg = 0;
13773:   }
13774:   if( getDigits(zDate,4,0,9999,'-',&Y,2,1,12,'-',&M,2,1,31,0,&D)!=3 ){
13775:     return 1;
13776:   }
13777:   zDate += 10;
13778:   while( sqlite3Isspace(*zDate) || 'T'==*(u8*)zDate ){ zDate++; }
13779:   if( parseHhMmSs(zDate, p)==0 ){
13780:     /* We got the time */
13781:   }else if( *zDate==0 ){
13782:     p->validHMS = 0;
13783:   }else{
13784:     return 1;
13785:   }
13786:   p->validJD = 0;
13787:   p->validYMD = 1;
13788:   p->Y = neg ? -Y : Y;
13789:   p->M = M;
13790:   p->D = D;
13791:   if( p->validTZ ){
13792:     computeJD(p);
13793:   }
13794:   return 0;
13795: }
13796: 
13797: /*
13798: ** Set the time to the current time reported by the VFS.
13799: **
13800: ** Return the number of errors.
13801: */
13802: static int setDateTimeToCurrent(sqlite3_context *context, DateTime *p){
13803:   sqlite3 *db = sqlite3_context_db_handle(context);
13804:   if( sqlite3OsCurrentTimeInt64(db->pVfs, &p->iJD)==SQLITE_OK ){
13805:     p->validJD = 1;
13806:     return 0;
13807:   }else{
13808:     return 1;
13809:   }
13810: }
13811: 
13812: /*
13813: ** Attempt to parse the given string into a Julian Day Number.  Return
13814: ** the number of errors.
13815: **
13816: ** The following are acceptable forms for the input string:
13817: **
13818: **      YYYY-MM-DD HH:MM:SS.FFF  +/-HH:MM
13819: **      DDDD.DD 
13820: **      now
13821: **
13822: ** In the first form, the +/-HH:MM is always optional.  The fractional
13823: ** seconds extension (the ".FFF") is optional.  The seconds portion
13824: ** (":SS.FFF") is option.  The year and date can be omitted as long
13825: ** as there is a time string.  The time string can be omitted as long
13826: ** as there is a year and date.
13827: */
13828: static int parseDateOrTime(
13829:   sqlite3_context *context, 
13830:   const char *zDate, 
13831:   DateTime *p
13832: ){
13833:   double r;
13834:   if( parseYyyyMmDd(zDate,p)==0 ){
13835:     return 0;
13836:   }else if( parseHhMmSs(zDate, p)==0 ){
13837:     return 0;
13838:   }else if( sqlite3StrICmp(zDate,"now")==0){
13839:     return setDateTimeToCurrent(context, p);
13840:   }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8) ){
13841:     p->iJD = (sqlite3_int64)(r*86400000.0 + 0.5);
13842:     p->validJD = 1;
13843:     return 0;
13844:   }
13845:   return 1;
13846: }
13847: 
13848: /*
13849: ** Compute the Year, Month, and Day from the julian day number.
13850: */
13851: static void computeYMD(DateTime *p){
13852:   int Z, A, B, C, D, E, X1;
13853:   if( p->validYMD ) return;
13854:   if( !p->validJD ){
13855:     p->Y = 2000;
13856:     p->M = 1;
13857:     p->D = 1;
13858:   }else{
13859:     Z = (int)((p->iJD + 43200000)/86400000);
13860:     A = (int)((Z - 1867216.25)/36524.25);
13861:     A = Z + 1 + A - (A/4);
13862:     B = A + 1524;
13863:     C = (int)((B - 122.1)/365.25);
13864:     D = (36525*C)/100;
13865:     E = (int)((B-D)/30.6001);
13866:     X1 = (int)(30.6001*E);
13867:     p->D = B - D - X1;
13868:     p->M = E<14 ? E-1 : E-13;
13869:     p->Y = p->M>2 ? C - 4716 : C - 4715;
13870:   }
13871:   p->validYMD = 1;
13872: }
13873: 
13874: /*
13875: ** Compute the Hour, Minute, and Seconds from the julian day number.
13876: */
13877: static void computeHMS(DateTime *p){
13878:   int s;
13879:   if( p->validHMS ) return;
13880:   computeJD(p);
13881:   s = (int)((p->iJD + 43200000) % 86400000);
13882:   p->s = s/1000.0;
13883:   s = (int)p->s;
13884:   p->s -= s;
13885:   p->h = s/3600;
13886:   s -= p->h*3600;
13887:   p->m = s/60;
13888:   p->s += s - p->m*60;
13889:   p->validHMS = 1;
13890: }
13891: 
13892: /*
13893: ** Compute both YMD and HMS
13894: */
13895: static void computeYMD_HMS(DateTime *p){
13896:   computeYMD(p);
13897:   computeHMS(p);
13898: }
13899: 
13900: /*
13901: ** Clear the YMD and HMS and the TZ
13902: */
13903: static void clearYMD_HMS_TZ(DateTime *p){
13904:   p->validYMD = 0;
13905:   p->validHMS = 0;
13906:   p->validTZ = 0;
13907: }
13908: 
13909: /*
13910: ** On recent Windows platforms, the localtime_s() function is available
13911: ** as part of the "Secure CRT". It is essentially equivalent to 
13912: ** localtime_r() available under most POSIX platforms, except that the 
13913: ** order of the parameters is reversed.
13914: **
13915: ** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx.
13916: **
13917: ** If the user has not indicated to use localtime_r() or localtime_s()
13918: ** already, check for an MSVC build environment that provides 
13919: ** localtime_s().
13920: */
13921: #if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \
13922:      defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE)
13923: #define HAVE_LOCALTIME_S 1
13924: #endif
13925: 
13926: #ifndef SQLITE_OMIT_LOCALTIME
13927: /*
13928: ** The following routine implements the rough equivalent of localtime_r()
13929: ** using whatever operating-system specific localtime facility that
13930: ** is available.  This routine returns 0 on success and
13931: ** non-zero on any kind of error.
13932: **
13933: ** If the sqlite3GlobalConfig.bLocaltimeFault variable is true then this
13934: ** routine will always fail.
13935: */
13936: static int osLocaltime(time_t *t, struct tm *pTm){
13937:   int rc;
13938: #if (!defined(HAVE_LOCALTIME_R) || !HAVE_LOCALTIME_R) \
13939:       && (!defined(HAVE_LOCALTIME_S) || !HAVE_LOCALTIME_S)
13940:   struct tm *pX;
13941: #if SQLITE_THREADSAFE>0
13942:   sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
13943: #endif
13944:   sqlite3_mutex_enter(mutex);
13945:   pX = localtime(t);
13946: #ifndef SQLITE_OMIT_BUILTIN_TEST
13947:   if( sqlite3GlobalConfig.bLocaltimeFault ) pX = 0;
13948: #endif
13949:   if( pX ) *pTm = *pX;
13950:   sqlite3_mutex_leave(mutex);
13951:   rc = pX==0;
13952: #else
13953: #ifndef SQLITE_OMIT_BUILTIN_TEST
13954:   if( sqlite3GlobalConfig.bLocaltimeFault ) return 1;
13955: #endif
13956: #if defined(HAVE_LOCALTIME_R) && HAVE_LOCALTIME_R
13957:   rc = localtime_r(t, pTm)==0;
13958: #else
13959:   rc = localtime_s(pTm, t);
13960: #endif /* HAVE_LOCALTIME_R */
13961: #endif /* HAVE_LOCALTIME_R || HAVE_LOCALTIME_S */
13962:   return rc;
13963: }
13964: #endif /* SQLITE_OMIT_LOCALTIME */
13965: 
13966: 
13967: #ifndef SQLITE_OMIT_LOCALTIME
13968: /*
13969: ** Compute the difference (in milliseconds) between localtime and UTC
13970: ** (a.k.a. GMT) for the time value p where p is in UTC. If no error occurs,
13971: ** return this value and set *pRc to SQLITE_OK. 
13972: **
13973: ** Or, if an error does occur, set *pRc to SQLITE_ERROR. The returned value
13974: ** is undefined in this case.
13975: */
13976: static sqlite3_int64 localtimeOffset(
13977:   DateTime *p,                    /* Date at which to calculate offset */
13978:   sqlite3_context *pCtx,          /* Write error here if one occurs */
13979:   int *pRc                        /* OUT: Error code. SQLITE_OK or ERROR */
13980: ){
13981:   DateTime x, y;
13982:   time_t t;
13983:   struct tm sLocal;
13984: 
13985:   /* Initialize the contents of sLocal to avoid a compiler warning. */
13986:   memset(&sLocal, 0, sizeof(sLocal));
13987: 
13988:   x = *p;
13989:   computeYMD_HMS(&x);
13990:   if( x.Y<1971 || x.Y>=2038 ){
13991:     x.Y = 2000;
13992:     x.M = 1;
13993:     x.D = 1;
13994:     x.h = 0;
13995:     x.m = 0;
13996:     x.s = 0.0;
13997:   } else {
13998:     int s = (int)(x.s + 0.5);
13999:     x.s = s;
14000:   }
14001:   x.tz = 0;
14002:   x.validJD = 0;
14003:   computeJD(&x);
14004:   t = (time_t)(x.iJD/1000 - 21086676*(i64)10000);
14005:   if( osLocaltime(&t, &sLocal) ){
14006:     sqlite3_result_error(pCtx, "local time unavailable", -1);
14007:     *pRc = SQLITE_ERROR;
14008:     return 0;
14009:   }
14010:   y.Y = sLocal.tm_year + 1900;
14011:   y.M = sLocal.tm_mon + 1;
14012:   y.D = sLocal.tm_mday;
14013:   y.h = sLocal.tm_hour;
14014:   y.m = sLocal.tm_min;
14015:   y.s = sLocal.tm_sec;
14016:   y.validYMD = 1;
14017:   y.validHMS = 1;
14018:   y.validJD = 0;
14019:   y.validTZ = 0;
14020:   computeJD(&y);
14021:   *pRc = SQLITE_OK;
14022:   return y.iJD - x.iJD;
14023: }
14024: #endif /* SQLITE_OMIT_LOCALTIME */
14025: 
14026: /*
14027: ** Process a modifier to a date-time stamp.  The modifiers are
14028: ** as follows:
14029: **
14030: **     NNN days
14031: **     NNN hours
14032: **     NNN minutes
14033: **     NNN.NNNN seconds
14034: **     NNN months
14035: **     NNN years
14036: **     start of month
14037: **     start of year
14038: **     start of week
14039: **     start of day
14040: **     weekday N
14041: **     unixepoch
14042: **     localtime
14043: **     utc
14044: **
14045: ** Return 0 on success and 1 if there is any kind of error. If the error
14046: ** is in a system call (i.e. localtime()), then an error message is written
14047: ** to context pCtx. If the error is an unrecognized modifier, no error is
14048: ** written to pCtx.
14049: */
14050: static int parseModifier(sqlite3_context *pCtx, const char *zMod, DateTime *p){
14051:   int rc = 1;
14052:   int n;
14053:   double r;
14054:   char *z, zBuf[30];
14055:   z = zBuf;
14056:   for(n=0; n<ArraySize(zBuf)-1 && zMod[n]; n++){
14057:     z[n] = (char)sqlite3UpperToLower[(u8)zMod[n]];
14058:   }
14059:   z[n] = 0;
14060:   switch( z[0] ){
14061: #ifndef SQLITE_OMIT_LOCALTIME
14062:     case 'l': {
14063:       /*    localtime
14064:       **
14065:       ** Assuming the current time value is UTC (a.k.a. GMT), shift it to
14066:       ** show local time.
14067:       */
14068:       if( strcmp(z, "localtime")==0 ){
14069:         computeJD(p);
14070:         p->iJD += localtimeOffset(p, pCtx, &rc);
14071:         clearYMD_HMS_TZ(p);
14072:       }
14073:       break;
14074:     }
14075: #endif
14076:     case 'u': {
14077:       /*
14078:       **    unixepoch
14079:       **
14080:       ** Treat the current value of p->iJD as the number of
14081:       ** seconds since 1970.  Convert to a real julian day number.
14082:       */
14083:       if( strcmp(z, "unixepoch")==0 && p->validJD ){
14084:         p->iJD = (p->iJD + 43200)/86400 + 21086676*(i64)10000000;
14085:         clearYMD_HMS_TZ(p);
14086:         rc = 0;
14087:       }
14088: #ifndef SQLITE_OMIT_LOCALTIME
14089:       else if( strcmp(z, "utc")==0 ){
14090:         sqlite3_int64 c1;
14091:         computeJD(p);
14092:         c1 = localtimeOffset(p, pCtx, &rc);
14093:         if( rc==SQLITE_OK ){
14094:           p->iJD -= c1;
14095:           clearYMD_HMS_TZ(p);
14096:           p->iJD += c1 - localtimeOffset(p, pCtx, &rc);
14097:         }
14098:       }
14099: #endif
14100:       break;
14101:     }
14102:     case 'w': {
14103:       /*
14104:       **    weekday N
14105:       **
14106:       ** Move the date to the same time on the next occurrence of
14107:       ** weekday N where 0==Sunday, 1==Monday, and so forth.  If the
14108:       ** date is already on the appropriate weekday, this is a no-op.
14109:       */
14110:       if( strncmp(z, "weekday ", 8)==0
14111:                && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)
14112:                && (n=(int)r)==r && n>=0 && r<7 ){
14113:         sqlite3_int64 Z;
14114:         computeYMD_HMS(p);
14115:         p->validTZ = 0;
14116:         p->validJD = 0;
14117:         computeJD(p);
14118:         Z = ((p->iJD + 129600000)/86400000) % 7;
14119:         if( Z>n ) Z -= 7;
14120:         p->iJD += (n - Z)*86400000;
14121:         clearYMD_HMS_TZ(p);
14122:         rc = 0;
14123:       }
14124:       break;
14125:     }
14126:     case 's': {
14127:       /*
14128:       **    start of TTTTT
14129:       **
14130:       ** Move the date backwards to the beginning of the current day,
14131:       ** or month or year.
14132:       */
14133:       if( strncmp(z, "start of ", 9)!=0 ) break;
14134:       z += 9;
14135:       computeYMD(p);
14136:       p->validHMS = 1;
14137:       p->h = p->m = 0;
14138:       p->s = 0.0;
14139:       p->validTZ = 0;
14140:       p->validJD = 0;
14141:       if( strcmp(z,"month")==0 ){
14142:         p->D = 1;
14143:         rc = 0;
14144:       }else if( strcmp(z,"year")==0 ){
14145:         computeYMD(p);
14146:         p->M = 1;
14147:         p->D = 1;
14148:         rc = 0;
14149:       }else if( strcmp(z,"day")==0 ){
14150:         rc = 0;
14151:       }
14152:       break;
14153:     }
14154:     case '+':
14155:     case '-':
14156:     case '0':
14157:     case '1':
14158:     case '2':
14159:     case '3':
14160:     case '4':
14161:     case '5':
14162:     case '6':
14163:     case '7':
14164:     case '8':
14165:     case '9': {
14166:       double rRounder;
14167:       for(n=1; z[n] && z[n]!=':' && !sqlite3Isspace(z[n]); n++){}
14168:       if( !sqlite3AtoF(z, &r, n, SQLITE_UTF8) ){
14169:         rc = 1;
14170:         break;
14171:       }
14172:       if( z[n]==':' ){
14173:         /* A modifier of the form (+|-)HH:MM:SS.FFF adds (or subtracts) the
14174:         ** specified number of hours, minutes, seconds, and fractional seconds
14175:         ** to the time.  The ".FFF" may be omitted.  The ":SS.FFF" may be
14176:         ** omitted.
14177:         */
14178:         const char *z2 = z;
14179:         DateTime tx;
14180:         sqlite3_int64 day;
14181:         if( !sqlite3Isdigit(*z2) ) z2++;
14182:         memset(&tx, 0, sizeof(tx));
14183:         if( parseHhMmSs(z2, &tx) ) break;
14184:         computeJD(&tx);
14185:         tx.iJD -= 43200000;
14186:         day = tx.iJD/86400000;
14187:         tx.iJD -= day*86400000;
14188:         if( z[0]=='-' ) tx.iJD = -tx.iJD;
14189:         computeJD(p);
14190:         clearYMD_HMS_TZ(p);
14191:         p->iJD += tx.iJD;
14192:         rc = 0;
14193:         break;
14194:       }
14195:       z += n;
14196:       while( sqlite3Isspace(*z) ) z++;
14197:       n = sqlite3Strlen30(z);
14198:       if( n>10 || n<3 ) break;
14199:       if( z[n-1]=='s' ){ z[n-1] = 0; n--; }
14200:       computeJD(p);
14201:       rc = 0;
14202:       rRounder = r<0 ? -0.5 : +0.5;
14203:       if( n==3 && strcmp(z,"day")==0 ){
14204:         p->iJD += (sqlite3_int64)(r*86400000.0 + rRounder);
14205:       }else if( n==4 && strcmp(z,"hour")==0 ){
14206:         p->iJD += (sqlite3_int64)(r*(86400000.0/24.0) + rRounder);
14207:       }else if( n==6 && strcmp(z,"minute")==0 ){
14208:         p->iJD += (sqlite3_int64)(r*(86400000.0/(24.0*60.0)) + rRounder);
14209:       }else if( n==6 && strcmp(z,"second")==0 ){
14210:         p->iJD += (sqlite3_int64)(r*(86400000.0/(24.0*60.0*60.0)) + rRounder);
14211:       }else if( n==5 && strcmp(z,"month")==0 ){
14212:         int x, y;
14213:         computeYMD_HMS(p);
14214:         p->M += (int)r;
14215:         x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12;
14216:         p->Y += x;
14217:         p->M -= x*12;
14218:         p->validJD = 0;
14219:         computeJD(p);
14220:         y = (int)r;
14221:         if( y!=r ){
14222:           p->iJD += (sqlite3_int64)((r - y)*30.0*86400000.0 + rRounder);
14223:         }
14224:       }else if( n==4 && strcmp(z,"year")==0 ){
14225:         int y = (int)r;
14226:         computeYMD_HMS(p);
14227:         p->Y += y;
14228:         p->validJD = 0;
14229:         computeJD(p);
14230:         if( y!=r ){
14231:           p->iJD += (sqlite3_int64)((r - y)*365.0*86400000.0 + rRounder);
14232:         }
14233:       }else{
14234:         rc = 1;
14235:       }
14236:       clearYMD_HMS_TZ(p);
14237:       break;
14238:     }
14239:     default: {
14240:       break;
14241:     }
14242:   }
14243:   return rc;
14244: }
14245: 
14246: /*
14247: ** Process time function arguments.  argv[0] is a date-time stamp.
14248: ** argv[1] and following are modifiers.  Parse them all and write
14249: ** the resulting time into the DateTime structure p.  Return 0
14250: ** on success and 1 if there are any errors.
14251: **
14252: ** If there are zero parameters (if even argv[0] is undefined)
14253: ** then assume a default value of "now" for argv[0].
14254: */
14255: static int isDate(
14256:   sqlite3_context *context, 
14257:   int argc, 
14258:   sqlite3_value **argv, 
14259:   DateTime *p
14260: ){
14261:   int i;
14262:   const unsigned char *z;
14263:   int eType;
14264:   memset(p, 0, sizeof(*p));
14265:   if( argc==0 ){
14266:     return setDateTimeToCurrent(context, p);
14267:   }
14268:   if( (eType = sqlite3_value_type(argv[0]))==SQLITE_FLOAT
14269:                    || eType==SQLITE_INTEGER ){
14270:     p->iJD = (sqlite3_int64)(sqlite3_value_double(argv[0])*86400000.0 + 0.5);
14271:     p->validJD = 1;
14272:   }else{
14273:     z = sqlite3_value_text(argv[0]);
14274:     if( !z || parseDateOrTime(context, (char*)z, p) ){
14275:       return 1;
14276:     }
14277:   }
14278:   for(i=1; i<argc; i++){
14279:     z = sqlite3_value_text(argv[i]);
14280:     if( z==0 || parseModifier(context, (char*)z, p) ) return 1;
14281:   }
14282:   return 0;
14283: }
14284: 
14285: 
14286: /*
14287: ** The following routines implement the various date and time functions
14288: ** of SQLite.
14289: */
14290: 
14291: /*
14292: **    julianday( TIMESTRING, MOD, MOD, ...)
14293: **
14294: ** Return the julian day number of the date specified in the arguments
14295: */
14296: static void juliandayFunc(
14297:   sqlite3_context *context,
14298:   int argc,
14299:   sqlite3_value **argv
14300: ){
14301:   DateTime x;
14302:   if( isDate(context, argc, argv, &x)==0 ){
14303:     computeJD(&x);
14304:     sqlite3_result_double(context, x.iJD/86400000.0);
14305:   }
14306: }
14307: 
14308: /*
14309: **    datetime( TIMESTRING, MOD, MOD, ...)
14310: **
14311: ** Return YYYY-MM-DD HH:MM:SS
14312: */
14313: static void datetimeFunc(
14314:   sqlite3_context *context,
14315:   int argc,
14316:   sqlite3_value **argv
14317: ){
14318:   DateTime x;
14319:   if( isDate(context, argc, argv, &x)==0 ){
14320:     char zBuf[100];
14321:     computeYMD_HMS(&x);
14322:     sqlite3_snprintf(sizeof(zBuf), zBuf, "%04d-%02d-%02d %02d:%02d:%02d",
14323:                      x.Y, x.M, x.D, x.h, x.m, (int)(x.s));
14324:     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
14325:   }
14326: }
14327: 
14328: /*
14329: **    time( TIMESTRING, MOD, MOD, ...)
14330: **
14331: ** Return HH:MM:SS
14332: */
14333: static void timeFunc(
14334:   sqlite3_context *context,
14335:   int argc,
14336:   sqlite3_value **argv
14337: ){
14338:   DateTime x;
14339:   if( isDate(context, argc, argv, &x)==0 ){
14340:     char zBuf[100];
14341:     computeHMS(&x);
14342:     sqlite3_snprintf(sizeof(zBuf), zBuf, "%02d:%02d:%02d", x.h, x.m, (int)x.s);
14343:     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
14344:   }
14345: }
14346: 
14347: /*
14348: **    date( TIMESTRING, MOD, MOD, ...)
14349: **
14350: ** Return YYYY-MM-DD
14351: */
14352: static void dateFunc(
14353:   sqlite3_context *context,
14354:   int argc,
14355:   sqlite3_value **argv
14356: ){
14357:   DateTime x;
14358:   if( isDate(context, argc, argv, &x)==0 ){
14359:     char zBuf[100];
14360:     computeYMD(&x);
14361:     sqlite3_snprintf(sizeof(zBuf), zBuf, "%04d-%02d-%02d", x.Y, x.M, x.D);
14362:     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
14363:   }
14364: }
14365: 
14366: /*
14367: **    strftime( FORMAT, TIMESTRING, MOD, MOD, ...)
14368: **
14369: ** Return a string described by FORMAT.  Conversions as follows:
14370: **
14371: **   %d  day of month
14372: **   %f  ** fractional seconds  SS.SSS
14373: **   %H  hour 00-24
14374: **   %j  day of year 000-366
14375: **   %J  ** Julian day number
14376: **   %m  month 01-12
14377: **   %M  minute 00-59
14378: **   %s  seconds since 1970-01-01
14379: **   %S  seconds 00-59
14380: **   %w  day of week 0-6  sunday==0
14381: **   %W  week of year 00-53
14382: **   %Y  year 0000-9999
14383: **   %%  %
14384: */
14385: static void strftimeFunc(
14386:   sqlite3_context *context,
14387:   int argc,
14388:   sqlite3_value **argv
14389: ){
14390:   DateTime x;
14391:   u64 n;
14392:   size_t i,j;
14393:   char *z;
14394:   sqlite3 *db;
14395:   const char *zFmt = (const char*)sqlite3_value_text(argv[0]);
14396:   char zBuf[100];
14397:   if( zFmt==0 || isDate(context, argc-1, argv+1, &x) ) return;
14398:   db = sqlite3_context_db_handle(context);
14399:   for(i=0, n=1; zFmt[i]; i++, n++){
14400:     if( zFmt[i]=='%' ){
14401:       switch( zFmt[i+1] ){
14402:         case 'd':
14403:         case 'H':
14404:         case 'm':
14405:         case 'M':
14406:         case 'S':
14407:         case 'W':
14408:           n++;
14409:           /* fall thru */
14410:         case 'w':
14411:         case '%':
14412:           break;
14413:         case 'f':
14414:           n += 8;
14415:           break;
14416:         case 'j':
14417:           n += 3;
14418:           break;
14419:         case 'Y':
14420:           n += 8;
14421:           break;
14422:         case 's':
14423:         case 'J':
14424:           n += 50;
14425:           break;
14426:         default:
14427:           return;  /* ERROR.  return a NULL */
14428:       }
14429:       i++;
14430:     }
14431:   }
14432:   testcase( n==sizeof(zBuf)-1 );
14433:   testcase( n==sizeof(zBuf) );
14434:   testcase( n==(u64)db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
14435:   testcase( n==(u64)db->aLimit[SQLITE_LIMIT_LENGTH] );
14436:   if( n<sizeof(zBuf) ){
14437:     z = zBuf;
14438:   }else if( n>(u64)db->aLimit[SQLITE_LIMIT_LENGTH] ){
14439:     sqlite3_result_error_toobig(context);
14440:     return;
14441:   }else{
14442:     z = sqlite3DbMallocRaw(db, (int)n);
14443:     if( z==0 ){
14444:       sqlite3_result_error_nomem(context);
14445:       return;
14446:     }
14447:   }
14448:   computeJD(&x);
14449:   computeYMD_HMS(&x);
14450:   for(i=j=0; zFmt[i]; i++){
14451:     if( zFmt[i]!='%' ){
14452:       z[j++] = zFmt[i];
14453:     }else{
14454:       i++;
14455:       switch( zFmt[i] ){
14456:         case 'd':  sqlite3_snprintf(3, &z[j],"%02d",x.D); j+=2; break;
14457:         case 'f': {
14458:           double s = x.s;
14459:           if( s>59.999 ) s = 59.999;
14460:           sqlite3_snprintf(7, &z[j],"%06.3f", s);
14461:           j += sqlite3Strlen30(&z[j]);
14462:           break;
14463:         }
14464:         case 'H':  sqlite3_snprintf(3, &z[j],"%02d",x.h); j+=2; break;
14465:         case 'W': /* Fall thru */
14466:         case 'j': {
14467:           int nDay;             /* Number of days since 1st day of year */
14468:           DateTime y = x;
14469:           y.validJD = 0;
14470:           y.M = 1;
14471:           y.D = 1;
14472:           computeJD(&y);
14473:           nDay = (int)((x.iJD-y.iJD+43200000)/86400000);
14474:           if( zFmt[i]=='W' ){
14475:             int wd;   /* 0=Monday, 1=Tuesday, ... 6=Sunday */
14476:             wd = (int)(((x.iJD+43200000)/86400000)%7);
14477:             sqlite3_snprintf(3, &z[j],"%02d",(nDay+7-wd)/7);
14478:             j += 2;
14479:           }else{
14480:             sqlite3_snprintf(4, &z[j],"%03d",nDay+1);
14481:             j += 3;
14482:           }
14483:           break;
14484:         }
14485:         case 'J': {
14486:           sqlite3_snprintf(20, &z[j],"%.16g",x.iJD/86400000.0);
14487:           j+=sqlite3Strlen30(&z[j]);
14488:           break;
14489:         }
14490:         case 'm':  sqlite3_snprintf(3, &z[j],"%02d",x.M); j+=2; break;
14491:         case 'M':  sqlite3_snprintf(3, &z[j],"%02d",x.m); j+=2; break;
14492:         case 's': {
14493:           sqlite3_snprintf(30,&z[j],"%lld",
14494:                            (i64)(x.iJD/1000 - 21086676*(i64)10000));
14495:           j += sqlite3Strlen30(&z[j]);
14496:           break;
14497:         }
14498:         case 'S':  sqlite3_snprintf(3,&z[j],"%02d",(int)x.s); j+=2; break;
14499:         case 'w': {
14500:           z[j++] = (char)(((x.iJD+129600000)/86400000) % 7) + '0';
14501:           break;
14502:         }
14503:         case 'Y': {
14504:           sqlite3_snprintf(5,&z[j],"%04d",x.Y); j+=sqlite3Strlen30(&z[j]);
14505:           break;
14506:         }
14507:         default:   z[j++] = '%'; break;
14508:       }
14509:     }
14510:   }
14511:   z[j] = 0;
14512:   sqlite3_result_text(context, z, -1,
14513:                       z==zBuf ? SQLITE_TRANSIENT : SQLITE_DYNAMIC);
14514: }
14515: 
14516: /*
14517: ** current_time()
14518: **
14519: ** This function returns the same value as time('now').
14520: */
14521: static void ctimeFunc(
14522:   sqlite3_context *context,
14523:   int NotUsed,
14524:   sqlite3_value **NotUsed2
14525: ){
14526:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
14527:   timeFunc(context, 0, 0);
14528: }
14529: 
14530: /*
14531: ** current_date()
14532: **
14533: ** This function returns the same value as date('now').
14534: */
14535: static void cdateFunc(
14536:   sqlite3_context *context,
14537:   int NotUsed,
14538:   sqlite3_value **NotUsed2
14539: ){
14540:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
14541:   dateFunc(context, 0, 0);
14542: }
14543: 
14544: /*
14545: ** current_timestamp()
14546: **
14547: ** This function returns the same value as datetime('now').
14548: */
14549: static void ctimestampFunc(
14550:   sqlite3_context *context,
14551:   int NotUsed,
14552:   sqlite3_value **NotUsed2
14553: ){
14554:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
14555:   datetimeFunc(context, 0, 0);
14556: }
14557: #endif /* !defined(SQLITE_OMIT_DATETIME_FUNCS) */
14558: 
14559: #ifdef SQLITE_OMIT_DATETIME_FUNCS
14560: /*
14561: ** If the library is compiled to omit the full-scale date and time
14562: ** handling (to get a smaller binary), the following minimal version
14563: ** of the functions current_time(), current_date() and current_timestamp()
14564: ** are included instead. This is to support column declarations that
14565: ** include "DEFAULT CURRENT_TIME" etc.
14566: **
14567: ** This function uses the C-library functions time(), gmtime()
14568: ** and strftime(). The format string to pass to strftime() is supplied
14569: ** as the user-data for the function.
14570: */
14571: static void currentTimeFunc(
14572:   sqlite3_context *context,
14573:   int argc,
14574:   sqlite3_value **argv
14575: ){
14576:   time_t t;
14577:   char *zFormat = (char *)sqlite3_user_data(context);
14578:   sqlite3 *db;
14579:   sqlite3_int64 iT;
14580:   struct tm *pTm;
14581:   struct tm sNow;
14582:   char zBuf[20];
14583: 
14584:   UNUSED_PARAMETER(argc);
14585:   UNUSED_PARAMETER(argv);
14586: 
14587:   db = sqlite3_context_db_handle(context);
14588:   if( sqlite3OsCurrentTimeInt64(db->pVfs, &iT) ) return;
14589:   t = iT/1000 - 10000*(sqlite3_int64)21086676;
14590: #ifdef HAVE_GMTIME_R
14591:   pTm = gmtime_r(&t, &sNow);
14592: #else
14593:   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
14594:   pTm = gmtime(&t);
14595:   if( pTm ) memcpy(&sNow, pTm, sizeof(sNow));
14596:   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
14597: #endif
14598:   if( pTm ){
14599:     strftime(zBuf, 20, zFormat, &sNow);
14600:     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
14601:   }
14602: }
14603: #endif
14604: 
14605: /*
14606: ** This function registered all of the above C functions as SQL
14607: ** functions.  This should be the only routine in this file with
14608: ** external linkage.
14609: */
14610: SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){
14611:   static SQLITE_WSD FuncDef aDateTimeFuncs[] = {
14612: #ifndef SQLITE_OMIT_DATETIME_FUNCS
14613:     FUNCTION(julianday,        -1, 0, 0, juliandayFunc ),
14614:     FUNCTION(date,             -1, 0, 0, dateFunc      ),
14615:     FUNCTION(time,             -1, 0, 0, timeFunc      ),
14616:     FUNCTION(datetime,         -1, 0, 0, datetimeFunc  ),
14617:     FUNCTION(strftime,         -1, 0, 0, strftimeFunc  ),
14618:     FUNCTION(current_time,      0, 0, 0, ctimeFunc     ),
14619:     FUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc),
14620:     FUNCTION(current_date,      0, 0, 0, cdateFunc     ),
14621: #else
14622:     STR_FUNCTION(current_time,      0, "%H:%M:%S",          0, currentTimeFunc),
14623:     STR_FUNCTION(current_date,      0, "%Y-%m-%d",          0, currentTimeFunc),
14624:     STR_FUNCTION(current_timestamp, 0, "%Y-%m-%d %H:%M:%S", 0, currentTimeFunc),
14625: #endif
14626:   };
14627:   int i;
14628:   FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
14629:   FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aDateTimeFuncs);
14630: 
14631:   for(i=0; i<ArraySize(aDateTimeFuncs); i++){
14632:     sqlite3FuncDefInsert(pHash, &aFunc[i]);
14633:   }
14634: }
14635: 
14636: /************** End of date.c ************************************************/
14637: /************** Begin file os.c **********************************************/
14638: /*
14639: ** 2005 November 29
14640: **
14641: ** The author disclaims copyright to this source code.  In place of
14642: ** a legal notice, here is a blessing:
14643: **
14644: **    May you do good and not evil.
14645: **    May you find forgiveness for yourself and forgive others.
14646: **    May you share freely, never taking more than you give.
14647: **
14648: ******************************************************************************
14649: **
14650: ** This file contains OS interface code that is common to all
14651: ** architectures.
14652: */
14653: #define _SQLITE_OS_C_ 1
14654: #undef _SQLITE_OS_C_
14655: 
14656: /*
14657: ** The default SQLite sqlite3_vfs implementations do not allocate
14658: ** memory (actually, os_unix.c allocates a small amount of memory
14659: ** from within OsOpen()), but some third-party implementations may.
14660: ** So we test the effects of a malloc() failing and the sqlite3OsXXX()
14661: ** function returning SQLITE_IOERR_NOMEM using the DO_OS_MALLOC_TEST macro.
14662: **
14663: ** The following functions are instrumented for malloc() failure 
14664: ** testing:
14665: **
14666: **     sqlite3OsRead()
14667: **     sqlite3OsWrite()
14668: **     sqlite3OsSync()
14669: **     sqlite3OsFileSize()
14670: **     sqlite3OsLock()
14671: **     sqlite3OsCheckReservedLock()
14672: **     sqlite3OsFileControl()
14673: **     sqlite3OsShmMap()
14674: **     sqlite3OsOpen()
14675: **     sqlite3OsDelete()
14676: **     sqlite3OsAccess()
14677: **     sqlite3OsFullPathname()
14678: **
14679: */
14680: #if defined(SQLITE_TEST)
14681: SQLITE_API int sqlite3_memdebug_vfs_oom_test = 1;
14682:   #define DO_OS_MALLOC_TEST(x)                                       \
14683:   if (sqlite3_memdebug_vfs_oom_test && (!x || !sqlite3IsMemJournal(x))) {  \
14684:     void *pTstAlloc = sqlite3Malloc(10);                             \
14685:     if (!pTstAlloc) return SQLITE_IOERR_NOMEM;                       \
14686:     sqlite3_free(pTstAlloc);                                         \
14687:   }
14688: #else
14689:   #define DO_OS_MALLOC_TEST(x)
14690: #endif
14691: 
14692: /*
14693: ** The following routines are convenience wrappers around methods
14694: ** of the sqlite3_file object.  This is mostly just syntactic sugar. All
14695: ** of this would be completely automatic if SQLite were coded using
14696: ** C++ instead of plain old C.
14697: */
14698: SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file *pId){
14699:   int rc = SQLITE_OK;
14700:   if( pId->pMethods ){
14701:     rc = pId->pMethods->xClose(pId);
14702:     pId->pMethods = 0;
14703:   }
14704:   return rc;
14705: }
14706: SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file *id, void *pBuf, int amt, i64 offset){
14707:   DO_OS_MALLOC_TEST(id);
14708:   return id->pMethods->xRead(id, pBuf, amt, offset);
14709: }
14710: SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file *id, const void *pBuf, int amt, i64 offset){
14711:   DO_OS_MALLOC_TEST(id);
14712:   return id->pMethods->xWrite(id, pBuf, amt, offset);
14713: }
14714: SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file *id, i64 size){
14715:   return id->pMethods->xTruncate(id, size);
14716: }
14717: SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file *id, int flags){
14718:   DO_OS_MALLOC_TEST(id);
14719:   return id->pMethods->xSync(id, flags);
14720: }
14721: SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file *id, i64 *pSize){
14722:   DO_OS_MALLOC_TEST(id);
14723:   return id->pMethods->xFileSize(id, pSize);
14724: }
14725: SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file *id, int lockType){
14726:   DO_OS_MALLOC_TEST(id);
14727:   return id->pMethods->xLock(id, lockType);
14728: }
14729: SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file *id, int lockType){
14730:   return id->pMethods->xUnlock(id, lockType);
14731: }
14732: SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut){
14733:   DO_OS_MALLOC_TEST(id);
14734:   return id->pMethods->xCheckReservedLock(id, pResOut);
14735: }
14736: 
14737: /*
14738: ** Use sqlite3OsFileControl() when we are doing something that might fail
14739: ** and we need to know about the failures.  Use sqlite3OsFileControlHint()
14740: ** when simply tossing information over the wall to the VFS and we do not
14741: ** really care if the VFS receives and understands the information since it
14742: ** is only a hint and can be safely ignored.  The sqlite3OsFileControlHint()
14743: ** routine has no return value since the return value would be meaningless.
14744: */
14745: SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){
14746:   DO_OS_MALLOC_TEST(id);
14747:   return id->pMethods->xFileControl(id, op, pArg);
14748: }
14749: SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file *id, int op, void *pArg){
14750:   (void)id->pMethods->xFileControl(id, op, pArg);
14751: }
14752: 
14753: SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){
14754:   int (*xSectorSize)(sqlite3_file*) = id->pMethods->xSectorSize;
14755:   return (xSectorSize ? xSectorSize(id) : SQLITE_DEFAULT_SECTOR_SIZE);
14756: }
14757: SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id){
14758:   return id->pMethods->xDeviceCharacteristics(id);
14759: }
14760: SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int offset, int n, int flags){
14761:   return id->pMethods->xShmLock(id, offset, n, flags);
14762: }
14763: SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id){
14764:   id->pMethods->xShmBarrier(id);
14765: }
14766: SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int deleteFlag){
14767:   return id->pMethods->xShmUnmap(id, deleteFlag);
14768: }
14769: SQLITE_PRIVATE int sqlite3OsShmMap(
14770:   sqlite3_file *id,               /* Database file handle */
14771:   int iPage,
14772:   int pgsz,
14773:   int bExtend,                    /* True to extend file if necessary */
14774:   void volatile **pp              /* OUT: Pointer to mapping */
14775: ){
14776:   DO_OS_MALLOC_TEST(id);
14777:   return id->pMethods->xShmMap(id, iPage, pgsz, bExtend, pp);
14778: }
14779: 
14780: /*
14781: ** The next group of routines are convenience wrappers around the
14782: ** VFS methods.
14783: */
14784: SQLITE_PRIVATE int sqlite3OsOpen(
14785:   sqlite3_vfs *pVfs, 
14786:   const char *zPath, 
14787:   sqlite3_file *pFile, 
14788:   int flags, 
14789:   int *pFlagsOut
14790: ){
14791:   int rc;
14792:   DO_OS_MALLOC_TEST(0);
14793:   /* 0x87f7f is a mask of SQLITE_OPEN_ flags that are valid to be passed
14794:   ** down into the VFS layer.  Some SQLITE_OPEN_ flags (for example,
14795:   ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before
14796:   ** reaching the VFS. */
14797:   rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x87f7f, pFlagsOut);
14798:   assert( rc==SQLITE_OK || pFile->pMethods==0 );
14799:   return rc;
14800: }
14801: SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
14802:   DO_OS_MALLOC_TEST(0);
14803:   assert( dirSync==0 || dirSync==1 );
14804:   return pVfs->xDelete(pVfs, zPath, dirSync);
14805: }
14806: SQLITE_PRIVATE int sqlite3OsAccess(
14807:   sqlite3_vfs *pVfs, 
14808:   const char *zPath, 
14809:   int flags, 
14810:   int *pResOut
14811: ){
14812:   DO_OS_MALLOC_TEST(0);
14813:   return pVfs->xAccess(pVfs, zPath, flags, pResOut);
14814: }
14815: SQLITE_PRIVATE int sqlite3OsFullPathname(
14816:   sqlite3_vfs *pVfs, 
14817:   const char *zPath, 
14818:   int nPathOut, 
14819:   char *zPathOut
14820: ){
14821:   DO_OS_MALLOC_TEST(0);
14822:   zPathOut[0] = 0;
14823:   return pVfs->xFullPathname(pVfs, zPath, nPathOut, zPathOut);
14824: }
14825: #ifndef SQLITE_OMIT_LOAD_EXTENSION
14826: SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *pVfs, const char *zPath){
14827:   return pVfs->xDlOpen(pVfs, zPath);
14828: }
14829: SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
14830:   pVfs->xDlError(pVfs, nByte, zBufOut);
14831: }
14832: SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *pVfs, void *pHdle, const char *zSym))(void){
14833:   return pVfs->xDlSym(pVfs, pHdle, zSym);
14834: }
14835: SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *pVfs, void *pHandle){
14836:   pVfs->xDlClose(pVfs, pHandle);
14837: }
14838: #endif /* SQLITE_OMIT_LOAD_EXTENSION */
14839: SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
14840:   return pVfs->xRandomness(pVfs, nByte, zBufOut);
14841: }
14842: SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *pVfs, int nMicro){
14843:   return pVfs->xSleep(pVfs, nMicro);
14844: }
14845: SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *pTimeOut){
14846:   int rc;
14847:   /* IMPLEMENTATION-OF: R-49045-42493 SQLite will use the xCurrentTimeInt64()
14848:   ** method to get the current date and time if that method is available
14849:   ** (if iVersion is 2 or greater and the function pointer is not NULL) and
14850:   ** will fall back to xCurrentTime() if xCurrentTimeInt64() is
14851:   ** unavailable.
14852:   */
14853:   if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){
14854:     rc = pVfs->xCurrentTimeInt64(pVfs, pTimeOut);
14855:   }else{
14856:     double r;
14857:     rc = pVfs->xCurrentTime(pVfs, &r);
14858:     *pTimeOut = (sqlite3_int64)(r*86400000.0);
14859:   }
14860:   return rc;
14861: }
14862: 
14863: SQLITE_PRIVATE int sqlite3OsOpenMalloc(
14864:   sqlite3_vfs *pVfs, 
14865:   const char *zFile, 
14866:   sqlite3_file **ppFile, 
14867:   int flags,
14868:   int *pOutFlags
14869: ){
14870:   int rc = SQLITE_NOMEM;
14871:   sqlite3_file *pFile;
14872:   pFile = (sqlite3_file *)sqlite3MallocZero(pVfs->szOsFile);
14873:   if( pFile ){
14874:     rc = sqlite3OsOpen(pVfs, zFile, pFile, flags, pOutFlags);
14875:     if( rc!=SQLITE_OK ){
14876:       sqlite3_free(pFile);
14877:     }else{
14878:       *ppFile = pFile;
14879:     }
14880:   }
14881:   return rc;
14882: }
14883: SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *pFile){
14884:   int rc = SQLITE_OK;
14885:   assert( pFile );
14886:   rc = sqlite3OsClose(pFile);
14887:   sqlite3_free(pFile);
14888:   return rc;
14889: }
14890: 
14891: /*
14892: ** This function is a wrapper around the OS specific implementation of
14893: ** sqlite3_os_init(). The purpose of the wrapper is to provide the
14894: ** ability to simulate a malloc failure, so that the handling of an
14895: ** error in sqlite3_os_init() by the upper layers can be tested.
14896: */
14897: SQLITE_PRIVATE int sqlite3OsInit(void){
14898:   void *p = sqlite3_malloc(10);
14899:   if( p==0 ) return SQLITE_NOMEM;
14900:   sqlite3_free(p);
14901:   return sqlite3_os_init();
14902: }
14903: 
14904: /*
14905: ** The list of all registered VFS implementations.
14906: */
14907: static sqlite3_vfs * SQLITE_WSD vfsList = 0;
14908: #define vfsList GLOBAL(sqlite3_vfs *, vfsList)
14909: 
14910: /*
14911: ** Locate a VFS by name.  If no name is given, simply return the
14912: ** first VFS on the list.
14913: */
14914: SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfs){
14915:   sqlite3_vfs *pVfs = 0;
14916: #if SQLITE_THREADSAFE
14917:   sqlite3_mutex *mutex;
14918: #endif
14919: #ifndef SQLITE_OMIT_AUTOINIT
14920:   int rc = sqlite3_initialize();
14921:   if( rc ) return 0;
14922: #endif
14923: #if SQLITE_THREADSAFE
14924:   mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
14925: #endif
14926:   sqlite3_mutex_enter(mutex);
14927:   for(pVfs = vfsList; pVfs; pVfs=pVfs->pNext){
14928:     if( zVfs==0 ) break;
14929:     if( strcmp(zVfs, pVfs->zName)==0 ) break;
14930:   }
14931:   sqlite3_mutex_leave(mutex);
14932:   return pVfs;
14933: }
14934: 
14935: /*
14936: ** Unlink a VFS from the linked list
14937: */
14938: static void vfsUnlink(sqlite3_vfs *pVfs){
14939:   assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)) );
14940:   if( pVfs==0 ){
14941:     /* No-op */
14942:   }else if( vfsList==pVfs ){
14943:     vfsList = pVfs->pNext;
14944:   }else if( vfsList ){
14945:     sqlite3_vfs *p = vfsList;
14946:     while( p->pNext && p->pNext!=pVfs ){
14947:       p = p->pNext;
14948:     }
14949:     if( p->pNext==pVfs ){
14950:       p->pNext = pVfs->pNext;
14951:     }
14952:   }
14953: }
14954: 
14955: /*
14956: ** Register a VFS with the system.  It is harmless to register the same
14957: ** VFS multiple times.  The new VFS becomes the default if makeDflt is
14958: ** true.
14959: */
14960: SQLITE_API int sqlite3_vfs_register(sqlite3_vfs *pVfs, int makeDflt){
14961:   MUTEX_LOGIC(sqlite3_mutex *mutex;)
14962: #ifndef SQLITE_OMIT_AUTOINIT
14963:   int rc = sqlite3_initialize();
14964:   if( rc ) return rc;
14965: #endif
14966:   MUTEX_LOGIC( mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
14967:   sqlite3_mutex_enter(mutex);
14968:   vfsUnlink(pVfs);
14969:   if( makeDflt || vfsList==0 ){
14970:     pVfs->pNext = vfsList;
14971:     vfsList = pVfs;
14972:   }else{
14973:     pVfs->pNext = vfsList->pNext;
14974:     vfsList->pNext = pVfs;
14975:   }
14976:   assert(vfsList);
14977:   sqlite3_mutex_leave(mutex);
14978:   return SQLITE_OK;
14979: }
14980: 
14981: /*
14982: ** Unregister a VFS so that it is no longer accessible.
14983: */
14984: SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs *pVfs){
14985: #if SQLITE_THREADSAFE
14986:   sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
14987: #endif
14988:   sqlite3_mutex_enter(mutex);
14989:   vfsUnlink(pVfs);
14990:   sqlite3_mutex_leave(mutex);
14991:   return SQLITE_OK;
14992: }
14993: 
14994: /************** End of os.c **************************************************/
14995: /************** Begin file fault.c *******************************************/
14996: /*
14997: ** 2008 Jan 22
14998: **
14999: ** The author disclaims copyright to this source code.  In place of
15000: ** a legal notice, here is a blessing:
15001: **
15002: **    May you do good and not evil.
15003: **    May you find forgiveness for yourself and forgive others.
15004: **    May you share freely, never taking more than you give.
15005: **
15006: *************************************************************************
15007: **
15008: ** This file contains code to support the concept of "benign" 
15009: ** malloc failures (when the xMalloc() or xRealloc() method of the
15010: ** sqlite3_mem_methods structure fails to allocate a block of memory
15011: ** and returns 0). 
15012: **
15013: ** Most malloc failures are non-benign. After they occur, SQLite
15014: ** abandons the current operation and returns an error code (usually
15015: ** SQLITE_NOMEM) to the user. However, sometimes a fault is not necessarily
15016: ** fatal. For example, if a malloc fails while resizing a hash table, this 
15017: ** is completely recoverable simply by not carrying out the resize. The 
15018: ** hash table will continue to function normally.  So a malloc failure 
15019: ** during a hash table resize is a benign fault.
15020: */
15021: 
15022: 
15023: #ifndef SQLITE_OMIT_BUILTIN_TEST
15024: 
15025: /*
15026: ** Global variables.
15027: */
15028: typedef struct BenignMallocHooks BenignMallocHooks;
15029: static SQLITE_WSD struct BenignMallocHooks {
15030:   void (*xBenignBegin)(void);
15031:   void (*xBenignEnd)(void);
15032: } sqlite3Hooks = { 0, 0 };
15033: 
15034: /* The "wsdHooks" macro will resolve to the appropriate BenignMallocHooks
15035: ** structure.  If writable static data is unsupported on the target,
15036: ** we have to locate the state vector at run-time.  In the more common
15037: ** case where writable static data is supported, wsdHooks can refer directly
15038: ** to the "sqlite3Hooks" state vector declared above.
15039: */
15040: #ifdef SQLITE_OMIT_WSD
15041: # define wsdHooksInit \
15042:   BenignMallocHooks *x = &GLOBAL(BenignMallocHooks,sqlite3Hooks)
15043: # define wsdHooks x[0]
15044: #else
15045: # define wsdHooksInit
15046: # define wsdHooks sqlite3Hooks
15047: #endif
15048: 
15049: 
15050: /*
15051: ** Register hooks to call when sqlite3BeginBenignMalloc() and
15052: ** sqlite3EndBenignMalloc() are called, respectively.
15053: */
15054: SQLITE_PRIVATE void sqlite3BenignMallocHooks(
15055:   void (*xBenignBegin)(void),
15056:   void (*xBenignEnd)(void)
15057: ){
15058:   wsdHooksInit;
15059:   wsdHooks.xBenignBegin = xBenignBegin;
15060:   wsdHooks.xBenignEnd = xBenignEnd;
15061: }
15062: 
15063: /*
15064: ** This (sqlite3EndBenignMalloc()) is called by SQLite code to indicate that
15065: ** subsequent malloc failures are benign. A call to sqlite3EndBenignMalloc()
15066: ** indicates that subsequent malloc failures are non-benign.
15067: */
15068: SQLITE_PRIVATE void sqlite3BeginBenignMalloc(void){
15069:   wsdHooksInit;
15070:   if( wsdHooks.xBenignBegin ){
15071:     wsdHooks.xBenignBegin();
15072:   }
15073: }
15074: SQLITE_PRIVATE void sqlite3EndBenignMalloc(void){
15075:   wsdHooksInit;
15076:   if( wsdHooks.xBenignEnd ){
15077:     wsdHooks.xBenignEnd();
15078:   }
15079: }
15080: 
15081: #endif   /* #ifndef SQLITE_OMIT_BUILTIN_TEST */
15082: 
15083: /************** End of fault.c ***********************************************/
15084: /************** Begin file mem0.c ********************************************/
15085: /*
15086: ** 2008 October 28
15087: **
15088: ** The author disclaims copyright to this source code.  In place of
15089: ** a legal notice, here is a blessing:
15090: **
15091: **    May you do good and not evil.
15092: **    May you find forgiveness for yourself and forgive others.
15093: **    May you share freely, never taking more than you give.
15094: **
15095: *************************************************************************
15096: **
15097: ** This file contains a no-op memory allocation drivers for use when
15098: ** SQLITE_ZERO_MALLOC is defined.  The allocation drivers implemented
15099: ** here always fail.  SQLite will not operate with these drivers.  These
15100: ** are merely placeholders.  Real drivers must be substituted using
15101: ** sqlite3_config() before SQLite will operate.
15102: */
15103: 
15104: /*
15105: ** This version of the memory allocator is the default.  It is
15106: ** used when no other memory allocator is specified using compile-time
15107: ** macros.
15108: */
15109: #ifdef SQLITE_ZERO_MALLOC
15110: 
15111: /*
15112: ** No-op versions of all memory allocation routines
15113: */
15114: static void *sqlite3MemMalloc(int nByte){ return 0; }
15115: static void sqlite3MemFree(void *pPrior){ return; }
15116: static void *sqlite3MemRealloc(void *pPrior, int nByte){ return 0; }
15117: static int sqlite3MemSize(void *pPrior){ return 0; }
15118: static int sqlite3MemRoundup(int n){ return n; }
15119: static int sqlite3MemInit(void *NotUsed){ return SQLITE_OK; }
15120: static void sqlite3MemShutdown(void *NotUsed){ return; }
15121: 
15122: /*
15123: ** This routine is the only routine in this file with external linkage.
15124: **
15125: ** Populate the low-level memory allocation function pointers in
15126: ** sqlite3GlobalConfig.m with pointers to the routines in this file.
15127: */
15128: SQLITE_PRIVATE void sqlite3MemSetDefault(void){
15129:   static const sqlite3_mem_methods defaultMethods = {
15130:      sqlite3MemMalloc,
15131:      sqlite3MemFree,
15132:      sqlite3MemRealloc,
15133:      sqlite3MemSize,
15134:      sqlite3MemRoundup,
15135:      sqlite3MemInit,
15136:      sqlite3MemShutdown,
15137:      0
15138:   };
15139:   sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
15140: }
15141: 
15142: #endif /* SQLITE_ZERO_MALLOC */
15143: 
15144: /************** End of mem0.c ************************************************/
15145: /************** Begin file mem1.c ********************************************/
15146: /*
15147: ** 2007 August 14
15148: **
15149: ** The author disclaims copyright to this source code.  In place of
15150: ** a legal notice, here is a blessing:
15151: **
15152: **    May you do good and not evil.
15153: **    May you find forgiveness for yourself and forgive others.
15154: **    May you share freely, never taking more than you give.
15155: **
15156: *************************************************************************
15157: **
15158: ** This file contains low-level memory allocation drivers for when
15159: ** SQLite will use the standard C-library malloc/realloc/free interface
15160: ** to obtain the memory it needs.
15161: **
15162: ** This file contains implementations of the low-level memory allocation
15163: ** routines specified in the sqlite3_mem_methods object.
15164: */
15165: 
15166: /*
15167: ** This version of the memory allocator is the default.  It is
15168: ** used when no other memory allocator is specified using compile-time
15169: ** macros.
15170: */
15171: #ifdef SQLITE_SYSTEM_MALLOC
15172: 
15173: /*
15174: ** Windows systems have malloc_usable_size() but it is called _msize()
15175: */
15176: #if !defined(HAVE_MALLOC_USABLE_SIZE) && SQLITE_OS_WIN
15177: # define HAVE_MALLOC_USABLE_SIZE 1
15178: # define malloc_usable_size _msize
15179: #endif
15180: 
15181: #if defined(__APPLE__)
15182: 
15183: /*
15184: ** Use the zone allocator available on apple products
15185: */
15186: #include <sys/sysctl.h>
15187: #include <malloc/malloc.h>
15188: #include <libkern/OSAtomic.h>
15189: static malloc_zone_t* _sqliteZone_;
15190: #define SQLITE_MALLOC(x) malloc_zone_malloc(_sqliteZone_, (x))
15191: #define SQLITE_FREE(x) malloc_zone_free(_sqliteZone_, (x));
15192: #define SQLITE_REALLOC(x,y) malloc_zone_realloc(_sqliteZone_, (x), (y))
15193: #define SQLITE_MALLOCSIZE(x) \
15194:         (_sqliteZone_ ? _sqliteZone_->size(_sqliteZone_,x) : malloc_size(x))
15195: 
15196: #else /* if not __APPLE__ */
15197: 
15198: /*
15199: ** Use standard C library malloc and free on non-Apple systems.
15200: */
15201: #define SQLITE_MALLOC(x)    malloc(x)
15202: #define SQLITE_FREE(x)      free(x)
15203: #define SQLITE_REALLOC(x,y) realloc((x),(y))
15204: 
15205: #ifdef HAVE_MALLOC_USABLE_SIZE
15206: #include <malloc.h>
15207: #define SQLITE_MALLOCSIZE(x) malloc_usable_size(x)
15208: #else
15209: #undef SQLITE_MALLOCSIZE
15210: #endif
15211: 
15212: #endif /* __APPLE__ or not __APPLE__ */
15213: 
15214: /*
15215: ** Like malloc(), but remember the size of the allocation
15216: ** so that we can find it later using sqlite3MemSize().
15217: **
15218: ** For this low-level routine, we are guaranteed that nByte>0 because
15219: ** cases of nByte<=0 will be intercepted and dealt with by higher level
15220: ** routines.
15221: */
15222: static void *sqlite3MemMalloc(int nByte){
15223: #ifdef SQLITE_MALLOCSIZE
15224:   void *p = SQLITE_MALLOC( nByte );
15225:   if( p==0 ){
15226:     testcase( sqlite3GlobalConfig.xLog!=0 );
15227:     sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes of memory", nByte);
15228:   }
15229:   return p;
15230: #else
15231:   sqlite3_int64 *p;
15232:   assert( nByte>0 );
15233:   nByte = ROUND8(nByte);
15234:   p = SQLITE_MALLOC( nByte+8 );
15235:   if( p ){
15236:     p[0] = nByte;
15237:     p++;
15238:   }else{
15239:     testcase( sqlite3GlobalConfig.xLog!=0 );
15240:     sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes of memory", nByte);
15241:   }
15242:   return (void *)p;
15243: #endif
15244: }
15245: 
15246: /*
15247: ** Like free() but works for allocations obtained from sqlite3MemMalloc()
15248: ** or sqlite3MemRealloc().
15249: **
15250: ** For this low-level routine, we already know that pPrior!=0 since
15251: ** cases where pPrior==0 will have been intecepted and dealt with
15252: ** by higher-level routines.
15253: */
15254: static void sqlite3MemFree(void *pPrior){
15255: #ifdef SQLITE_MALLOCSIZE
15256:   SQLITE_FREE(pPrior);
15257: #else
15258:   sqlite3_int64 *p = (sqlite3_int64*)pPrior;
15259:   assert( pPrior!=0 );
15260:   p--;
15261:   SQLITE_FREE(p);
15262: #endif
15263: }
15264: 
15265: /*
15266: ** Report the allocated size of a prior return from xMalloc()
15267: ** or xRealloc().
15268: */
15269: static int sqlite3MemSize(void *pPrior){
15270: #ifdef SQLITE_MALLOCSIZE
15271:   return pPrior ? (int)SQLITE_MALLOCSIZE(pPrior) : 0;
15272: #else
15273:   sqlite3_int64 *p;
15274:   if( pPrior==0 ) return 0;
15275:   p = (sqlite3_int64*)pPrior;
15276:   p--;
15277:   return (int)p[0];
15278: #endif
15279: }
15280: 
15281: /*
15282: ** Like realloc().  Resize an allocation previously obtained from
15283: ** sqlite3MemMalloc().
15284: **
15285: ** For this low-level interface, we know that pPrior!=0.  Cases where
15286: ** pPrior==0 while have been intercepted by higher-level routine and
15287: ** redirected to xMalloc.  Similarly, we know that nByte>0 becauses
15288: ** cases where nByte<=0 will have been intercepted by higher-level
15289: ** routines and redirected to xFree.
15290: */
15291: static void *sqlite3MemRealloc(void *pPrior, int nByte){
15292: #ifdef SQLITE_MALLOCSIZE
15293:   void *p = SQLITE_REALLOC(pPrior, nByte);
15294:   if( p==0 ){
15295:     testcase( sqlite3GlobalConfig.xLog!=0 );
15296:     sqlite3_log(SQLITE_NOMEM,
15297:       "failed memory resize %u to %u bytes",
15298:       SQLITE_MALLOCSIZE(pPrior), nByte);
15299:   }
15300:   return p;
15301: #else
15302:   sqlite3_int64 *p = (sqlite3_int64*)pPrior;
15303:   assert( pPrior!=0 && nByte>0 );
15304:   assert( nByte==ROUND8(nByte) ); /* EV: R-46199-30249 */
15305:   p--;
15306:   p = SQLITE_REALLOC(p, nByte+8 );
15307:   if( p ){
15308:     p[0] = nByte;
15309:     p++;
15310:   }else{
15311:     testcase( sqlite3GlobalConfig.xLog!=0 );
15312:     sqlite3_log(SQLITE_NOMEM,
15313:       "failed memory resize %u to %u bytes",
15314:       sqlite3MemSize(pPrior), nByte);
15315:   }
15316:   return (void*)p;
15317: #endif
15318: }
15319: 
15320: /*
15321: ** Round up a request size to the next valid allocation size.
15322: */
15323: static int sqlite3MemRoundup(int n){
15324:   return ROUND8(n);
15325: }
15326: 
15327: /*
15328: ** Initialize this module.
15329: */
15330: static int sqlite3MemInit(void *NotUsed){
15331: #if defined(__APPLE__)
15332:   int cpuCount;
15333:   size_t len;
15334:   if( _sqliteZone_ ){
15335:     return SQLITE_OK;
15336:   }
15337:   len = sizeof(cpuCount);
15338:   /* One usually wants to use hw.acctivecpu for MT decisions, but not here */
15339:   sysctlbyname("hw.ncpu", &cpuCount, &len, NULL, 0);
15340:   if( cpuCount>1 ){
15341:     /* defer MT decisions to system malloc */
15342:     _sqliteZone_ = malloc_default_zone();
15343:   }else{
15344:     /* only 1 core, use our own zone to contention over global locks, 
15345:     ** e.g. we have our own dedicated locks */
15346:     bool success;		
15347:     malloc_zone_t* newzone = malloc_create_zone(4096, 0);
15348:     malloc_set_zone_name(newzone, "Sqlite_Heap");
15349:     do{
15350:       success = OSAtomicCompareAndSwapPtrBarrier(NULL, newzone, 
15351:                                  (void * volatile *)&_sqliteZone_);
15352:     }while(!_sqliteZone_);
15353:     if( !success ){	
15354:       /* somebody registered a zone first */
15355:       malloc_destroy_zone(newzone);
15356:     }
15357:   }
15358: #endif
15359:   UNUSED_PARAMETER(NotUsed);
15360:   return SQLITE_OK;
15361: }
15362: 
15363: /*
15364: ** Deinitialize this module.
15365: */
15366: static void sqlite3MemShutdown(void *NotUsed){
15367:   UNUSED_PARAMETER(NotUsed);
15368:   return;
15369: }
15370: 
15371: /*
15372: ** This routine is the only routine in this file with external linkage.
15373: **
15374: ** Populate the low-level memory allocation function pointers in
15375: ** sqlite3GlobalConfig.m with pointers to the routines in this file.
15376: */
15377: SQLITE_PRIVATE void sqlite3MemSetDefault(void){
15378:   static const sqlite3_mem_methods defaultMethods = {
15379:      sqlite3MemMalloc,
15380:      sqlite3MemFree,
15381:      sqlite3MemRealloc,
15382:      sqlite3MemSize,
15383:      sqlite3MemRoundup,
15384:      sqlite3MemInit,
15385:      sqlite3MemShutdown,
15386:      0
15387:   };
15388:   sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
15389: }
15390: 
15391: #endif /* SQLITE_SYSTEM_MALLOC */
15392: 
15393: /************** End of mem1.c ************************************************/
15394: /************** Begin file mem2.c ********************************************/
15395: /*
15396: ** 2007 August 15
15397: **
15398: ** The author disclaims copyright to this source code.  In place of
15399: ** a legal notice, here is a blessing:
15400: **
15401: **    May you do good and not evil.
15402: **    May you find forgiveness for yourself and forgive others.
15403: **    May you share freely, never taking more than you give.
15404: **
15405: *************************************************************************
15406: **
15407: ** This file contains low-level memory allocation drivers for when
15408: ** SQLite will use the standard C-library malloc/realloc/free interface
15409: ** to obtain the memory it needs while adding lots of additional debugging
15410: ** information to each allocation in order to help detect and fix memory
15411: ** leaks and memory usage errors.
15412: **
15413: ** This file contains implementations of the low-level memory allocation
15414: ** routines specified in the sqlite3_mem_methods object.
15415: */
15416: 
15417: /*
15418: ** This version of the memory allocator is used only if the
15419: ** SQLITE_MEMDEBUG macro is defined
15420: */
15421: #ifdef SQLITE_MEMDEBUG
15422: 
15423: /*
15424: ** The backtrace functionality is only available with GLIBC
15425: */
15426: #ifdef __GLIBC__
15427:   extern int backtrace(void**,int);
15428:   extern void backtrace_symbols_fd(void*const*,int,int);
15429: #else
15430: # define backtrace(A,B) 1
15431: # define backtrace_symbols_fd(A,B,C)
15432: #endif
15433: /* #include <stdio.h> */
15434: 
15435: /*
15436: ** Each memory allocation looks like this:
15437: **
15438: **  ------------------------------------------------------------------------
15439: **  | Title |  backtrace pointers |  MemBlockHdr |  allocation |  EndGuard |
15440: **  ------------------------------------------------------------------------
15441: **
15442: ** The application code sees only a pointer to the allocation.  We have
15443: ** to back up from the allocation pointer to find the MemBlockHdr.  The
15444: ** MemBlockHdr tells us the size of the allocation and the number of
15445: ** backtrace pointers.  There is also a guard word at the end of the
15446: ** MemBlockHdr.
15447: */
15448: struct MemBlockHdr {
15449:   i64 iSize;                          /* Size of this allocation */
15450:   struct MemBlockHdr *pNext, *pPrev;  /* Linked list of all unfreed memory */
15451:   char nBacktrace;                    /* Number of backtraces on this alloc */
15452:   char nBacktraceSlots;               /* Available backtrace slots */
15453:   u8 nTitle;                          /* Bytes of title; includes '\0' */
15454:   u8 eType;                           /* Allocation type code */
15455:   int iForeGuard;                     /* Guard word for sanity */
15456: };
15457: 
15458: /*
15459: ** Guard words
15460: */
15461: #define FOREGUARD 0x80F5E153
15462: #define REARGUARD 0xE4676B53
15463: 
15464: /*
15465: ** Number of malloc size increments to track.
15466: */
15467: #define NCSIZE  1000
15468: 
15469: /*
15470: ** All of the static variables used by this module are collected
15471: ** into a single structure named "mem".  This is to keep the
15472: ** static variables organized and to reduce namespace pollution
15473: ** when this module is combined with other in the amalgamation.
15474: */
15475: static struct {
15476:   
15477:   /*
15478:   ** Mutex to control access to the memory allocation subsystem.
15479:   */
15480:   sqlite3_mutex *mutex;
15481: 
15482:   /*
15483:   ** Head and tail of a linked list of all outstanding allocations
15484:   */
15485:   struct MemBlockHdr *pFirst;
15486:   struct MemBlockHdr *pLast;
15487:   
15488:   /*
15489:   ** The number of levels of backtrace to save in new allocations.
15490:   */
15491:   int nBacktrace;
15492:   void (*xBacktrace)(int, int, void **);
15493: 
15494:   /*
15495:   ** Title text to insert in front of each block
15496:   */
15497:   int nTitle;        /* Bytes of zTitle to save.  Includes '\0' and padding */
15498:   char zTitle[100];  /* The title text */
15499: 
15500:   /* 
15501:   ** sqlite3MallocDisallow() increments the following counter.
15502:   ** sqlite3MallocAllow() decrements it.
15503:   */
15504:   int disallow; /* Do not allow memory allocation */
15505: 
15506:   /*
15507:   ** Gather statistics on the sizes of memory allocations.
15508:   ** nAlloc[i] is the number of allocation attempts of i*8
15509:   ** bytes.  i==NCSIZE is the number of allocation attempts for
15510:   ** sizes more than NCSIZE*8 bytes.
15511:   */
15512:   int nAlloc[NCSIZE];      /* Total number of allocations */
15513:   int nCurrent[NCSIZE];    /* Current number of allocations */
15514:   int mxCurrent[NCSIZE];   /* Highwater mark for nCurrent */
15515: 
15516: } mem;
15517: 
15518: 
15519: /*
15520: ** Adjust memory usage statistics
15521: */
15522: static void adjustStats(int iSize, int increment){
15523:   int i = ROUND8(iSize)/8;
15524:   if( i>NCSIZE-1 ){
15525:     i = NCSIZE - 1;
15526:   }
15527:   if( increment>0 ){
15528:     mem.nAlloc[i]++;
15529:     mem.nCurrent[i]++;
15530:     if( mem.nCurrent[i]>mem.mxCurrent[i] ){
15531:       mem.mxCurrent[i] = mem.nCurrent[i];
15532:     }
15533:   }else{
15534:     mem.nCurrent[i]--;
15535:     assert( mem.nCurrent[i]>=0 );
15536:   }
15537: }
15538: 
15539: /*
15540: ** Given an allocation, find the MemBlockHdr for that allocation.
15541: **
15542: ** This routine checks the guards at either end of the allocation and
15543: ** if they are incorrect it asserts.
15544: */
15545: static struct MemBlockHdr *sqlite3MemsysGetHeader(void *pAllocation){
15546:   struct MemBlockHdr *p;
15547:   int *pInt;
15548:   u8 *pU8;
15549:   int nReserve;
15550: 
15551:   p = (struct MemBlockHdr*)pAllocation;
15552:   p--;
15553:   assert( p->iForeGuard==(int)FOREGUARD );
15554:   nReserve = ROUND8(p->iSize);
15555:   pInt = (int*)pAllocation;
15556:   pU8 = (u8*)pAllocation;
15557:   assert( pInt[nReserve/sizeof(int)]==(int)REARGUARD );
15558:   /* This checks any of the "extra" bytes allocated due
15559:   ** to rounding up to an 8 byte boundary to ensure 
15560:   ** they haven't been overwritten.
15561:   */
15562:   while( nReserve-- > p->iSize ) assert( pU8[nReserve]==0x65 );
15563:   return p;
15564: }
15565: 
15566: /*
15567: ** Return the number of bytes currently allocated at address p.
15568: */
15569: static int sqlite3MemSize(void *p){
15570:   struct MemBlockHdr *pHdr;
15571:   if( !p ){
15572:     return 0;
15573:   }
15574:   pHdr = sqlite3MemsysGetHeader(p);
15575:   return pHdr->iSize;
15576: }
15577: 
15578: /*
15579: ** Initialize the memory allocation subsystem.
15580: */
15581: static int sqlite3MemInit(void *NotUsed){
15582:   UNUSED_PARAMETER(NotUsed);
15583:   assert( (sizeof(struct MemBlockHdr)&7) == 0 );
15584:   if( !sqlite3GlobalConfig.bMemstat ){
15585:     /* If memory status is enabled, then the malloc.c wrapper will already
15586:     ** hold the STATIC_MEM mutex when the routines here are invoked. */
15587:     mem.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
15588:   }
15589:   return SQLITE_OK;
15590: }
15591: 
15592: /*
15593: ** Deinitialize the memory allocation subsystem.
15594: */
15595: static void sqlite3MemShutdown(void *NotUsed){
15596:   UNUSED_PARAMETER(NotUsed);
15597:   mem.mutex = 0;
15598: }
15599: 
15600: /*
15601: ** Round up a request size to the next valid allocation size.
15602: */
15603: static int sqlite3MemRoundup(int n){
15604:   return ROUND8(n);
15605: }
15606: 
15607: /*
15608: ** Fill a buffer with pseudo-random bytes.  This is used to preset
15609: ** the content of a new memory allocation to unpredictable values and
15610: ** to clear the content of a freed allocation to unpredictable values.
15611: */
15612: static void randomFill(char *pBuf, int nByte){
15613:   unsigned int x, y, r;
15614:   x = SQLITE_PTR_TO_INT(pBuf);
15615:   y = nByte | 1;
15616:   while( nByte >= 4 ){
15617:     x = (x>>1) ^ (-(x&1) & 0xd0000001);
15618:     y = y*1103515245 + 12345;
15619:     r = x ^ y;
15620:     *(int*)pBuf = r;
15621:     pBuf += 4;
15622:     nByte -= 4;
15623:   }
15624:   while( nByte-- > 0 ){
15625:     x = (x>>1) ^ (-(x&1) & 0xd0000001);
15626:     y = y*1103515245 + 12345;
15627:     r = x ^ y;
15628:     *(pBuf++) = r & 0xff;
15629:   }
15630: }
15631: 
15632: /*
15633: ** Allocate nByte bytes of memory.
15634: */
15635: static void *sqlite3MemMalloc(int nByte){
15636:   struct MemBlockHdr *pHdr;
15637:   void **pBt;
15638:   char *z;
15639:   int *pInt;
15640:   void *p = 0;
15641:   int totalSize;
15642:   int nReserve;
15643:   sqlite3_mutex_enter(mem.mutex);
15644:   assert( mem.disallow==0 );
15645:   nReserve = ROUND8(nByte);
15646:   totalSize = nReserve + sizeof(*pHdr) + sizeof(int) +
15647:                mem.nBacktrace*sizeof(void*) + mem.nTitle;
15648:   p = malloc(totalSize);
15649:   if( p ){
15650:     z = p;
15651:     pBt = (void**)&z[mem.nTitle];
15652:     pHdr = (struct MemBlockHdr*)&pBt[mem.nBacktrace];
15653:     pHdr->pNext = 0;
15654:     pHdr->pPrev = mem.pLast;
15655:     if( mem.pLast ){
15656:       mem.pLast->pNext = pHdr;
15657:     }else{
15658:       mem.pFirst = pHdr;
15659:     }
15660:     mem.pLast = pHdr;
15661:     pHdr->iForeGuard = FOREGUARD;
15662:     pHdr->eType = MEMTYPE_HEAP;
15663:     pHdr->nBacktraceSlots = mem.nBacktrace;
15664:     pHdr->nTitle = mem.nTitle;
15665:     if( mem.nBacktrace ){
15666:       void *aAddr[40];
15667:       pHdr->nBacktrace = backtrace(aAddr, mem.nBacktrace+1)-1;
15668:       memcpy(pBt, &aAddr[1], pHdr->nBacktrace*sizeof(void*));
15669:       assert(pBt[0]);
15670:       if( mem.xBacktrace ){
15671:         mem.xBacktrace(nByte, pHdr->nBacktrace-1, &aAddr[1]);
15672:       }
15673:     }else{
15674:       pHdr->nBacktrace = 0;
15675:     }
15676:     if( mem.nTitle ){
15677:       memcpy(z, mem.zTitle, mem.nTitle);
15678:     }
15679:     pHdr->iSize = nByte;
15680:     adjustStats(nByte, +1);
15681:     pInt = (int*)&pHdr[1];
15682:     pInt[nReserve/sizeof(int)] = REARGUARD;
15683:     randomFill((char*)pInt, nByte);
15684:     memset(((char*)pInt)+nByte, 0x65, nReserve-nByte);
15685:     p = (void*)pInt;
15686:   }
15687:   sqlite3_mutex_leave(mem.mutex);
15688:   return p; 
15689: }
15690: 
15691: /*
15692: ** Free memory.
15693: */
15694: static void sqlite3MemFree(void *pPrior){
15695:   struct MemBlockHdr *pHdr;
15696:   void **pBt;
15697:   char *z;
15698:   assert( sqlite3GlobalConfig.bMemstat || sqlite3GlobalConfig.bCoreMutex==0 
15699:        || mem.mutex!=0 );
15700:   pHdr = sqlite3MemsysGetHeader(pPrior);
15701:   pBt = (void**)pHdr;
15702:   pBt -= pHdr->nBacktraceSlots;
15703:   sqlite3_mutex_enter(mem.mutex);
15704:   if( pHdr->pPrev ){
15705:     assert( pHdr->pPrev->pNext==pHdr );
15706:     pHdr->pPrev->pNext = pHdr->pNext;
15707:   }else{
15708:     assert( mem.pFirst==pHdr );
15709:     mem.pFirst = pHdr->pNext;
15710:   }
15711:   if( pHdr->pNext ){
15712:     assert( pHdr->pNext->pPrev==pHdr );
15713:     pHdr->pNext->pPrev = pHdr->pPrev;
15714:   }else{
15715:     assert( mem.pLast==pHdr );
15716:     mem.pLast = pHdr->pPrev;
15717:   }
15718:   z = (char*)pBt;
15719:   z -= pHdr->nTitle;
15720:   adjustStats(pHdr->iSize, -1);
15721:   randomFill(z, sizeof(void*)*pHdr->nBacktraceSlots + sizeof(*pHdr) +
15722:                 pHdr->iSize + sizeof(int) + pHdr->nTitle);
15723:   free(z);
15724:   sqlite3_mutex_leave(mem.mutex);  
15725: }
15726: 
15727: /*
15728: ** Change the size of an existing memory allocation.
15729: **
15730: ** For this debugging implementation, we *always* make a copy of the
15731: ** allocation into a new place in memory.  In this way, if the 
15732: ** higher level code is using pointer to the old allocation, it is 
15733: ** much more likely to break and we are much more liking to find
15734: ** the error.
15735: */
15736: static void *sqlite3MemRealloc(void *pPrior, int nByte){
15737:   struct MemBlockHdr *pOldHdr;
15738:   void *pNew;
15739:   assert( mem.disallow==0 );
15740:   assert( (nByte & 7)==0 );     /* EV: R-46199-30249 */
15741:   pOldHdr = sqlite3MemsysGetHeader(pPrior);
15742:   pNew = sqlite3MemMalloc(nByte);
15743:   if( pNew ){
15744:     memcpy(pNew, pPrior, nByte<pOldHdr->iSize ? nByte : pOldHdr->iSize);
15745:     if( nByte>pOldHdr->iSize ){
15746:       randomFill(&((char*)pNew)[pOldHdr->iSize], nByte - pOldHdr->iSize);
15747:     }
15748:     sqlite3MemFree(pPrior);
15749:   }
15750:   return pNew;
15751: }
15752: 
15753: /*
15754: ** Populate the low-level memory allocation function pointers in
15755: ** sqlite3GlobalConfig.m with pointers to the routines in this file.
15756: */
15757: SQLITE_PRIVATE void sqlite3MemSetDefault(void){
15758:   static const sqlite3_mem_methods defaultMethods = {
15759:      sqlite3MemMalloc,
15760:      sqlite3MemFree,
15761:      sqlite3MemRealloc,
15762:      sqlite3MemSize,
15763:      sqlite3MemRoundup,
15764:      sqlite3MemInit,
15765:      sqlite3MemShutdown,
15766:      0
15767:   };
15768:   sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
15769: }
15770: 
15771: /*
15772: ** Set the "type" of an allocation.
15773: */
15774: SQLITE_PRIVATE void sqlite3MemdebugSetType(void *p, u8 eType){
15775:   if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
15776:     struct MemBlockHdr *pHdr;
15777:     pHdr = sqlite3MemsysGetHeader(p);
15778:     assert( pHdr->iForeGuard==FOREGUARD );
15779:     pHdr->eType = eType;
15780:   }
15781: }
15782: 
15783: /*
15784: ** Return TRUE if the mask of type in eType matches the type of the
15785: ** allocation p.  Also return true if p==NULL.
15786: **
15787: ** This routine is designed for use within an assert() statement, to
15788: ** verify the type of an allocation.  For example:
15789: **
15790: **     assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
15791: */
15792: SQLITE_PRIVATE int sqlite3MemdebugHasType(void *p, u8 eType){
15793:   int rc = 1;
15794:   if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
15795:     struct MemBlockHdr *pHdr;
15796:     pHdr = sqlite3MemsysGetHeader(p);
15797:     assert( pHdr->iForeGuard==FOREGUARD );         /* Allocation is valid */
15798:     if( (pHdr->eType&eType)==0 ){
15799:       rc = 0;
15800:     }
15801:   }
15802:   return rc;
15803: }
15804: 
15805: /*
15806: ** Return TRUE if the mask of type in eType matches no bits of the type of the
15807: ** allocation p.  Also return true if p==NULL.
15808: **
15809: ** This routine is designed for use within an assert() statement, to
15810: ** verify the type of an allocation.  For example:
15811: **
15812: **     assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
15813: */
15814: SQLITE_PRIVATE int sqlite3MemdebugNoType(void *p, u8 eType){
15815:   int rc = 1;
15816:   if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
15817:     struct MemBlockHdr *pHdr;
15818:     pHdr = sqlite3MemsysGetHeader(p);
15819:     assert( pHdr->iForeGuard==FOREGUARD );         /* Allocation is valid */
15820:     if( (pHdr->eType&eType)!=0 ){
15821:       rc = 0;
15822:     }
15823:   }
15824:   return rc;
15825: }
15826: 
15827: /*
15828: ** Set the number of backtrace levels kept for each allocation.
15829: ** A value of zero turns off backtracing.  The number is always rounded
15830: ** up to a multiple of 2.
15831: */
15832: SQLITE_PRIVATE void sqlite3MemdebugBacktrace(int depth){
15833:   if( depth<0 ){ depth = 0; }
15834:   if( depth>20 ){ depth = 20; }
15835:   depth = (depth+1)&0xfe;
15836:   mem.nBacktrace = depth;
15837: }
15838: 
15839: SQLITE_PRIVATE void sqlite3MemdebugBacktraceCallback(void (*xBacktrace)(int, int, void **)){
15840:   mem.xBacktrace = xBacktrace;
15841: }
15842: 
15843: /*
15844: ** Set the title string for subsequent allocations.
15845: */
15846: SQLITE_PRIVATE void sqlite3MemdebugSettitle(const char *zTitle){
15847:   unsigned int n = sqlite3Strlen30(zTitle) + 1;
15848:   sqlite3_mutex_enter(mem.mutex);
15849:   if( n>=sizeof(mem.zTitle) ) n = sizeof(mem.zTitle)-1;
15850:   memcpy(mem.zTitle, zTitle, n);
15851:   mem.zTitle[n] = 0;
15852:   mem.nTitle = ROUND8(n);
15853:   sqlite3_mutex_leave(mem.mutex);
15854: }
15855: 
15856: SQLITE_PRIVATE void sqlite3MemdebugSync(){
15857:   struct MemBlockHdr *pHdr;
15858:   for(pHdr=mem.pFirst; pHdr; pHdr=pHdr->pNext){
15859:     void **pBt = (void**)pHdr;
15860:     pBt -= pHdr->nBacktraceSlots;
15861:     mem.xBacktrace(pHdr->iSize, pHdr->nBacktrace-1, &pBt[1]);
15862:   }
15863: }
15864: 
15865: /*
15866: ** Open the file indicated and write a log of all unfreed memory 
15867: ** allocations into that log.
15868: */
15869: SQLITE_PRIVATE void sqlite3MemdebugDump(const char *zFilename){
15870:   FILE *out;
15871:   struct MemBlockHdr *pHdr;
15872:   void **pBt;
15873:   int i;
15874:   out = fopen(zFilename, "w");
15875:   if( out==0 ){
15876:     fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
15877:                     zFilename);
15878:     return;
15879:   }
15880:   for(pHdr=mem.pFirst; pHdr; pHdr=pHdr->pNext){
15881:     char *z = (char*)pHdr;
15882:     z -= pHdr->nBacktraceSlots*sizeof(void*) + pHdr->nTitle;
15883:     fprintf(out, "**** %lld bytes at %p from %s ****\n", 
15884:             pHdr->iSize, &pHdr[1], pHdr->nTitle ? z : "???");
15885:     if( pHdr->nBacktrace ){
15886:       fflush(out);
15887:       pBt = (void**)pHdr;
15888:       pBt -= pHdr->nBacktraceSlots;
15889:       backtrace_symbols_fd(pBt, pHdr->nBacktrace, fileno(out));
15890:       fprintf(out, "\n");
15891:     }
15892:   }
15893:   fprintf(out, "COUNTS:\n");
15894:   for(i=0; i<NCSIZE-1; i++){
15895:     if( mem.nAlloc[i] ){
15896:       fprintf(out, "   %5d: %10d %10d %10d\n", 
15897:             i*8, mem.nAlloc[i], mem.nCurrent[i], mem.mxCurrent[i]);
15898:     }
15899:   }
15900:   if( mem.nAlloc[NCSIZE-1] ){
15901:     fprintf(out, "   %5d: %10d %10d %10d\n",
15902:              NCSIZE*8-8, mem.nAlloc[NCSIZE-1],
15903:              mem.nCurrent[NCSIZE-1], mem.mxCurrent[NCSIZE-1]);
15904:   }
15905:   fclose(out);
15906: }
15907: 
15908: /*
15909: ** Return the number of times sqlite3MemMalloc() has been called.
15910: */
15911: SQLITE_PRIVATE int sqlite3MemdebugMallocCount(){
15912:   int i;
15913:   int nTotal = 0;
15914:   for(i=0; i<NCSIZE; i++){
15915:     nTotal += mem.nAlloc[i];
15916:   }
15917:   return nTotal;
15918: }
15919: 
15920: 
15921: #endif /* SQLITE_MEMDEBUG */
15922: 
15923: /************** End of mem2.c ************************************************/
15924: /************** Begin file mem3.c ********************************************/
15925: /*
15926: ** 2007 October 14
15927: **
15928: ** The author disclaims copyright to this source code.  In place of
15929: ** a legal notice, here is a blessing:
15930: **
15931: **    May you do good and not evil.
15932: **    May you find forgiveness for yourself and forgive others.
15933: **    May you share freely, never taking more than you give.
15934: **
15935: *************************************************************************
15936: ** This file contains the C functions that implement a memory
15937: ** allocation subsystem for use by SQLite. 
15938: **
15939: ** This version of the memory allocation subsystem omits all
15940: ** use of malloc(). The SQLite user supplies a block of memory
15941: ** before calling sqlite3_initialize() from which allocations
15942: ** are made and returned by the xMalloc() and xRealloc() 
15943: ** implementations. Once sqlite3_initialize() has been called,
15944: ** the amount of memory available to SQLite is fixed and cannot
15945: ** be changed.
15946: **
15947: ** This version of the memory allocation subsystem is included
15948: ** in the build only if SQLITE_ENABLE_MEMSYS3 is defined.
15949: */
15950: 
15951: /*
15952: ** This version of the memory allocator is only built into the library
15953: ** SQLITE_ENABLE_MEMSYS3 is defined. Defining this symbol does not
15954: ** mean that the library will use a memory-pool by default, just that
15955: ** it is available. The mempool allocator is activated by calling
15956: ** sqlite3_config().
15957: */
15958: #ifdef SQLITE_ENABLE_MEMSYS3
15959: 
15960: /*
15961: ** Maximum size (in Mem3Blocks) of a "small" chunk.
15962: */
15963: #define MX_SMALL 10
15964: 
15965: 
15966: /*
15967: ** Number of freelist hash slots
15968: */
15969: #define N_HASH  61
15970: 
15971: /*
15972: ** A memory allocation (also called a "chunk") consists of two or 
15973: ** more blocks where each block is 8 bytes.  The first 8 bytes are 
15974: ** a header that is not returned to the user.
15975: **
15976: ** A chunk is two or more blocks that is either checked out or
15977: ** free.  The first block has format u.hdr.  u.hdr.size4x is 4 times the
15978: ** size of the allocation in blocks if the allocation is free.
15979: ** The u.hdr.size4x&1 bit is true if the chunk is checked out and
15980: ** false if the chunk is on the freelist.  The u.hdr.size4x&2 bit
15981: ** is true if the previous chunk is checked out and false if the
15982: ** previous chunk is free.  The u.hdr.prevSize field is the size of
15983: ** the previous chunk in blocks if the previous chunk is on the
15984: ** freelist. If the previous chunk is checked out, then
15985: ** u.hdr.prevSize can be part of the data for that chunk and should
15986: ** not be read or written.
15987: **
15988: ** We often identify a chunk by its index in mem3.aPool[].  When
15989: ** this is done, the chunk index refers to the second block of
15990: ** the chunk.  In this way, the first chunk has an index of 1.
15991: ** A chunk index of 0 means "no such chunk" and is the equivalent
15992: ** of a NULL pointer.
15993: **
15994: ** The second block of free chunks is of the form u.list.  The
15995: ** two fields form a double-linked list of chunks of related sizes.
15996: ** Pointers to the head of the list are stored in mem3.aiSmall[] 
15997: ** for smaller chunks and mem3.aiHash[] for larger chunks.
15998: **
15999: ** The second block of a chunk is user data if the chunk is checked 
16000: ** out.  If a chunk is checked out, the user data may extend into
16001: ** the u.hdr.prevSize value of the following chunk.
16002: */
16003: typedef struct Mem3Block Mem3Block;
16004: struct Mem3Block {
16005:   union {
16006:     struct {
16007:       u32 prevSize;   /* Size of previous chunk in Mem3Block elements */
16008:       u32 size4x;     /* 4x the size of current chunk in Mem3Block elements */
16009:     } hdr;
16010:     struct {
16011:       u32 next;       /* Index in mem3.aPool[] of next free chunk */
16012:       u32 prev;       /* Index in mem3.aPool[] of previous free chunk */
16013:     } list;
16014:   } u;
16015: };
16016: 
16017: /*
16018: ** All of the static variables used by this module are collected
16019: ** into a single structure named "mem3".  This is to keep the
16020: ** static variables organized and to reduce namespace pollution
16021: ** when this module is combined with other in the amalgamation.
16022: */
16023: static SQLITE_WSD struct Mem3Global {
16024:   /*
16025:   ** Memory available for allocation. nPool is the size of the array
16026:   ** (in Mem3Blocks) pointed to by aPool less 2.
16027:   */
16028:   u32 nPool;
16029:   Mem3Block *aPool;
16030: 
16031:   /*
16032:   ** True if we are evaluating an out-of-memory callback.
16033:   */
16034:   int alarmBusy;
16035:   
16036:   /*
16037:   ** Mutex to control access to the memory allocation subsystem.
16038:   */
16039:   sqlite3_mutex *mutex;
16040:   
16041:   /*
16042:   ** The minimum amount of free space that we have seen.
16043:   */
16044:   u32 mnMaster;
16045: 
16046:   /*
16047:   ** iMaster is the index of the master chunk.  Most new allocations
16048:   ** occur off of this chunk.  szMaster is the size (in Mem3Blocks)
16049:   ** of the current master.  iMaster is 0 if there is not master chunk.
16050:   ** The master chunk is not in either the aiHash[] or aiSmall[].
16051:   */
16052:   u32 iMaster;
16053:   u32 szMaster;
16054: 
16055:   /*
16056:   ** Array of lists of free blocks according to the block size 
16057:   ** for smaller chunks, or a hash on the block size for larger
16058:   ** chunks.
16059:   */
16060:   u32 aiSmall[MX_SMALL-1];   /* For sizes 2 through MX_SMALL, inclusive */
16061:   u32 aiHash[N_HASH];        /* For sizes MX_SMALL+1 and larger */
16062: } mem3 = { 97535575 };
16063: 
16064: #define mem3 GLOBAL(struct Mem3Global, mem3)
16065: 
16066: /*
16067: ** Unlink the chunk at mem3.aPool[i] from list it is currently
16068: ** on.  *pRoot is the list that i is a member of.
16069: */
16070: static void memsys3UnlinkFromList(u32 i, u32 *pRoot){
16071:   u32 next = mem3.aPool[i].u.list.next;
16072:   u32 prev = mem3.aPool[i].u.list.prev;
16073:   assert( sqlite3_mutex_held(mem3.mutex) );
16074:   if( prev==0 ){
16075:     *pRoot = next;
16076:   }else{
16077:     mem3.aPool[prev].u.list.next = next;
16078:   }
16079:   if( next ){
16080:     mem3.aPool[next].u.list.prev = prev;
16081:   }
16082:   mem3.aPool[i].u.list.next = 0;
16083:   mem3.aPool[i].u.list.prev = 0;
16084: }
16085: 
16086: /*
16087: ** Unlink the chunk at index i from 
16088: ** whatever list is currently a member of.
16089: */
16090: static void memsys3Unlink(u32 i){
16091:   u32 size, hash;
16092:   assert( sqlite3_mutex_held(mem3.mutex) );
16093:   assert( (mem3.aPool[i-1].u.hdr.size4x & 1)==0 );
16094:   assert( i>=1 );
16095:   size = mem3.aPool[i-1].u.hdr.size4x/4;
16096:   assert( size==mem3.aPool[i+size-1].u.hdr.prevSize );
16097:   assert( size>=2 );
16098:   if( size <= MX_SMALL ){
16099:     memsys3UnlinkFromList(i, &mem3.aiSmall[size-2]);
16100:   }else{
16101:     hash = size % N_HASH;
16102:     memsys3UnlinkFromList(i, &mem3.aiHash[hash]);
16103:   }
16104: }
16105: 
16106: /*
16107: ** Link the chunk at mem3.aPool[i] so that is on the list rooted
16108: ** at *pRoot.
16109: */
16110: static void memsys3LinkIntoList(u32 i, u32 *pRoot){
16111:   assert( sqlite3_mutex_held(mem3.mutex) );
16112:   mem3.aPool[i].u.list.next = *pRoot;
16113:   mem3.aPool[i].u.list.prev = 0;
16114:   if( *pRoot ){
16115:     mem3.aPool[*pRoot].u.list.prev = i;
16116:   }
16117:   *pRoot = i;
16118: }
16119: 
16120: /*
16121: ** Link the chunk at index i into either the appropriate
16122: ** small chunk list, or into the large chunk hash table.
16123: */
16124: static void memsys3Link(u32 i){
16125:   u32 size, hash;
16126:   assert( sqlite3_mutex_held(mem3.mutex) );
16127:   assert( i>=1 );
16128:   assert( (mem3.aPool[i-1].u.hdr.size4x & 1)==0 );
16129:   size = mem3.aPool[i-1].u.hdr.size4x/4;
16130:   assert( size==mem3.aPool[i+size-1].u.hdr.prevSize );
16131:   assert( size>=2 );
16132:   if( size <= MX_SMALL ){
16133:     memsys3LinkIntoList(i, &mem3.aiSmall[size-2]);
16134:   }else{
16135:     hash = size % N_HASH;
16136:     memsys3LinkIntoList(i, &mem3.aiHash[hash]);
16137:   }
16138: }
16139: 
16140: /*
16141: ** If the STATIC_MEM mutex is not already held, obtain it now. The mutex
16142: ** will already be held (obtained by code in malloc.c) if
16143: ** sqlite3GlobalConfig.bMemStat is true.
16144: */
16145: static void memsys3Enter(void){
16146:   if( sqlite3GlobalConfig.bMemstat==0 && mem3.mutex==0 ){
16147:     mem3.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
16148:   }
16149:   sqlite3_mutex_enter(mem3.mutex);
16150: }
16151: static void memsys3Leave(void){
16152:   sqlite3_mutex_leave(mem3.mutex);
16153: }
16154: 
16155: /*
16156: ** Called when we are unable to satisfy an allocation of nBytes.
16157: */
16158: static void memsys3OutOfMemory(int nByte){
16159:   if( !mem3.alarmBusy ){
16160:     mem3.alarmBusy = 1;
16161:     assert( sqlite3_mutex_held(mem3.mutex) );
16162:     sqlite3_mutex_leave(mem3.mutex);
16163:     sqlite3_release_memory(nByte);
16164:     sqlite3_mutex_enter(mem3.mutex);
16165:     mem3.alarmBusy = 0;
16166:   }
16167: }
16168: 
16169: 
16170: /*
16171: ** Chunk i is a free chunk that has been unlinked.  Adjust its 
16172: ** size parameters for check-out and return a pointer to the 
16173: ** user portion of the chunk.
16174: */
16175: static void *memsys3Checkout(u32 i, u32 nBlock){
16176:   u32 x;
16177:   assert( sqlite3_mutex_held(mem3.mutex) );
16178:   assert( i>=1 );
16179:   assert( mem3.aPool[i-1].u.hdr.size4x/4==nBlock );
16180:   assert( mem3.aPool[i+nBlock-1].u.hdr.prevSize==nBlock );
16181:   x = mem3.aPool[i-1].u.hdr.size4x;
16182:   mem3.aPool[i-1].u.hdr.size4x = nBlock*4 | 1 | (x&2);
16183:   mem3.aPool[i+nBlock-1].u.hdr.prevSize = nBlock;
16184:   mem3.aPool[i+nBlock-1].u.hdr.size4x |= 2;
16185:   return &mem3.aPool[i];
16186: }
16187: 
16188: /*
16189: ** Carve a piece off of the end of the mem3.iMaster free chunk.
16190: ** Return a pointer to the new allocation.  Or, if the master chunk
16191: ** is not large enough, return 0.
16192: */
16193: static void *memsys3FromMaster(u32 nBlock){
16194:   assert( sqlite3_mutex_held(mem3.mutex) );
16195:   assert( mem3.szMaster>=nBlock );
16196:   if( nBlock>=mem3.szMaster-1 ){
16197:     /* Use the entire master */
16198:     void *p = memsys3Checkout(mem3.iMaster, mem3.szMaster);
16199:     mem3.iMaster = 0;
16200:     mem3.szMaster = 0;
16201:     mem3.mnMaster = 0;
16202:     return p;
16203:   }else{
16204:     /* Split the master block.  Return the tail. */
16205:     u32 newi, x;
16206:     newi = mem3.iMaster + mem3.szMaster - nBlock;
16207:     assert( newi > mem3.iMaster+1 );
16208:     mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = nBlock;
16209:     mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x |= 2;
16210:     mem3.aPool[newi-1].u.hdr.size4x = nBlock*4 + 1;
16211:     mem3.szMaster -= nBlock;
16212:     mem3.aPool[newi-1].u.hdr.prevSize = mem3.szMaster;
16213:     x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
16214:     mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
16215:     if( mem3.szMaster < mem3.mnMaster ){
16216:       mem3.mnMaster = mem3.szMaster;
16217:     }
16218:     return (void*)&mem3.aPool[newi];
16219:   }
16220: }
16221: 
16222: /*
16223: ** *pRoot is the head of a list of free chunks of the same size
16224: ** or same size hash.  In other words, *pRoot is an entry in either
16225: ** mem3.aiSmall[] or mem3.aiHash[].  
16226: **
16227: ** This routine examines all entries on the given list and tries
16228: ** to coalesce each entries with adjacent free chunks.  
16229: **
16230: ** If it sees a chunk that is larger than mem3.iMaster, it replaces 
16231: ** the current mem3.iMaster with the new larger chunk.  In order for
16232: ** this mem3.iMaster replacement to work, the master chunk must be
16233: ** linked into the hash tables.  That is not the normal state of
16234: ** affairs, of course.  The calling routine must link the master
16235: ** chunk before invoking this routine, then must unlink the (possibly
16236: ** changed) master chunk once this routine has finished.
16237: */
16238: static void memsys3Merge(u32 *pRoot){
16239:   u32 iNext, prev, size, i, x;
16240: 
16241:   assert( sqlite3_mutex_held(mem3.mutex) );
16242:   for(i=*pRoot; i>0; i=iNext){
16243:     iNext = mem3.aPool[i].u.list.next;
16244:     size = mem3.aPool[i-1].u.hdr.size4x;
16245:     assert( (size&1)==0 );
16246:     if( (size&2)==0 ){
16247:       memsys3UnlinkFromList(i, pRoot);
16248:       assert( i > mem3.aPool[i-1].u.hdr.prevSize );
16249:       prev = i - mem3.aPool[i-1].u.hdr.prevSize;
16250:       if( prev==iNext ){
16251:         iNext = mem3.aPool[prev].u.list.next;
16252:       }
16253:       memsys3Unlink(prev);
16254:       size = i + size/4 - prev;
16255:       x = mem3.aPool[prev-1].u.hdr.size4x & 2;
16256:       mem3.aPool[prev-1].u.hdr.size4x = size*4 | x;
16257:       mem3.aPool[prev+size-1].u.hdr.prevSize = size;
16258:       memsys3Link(prev);
16259:       i = prev;
16260:     }else{
16261:       size /= 4;
16262:     }
16263:     if( size>mem3.szMaster ){
16264:       mem3.iMaster = i;
16265:       mem3.szMaster = size;
16266:     }
16267:   }
16268: }
16269: 
16270: /*
16271: ** Return a block of memory of at least nBytes in size.
16272: ** Return NULL if unable.
16273: **
16274: ** This function assumes that the necessary mutexes, if any, are
16275: ** already held by the caller. Hence "Unsafe".
16276: */
16277: static void *memsys3MallocUnsafe(int nByte){
16278:   u32 i;
16279:   u32 nBlock;
16280:   u32 toFree;
16281: 
16282:   assert( sqlite3_mutex_held(mem3.mutex) );
16283:   assert( sizeof(Mem3Block)==8 );
16284:   if( nByte<=12 ){
16285:     nBlock = 2;
16286:   }else{
16287:     nBlock = (nByte + 11)/8;
16288:   }
16289:   assert( nBlock>=2 );
16290: 
16291:   /* STEP 1:
16292:   ** Look for an entry of the correct size in either the small
16293:   ** chunk table or in the large chunk hash table.  This is
16294:   ** successful most of the time (about 9 times out of 10).
16295:   */
16296:   if( nBlock <= MX_SMALL ){
16297:     i = mem3.aiSmall[nBlock-2];
16298:     if( i>0 ){
16299:       memsys3UnlinkFromList(i, &mem3.aiSmall[nBlock-2]);
16300:       return memsys3Checkout(i, nBlock);
16301:     }
16302:   }else{
16303:     int hash = nBlock % N_HASH;
16304:     for(i=mem3.aiHash[hash]; i>0; i=mem3.aPool[i].u.list.next){
16305:       if( mem3.aPool[i-1].u.hdr.size4x/4==nBlock ){
16306:         memsys3UnlinkFromList(i, &mem3.aiHash[hash]);
16307:         return memsys3Checkout(i, nBlock);
16308:       }
16309:     }
16310:   }
16311: 
16312:   /* STEP 2:
16313:   ** Try to satisfy the allocation by carving a piece off of the end
16314:   ** of the master chunk.  This step usually works if step 1 fails.
16315:   */
16316:   if( mem3.szMaster>=nBlock ){
16317:     return memsys3FromMaster(nBlock);
16318:   }
16319: 
16320: 
16321:   /* STEP 3:  
16322:   ** Loop through the entire memory pool.  Coalesce adjacent free
16323:   ** chunks.  Recompute the master chunk as the largest free chunk.
16324:   ** Then try again to satisfy the allocation by carving a piece off
16325:   ** of the end of the master chunk.  This step happens very
16326:   ** rarely (we hope!)
16327:   */
16328:   for(toFree=nBlock*16; toFree<(mem3.nPool*16); toFree *= 2){
16329:     memsys3OutOfMemory(toFree);
16330:     if( mem3.iMaster ){
16331:       memsys3Link(mem3.iMaster);
16332:       mem3.iMaster = 0;
16333:       mem3.szMaster = 0;
16334:     }
16335:     for(i=0; i<N_HASH; i++){
16336:       memsys3Merge(&mem3.aiHash[i]);
16337:     }
16338:     for(i=0; i<MX_SMALL-1; i++){
16339:       memsys3Merge(&mem3.aiSmall[i]);
16340:     }
16341:     if( mem3.szMaster ){
16342:       memsys3Unlink(mem3.iMaster);
16343:       if( mem3.szMaster>=nBlock ){
16344:         return memsys3FromMaster(nBlock);
16345:       }
16346:     }
16347:   }
16348: 
16349:   /* If none of the above worked, then we fail. */
16350:   return 0;
16351: }
16352: 
16353: /*
16354: ** Free an outstanding memory allocation.
16355: **
16356: ** This function assumes that the necessary mutexes, if any, are
16357: ** already held by the caller. Hence "Unsafe".
16358: */
16359: static void memsys3FreeUnsafe(void *pOld){
16360:   Mem3Block *p = (Mem3Block*)pOld;
16361:   int i;
16362:   u32 size, x;
16363:   assert( sqlite3_mutex_held(mem3.mutex) );
16364:   assert( p>mem3.aPool && p<&mem3.aPool[mem3.nPool] );
16365:   i = p - mem3.aPool;
16366:   assert( (mem3.aPool[i-1].u.hdr.size4x&1)==1 );
16367:   size = mem3.aPool[i-1].u.hdr.size4x/4;
16368:   assert( i+size<=mem3.nPool+1 );
16369:   mem3.aPool[i-1].u.hdr.size4x &= ~1;
16370:   mem3.aPool[i+size-1].u.hdr.prevSize = size;
16371:   mem3.aPool[i+size-1].u.hdr.size4x &= ~2;
16372:   memsys3Link(i);
16373: 
16374:   /* Try to expand the master using the newly freed chunk */
16375:   if( mem3.iMaster ){
16376:     while( (mem3.aPool[mem3.iMaster-1].u.hdr.size4x&2)==0 ){
16377:       size = mem3.aPool[mem3.iMaster-1].u.hdr.prevSize;
16378:       mem3.iMaster -= size;
16379:       mem3.szMaster += size;
16380:       memsys3Unlink(mem3.iMaster);
16381:       x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
16382:       mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
16383:       mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = mem3.szMaster;
16384:     }
16385:     x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
16386:     while( (mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x&1)==0 ){
16387:       memsys3Unlink(mem3.iMaster+mem3.szMaster);
16388:       mem3.szMaster += mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x/4;
16389:       mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
16390:       mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = mem3.szMaster;
16391:     }
16392:   }
16393: }
16394: 
16395: /*
16396: ** Return the size of an outstanding allocation, in bytes.  The
16397: ** size returned omits the 8-byte header overhead.  This only
16398: ** works for chunks that are currently checked out.
16399: */
16400: static int memsys3Size(void *p){
16401:   Mem3Block *pBlock;
16402:   if( p==0 ) return 0;
16403:   pBlock = (Mem3Block*)p;
16404:   assert( (pBlock[-1].u.hdr.size4x&1)!=0 );
16405:   return (pBlock[-1].u.hdr.size4x&~3)*2 - 4;
16406: }
16407: 
16408: /*
16409: ** Round up a request size to the next valid allocation size.
16410: */
16411: static int memsys3Roundup(int n){
16412:   if( n<=12 ){
16413:     return 12;
16414:   }else{
16415:     return ((n+11)&~7) - 4;
16416:   }
16417: }
16418: 
16419: /*
16420: ** Allocate nBytes of memory.
16421: */
16422: static void *memsys3Malloc(int nBytes){
16423:   sqlite3_int64 *p;
16424:   assert( nBytes>0 );          /* malloc.c filters out 0 byte requests */
16425:   memsys3Enter();
16426:   p = memsys3MallocUnsafe(nBytes);
16427:   memsys3Leave();
16428:   return (void*)p; 
16429: }
16430: 
16431: /*
16432: ** Free memory.
16433: */
16434: static void memsys3Free(void *pPrior){
16435:   assert( pPrior );
16436:   memsys3Enter();
16437:   memsys3FreeUnsafe(pPrior);
16438:   memsys3Leave();
16439: }
16440: 
16441: /*
16442: ** Change the size of an existing memory allocation
16443: */
16444: static void *memsys3Realloc(void *pPrior, int nBytes){
16445:   int nOld;
16446:   void *p;
16447:   if( pPrior==0 ){
16448:     return sqlite3_malloc(nBytes);
16449:   }
16450:   if( nBytes<=0 ){
16451:     sqlite3_free(pPrior);
16452:     return 0;
16453:   }
16454:   nOld = memsys3Size(pPrior);
16455:   if( nBytes<=nOld && nBytes>=nOld-128 ){
16456:     return pPrior;
16457:   }
16458:   memsys3Enter();
16459:   p = memsys3MallocUnsafe(nBytes);
16460:   if( p ){
16461:     if( nOld<nBytes ){
16462:       memcpy(p, pPrior, nOld);
16463:     }else{
16464:       memcpy(p, pPrior, nBytes);
16465:     }
16466:     memsys3FreeUnsafe(pPrior);
16467:   }
16468:   memsys3Leave();
16469:   return p;
16470: }
16471: 
16472: /*
16473: ** Initialize this module.
16474: */
16475: static int memsys3Init(void *NotUsed){
16476:   UNUSED_PARAMETER(NotUsed);
16477:   if( !sqlite3GlobalConfig.pHeap ){
16478:     return SQLITE_ERROR;
16479:   }
16480: 
16481:   /* Store a pointer to the memory block in global structure mem3. */
16482:   assert( sizeof(Mem3Block)==8 );
16483:   mem3.aPool = (Mem3Block *)sqlite3GlobalConfig.pHeap;
16484:   mem3.nPool = (sqlite3GlobalConfig.nHeap / sizeof(Mem3Block)) - 2;
16485: 
16486:   /* Initialize the master block. */
16487:   mem3.szMaster = mem3.nPool;
16488:   mem3.mnMaster = mem3.szMaster;
16489:   mem3.iMaster = 1;
16490:   mem3.aPool[0].u.hdr.size4x = (mem3.szMaster<<2) + 2;
16491:   mem3.aPool[mem3.nPool].u.hdr.prevSize = mem3.nPool;
16492:   mem3.aPool[mem3.nPool].u.hdr.size4x = 1;
16493: 
16494:   return SQLITE_OK;
16495: }
16496: 
16497: /*
16498: ** Deinitialize this module.
16499: */
16500: static void memsys3Shutdown(void *NotUsed){
16501:   UNUSED_PARAMETER(NotUsed);
16502:   mem3.mutex = 0;
16503:   return;
16504: }
16505: 
16506: 
16507: 
16508: /*
16509: ** Open the file indicated and write a log of all unfreed memory 
16510: ** allocations into that log.
16511: */
16512: SQLITE_PRIVATE void sqlite3Memsys3Dump(const char *zFilename){
16513: #ifdef SQLITE_DEBUG
16514:   FILE *out;
16515:   u32 i, j;
16516:   u32 size;
16517:   if( zFilename==0 || zFilename[0]==0 ){
16518:     out = stdout;
16519:   }else{
16520:     out = fopen(zFilename, "w");
16521:     if( out==0 ){
16522:       fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
16523:                       zFilename);
16524:       return;
16525:     }
16526:   }
16527:   memsys3Enter();
16528:   fprintf(out, "CHUNKS:\n");
16529:   for(i=1; i<=mem3.nPool; i+=size/4){
16530:     size = mem3.aPool[i-1].u.hdr.size4x;
16531:     if( size/4<=1 ){
16532:       fprintf(out, "%p size error\n", &mem3.aPool[i]);
16533:       assert( 0 );
16534:       break;
16535:     }
16536:     if( (size&1)==0 && mem3.aPool[i+size/4-1].u.hdr.prevSize!=size/4 ){
16537:       fprintf(out, "%p tail size does not match\n", &mem3.aPool[i]);
16538:       assert( 0 );
16539:       break;
16540:     }
16541:     if( ((mem3.aPool[i+size/4-1].u.hdr.size4x&2)>>1)!=(size&1) ){
16542:       fprintf(out, "%p tail checkout bit is incorrect\n", &mem3.aPool[i]);
16543:       assert( 0 );
16544:       break;
16545:     }
16546:     if( size&1 ){
16547:       fprintf(out, "%p %6d bytes checked out\n", &mem3.aPool[i], (size/4)*8-8);
16548:     }else{
16549:       fprintf(out, "%p %6d bytes free%s\n", &mem3.aPool[i], (size/4)*8-8,
16550:                   i==mem3.iMaster ? " **master**" : "");
16551:     }
16552:   }
16553:   for(i=0; i<MX_SMALL-1; i++){
16554:     if( mem3.aiSmall[i]==0 ) continue;
16555:     fprintf(out, "small(%2d):", i);
16556:     for(j = mem3.aiSmall[i]; j>0; j=mem3.aPool[j].u.list.next){
16557:       fprintf(out, " %p(%d)", &mem3.aPool[j],
16558:               (mem3.aPool[j-1].u.hdr.size4x/4)*8-8);
16559:     }
16560:     fprintf(out, "\n"); 
16561:   }
16562:   for(i=0; i<N_HASH; i++){
16563:     if( mem3.aiHash[i]==0 ) continue;
16564:     fprintf(out, "hash(%2d):", i);
16565:     for(j = mem3.aiHash[i]; j>0; j=mem3.aPool[j].u.list.next){
16566:       fprintf(out, " %p(%d)", &mem3.aPool[j],
16567:               (mem3.aPool[j-1].u.hdr.size4x/4)*8-8);
16568:     }
16569:     fprintf(out, "\n"); 
16570:   }
16571:   fprintf(out, "master=%d\n", mem3.iMaster);
16572:   fprintf(out, "nowUsed=%d\n", mem3.nPool*8 - mem3.szMaster*8);
16573:   fprintf(out, "mxUsed=%d\n", mem3.nPool*8 - mem3.mnMaster*8);
16574:   sqlite3_mutex_leave(mem3.mutex);
16575:   if( out==stdout ){
16576:     fflush(stdout);
16577:   }else{
16578:     fclose(out);
16579:   }
16580: #else
16581:   UNUSED_PARAMETER(zFilename);
16582: #endif
16583: }
16584: 
16585: /*
16586: ** This routine is the only routine in this file with external 
16587: ** linkage.
16588: **
16589: ** Populate the low-level memory allocation function pointers in
16590: ** sqlite3GlobalConfig.m with pointers to the routines in this file. The
16591: ** arguments specify the block of memory to manage.
16592: **
16593: ** This routine is only called by sqlite3_config(), and therefore
16594: ** is not required to be threadsafe (it is not).
16595: */
16596: SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void){
16597:   static const sqlite3_mem_methods mempoolMethods = {
16598:      memsys3Malloc,
16599:      memsys3Free,
16600:      memsys3Realloc,
16601:      memsys3Size,
16602:      memsys3Roundup,
16603:      memsys3Init,
16604:      memsys3Shutdown,
16605:      0
16606:   };
16607:   return &mempoolMethods;
16608: }
16609: 
16610: #endif /* SQLITE_ENABLE_MEMSYS3 */
16611: 
16612: /************** End of mem3.c ************************************************/
16613: /************** Begin file mem5.c ********************************************/
16614: /*
16615: ** 2007 October 14
16616: **
16617: ** The author disclaims copyright to this source code.  In place of
16618: ** a legal notice, here is a blessing:
16619: **
16620: **    May you do good and not evil.
16621: **    May you find forgiveness for yourself and forgive others.
16622: **    May you share freely, never taking more than you give.
16623: **
16624: *************************************************************************
16625: ** This file contains the C functions that implement a memory
16626: ** allocation subsystem for use by SQLite. 
16627: **
16628: ** This version of the memory allocation subsystem omits all
16629: ** use of malloc(). The application gives SQLite a block of memory
16630: ** before calling sqlite3_initialize() from which allocations
16631: ** are made and returned by the xMalloc() and xRealloc() 
16632: ** implementations. Once sqlite3_initialize() has been called,
16633: ** the amount of memory available to SQLite is fixed and cannot
16634: ** be changed.
16635: **
16636: ** This version of the memory allocation subsystem is included
16637: ** in the build only if SQLITE_ENABLE_MEMSYS5 is defined.
16638: **
16639: ** This memory allocator uses the following algorithm:
16640: **
16641: **   1.  All memory allocations sizes are rounded up to a power of 2.
16642: **
16643: **   2.  If two adjacent free blocks are the halves of a larger block,
16644: **       then the two blocks are coalesed into the single larger block.
16645: **
16646: **   3.  New memory is allocated from the first available free block.
16647: **
16648: ** This algorithm is described in: J. M. Robson. "Bounds for Some Functions
16649: ** Concerning Dynamic Storage Allocation". Journal of the Association for
16650: ** Computing Machinery, Volume 21, Number 8, July 1974, pages 491-499.
16651: ** 
16652: ** Let n be the size of the largest allocation divided by the minimum
16653: ** allocation size (after rounding all sizes up to a power of 2.)  Let M
16654: ** be the maximum amount of memory ever outstanding at one time.  Let
16655: ** N be the total amount of memory available for allocation.  Robson
16656: ** proved that this memory allocator will never breakdown due to 
16657: ** fragmentation as long as the following constraint holds:
16658: **
16659: **      N >=  M*(1 + log2(n)/2) - n + 1
16660: **
16661: ** The sqlite3_status() logic tracks the maximum values of n and M so
16662: ** that an application can, at any time, verify this constraint.
16663: */
16664: 
16665: /*
16666: ** This version of the memory allocator is used only when 
16667: ** SQLITE_ENABLE_MEMSYS5 is defined.
16668: */
16669: #ifdef SQLITE_ENABLE_MEMSYS5
16670: 
16671: /*
16672: ** A minimum allocation is an instance of the following structure.
16673: ** Larger allocations are an array of these structures where the
16674: ** size of the array is a power of 2.
16675: **
16676: ** The size of this object must be a power of two.  That fact is
16677: ** verified in memsys5Init().
16678: */
16679: typedef struct Mem5Link Mem5Link;
16680: struct Mem5Link {
16681:   int next;       /* Index of next free chunk */
16682:   int prev;       /* Index of previous free chunk */
16683: };
16684: 
16685: /*
16686: ** Maximum size of any allocation is ((1<<LOGMAX)*mem5.szAtom). Since
16687: ** mem5.szAtom is always at least 8 and 32-bit integers are used,
16688: ** it is not actually possible to reach this limit.
16689: */
16690: #define LOGMAX 30
16691: 
16692: /*
16693: ** Masks used for mem5.aCtrl[] elements.
16694: */
16695: #define CTRL_LOGSIZE  0x1f    /* Log2 Size of this block */
16696: #define CTRL_FREE     0x20    /* True if not checked out */
16697: 
16698: /*
16699: ** All of the static variables used by this module are collected
16700: ** into a single structure named "mem5".  This is to keep the
16701: ** static variables organized and to reduce namespace pollution
16702: ** when this module is combined with other in the amalgamation.
16703: */
16704: static SQLITE_WSD struct Mem5Global {
16705:   /*
16706:   ** Memory available for allocation
16707:   */
16708:   int szAtom;      /* Smallest possible allocation in bytes */
16709:   int nBlock;      /* Number of szAtom sized blocks in zPool */
16710:   u8 *zPool;       /* Memory available to be allocated */
16711:   
16712:   /*
16713:   ** Mutex to control access to the memory allocation subsystem.
16714:   */
16715:   sqlite3_mutex *mutex;
16716: 
16717:   /*
16718:   ** Performance statistics
16719:   */
16720:   u64 nAlloc;         /* Total number of calls to malloc */
16721:   u64 totalAlloc;     /* Total of all malloc calls - includes internal frag */
16722:   u64 totalExcess;    /* Total internal fragmentation */
16723:   u32 currentOut;     /* Current checkout, including internal fragmentation */
16724:   u32 currentCount;   /* Current number of distinct checkouts */
16725:   u32 maxOut;         /* Maximum instantaneous currentOut */
16726:   u32 maxCount;       /* Maximum instantaneous currentCount */
16727:   u32 maxRequest;     /* Largest allocation (exclusive of internal frag) */
16728:   
16729:   /*
16730:   ** Lists of free blocks.  aiFreelist[0] is a list of free blocks of
16731:   ** size mem5.szAtom.  aiFreelist[1] holds blocks of size szAtom*2.
16732:   ** and so forth.
16733:   */
16734:   int aiFreelist[LOGMAX+1];
16735: 
16736:   /*
16737:   ** Space for tracking which blocks are checked out and the size
16738:   ** of each block.  One byte per block.
16739:   */
16740:   u8 *aCtrl;
16741: 
16742: } mem5;
16743: 
16744: /*
16745: ** Access the static variable through a macro for SQLITE_OMIT_WSD
16746: */
16747: #define mem5 GLOBAL(struct Mem5Global, mem5)
16748: 
16749: /*
16750: ** Assuming mem5.zPool is divided up into an array of Mem5Link
16751: ** structures, return a pointer to the idx-th such lik.
16752: */
16753: #define MEM5LINK(idx) ((Mem5Link *)(&mem5.zPool[(idx)*mem5.szAtom]))
16754: 
16755: /*
16756: ** Unlink the chunk at mem5.aPool[i] from list it is currently
16757: ** on.  It should be found on mem5.aiFreelist[iLogsize].
16758: */
16759: static void memsys5Unlink(int i, int iLogsize){
16760:   int next, prev;
16761:   assert( i>=0 && i<mem5.nBlock );
16762:   assert( iLogsize>=0 && iLogsize<=LOGMAX );
16763:   assert( (mem5.aCtrl[i] & CTRL_LOGSIZE)==iLogsize );
16764: 
16765:   next = MEM5LINK(i)->next;
16766:   prev = MEM5LINK(i)->prev;
16767:   if( prev<0 ){
16768:     mem5.aiFreelist[iLogsize] = next;
16769:   }else{
16770:     MEM5LINK(prev)->next = next;
16771:   }
16772:   if( next>=0 ){
16773:     MEM5LINK(next)->prev = prev;
16774:   }
16775: }
16776: 
16777: /*
16778: ** Link the chunk at mem5.aPool[i] so that is on the iLogsize
16779: ** free list.
16780: */
16781: static void memsys5Link(int i, int iLogsize){
16782:   int x;
16783:   assert( sqlite3_mutex_held(mem5.mutex) );
16784:   assert( i>=0 && i<mem5.nBlock );
16785:   assert( iLogsize>=0 && iLogsize<=LOGMAX );
16786:   assert( (mem5.aCtrl[i] & CTRL_LOGSIZE)==iLogsize );
16787: 
16788:   x = MEM5LINK(i)->next = mem5.aiFreelist[iLogsize];
16789:   MEM5LINK(i)->prev = -1;
16790:   if( x>=0 ){
16791:     assert( x<mem5.nBlock );
16792:     MEM5LINK(x)->prev = i;
16793:   }
16794:   mem5.aiFreelist[iLogsize] = i;
16795: }
16796: 
16797: /*
16798: ** If the STATIC_MEM mutex is not already held, obtain it now. The mutex
16799: ** will already be held (obtained by code in malloc.c) if
16800: ** sqlite3GlobalConfig.bMemStat is true.
16801: */
16802: static void memsys5Enter(void){
16803:   sqlite3_mutex_enter(mem5.mutex);
16804: }
16805: static void memsys5Leave(void){
16806:   sqlite3_mutex_leave(mem5.mutex);
16807: }
16808: 
16809: /*
16810: ** Return the size of an outstanding allocation, in bytes.  The
16811: ** size returned omits the 8-byte header overhead.  This only
16812: ** works for chunks that are currently checked out.
16813: */
16814: static int memsys5Size(void *p){
16815:   int iSize = 0;
16816:   if( p ){
16817:     int i = ((u8 *)p-mem5.zPool)/mem5.szAtom;
16818:     assert( i>=0 && i<mem5.nBlock );
16819:     iSize = mem5.szAtom * (1 << (mem5.aCtrl[i]&CTRL_LOGSIZE));
16820:   }
16821:   return iSize;
16822: }
16823: 
16824: /*
16825: ** Find the first entry on the freelist iLogsize.  Unlink that
16826: ** entry and return its index. 
16827: */
16828: static int memsys5UnlinkFirst(int iLogsize){
16829:   int i;
16830:   int iFirst;
16831: 
16832:   assert( iLogsize>=0 && iLogsize<=LOGMAX );
16833:   i = iFirst = mem5.aiFreelist[iLogsize];
16834:   assert( iFirst>=0 );
16835:   while( i>0 ){
16836:     if( i<iFirst ) iFirst = i;
16837:     i = MEM5LINK(i)->next;
16838:   }
16839:   memsys5Unlink(iFirst, iLogsize);
16840:   return iFirst;
16841: }
16842: 
16843: /*
16844: ** Return a block of memory of at least nBytes in size.
16845: ** Return NULL if unable.  Return NULL if nBytes==0.
16846: **
16847: ** The caller guarantees that nByte positive.
16848: **
16849: ** The caller has obtained a mutex prior to invoking this
16850: ** routine so there is never any chance that two or more
16851: ** threads can be in this routine at the same time.
16852: */
16853: static void *memsys5MallocUnsafe(int nByte){
16854:   int i;           /* Index of a mem5.aPool[] slot */
16855:   int iBin;        /* Index into mem5.aiFreelist[] */
16856:   int iFullSz;     /* Size of allocation rounded up to power of 2 */
16857:   int iLogsize;    /* Log2 of iFullSz/POW2_MIN */
16858: 
16859:   /* nByte must be a positive */
16860:   assert( nByte>0 );
16861: 
16862:   /* Keep track of the maximum allocation request.  Even unfulfilled
16863:   ** requests are counted */
16864:   if( (u32)nByte>mem5.maxRequest ){
16865:     mem5.maxRequest = nByte;
16866:   }
16867: 
16868:   /* Abort if the requested allocation size is larger than the largest
16869:   ** power of two that we can represent using 32-bit signed integers.
16870:   */
16871:   if( nByte > 0x40000000 ){
16872:     return 0;
16873:   }
16874: 
16875:   /* Round nByte up to the next valid power of two */
16876:   for(iFullSz=mem5.szAtom, iLogsize=0; iFullSz<nByte; iFullSz *= 2, iLogsize++){}
16877: 
16878:   /* Make sure mem5.aiFreelist[iLogsize] contains at least one free
16879:   ** block.  If not, then split a block of the next larger power of
16880:   ** two in order to create a new free block of size iLogsize.
16881:   */
16882:   for(iBin=iLogsize; mem5.aiFreelist[iBin]<0 && iBin<=LOGMAX; iBin++){}
16883:   if( iBin>LOGMAX ){
16884:     testcase( sqlite3GlobalConfig.xLog!=0 );
16885:     sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes", nByte);
16886:     return 0;
16887:   }
16888:   i = memsys5UnlinkFirst(iBin);
16889:   while( iBin>iLogsize ){
16890:     int newSize;
16891: 
16892:     iBin--;
16893:     newSize = 1 << iBin;
16894:     mem5.aCtrl[i+newSize] = CTRL_FREE | iBin;
16895:     memsys5Link(i+newSize, iBin);
16896:   }
16897:   mem5.aCtrl[i] = iLogsize;
16898: 
16899:   /* Update allocator performance statistics. */
16900:   mem5.nAlloc++;
16901:   mem5.totalAlloc += iFullSz;
16902:   mem5.totalExcess += iFullSz - nByte;
16903:   mem5.currentCount++;
16904:   mem5.currentOut += iFullSz;
16905:   if( mem5.maxCount<mem5.currentCount ) mem5.maxCount = mem5.currentCount;
16906:   if( mem5.maxOut<mem5.currentOut ) mem5.maxOut = mem5.currentOut;
16907: 
16908:   /* Return a pointer to the allocated memory. */
16909:   return (void*)&mem5.zPool[i*mem5.szAtom];
16910: }
16911: 
16912: /*
16913: ** Free an outstanding memory allocation.
16914: */
16915: static void memsys5FreeUnsafe(void *pOld){
16916:   u32 size, iLogsize;
16917:   int iBlock;
16918: 
16919:   /* Set iBlock to the index of the block pointed to by pOld in 
16920:   ** the array of mem5.szAtom byte blocks pointed to by mem5.zPool.
16921:   */
16922:   iBlock = ((u8 *)pOld-mem5.zPool)/mem5.szAtom;
16923: 
16924:   /* Check that the pointer pOld points to a valid, non-free block. */
16925:   assert( iBlock>=0 && iBlock<mem5.nBlock );
16926:   assert( ((u8 *)pOld-mem5.zPool)%mem5.szAtom==0 );
16927:   assert( (mem5.aCtrl[iBlock] & CTRL_FREE)==0 );
16928: 
16929:   iLogsize = mem5.aCtrl[iBlock] & CTRL_LOGSIZE;
16930:   size = 1<<iLogsize;
16931:   assert( iBlock+size-1<(u32)mem5.nBlock );
16932: 
16933:   mem5.aCtrl[iBlock] |= CTRL_FREE;
16934:   mem5.aCtrl[iBlock+size-1] |= CTRL_FREE;
16935:   assert( mem5.currentCount>0 );
16936:   assert( mem5.currentOut>=(size*mem5.szAtom) );
16937:   mem5.currentCount--;
16938:   mem5.currentOut -= size*mem5.szAtom;
16939:   assert( mem5.currentOut>0 || mem5.currentCount==0 );
16940:   assert( mem5.currentCount>0 || mem5.currentOut==0 );
16941: 
16942:   mem5.aCtrl[iBlock] = CTRL_FREE | iLogsize;
16943:   while( ALWAYS(iLogsize<LOGMAX) ){
16944:     int iBuddy;
16945:     if( (iBlock>>iLogsize) & 1 ){
16946:       iBuddy = iBlock - size;
16947:     }else{
16948:       iBuddy = iBlock + size;
16949:     }
16950:     assert( iBuddy>=0 );
16951:     if( (iBuddy+(1<<iLogsize))>mem5.nBlock ) break;
16952:     if( mem5.aCtrl[iBuddy]!=(CTRL_FREE | iLogsize) ) break;
16953:     memsys5Unlink(iBuddy, iLogsize);
16954:     iLogsize++;
16955:     if( iBuddy<iBlock ){
16956:       mem5.aCtrl[iBuddy] = CTRL_FREE | iLogsize;
16957:       mem5.aCtrl[iBlock] = 0;
16958:       iBlock = iBuddy;
16959:     }else{
16960:       mem5.aCtrl[iBlock] = CTRL_FREE | iLogsize;
16961:       mem5.aCtrl[iBuddy] = 0;
16962:     }
16963:     size *= 2;
16964:   }
16965:   memsys5Link(iBlock, iLogsize);
16966: }
16967: 
16968: /*
16969: ** Allocate nBytes of memory
16970: */
16971: static void *memsys5Malloc(int nBytes){
16972:   sqlite3_int64 *p = 0;
16973:   if( nBytes>0 ){
16974:     memsys5Enter();
16975:     p = memsys5MallocUnsafe(nBytes);
16976:     memsys5Leave();
16977:   }
16978:   return (void*)p; 
16979: }
16980: 
16981: /*
16982: ** Free memory.
16983: **
16984: ** The outer layer memory allocator prevents this routine from
16985: ** being called with pPrior==0.
16986: */
16987: static void memsys5Free(void *pPrior){
16988:   assert( pPrior!=0 );
16989:   memsys5Enter();
16990:   memsys5FreeUnsafe(pPrior);
16991:   memsys5Leave();  
16992: }
16993: 
16994: /*
16995: ** Change the size of an existing memory allocation.
16996: **
16997: ** The outer layer memory allocator prevents this routine from
16998: ** being called with pPrior==0.  
16999: **
17000: ** nBytes is always a value obtained from a prior call to
17001: ** memsys5Round().  Hence nBytes is always a non-negative power
17002: ** of two.  If nBytes==0 that means that an oversize allocation
17003: ** (an allocation larger than 0x40000000) was requested and this
17004: ** routine should return 0 without freeing pPrior.
17005: */
17006: static void *memsys5Realloc(void *pPrior, int nBytes){
17007:   int nOld;
17008:   void *p;
17009:   assert( pPrior!=0 );
17010:   assert( (nBytes&(nBytes-1))==0 );  /* EV: R-46199-30249 */
17011:   assert( nBytes>=0 );
17012:   if( nBytes==0 ){
17013:     return 0;
17014:   }
17015:   nOld = memsys5Size(pPrior);
17016:   if( nBytes<=nOld ){
17017:     return pPrior;
17018:   }
17019:   memsys5Enter();
17020:   p = memsys5MallocUnsafe(nBytes);
17021:   if( p ){
17022:     memcpy(p, pPrior, nOld);
17023:     memsys5FreeUnsafe(pPrior);
17024:   }
17025:   memsys5Leave();
17026:   return p;
17027: }
17028: 
17029: /*
17030: ** Round up a request size to the next valid allocation size.  If
17031: ** the allocation is too large to be handled by this allocation system,
17032: ** return 0.
17033: **
17034: ** All allocations must be a power of two and must be expressed by a
17035: ** 32-bit signed integer.  Hence the largest allocation is 0x40000000
17036: ** or 1073741824 bytes.
17037: */
17038: static int memsys5Roundup(int n){
17039:   int iFullSz;
17040:   if( n > 0x40000000 ) return 0;
17041:   for(iFullSz=mem5.szAtom; iFullSz<n; iFullSz *= 2);
17042:   return iFullSz;
17043: }
17044: 
17045: /*
17046: ** Return the ceiling of the logarithm base 2 of iValue.
17047: **
17048: ** Examples:   memsys5Log(1) -> 0
17049: **             memsys5Log(2) -> 1
17050: **             memsys5Log(4) -> 2
17051: **             memsys5Log(5) -> 3
17052: **             memsys5Log(8) -> 3
17053: **             memsys5Log(9) -> 4
17054: */
17055: static int memsys5Log(int iValue){
17056:   int iLog;
17057:   for(iLog=0; (iLog<(int)((sizeof(int)*8)-1)) && (1<<iLog)<iValue; iLog++);
17058:   return iLog;
17059: }
17060: 
17061: /*
17062: ** Initialize the memory allocator.
17063: **
17064: ** This routine is not threadsafe.  The caller must be holding a mutex
17065: ** to prevent multiple threads from entering at the same time.
17066: */
17067: static int memsys5Init(void *NotUsed){
17068:   int ii;            /* Loop counter */
17069:   int nByte;         /* Number of bytes of memory available to this allocator */
17070:   u8 *zByte;         /* Memory usable by this allocator */
17071:   int nMinLog;       /* Log base 2 of minimum allocation size in bytes */
17072:   int iOffset;       /* An offset into mem5.aCtrl[] */
17073: 
17074:   UNUSED_PARAMETER(NotUsed);
17075: 
17076:   /* For the purposes of this routine, disable the mutex */
17077:   mem5.mutex = 0;
17078: 
17079:   /* The size of a Mem5Link object must be a power of two.  Verify that
17080:   ** this is case.
17081:   */
17082:   assert( (sizeof(Mem5Link)&(sizeof(Mem5Link)-1))==0 );
17083: 
17084:   nByte = sqlite3GlobalConfig.nHeap;
17085:   zByte = (u8*)sqlite3GlobalConfig.pHeap;
17086:   assert( zByte!=0 );  /* sqlite3_config() does not allow otherwise */
17087: 
17088:   /* boundaries on sqlite3GlobalConfig.mnReq are enforced in sqlite3_config() */
17089:   nMinLog = memsys5Log(sqlite3GlobalConfig.mnReq);
17090:   mem5.szAtom = (1<<nMinLog);
17091:   while( (int)sizeof(Mem5Link)>mem5.szAtom ){
17092:     mem5.szAtom = mem5.szAtom << 1;
17093:   }
17094: 
17095:   mem5.nBlock = (nByte / (mem5.szAtom+sizeof(u8)));
17096:   mem5.zPool = zByte;
17097:   mem5.aCtrl = (u8 *)&mem5.zPool[mem5.nBlock*mem5.szAtom];
17098: 
17099:   for(ii=0; ii<=LOGMAX; ii++){
17100:     mem5.aiFreelist[ii] = -1;
17101:   }
17102: 
17103:   iOffset = 0;
17104:   for(ii=LOGMAX; ii>=0; ii--){
17105:     int nAlloc = (1<<ii);
17106:     if( (iOffset+nAlloc)<=mem5.nBlock ){
17107:       mem5.aCtrl[iOffset] = ii | CTRL_FREE;
17108:       memsys5Link(iOffset, ii);
17109:       iOffset += nAlloc;
17110:     }
17111:     assert((iOffset+nAlloc)>mem5.nBlock);
17112:   }
17113: 
17114:   /* If a mutex is required for normal operation, allocate one */
17115:   if( sqlite3GlobalConfig.bMemstat==0 ){
17116:     mem5.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
17117:   }
17118: 
17119:   return SQLITE_OK;
17120: }
17121: 
17122: /*
17123: ** Deinitialize this module.
17124: */
17125: static void memsys5Shutdown(void *NotUsed){
17126:   UNUSED_PARAMETER(NotUsed);
17127:   mem5.mutex = 0;
17128:   return;
17129: }
17130: 
17131: #ifdef SQLITE_TEST
17132: /*
17133: ** Open the file indicated and write a log of all unfreed memory 
17134: ** allocations into that log.
17135: */
17136: SQLITE_PRIVATE void sqlite3Memsys5Dump(const char *zFilename){
17137:   FILE *out;
17138:   int i, j, n;
17139:   int nMinLog;
17140: 
17141:   if( zFilename==0 || zFilename[0]==0 ){
17142:     out = stdout;
17143:   }else{
17144:     out = fopen(zFilename, "w");
17145:     if( out==0 ){
17146:       fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
17147:                       zFilename);
17148:       return;
17149:     }
17150:   }
17151:   memsys5Enter();
17152:   nMinLog = memsys5Log(mem5.szAtom);
17153:   for(i=0; i<=LOGMAX && i+nMinLog<32; i++){
17154:     for(n=0, j=mem5.aiFreelist[i]; j>=0; j = MEM5LINK(j)->next, n++){}
17155:     fprintf(out, "freelist items of size %d: %d\n", mem5.szAtom << i, n);
17156:   }
17157:   fprintf(out, "mem5.nAlloc       = %llu\n", mem5.nAlloc);
17158:   fprintf(out, "mem5.totalAlloc   = %llu\n", mem5.totalAlloc);
17159:   fprintf(out, "mem5.totalExcess  = %llu\n", mem5.totalExcess);
17160:   fprintf(out, "mem5.currentOut   = %u\n", mem5.currentOut);
17161:   fprintf(out, "mem5.currentCount = %u\n", mem5.currentCount);
17162:   fprintf(out, "mem5.maxOut       = %u\n", mem5.maxOut);
17163:   fprintf(out, "mem5.maxCount     = %u\n", mem5.maxCount);
17164:   fprintf(out, "mem5.maxRequest   = %u\n", mem5.maxRequest);
17165:   memsys5Leave();
17166:   if( out==stdout ){
17167:     fflush(stdout);
17168:   }else{
17169:     fclose(out);
17170:   }
17171: }
17172: #endif
17173: 
17174: /*
17175: ** This routine is the only routine in this file with external 
17176: ** linkage. It returns a pointer to a static sqlite3_mem_methods
17177: ** struct populated with the memsys5 methods.
17178: */
17179: SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void){
17180:   static const sqlite3_mem_methods memsys5Methods = {
17181:      memsys5Malloc,
17182:      memsys5Free,
17183:      memsys5Realloc,
17184:      memsys5Size,
17185:      memsys5Roundup,
17186:      memsys5Init,
17187:      memsys5Shutdown,
17188:      0
17189:   };
17190:   return &memsys5Methods;
17191: }
17192: 
17193: #endif /* SQLITE_ENABLE_MEMSYS5 */
17194: 
17195: /************** End of mem5.c ************************************************/
17196: /************** Begin file mutex.c *******************************************/
17197: /*
17198: ** 2007 August 14
17199: **
17200: ** The author disclaims copyright to this source code.  In place of
17201: ** a legal notice, here is a blessing:
17202: **
17203: **    May you do good and not evil.
17204: **    May you find forgiveness for yourself and forgive others.
17205: **    May you share freely, never taking more than you give.
17206: **
17207: *************************************************************************
17208: ** This file contains the C functions that implement mutexes.
17209: **
17210: ** This file contains code that is common across all mutex implementations.
17211: */
17212: 
17213: #if defined(SQLITE_DEBUG) && !defined(SQLITE_MUTEX_OMIT)
17214: /*
17215: ** For debugging purposes, record when the mutex subsystem is initialized
17216: ** and uninitialized so that we can assert() if there is an attempt to
17217: ** allocate a mutex while the system is uninitialized.
17218: */
17219: static SQLITE_WSD int mutexIsInit = 0;
17220: #endif /* SQLITE_DEBUG */
17221: 
17222: 
17223: #ifndef SQLITE_MUTEX_OMIT
17224: /*
17225: ** Initialize the mutex system.
17226: */
17227: SQLITE_PRIVATE int sqlite3MutexInit(void){ 
17228:   int rc = SQLITE_OK;
17229:   if( !sqlite3GlobalConfig.mutex.xMutexAlloc ){
17230:     /* If the xMutexAlloc method has not been set, then the user did not
17231:     ** install a mutex implementation via sqlite3_config() prior to 
17232:     ** sqlite3_initialize() being called. This block copies pointers to
17233:     ** the default implementation into the sqlite3GlobalConfig structure.
17234:     */
17235:     sqlite3_mutex_methods const *pFrom;
17236:     sqlite3_mutex_methods *pTo = &sqlite3GlobalConfig.mutex;
17237: 
17238:     if( sqlite3GlobalConfig.bCoreMutex ){
17239:       pFrom = sqlite3DefaultMutex();
17240:     }else{
17241:       pFrom = sqlite3NoopMutex();
17242:     }
17243:     memcpy(pTo, pFrom, offsetof(sqlite3_mutex_methods, xMutexAlloc));
17244:     memcpy(&pTo->xMutexFree, &pFrom->xMutexFree,
17245:            sizeof(*pTo) - offsetof(sqlite3_mutex_methods, xMutexFree));
17246:     pTo->xMutexAlloc = pFrom->xMutexAlloc;
17247:   }
17248:   rc = sqlite3GlobalConfig.mutex.xMutexInit();
17249: 
17250: #ifdef SQLITE_DEBUG
17251:   GLOBAL(int, mutexIsInit) = 1;
17252: #endif
17253: 
17254:   return rc;
17255: }
17256: 
17257: /*
17258: ** Shutdown the mutex system. This call frees resources allocated by
17259: ** sqlite3MutexInit().
17260: */
17261: SQLITE_PRIVATE int sqlite3MutexEnd(void){
17262:   int rc = SQLITE_OK;
17263:   if( sqlite3GlobalConfig.mutex.xMutexEnd ){
17264:     rc = sqlite3GlobalConfig.mutex.xMutexEnd();
17265:   }
17266: 
17267: #ifdef SQLITE_DEBUG
17268:   GLOBAL(int, mutexIsInit) = 0;
17269: #endif
17270: 
17271:   return rc;
17272: }
17273: 
17274: /*
17275: ** Retrieve a pointer to a static mutex or allocate a new dynamic one.
17276: */
17277: SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int id){
17278: #ifndef SQLITE_OMIT_AUTOINIT
17279:   if( sqlite3_initialize() ) return 0;
17280: #endif
17281:   return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
17282: }
17283: 
17284: SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){
17285:   if( !sqlite3GlobalConfig.bCoreMutex ){
17286:     return 0;
17287:   }
17288:   assert( GLOBAL(int, mutexIsInit) );
17289:   return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
17290: }
17291: 
17292: /*
17293: ** Free a dynamic mutex.
17294: */
17295: SQLITE_API void sqlite3_mutex_free(sqlite3_mutex *p){
17296:   if( p ){
17297:     sqlite3GlobalConfig.mutex.xMutexFree(p);
17298:   }
17299: }
17300: 
17301: /*
17302: ** Obtain the mutex p. If some other thread already has the mutex, block
17303: ** until it can be obtained.
17304: */
17305: SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex *p){
17306:   if( p ){
17307:     sqlite3GlobalConfig.mutex.xMutexEnter(p);
17308:   }
17309: }
17310: 
17311: /*
17312: ** Obtain the mutex p. If successful, return SQLITE_OK. Otherwise, if another
17313: ** thread holds the mutex and it cannot be obtained, return SQLITE_BUSY.
17314: */
17315: SQLITE_API int sqlite3_mutex_try(sqlite3_mutex *p){
17316:   int rc = SQLITE_OK;
17317:   if( p ){
17318:     return sqlite3GlobalConfig.mutex.xMutexTry(p);
17319:   }
17320:   return rc;
17321: }
17322: 
17323: /*
17324: ** The sqlite3_mutex_leave() routine exits a mutex that was previously
17325: ** entered by the same thread.  The behavior is undefined if the mutex 
17326: ** is not currently entered. If a NULL pointer is passed as an argument
17327: ** this function is a no-op.
17328: */
17329: SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex *p){
17330:   if( p ){
17331:     sqlite3GlobalConfig.mutex.xMutexLeave(p);
17332:   }
17333: }
17334: 
17335: #ifndef NDEBUG
17336: /*
17337: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
17338: ** intended for use inside assert() statements.
17339: */
17340: SQLITE_API int sqlite3_mutex_held(sqlite3_mutex *p){
17341:   return p==0 || sqlite3GlobalConfig.mutex.xMutexHeld(p);
17342: }
17343: SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex *p){
17344:   return p==0 || sqlite3GlobalConfig.mutex.xMutexNotheld(p);
17345: }
17346: #endif
17347: 
17348: #endif /* !defined(SQLITE_MUTEX_OMIT) */
17349: 
17350: /************** End of mutex.c ***********************************************/
17351: /************** Begin file mutex_noop.c **************************************/
17352: /*
17353: ** 2008 October 07
17354: **
17355: ** The author disclaims copyright to this source code.  In place of
17356: ** a legal notice, here is a blessing:
17357: **
17358: **    May you do good and not evil.
17359: **    May you find forgiveness for yourself and forgive others.
17360: **    May you share freely, never taking more than you give.
17361: **
17362: *************************************************************************
17363: ** This file contains the C functions that implement mutexes.
17364: **
17365: ** This implementation in this file does not provide any mutual
17366: ** exclusion and is thus suitable for use only in applications
17367: ** that use SQLite in a single thread.  The routines defined
17368: ** here are place-holders.  Applications can substitute working
17369: ** mutex routines at start-time using the
17370: **
17371: **     sqlite3_config(SQLITE_CONFIG_MUTEX,...)
17372: **
17373: ** interface.
17374: **
17375: ** If compiled with SQLITE_DEBUG, then additional logic is inserted
17376: ** that does error checking on mutexes to make sure they are being
17377: ** called correctly.
17378: */
17379: 
17380: #ifndef SQLITE_MUTEX_OMIT
17381: 
17382: #ifndef SQLITE_DEBUG
17383: /*
17384: ** Stub routines for all mutex methods.
17385: **
17386: ** This routines provide no mutual exclusion or error checking.
17387: */
17388: static int noopMutexInit(void){ return SQLITE_OK; }
17389: static int noopMutexEnd(void){ return SQLITE_OK; }
17390: static sqlite3_mutex *noopMutexAlloc(int id){ 
17391:   UNUSED_PARAMETER(id);
17392:   return (sqlite3_mutex*)8; 
17393: }
17394: static void noopMutexFree(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
17395: static void noopMutexEnter(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
17396: static int noopMutexTry(sqlite3_mutex *p){
17397:   UNUSED_PARAMETER(p);
17398:   return SQLITE_OK;
17399: }
17400: static void noopMutexLeave(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
17401: 
17402: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
17403:   static const sqlite3_mutex_methods sMutex = {
17404:     noopMutexInit,
17405:     noopMutexEnd,
17406:     noopMutexAlloc,
17407:     noopMutexFree,
17408:     noopMutexEnter,
17409:     noopMutexTry,
17410:     noopMutexLeave,
17411: 
17412:     0,
17413:     0,
17414:   };
17415: 
17416:   return &sMutex;
17417: }
17418: #endif /* !SQLITE_DEBUG */
17419: 
17420: #ifdef SQLITE_DEBUG
17421: /*
17422: ** In this implementation, error checking is provided for testing
17423: ** and debugging purposes.  The mutexes still do not provide any
17424: ** mutual exclusion.
17425: */
17426: 
17427: /*
17428: ** The mutex object
17429: */
17430: typedef struct sqlite3_debug_mutex {
17431:   int id;     /* The mutex type */
17432:   int cnt;    /* Number of entries without a matching leave */
17433: } sqlite3_debug_mutex;
17434: 
17435: /*
17436: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
17437: ** intended for use inside assert() statements.
17438: */
17439: static int debugMutexHeld(sqlite3_mutex *pX){
17440:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17441:   return p==0 || p->cnt>0;
17442: }
17443: static int debugMutexNotheld(sqlite3_mutex *pX){
17444:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17445:   return p==0 || p->cnt==0;
17446: }
17447: 
17448: /*
17449: ** Initialize and deinitialize the mutex subsystem.
17450: */
17451: static int debugMutexInit(void){ return SQLITE_OK; }
17452: static int debugMutexEnd(void){ return SQLITE_OK; }
17453: 
17454: /*
17455: ** The sqlite3_mutex_alloc() routine allocates a new
17456: ** mutex and returns a pointer to it.  If it returns NULL
17457: ** that means that a mutex could not be allocated. 
17458: */
17459: static sqlite3_mutex *debugMutexAlloc(int id){
17460:   static sqlite3_debug_mutex aStatic[6];
17461:   sqlite3_debug_mutex *pNew = 0;
17462:   switch( id ){
17463:     case SQLITE_MUTEX_FAST:
17464:     case SQLITE_MUTEX_RECURSIVE: {
17465:       pNew = sqlite3Malloc(sizeof(*pNew));
17466:       if( pNew ){
17467:         pNew->id = id;
17468:         pNew->cnt = 0;
17469:       }
17470:       break;
17471:     }
17472:     default: {
17473:       assert( id-2 >= 0 );
17474:       assert( id-2 < (int)(sizeof(aStatic)/sizeof(aStatic[0])) );
17475:       pNew = &aStatic[id-2];
17476:       pNew->id = id;
17477:       break;
17478:     }
17479:   }
17480:   return (sqlite3_mutex*)pNew;
17481: }
17482: 
17483: /*
17484: ** This routine deallocates a previously allocated mutex.
17485: */
17486: static void debugMutexFree(sqlite3_mutex *pX){
17487:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17488:   assert( p->cnt==0 );
17489:   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
17490:   sqlite3_free(p);
17491: }
17492: 
17493: /*
17494: ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
17495: ** to enter a mutex.  If another thread is already within the mutex,
17496: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
17497: ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
17498: ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
17499: ** be entered multiple times by the same thread.  In such cases the,
17500: ** mutex must be exited an equal number of times before another thread
17501: ** can enter.  If the same thread tries to enter any other kind of mutex
17502: ** more than once, the behavior is undefined.
17503: */
17504: static void debugMutexEnter(sqlite3_mutex *pX){
17505:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17506:   assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
17507:   p->cnt++;
17508: }
17509: static int debugMutexTry(sqlite3_mutex *pX){
17510:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17511:   assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
17512:   p->cnt++;
17513:   return SQLITE_OK;
17514: }
17515: 
17516: /*
17517: ** The sqlite3_mutex_leave() routine exits a mutex that was
17518: ** previously entered by the same thread.  The behavior
17519: ** is undefined if the mutex is not currently entered or
17520: ** is not currently allocated.  SQLite will never do either.
17521: */
17522: static void debugMutexLeave(sqlite3_mutex *pX){
17523:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17524:   assert( debugMutexHeld(pX) );
17525:   p->cnt--;
17526:   assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
17527: }
17528: 
17529: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
17530:   static const sqlite3_mutex_methods sMutex = {
17531:     debugMutexInit,
17532:     debugMutexEnd,
17533:     debugMutexAlloc,
17534:     debugMutexFree,
17535:     debugMutexEnter,
17536:     debugMutexTry,
17537:     debugMutexLeave,
17538: 
17539:     debugMutexHeld,
17540:     debugMutexNotheld
17541:   };
17542: 
17543:   return &sMutex;
17544: }
17545: #endif /* SQLITE_DEBUG */
17546: 
17547: /*
17548: ** If compiled with SQLITE_MUTEX_NOOP, then the no-op mutex implementation
17549: ** is used regardless of the run-time threadsafety setting.
17550: */
17551: #ifdef SQLITE_MUTEX_NOOP
17552: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
17553:   return sqlite3NoopMutex();
17554: }
17555: #endif /* defined(SQLITE_MUTEX_NOOP) */
17556: #endif /* !defined(SQLITE_MUTEX_OMIT) */
17557: 
17558: /************** End of mutex_noop.c ******************************************/
17559: /************** Begin file mutex_os2.c ***************************************/
17560: /*
17561: ** 2007 August 28
17562: **
17563: ** The author disclaims copyright to this source code.  In place of
17564: ** a legal notice, here is a blessing:
17565: **
17566: **    May you do good and not evil.
17567: **    May you find forgiveness for yourself and forgive others.
17568: **    May you share freely, never taking more than you give.
17569: **
17570: *************************************************************************
17571: ** This file contains the C functions that implement mutexes for OS/2
17572: */
17573: 
17574: /*
17575: ** The code in this file is only used if SQLITE_MUTEX_OS2 is defined.
17576: ** See the mutex.h file for details.
17577: */
17578: #ifdef SQLITE_MUTEX_OS2
17579: 
17580: /********************** OS/2 Mutex Implementation **********************
17581: **
17582: ** This implementation of mutexes is built using the OS/2 API.
17583: */
17584: 
17585: /*
17586: ** The mutex object
17587: ** Each recursive mutex is an instance of the following structure.
17588: */
17589: struct sqlite3_mutex {
17590:   HMTX mutex;       /* Mutex controlling the lock */
17591:   int  id;          /* Mutex type */
17592: #ifdef SQLITE_DEBUG
17593:  int   trace;       /* True to trace changes */
17594: #endif
17595: };
17596: 
17597: #ifdef SQLITE_DEBUG
17598: #define SQLITE3_MUTEX_INITIALIZER { 0, 0, 0 }
17599: #else
17600: #define SQLITE3_MUTEX_INITIALIZER { 0, 0 }
17601: #endif
17602: 
17603: /*
17604: ** Initialize and deinitialize the mutex subsystem.
17605: */
17606: static int os2MutexInit(void){ return SQLITE_OK; }
17607: static int os2MutexEnd(void){ return SQLITE_OK; }
17608: 
17609: /*
17610: ** The sqlite3_mutex_alloc() routine allocates a new
17611: ** mutex and returns a pointer to it.  If it returns NULL
17612: ** that means that a mutex could not be allocated. 
17613: ** SQLite will unwind its stack and return an error.  The argument
17614: ** to sqlite3_mutex_alloc() is one of these integer constants:
17615: **
17616: ** <ul>
17617: ** <li>  SQLITE_MUTEX_FAST
17618: ** <li>  SQLITE_MUTEX_RECURSIVE
17619: ** <li>  SQLITE_MUTEX_STATIC_MASTER
17620: ** <li>  SQLITE_MUTEX_STATIC_MEM
17621: ** <li>  SQLITE_MUTEX_STATIC_MEM2
17622: ** <li>  SQLITE_MUTEX_STATIC_PRNG
17623: ** <li>  SQLITE_MUTEX_STATIC_LRU
17624: ** <li>  SQLITE_MUTEX_STATIC_LRU2
17625: ** </ul>
17626: **
17627: ** The first two constants cause sqlite3_mutex_alloc() to create
17628: ** a new mutex.  The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
17629: ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
17630: ** The mutex implementation does not need to make a distinction
17631: ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
17632: ** not want to.  But SQLite will only request a recursive mutex in
17633: ** cases where it really needs one.  If a faster non-recursive mutex
17634: ** implementation is available on the host platform, the mutex subsystem
17635: ** might return such a mutex in response to SQLITE_MUTEX_FAST.
17636: **
17637: ** The other allowed parameters to sqlite3_mutex_alloc() each return
17638: ** a pointer to a static preexisting mutex.  Six static mutexes are
17639: ** used by the current version of SQLite.  Future versions of SQLite
17640: ** may add additional static mutexes.  Static mutexes are for internal
17641: ** use by SQLite only.  Applications that use SQLite mutexes should
17642: ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
17643: ** SQLITE_MUTEX_RECURSIVE.
17644: **
17645: ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
17646: ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
17647: ** returns a different mutex on every call.  But for the static
17648: ** mutex types, the same mutex is returned on every call that has
17649: ** the same type number.
17650: */
17651: static sqlite3_mutex *os2MutexAlloc(int iType){
17652:   sqlite3_mutex *p = NULL;
17653:   switch( iType ){
17654:     case SQLITE_MUTEX_FAST:
17655:     case SQLITE_MUTEX_RECURSIVE: {
17656:       p = sqlite3MallocZero( sizeof(*p) );
17657:       if( p ){
17658:         p->id = iType;
17659:         if( DosCreateMutexSem( 0, &p->mutex, 0, FALSE ) != NO_ERROR ){
17660:           sqlite3_free( p );
17661:           p = NULL;
17662:         }
17663:       }
17664:       break;
17665:     }
17666:     default: {
17667:       static volatile int isInit = 0;
17668:       static sqlite3_mutex staticMutexes[6] = {
17669:         SQLITE3_MUTEX_INITIALIZER,
17670:         SQLITE3_MUTEX_INITIALIZER,
17671:         SQLITE3_MUTEX_INITIALIZER,
17672:         SQLITE3_MUTEX_INITIALIZER,
17673:         SQLITE3_MUTEX_INITIALIZER,
17674:         SQLITE3_MUTEX_INITIALIZER,
17675:       };
17676:       if ( !isInit ){
17677:         APIRET rc;
17678:         PTIB ptib;
17679:         PPIB ppib;
17680:         HMTX mutex;
17681:         char name[32];
17682:         DosGetInfoBlocks( &ptib, &ppib );
17683:         sqlite3_snprintf( sizeof(name), name, "\\SEM32\\SQLITE%04x",
17684:                           ppib->pib_ulpid );
17685:         while( !isInit ){
17686:           mutex = 0;
17687:           rc = DosCreateMutexSem( name, &mutex, 0, FALSE);
17688:           if( rc == NO_ERROR ){
17689:             unsigned int i;
17690:             if( !isInit ){
17691:               for( i = 0; i < sizeof(staticMutexes)/sizeof(staticMutexes[0]); i++ ){
17692:                 DosCreateMutexSem( 0, &staticMutexes[i].mutex, 0, FALSE );
17693:               }
17694:               isInit = 1;
17695:             }
17696:             DosCloseMutexSem( mutex );
17697:           }else if( rc == ERROR_DUPLICATE_NAME ){
17698:             DosSleep( 1 );
17699:           }else{
17700:             return p;
17701:           }
17702:         }
17703:       }
17704:       assert( iType-2 >= 0 );
17705:       assert( iType-2 < sizeof(staticMutexes)/sizeof(staticMutexes[0]) );
17706:       p = &staticMutexes[iType-2];
17707:       p->id = iType;
17708:       break;
17709:     }
17710:   }
17711:   return p;
17712: }
17713: 
17714: 
17715: /*
17716: ** This routine deallocates a previously allocated mutex.
17717: ** SQLite is careful to deallocate every mutex that it allocates.
17718: */
17719: static void os2MutexFree(sqlite3_mutex *p){
17720: #ifdef SQLITE_DEBUG
17721:   TID tid;
17722:   PID pid;
17723:   ULONG ulCount;
17724:   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
17725:   assert( ulCount==0 );
17726:   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
17727: #endif
17728:   DosCloseMutexSem( p->mutex );
17729:   sqlite3_free( p );
17730: }
17731: 
17732: #ifdef SQLITE_DEBUG
17733: /*
17734: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
17735: ** intended for use inside assert() statements.
17736: */
17737: static int os2MutexHeld(sqlite3_mutex *p){
17738:   TID tid;
17739:   PID pid;
17740:   ULONG ulCount;
17741:   PTIB ptib;
17742:   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
17743:   if( ulCount==0 || ( ulCount>1 && p->id!=SQLITE_MUTEX_RECURSIVE ) )
17744:     return 0;
17745:   DosGetInfoBlocks(&ptib, NULL);
17746:   return tid==ptib->tib_ptib2->tib2_ultid;
17747: }
17748: static int os2MutexNotheld(sqlite3_mutex *p){
17749:   TID tid;
17750:   PID pid;
17751:   ULONG ulCount;
17752:   PTIB ptib;
17753:   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
17754:   if( ulCount==0 )
17755:     return 1;
17756:   DosGetInfoBlocks(&ptib, NULL);
17757:   return tid!=ptib->tib_ptib2->tib2_ultid;
17758: }
17759: static void os2MutexTrace(sqlite3_mutex *p, char *pAction){
17760:   TID   tid;
17761:   PID   pid;
17762:   ULONG ulCount;
17763:   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
17764:   printf("%s mutex %p (%d) with nRef=%ld\n", pAction, (void*)p, p->trace, ulCount);
17765: }
17766: #endif
17767: 
17768: /*
17769: ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
17770: ** to enter a mutex.  If another thread is already within the mutex,
17771: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
17772: ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
17773: ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
17774: ** be entered multiple times by the same thread.  In such cases the,
17775: ** mutex must be exited an equal number of times before another thread
17776: ** can enter.  If the same thread tries to enter any other kind of mutex
17777: ** more than once, the behavior is undefined.
17778: */
17779: static void os2MutexEnter(sqlite3_mutex *p){
17780:   assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) );
17781:   DosRequestMutexSem(p->mutex, SEM_INDEFINITE_WAIT);
17782: #ifdef SQLITE_DEBUG
17783:   if( p->trace ) os2MutexTrace(p, "enter");
17784: #endif
17785: }
17786: static int os2MutexTry(sqlite3_mutex *p){
17787:   int rc = SQLITE_BUSY;
17788:   assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) );
17789:   if( DosRequestMutexSem(p->mutex, SEM_IMMEDIATE_RETURN) == NO_ERROR ) {
17790:     rc = SQLITE_OK;
17791: #ifdef SQLITE_DEBUG
17792:     if( p->trace ) os2MutexTrace(p, "try");
17793: #endif
17794:   }
17795:   return rc;
17796: }
17797: 
17798: /*
17799: ** The sqlite3_mutex_leave() routine exits a mutex that was
17800: ** previously entered by the same thread.  The behavior
17801: ** is undefined if the mutex is not currently entered or
17802: ** is not currently allocated.  SQLite will never do either.
17803: */
17804: static void os2MutexLeave(sqlite3_mutex *p){
17805:   assert( os2MutexHeld(p) );
17806:   DosReleaseMutexSem(p->mutex);
17807: #ifdef SQLITE_DEBUG
17808:   if( p->trace ) os2MutexTrace(p, "leave");
17809: #endif
17810: }
17811: 
17812: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
17813:   static const sqlite3_mutex_methods sMutex = {
17814:     os2MutexInit,
17815:     os2MutexEnd,
17816:     os2MutexAlloc,
17817:     os2MutexFree,
17818:     os2MutexEnter,
17819:     os2MutexTry,
17820:     os2MutexLeave,
17821: #ifdef SQLITE_DEBUG
17822:     os2MutexHeld,
17823:     os2MutexNotheld
17824: #else
17825:     0,
17826:     0
17827: #endif
17828:   };
17829: 
17830:   return &sMutex;
17831: }
17832: #endif /* SQLITE_MUTEX_OS2 */
17833: 
17834: /************** End of mutex_os2.c *******************************************/
17835: /************** Begin file mutex_unix.c **************************************/
17836: /*
17837: ** 2007 August 28
17838: **
17839: ** The author disclaims copyright to this source code.  In place of
17840: ** a legal notice, here is a blessing:
17841: **
17842: **    May you do good and not evil.
17843: **    May you find forgiveness for yourself and forgive others.
17844: **    May you share freely, never taking more than you give.
17845: **
17846: *************************************************************************
17847: ** This file contains the C functions that implement mutexes for pthreads
17848: */
17849: 
17850: /*
17851: ** The code in this file is only used if we are compiling threadsafe
17852: ** under unix with pthreads.
17853: **
17854: ** Note that this implementation requires a version of pthreads that
17855: ** supports recursive mutexes.
17856: */
17857: #ifdef SQLITE_MUTEX_PTHREADS
17858: 
17859: #include <pthread.h>
17860: 
17861: /*
17862: ** The sqlite3_mutex.id, sqlite3_mutex.nRef, and sqlite3_mutex.owner fields
17863: ** are necessary under two condidtions:  (1) Debug builds and (2) using
17864: ** home-grown mutexes.  Encapsulate these conditions into a single #define.
17865: */
17866: #if defined(SQLITE_DEBUG) || defined(SQLITE_HOMEGROWN_RECURSIVE_MUTEX)
17867: # define SQLITE_MUTEX_NREF 1
17868: #else
17869: # define SQLITE_MUTEX_NREF 0
17870: #endif
17871: 
17872: /*
17873: ** Each recursive mutex is an instance of the following structure.
17874: */
17875: struct sqlite3_mutex {
17876:   pthread_mutex_t mutex;     /* Mutex controlling the lock */
17877: #if SQLITE_MUTEX_NREF
17878:   int id;                    /* Mutex type */
17879:   volatile int nRef;         /* Number of entrances */
17880:   volatile pthread_t owner;  /* Thread that is within this mutex */
17881:   int trace;                 /* True to trace changes */
17882: #endif
17883: };
17884: #if SQLITE_MUTEX_NREF
17885: #define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, 0, (pthread_t)0, 0 }
17886: #else
17887: #define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER }
17888: #endif
17889: 
17890: /*
17891: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
17892: ** intended for use only inside assert() statements.  On some platforms,
17893: ** there might be race conditions that can cause these routines to
17894: ** deliver incorrect results.  In particular, if pthread_equal() is
17895: ** not an atomic operation, then these routines might delivery
17896: ** incorrect results.  On most platforms, pthread_equal() is a 
17897: ** comparison of two integers and is therefore atomic.  But we are
17898: ** told that HPUX is not such a platform.  If so, then these routines
17899: ** will not always work correctly on HPUX.
17900: **
17901: ** On those platforms where pthread_equal() is not atomic, SQLite
17902: ** should be compiled without -DSQLITE_DEBUG and with -DNDEBUG to
17903: ** make sure no assert() statements are evaluated and hence these
17904: ** routines are never called.
17905: */
17906: #if !defined(NDEBUG) || defined(SQLITE_DEBUG)
17907: static int pthreadMutexHeld(sqlite3_mutex *p){
17908:   return (p->nRef!=0 && pthread_equal(p->owner, pthread_self()));
17909: }
17910: static int pthreadMutexNotheld(sqlite3_mutex *p){
17911:   return p->nRef==0 || pthread_equal(p->owner, pthread_self())==0;
17912: }
17913: #endif
17914: 
17915: /*
17916: ** Initialize and deinitialize the mutex subsystem.
17917: */
17918: static int pthreadMutexInit(void){ return SQLITE_OK; }
17919: static int pthreadMutexEnd(void){ return SQLITE_OK; }
17920: 
17921: /*
17922: ** The sqlite3_mutex_alloc() routine allocates a new
17923: ** mutex and returns a pointer to it.  If it returns NULL
17924: ** that means that a mutex could not be allocated.  SQLite
17925: ** will unwind its stack and return an error.  The argument
17926: ** to sqlite3_mutex_alloc() is one of these integer constants:
17927: **
17928: ** <ul>
17929: ** <li>  SQLITE_MUTEX_FAST
17930: ** <li>  SQLITE_MUTEX_RECURSIVE
17931: ** <li>  SQLITE_MUTEX_STATIC_MASTER
17932: ** <li>  SQLITE_MUTEX_STATIC_MEM
17933: ** <li>  SQLITE_MUTEX_STATIC_MEM2
17934: ** <li>  SQLITE_MUTEX_STATIC_PRNG
17935: ** <li>  SQLITE_MUTEX_STATIC_LRU
17936: ** <li>  SQLITE_MUTEX_STATIC_PMEM
17937: ** </ul>
17938: **
17939: ** The first two constants cause sqlite3_mutex_alloc() to create
17940: ** a new mutex.  The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
17941: ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
17942: ** The mutex implementation does not need to make a distinction
17943: ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
17944: ** not want to.  But SQLite will only request a recursive mutex in
17945: ** cases where it really needs one.  If a faster non-recursive mutex
17946: ** implementation is available on the host platform, the mutex subsystem
17947: ** might return such a mutex in response to SQLITE_MUTEX_FAST.
17948: **
17949: ** The other allowed parameters to sqlite3_mutex_alloc() each return
17950: ** a pointer to a static preexisting mutex.  Six static mutexes are
17951: ** used by the current version of SQLite.  Future versions of SQLite
17952: ** may add additional static mutexes.  Static mutexes are for internal
17953: ** use by SQLite only.  Applications that use SQLite mutexes should
17954: ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
17955: ** SQLITE_MUTEX_RECURSIVE.
17956: **
17957: ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
17958: ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
17959: ** returns a different mutex on every call.  But for the static 
17960: ** mutex types, the same mutex is returned on every call that has
17961: ** the same type number.
17962: */
17963: static sqlite3_mutex *pthreadMutexAlloc(int iType){
17964:   static sqlite3_mutex staticMutexes[] = {
17965:     SQLITE3_MUTEX_INITIALIZER,
17966:     SQLITE3_MUTEX_INITIALIZER,
17967:     SQLITE3_MUTEX_INITIALIZER,
17968:     SQLITE3_MUTEX_INITIALIZER,
17969:     SQLITE3_MUTEX_INITIALIZER,
17970:     SQLITE3_MUTEX_INITIALIZER
17971:   };
17972:   sqlite3_mutex *p;
17973:   switch( iType ){
17974:     case SQLITE_MUTEX_RECURSIVE: {
17975:       p = sqlite3MallocZero( sizeof(*p) );
17976:       if( p ){
17977: #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
17978:         /* If recursive mutexes are not available, we will have to
17979:         ** build our own.  See below. */
17980:         pthread_mutex_init(&p->mutex, 0);
17981: #else
17982:         /* Use a recursive mutex if it is available */
17983:         pthread_mutexattr_t recursiveAttr;
17984:         pthread_mutexattr_init(&recursiveAttr);
17985:         pthread_mutexattr_settype(&recursiveAttr, PTHREAD_MUTEX_RECURSIVE);
17986:         pthread_mutex_init(&p->mutex, &recursiveAttr);
17987:         pthread_mutexattr_destroy(&recursiveAttr);
17988: #endif
17989: #if SQLITE_MUTEX_NREF
17990:         p->id = iType;
17991: #endif
17992:       }
17993:       break;
17994:     }
17995:     case SQLITE_MUTEX_FAST: {
17996:       p = sqlite3MallocZero( sizeof(*p) );
17997:       if( p ){
17998: #if SQLITE_MUTEX_NREF
17999:         p->id = iType;
18000: #endif
18001:         pthread_mutex_init(&p->mutex, 0);
18002:       }
18003:       break;
18004:     }
18005:     default: {
18006:       assert( iType-2 >= 0 );
18007:       assert( iType-2 < ArraySize(staticMutexes) );
18008:       p = &staticMutexes[iType-2];
18009: #if SQLITE_MUTEX_NREF
18010:       p->id = iType;
18011: #endif
18012:       break;
18013:     }
18014:   }
18015:   return p;
18016: }
18017: 
18018: 
18019: /*
18020: ** This routine deallocates a previously
18021: ** allocated mutex.  SQLite is careful to deallocate every
18022: ** mutex that it allocates.
18023: */
18024: static void pthreadMutexFree(sqlite3_mutex *p){
18025:   assert( p->nRef==0 );
18026:   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
18027:   pthread_mutex_destroy(&p->mutex);
18028:   sqlite3_free(p);
18029: }
18030: 
18031: /*
18032: ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
18033: ** to enter a mutex.  If another thread is already within the mutex,
18034: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
18035: ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
18036: ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
18037: ** be entered multiple times by the same thread.  In such cases the,
18038: ** mutex must be exited an equal number of times before another thread
18039: ** can enter.  If the same thread tries to enter any other kind of mutex
18040: ** more than once, the behavior is undefined.
18041: */
18042: static void pthreadMutexEnter(sqlite3_mutex *p){
18043:   assert( p->id==SQLITE_MUTEX_RECURSIVE || pthreadMutexNotheld(p) );
18044: 
18045: #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
18046:   /* If recursive mutexes are not available, then we have to grow
18047:   ** our own.  This implementation assumes that pthread_equal()
18048:   ** is atomic - that it cannot be deceived into thinking self
18049:   ** and p->owner are equal if p->owner changes between two values
18050:   ** that are not equal to self while the comparison is taking place.
18051:   ** This implementation also assumes a coherent cache - that 
18052:   ** separate processes cannot read different values from the same
18053:   ** address at the same time.  If either of these two conditions
18054:   ** are not met, then the mutexes will fail and problems will result.
18055:   */
18056:   {
18057:     pthread_t self = pthread_self();
18058:     if( p->nRef>0 && pthread_equal(p->owner, self) ){
18059:       p->nRef++;
18060:     }else{
18061:       pthread_mutex_lock(&p->mutex);
18062:       assert( p->nRef==0 );
18063:       p->owner = self;
18064:       p->nRef = 1;
18065:     }
18066:   }
18067: #else
18068:   /* Use the built-in recursive mutexes if they are available.
18069:   */
18070:   pthread_mutex_lock(&p->mutex);
18071: #if SQLITE_MUTEX_NREF
18072:   assert( p->nRef>0 || p->owner==0 );
18073:   p->owner = pthread_self();
18074:   p->nRef++;
18075: #endif
18076: #endif
18077: 
18078: #ifdef SQLITE_DEBUG
18079:   if( p->trace ){
18080:     printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18081:   }
18082: #endif
18083: }
18084: static int pthreadMutexTry(sqlite3_mutex *p){
18085:   int rc;
18086:   assert( p->id==SQLITE_MUTEX_RECURSIVE || pthreadMutexNotheld(p) );
18087: 
18088: #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
18089:   /* If recursive mutexes are not available, then we have to grow
18090:   ** our own.  This implementation assumes that pthread_equal()
18091:   ** is atomic - that it cannot be deceived into thinking self
18092:   ** and p->owner are equal if p->owner changes between two values
18093:   ** that are not equal to self while the comparison is taking place.
18094:   ** This implementation also assumes a coherent cache - that 
18095:   ** separate processes cannot read different values from the same
18096:   ** address at the same time.  If either of these two conditions
18097:   ** are not met, then the mutexes will fail and problems will result.
18098:   */
18099:   {
18100:     pthread_t self = pthread_self();
18101:     if( p->nRef>0 && pthread_equal(p->owner, self) ){
18102:       p->nRef++;
18103:       rc = SQLITE_OK;
18104:     }else if( pthread_mutex_trylock(&p->mutex)==0 ){
18105:       assert( p->nRef==0 );
18106:       p->owner = self;
18107:       p->nRef = 1;
18108:       rc = SQLITE_OK;
18109:     }else{
18110:       rc = SQLITE_BUSY;
18111:     }
18112:   }
18113: #else
18114:   /* Use the built-in recursive mutexes if they are available.
18115:   */
18116:   if( pthread_mutex_trylock(&p->mutex)==0 ){
18117: #if SQLITE_MUTEX_NREF
18118:     p->owner = pthread_self();
18119:     p->nRef++;
18120: #endif
18121:     rc = SQLITE_OK;
18122:   }else{
18123:     rc = SQLITE_BUSY;
18124:   }
18125: #endif
18126: 
18127: #ifdef SQLITE_DEBUG
18128:   if( rc==SQLITE_OK && p->trace ){
18129:     printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18130:   }
18131: #endif
18132:   return rc;
18133: }
18134: 
18135: /*
18136: ** The sqlite3_mutex_leave() routine exits a mutex that was
18137: ** previously entered by the same thread.  The behavior
18138: ** is undefined if the mutex is not currently entered or
18139: ** is not currently allocated.  SQLite will never do either.
18140: */
18141: static void pthreadMutexLeave(sqlite3_mutex *p){
18142:   assert( pthreadMutexHeld(p) );
18143: #if SQLITE_MUTEX_NREF
18144:   p->nRef--;
18145:   if( p->nRef==0 ) p->owner = 0;
18146: #endif
18147:   assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE );
18148: 
18149: #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
18150:   if( p->nRef==0 ){
18151:     pthread_mutex_unlock(&p->mutex);
18152:   }
18153: #else
18154:   pthread_mutex_unlock(&p->mutex);
18155: #endif
18156: 
18157: #ifdef SQLITE_DEBUG
18158:   if( p->trace ){
18159:     printf("leave mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18160:   }
18161: #endif
18162: }
18163: 
18164: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
18165:   static const sqlite3_mutex_methods sMutex = {
18166:     pthreadMutexInit,
18167:     pthreadMutexEnd,
18168:     pthreadMutexAlloc,
18169:     pthreadMutexFree,
18170:     pthreadMutexEnter,
18171:     pthreadMutexTry,
18172:     pthreadMutexLeave,
18173: #ifdef SQLITE_DEBUG
18174:     pthreadMutexHeld,
18175:     pthreadMutexNotheld
18176: #else
18177:     0,
18178:     0
18179: #endif
18180:   };
18181: 
18182:   return &sMutex;
18183: }
18184: 
18185: #endif /* SQLITE_MUTEX_PTHREADS */
18186: 
18187: /************** End of mutex_unix.c ******************************************/
18188: /************** Begin file mutex_w32.c ***************************************/
18189: /*
18190: ** 2007 August 14
18191: **
18192: ** The author disclaims copyright to this source code.  In place of
18193: ** a legal notice, here is a blessing:
18194: **
18195: **    May you do good and not evil.
18196: **    May you find forgiveness for yourself and forgive others.
18197: **    May you share freely, never taking more than you give.
18198: **
18199: *************************************************************************
18200: ** This file contains the C functions that implement mutexes for win32
18201: */
18202: 
18203: /*
18204: ** The code in this file is only used if we are compiling multithreaded
18205: ** on a win32 system.
18206: */
18207: #ifdef SQLITE_MUTEX_W32
18208: 
18209: /*
18210: ** Each recursive mutex is an instance of the following structure.
18211: */
18212: struct sqlite3_mutex {
18213:   CRITICAL_SECTION mutex;    /* Mutex controlling the lock */
18214:   int id;                    /* Mutex type */
18215: #ifdef SQLITE_DEBUG
18216:   volatile int nRef;         /* Number of enterances */
18217:   volatile DWORD owner;      /* Thread holding this mutex */
18218:   int trace;                 /* True to trace changes */
18219: #endif
18220: };
18221: #define SQLITE_W32_MUTEX_INITIALIZER { 0 }
18222: #ifdef SQLITE_DEBUG
18223: #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0, 0L, (DWORD)0, 0 }
18224: #else
18225: #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0 }
18226: #endif
18227: 
18228: /*
18229: ** Return true (non-zero) if we are running under WinNT, Win2K, WinXP,
18230: ** or WinCE.  Return false (zero) for Win95, Win98, or WinME.
18231: **
18232: ** Here is an interesting observation:  Win95, Win98, and WinME lack
18233: ** the LockFileEx() API.  But we can still statically link against that
18234: ** API as long as we don't call it win running Win95/98/ME.  A call to
18235: ** this routine is used to determine if the host is Win95/98/ME or
18236: ** WinNT/2K/XP so that we will know whether or not we can safely call
18237: ** the LockFileEx() API.
18238: **
18239: ** mutexIsNT() is only used for the TryEnterCriticalSection() API call,
18240: ** which is only available if your application was compiled with 
18241: ** _WIN32_WINNT defined to a value >= 0x0400.  Currently, the only
18242: ** call to TryEnterCriticalSection() is #ifdef'ed out, so #ifdef 
18243: ** this out as well.
18244: */
18245: #if 0
18246: #if SQLITE_OS_WINCE
18247: # define mutexIsNT()  (1)
18248: #else
18249:   static int mutexIsNT(void){
18250:     static int osType = 0;
18251:     if( osType==0 ){
18252:       OSVERSIONINFO sInfo;
18253:       sInfo.dwOSVersionInfoSize = sizeof(sInfo);
18254:       GetVersionEx(&sInfo);
18255:       osType = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
18256:     }
18257:     return osType==2;
18258:   }
18259: #endif /* SQLITE_OS_WINCE */
18260: #endif
18261: 
18262: #ifdef SQLITE_DEBUG
18263: /*
18264: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
18265: ** intended for use only inside assert() statements.
18266: */
18267: static int winMutexHeld(sqlite3_mutex *p){
18268:   return p->nRef!=0 && p->owner==GetCurrentThreadId();
18269: }
18270: static int winMutexNotheld2(sqlite3_mutex *p, DWORD tid){
18271:   return p->nRef==0 || p->owner!=tid;
18272: }
18273: static int winMutexNotheld(sqlite3_mutex *p){
18274:   DWORD tid = GetCurrentThreadId(); 
18275:   return winMutexNotheld2(p, tid);
18276: }
18277: #endif
18278: 
18279: 
18280: /*
18281: ** Initialize and deinitialize the mutex subsystem.
18282: */
18283: static sqlite3_mutex winMutex_staticMutexes[6] = {
18284:   SQLITE3_MUTEX_INITIALIZER,
18285:   SQLITE3_MUTEX_INITIALIZER,
18286:   SQLITE3_MUTEX_INITIALIZER,
18287:   SQLITE3_MUTEX_INITIALIZER,
18288:   SQLITE3_MUTEX_INITIALIZER,
18289:   SQLITE3_MUTEX_INITIALIZER
18290: };
18291: static int winMutex_isInit = 0;
18292: /* As winMutexInit() and winMutexEnd() are called as part
18293: ** of the sqlite3_initialize and sqlite3_shutdown()
18294: ** processing, the "interlocked" magic is probably not
18295: ** strictly necessary.
18296: */
18297: static long winMutex_lock = 0;
18298: 
18299: static int winMutexInit(void){ 
18300:   /* The first to increment to 1 does actual initialization */
18301:   if( InterlockedCompareExchange(&winMutex_lock, 1, 0)==0 ){
18302:     int i;
18303:     for(i=0; i<ArraySize(winMutex_staticMutexes); i++){
18304:       InitializeCriticalSection(&winMutex_staticMutexes[i].mutex);
18305:     }
18306:     winMutex_isInit = 1;
18307:   }else{
18308:     /* Someone else is in the process of initing the static mutexes */
18309:     while( !winMutex_isInit ){
18310:       Sleep(1);
18311:     }
18312:   }
18313:   return SQLITE_OK; 
18314: }
18315: 
18316: static int winMutexEnd(void){ 
18317:   /* The first to decrement to 0 does actual shutdown 
18318:   ** (which should be the last to shutdown.) */
18319:   if( InterlockedCompareExchange(&winMutex_lock, 0, 1)==1 ){
18320:     if( winMutex_isInit==1 ){
18321:       int i;
18322:       for(i=0; i<ArraySize(winMutex_staticMutexes); i++){
18323:         DeleteCriticalSection(&winMutex_staticMutexes[i].mutex);
18324:       }
18325:       winMutex_isInit = 0;
18326:     }
18327:   }
18328:   return SQLITE_OK; 
18329: }
18330: 
18331: /*
18332: ** The sqlite3_mutex_alloc() routine allocates a new
18333: ** mutex and returns a pointer to it.  If it returns NULL
18334: ** that means that a mutex could not be allocated.  SQLite
18335: ** will unwind its stack and return an error.  The argument
18336: ** to sqlite3_mutex_alloc() is one of these integer constants:
18337: **
18338: ** <ul>
18339: ** <li>  SQLITE_MUTEX_FAST
18340: ** <li>  SQLITE_MUTEX_RECURSIVE
18341: ** <li>  SQLITE_MUTEX_STATIC_MASTER
18342: ** <li>  SQLITE_MUTEX_STATIC_MEM
18343: ** <li>  SQLITE_MUTEX_STATIC_MEM2
18344: ** <li>  SQLITE_MUTEX_STATIC_PRNG
18345: ** <li>  SQLITE_MUTEX_STATIC_LRU
18346: ** <li>  SQLITE_MUTEX_STATIC_PMEM
18347: ** </ul>
18348: **
18349: ** The first two constants cause sqlite3_mutex_alloc() to create
18350: ** a new mutex.  The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
18351: ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
18352: ** The mutex implementation does not need to make a distinction
18353: ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
18354: ** not want to.  But SQLite will only request a recursive mutex in
18355: ** cases where it really needs one.  If a faster non-recursive mutex
18356: ** implementation is available on the host platform, the mutex subsystem
18357: ** might return such a mutex in response to SQLITE_MUTEX_FAST.
18358: **
18359: ** The other allowed parameters to sqlite3_mutex_alloc() each return
18360: ** a pointer to a static preexisting mutex.  Six static mutexes are
18361: ** used by the current version of SQLite.  Future versions of SQLite
18362: ** may add additional static mutexes.  Static mutexes are for internal
18363: ** use by SQLite only.  Applications that use SQLite mutexes should
18364: ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
18365: ** SQLITE_MUTEX_RECURSIVE.
18366: **
18367: ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
18368: ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
18369: ** returns a different mutex on every call.  But for the static 
18370: ** mutex types, the same mutex is returned on every call that has
18371: ** the same type number.
18372: */
18373: static sqlite3_mutex *winMutexAlloc(int iType){
18374:   sqlite3_mutex *p;
18375: 
18376:   switch( iType ){
18377:     case SQLITE_MUTEX_FAST:
18378:     case SQLITE_MUTEX_RECURSIVE: {
18379:       p = sqlite3MallocZero( sizeof(*p) );
18380:       if( p ){  
18381: #ifdef SQLITE_DEBUG
18382:         p->id = iType;
18383: #endif
18384:         InitializeCriticalSection(&p->mutex);
18385:       }
18386:       break;
18387:     }
18388:     default: {
18389:       assert( winMutex_isInit==1 );
18390:       assert( iType-2 >= 0 );
18391:       assert( iType-2 < ArraySize(winMutex_staticMutexes) );
18392:       p = &winMutex_staticMutexes[iType-2];
18393: #ifdef SQLITE_DEBUG
18394:       p->id = iType;
18395: #endif
18396:       break;
18397:     }
18398:   }
18399:   return p;
18400: }
18401: 
18402: 
18403: /*
18404: ** This routine deallocates a previously
18405: ** allocated mutex.  SQLite is careful to deallocate every
18406: ** mutex that it allocates.
18407: */
18408: static void winMutexFree(sqlite3_mutex *p){
18409:   assert( p );
18410:   assert( p->nRef==0 && p->owner==0 );
18411:   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
18412:   DeleteCriticalSection(&p->mutex);
18413:   sqlite3_free(p);
18414: }
18415: 
18416: /*
18417: ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
18418: ** to enter a mutex.  If another thread is already within the mutex,
18419: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
18420: ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
18421: ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
18422: ** be entered multiple times by the same thread.  In such cases the,
18423: ** mutex must be exited an equal number of times before another thread
18424: ** can enter.  If the same thread tries to enter any other kind of mutex
18425: ** more than once, the behavior is undefined.
18426: */
18427: static void winMutexEnter(sqlite3_mutex *p){
18428: #ifdef SQLITE_DEBUG
18429:   DWORD tid = GetCurrentThreadId(); 
18430:   assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
18431: #endif
18432:   EnterCriticalSection(&p->mutex);
18433: #ifdef SQLITE_DEBUG
18434:   assert( p->nRef>0 || p->owner==0 );
18435:   p->owner = tid; 
18436:   p->nRef++;
18437:   if( p->trace ){
18438:     printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18439:   }
18440: #endif
18441: }
18442: static int winMutexTry(sqlite3_mutex *p){
18443: #ifndef NDEBUG
18444:   DWORD tid = GetCurrentThreadId(); 
18445: #endif
18446:   int rc = SQLITE_BUSY;
18447:   assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
18448:   /*
18449:   ** The sqlite3_mutex_try() routine is very rarely used, and when it
18450:   ** is used it is merely an optimization.  So it is OK for it to always
18451:   ** fail.  
18452:   **
18453:   ** The TryEnterCriticalSection() interface is only available on WinNT.
18454:   ** And some windows compilers complain if you try to use it without
18455:   ** first doing some #defines that prevent SQLite from building on Win98.
18456:   ** For that reason, we will omit this optimization for now.  See
18457:   ** ticket #2685.
18458:   */
18459: #if 0
18460:   if( mutexIsNT() && TryEnterCriticalSection(&p->mutex) ){
18461:     p->owner = tid;
18462:     p->nRef++;
18463:     rc = SQLITE_OK;
18464:   }
18465: #else
18466:   UNUSED_PARAMETER(p);
18467: #endif
18468: #ifdef SQLITE_DEBUG
18469:   if( rc==SQLITE_OK && p->trace ){
18470:     printf("try mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18471:   }
18472: #endif
18473:   return rc;
18474: }
18475: 
18476: /*
18477: ** The sqlite3_mutex_leave() routine exits a mutex that was
18478: ** previously entered by the same thread.  The behavior
18479: ** is undefined if the mutex is not currently entered or
18480: ** is not currently allocated.  SQLite will never do either.
18481: */
18482: static void winMutexLeave(sqlite3_mutex *p){
18483: #ifndef NDEBUG
18484:   DWORD tid = GetCurrentThreadId();
18485:   assert( p->nRef>0 );
18486:   assert( p->owner==tid );
18487:   p->nRef--;
18488:   if( p->nRef==0 ) p->owner = 0;
18489:   assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE );
18490: #endif
18491:   LeaveCriticalSection(&p->mutex);
18492: #ifdef SQLITE_DEBUG
18493:   if( p->trace ){
18494:     printf("leave mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18495:   }
18496: #endif
18497: }
18498: 
18499: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
18500:   static const sqlite3_mutex_methods sMutex = {
18501:     winMutexInit,
18502:     winMutexEnd,
18503:     winMutexAlloc,
18504:     winMutexFree,
18505:     winMutexEnter,
18506:     winMutexTry,
18507:     winMutexLeave,
18508: #ifdef SQLITE_DEBUG
18509:     winMutexHeld,
18510:     winMutexNotheld
18511: #else
18512:     0,
18513:     0
18514: #endif
18515:   };
18516: 
18517:   return &sMutex;
18518: }
18519: #endif /* SQLITE_MUTEX_W32 */
18520: 
18521: /************** End of mutex_w32.c *******************************************/
18522: /************** Begin file malloc.c ******************************************/
18523: /*
18524: ** 2001 September 15
18525: **
18526: ** The author disclaims copyright to this source code.  In place of
18527: ** a legal notice, here is a blessing:
18528: **
18529: **    May you do good and not evil.
18530: **    May you find forgiveness for yourself and forgive others.
18531: **    May you share freely, never taking more than you give.
18532: **
18533: *************************************************************************
18534: **
18535: ** Memory allocation functions used throughout sqlite.
18536: */
18537: /* #include <stdarg.h> */
18538: 
18539: /*
18540: ** Attempt to release up to n bytes of non-essential memory currently
18541: ** held by SQLite. An example of non-essential memory is memory used to
18542: ** cache database pages that are not currently in use.
18543: */
18544: SQLITE_API int sqlite3_release_memory(int n){
18545: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
18546:   return sqlite3PcacheReleaseMemory(n);
18547: #else
18548:   /* IMPLEMENTATION-OF: R-34391-24921 The sqlite3_release_memory() routine
18549:   ** is a no-op returning zero if SQLite is not compiled with
18550:   ** SQLITE_ENABLE_MEMORY_MANAGEMENT. */
18551:   UNUSED_PARAMETER(n);
18552:   return 0;
18553: #endif
18554: }
18555: 
18556: /*
18557: ** An instance of the following object records the location of
18558: ** each unused scratch buffer.
18559: */
18560: typedef struct ScratchFreeslot {
18561:   struct ScratchFreeslot *pNext;   /* Next unused scratch buffer */
18562: } ScratchFreeslot;
18563: 
18564: /*
18565: ** State information local to the memory allocation subsystem.
18566: */
18567: static SQLITE_WSD struct Mem0Global {
18568:   sqlite3_mutex *mutex;         /* Mutex to serialize access */
18569: 
18570:   /*
18571:   ** The alarm callback and its arguments.  The mem0.mutex lock will
18572:   ** be held while the callback is running.  Recursive calls into
18573:   ** the memory subsystem are allowed, but no new callbacks will be
18574:   ** issued.
18575:   */
18576:   sqlite3_int64 alarmThreshold;
18577:   void (*alarmCallback)(void*, sqlite3_int64,int);
18578:   void *alarmArg;
18579: 
18580:   /*
18581:   ** Pointers to the end of sqlite3GlobalConfig.pScratch memory
18582:   ** (so that a range test can be used to determine if an allocation
18583:   ** being freed came from pScratch) and a pointer to the list of
18584:   ** unused scratch allocations.
18585:   */
18586:   void *pScratchEnd;
18587:   ScratchFreeslot *pScratchFree;
18588:   u32 nScratchFree;
18589: 
18590:   /*
18591:   ** True if heap is nearly "full" where "full" is defined by the
18592:   ** sqlite3_soft_heap_limit() setting.
18593:   */
18594:   int nearlyFull;
18595: } mem0 = { 0, 0, 0, 0, 0, 0, 0, 0 };
18596: 
18597: #define mem0 GLOBAL(struct Mem0Global, mem0)
18598: 
18599: /*
18600: ** This routine runs when the memory allocator sees that the
18601: ** total memory allocation is about to exceed the soft heap
18602: ** limit.
18603: */
18604: static void softHeapLimitEnforcer(
18605:   void *NotUsed, 
18606:   sqlite3_int64 NotUsed2,
18607:   int allocSize
18608: ){
18609:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
18610:   sqlite3_release_memory(allocSize);
18611: }
18612: 
18613: /*
18614: ** Change the alarm callback
18615: */
18616: static int sqlite3MemoryAlarm(
18617:   void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
18618:   void *pArg,
18619:   sqlite3_int64 iThreshold
18620: ){
18621:   int nUsed;
18622:   sqlite3_mutex_enter(mem0.mutex);
18623:   mem0.alarmCallback = xCallback;
18624:   mem0.alarmArg = pArg;
18625:   mem0.alarmThreshold = iThreshold;
18626:   nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
18627:   mem0.nearlyFull = (iThreshold>0 && iThreshold<=nUsed);
18628:   sqlite3_mutex_leave(mem0.mutex);
18629:   return SQLITE_OK;
18630: }
18631: 
18632: #ifndef SQLITE_OMIT_DEPRECATED
18633: /*
18634: ** Deprecated external interface.  Internal/core SQLite code
18635: ** should call sqlite3MemoryAlarm.
18636: */
18637: SQLITE_API int sqlite3_memory_alarm(
18638:   void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
18639:   void *pArg,
18640:   sqlite3_int64 iThreshold
18641: ){
18642:   return sqlite3MemoryAlarm(xCallback, pArg, iThreshold);
18643: }
18644: #endif
18645: 
18646: /*
18647: ** Set the soft heap-size limit for the library. Passing a zero or 
18648: ** negative value indicates no limit.
18649: */
18650: SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 n){
18651:   sqlite3_int64 priorLimit;
18652:   sqlite3_int64 excess;
18653: #ifndef SQLITE_OMIT_AUTOINIT
18654:   int rc = sqlite3_initialize();
18655:   if( rc ) return -1;
18656: #endif
18657:   sqlite3_mutex_enter(mem0.mutex);
18658:   priorLimit = mem0.alarmThreshold;
18659:   sqlite3_mutex_leave(mem0.mutex);
18660:   if( n<0 ) return priorLimit;
18661:   if( n>0 ){
18662:     sqlite3MemoryAlarm(softHeapLimitEnforcer, 0, n);
18663:   }else{
18664:     sqlite3MemoryAlarm(0, 0, 0);
18665:   }
18666:   excess = sqlite3_memory_used() - n;
18667:   if( excess>0 ) sqlite3_release_memory((int)(excess & 0x7fffffff));
18668:   return priorLimit;
18669: }
18670: SQLITE_API void sqlite3_soft_heap_limit(int n){
18671:   if( n<0 ) n = 0;
18672:   sqlite3_soft_heap_limit64(n);
18673: }
18674: 
18675: /*
18676: ** Initialize the memory allocation subsystem.
18677: */
18678: SQLITE_PRIVATE int sqlite3MallocInit(void){
18679:   if( sqlite3GlobalConfig.m.xMalloc==0 ){
18680:     sqlite3MemSetDefault();
18681:   }
18682:   memset(&mem0, 0, sizeof(mem0));
18683:   if( sqlite3GlobalConfig.bCoreMutex ){
18684:     mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
18685:   }
18686:   if( sqlite3GlobalConfig.pScratch && sqlite3GlobalConfig.szScratch>=100
18687:       && sqlite3GlobalConfig.nScratch>0 ){
18688:     int i, n, sz;
18689:     ScratchFreeslot *pSlot;
18690:     sz = ROUNDDOWN8(sqlite3GlobalConfig.szScratch);
18691:     sqlite3GlobalConfig.szScratch = sz;
18692:     pSlot = (ScratchFreeslot*)sqlite3GlobalConfig.pScratch;
18693:     n = sqlite3GlobalConfig.nScratch;
18694:     mem0.pScratchFree = pSlot;
18695:     mem0.nScratchFree = n;
18696:     for(i=0; i<n-1; i++){
18697:       pSlot->pNext = (ScratchFreeslot*)(sz+(char*)pSlot);
18698:       pSlot = pSlot->pNext;
18699:     }
18700:     pSlot->pNext = 0;
18701:     mem0.pScratchEnd = (void*)&pSlot[1];
18702:   }else{
18703:     mem0.pScratchEnd = 0;
18704:     sqlite3GlobalConfig.pScratch = 0;
18705:     sqlite3GlobalConfig.szScratch = 0;
18706:     sqlite3GlobalConfig.nScratch = 0;
18707:   }
18708:   if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512
18709:       || sqlite3GlobalConfig.nPage<1 ){
18710:     sqlite3GlobalConfig.pPage = 0;
18711:     sqlite3GlobalConfig.szPage = 0;
18712:     sqlite3GlobalConfig.nPage = 0;
18713:   }
18714:   return sqlite3GlobalConfig.m.xInit(sqlite3GlobalConfig.m.pAppData);
18715: }
18716: 
18717: /*
18718: ** Return true if the heap is currently under memory pressure - in other
18719: ** words if the amount of heap used is close to the limit set by
18720: ** sqlite3_soft_heap_limit().
18721: */
18722: SQLITE_PRIVATE int sqlite3HeapNearlyFull(void){
18723:   return mem0.nearlyFull;
18724: }
18725: 
18726: /*
18727: ** Deinitialize the memory allocation subsystem.
18728: */
18729: SQLITE_PRIVATE void sqlite3MallocEnd(void){
18730:   if( sqlite3GlobalConfig.m.xShutdown ){
18731:     sqlite3GlobalConfig.m.xShutdown(sqlite3GlobalConfig.m.pAppData);
18732:   }
18733:   memset(&mem0, 0, sizeof(mem0));
18734: }
18735: 
18736: /*
18737: ** Return the amount of memory currently checked out.
18738: */
18739: SQLITE_API sqlite3_int64 sqlite3_memory_used(void){
18740:   int n, mx;
18741:   sqlite3_int64 res;
18742:   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, 0);
18743:   res = (sqlite3_int64)n;  /* Work around bug in Borland C. Ticket #3216 */
18744:   return res;
18745: }
18746: 
18747: /*
18748: ** Return the maximum amount of memory that has ever been
18749: ** checked out since either the beginning of this process
18750: ** or since the most recent reset.
18751: */
18752: SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag){
18753:   int n, mx;
18754:   sqlite3_int64 res;
18755:   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, resetFlag);
18756:   res = (sqlite3_int64)mx;  /* Work around bug in Borland C. Ticket #3216 */
18757:   return res;
18758: }
18759: 
18760: /*
18761: ** Trigger the alarm 
18762: */
18763: static void sqlite3MallocAlarm(int nByte){
18764:   void (*xCallback)(void*,sqlite3_int64,int);
18765:   sqlite3_int64 nowUsed;
18766:   void *pArg;
18767:   if( mem0.alarmCallback==0 ) return;
18768:   xCallback = mem0.alarmCallback;
18769:   nowUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
18770:   pArg = mem0.alarmArg;
18771:   mem0.alarmCallback = 0;
18772:   sqlite3_mutex_leave(mem0.mutex);
18773:   xCallback(pArg, nowUsed, nByte);
18774:   sqlite3_mutex_enter(mem0.mutex);
18775:   mem0.alarmCallback = xCallback;
18776:   mem0.alarmArg = pArg;
18777: }
18778: 
18779: /*
18780: ** Do a memory allocation with statistics and alarms.  Assume the
18781: ** lock is already held.
18782: */
18783: static int mallocWithAlarm(int n, void **pp){
18784:   int nFull;
18785:   void *p;
18786:   assert( sqlite3_mutex_held(mem0.mutex) );
18787:   nFull = sqlite3GlobalConfig.m.xRoundup(n);
18788:   sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, n);
18789:   if( mem0.alarmCallback!=0 ){
18790:     int nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
18791:     if( nUsed >= mem0.alarmThreshold - nFull ){
18792:       mem0.nearlyFull = 1;
18793:       sqlite3MallocAlarm(nFull);
18794:     }else{
18795:       mem0.nearlyFull = 0;
18796:     }
18797:   }
18798:   p = sqlite3GlobalConfig.m.xMalloc(nFull);
18799: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
18800:   if( p==0 && mem0.alarmCallback ){
18801:     sqlite3MallocAlarm(nFull);
18802:     p = sqlite3GlobalConfig.m.xMalloc(nFull);
18803:   }
18804: #endif
18805:   if( p ){
18806:     nFull = sqlite3MallocSize(p);
18807:     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nFull);
18808:     sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, 1);
18809:   }
18810:   *pp = p;
18811:   return nFull;
18812: }
18813: 
18814: /*
18815: ** Allocate memory.  This routine is like sqlite3_malloc() except that it
18816: ** assumes the memory subsystem has already been initialized.
18817: */
18818: SQLITE_PRIVATE void *sqlite3Malloc(int n){
18819:   void *p;
18820:   if( n<=0               /* IMP: R-65312-04917 */ 
18821:    || n>=0x7fffff00
18822:   ){
18823:     /* A memory allocation of a number of bytes which is near the maximum
18824:     ** signed integer value might cause an integer overflow inside of the
18825:     ** xMalloc().  Hence we limit the maximum size to 0x7fffff00, giving
18826:     ** 255 bytes of overhead.  SQLite itself will never use anything near
18827:     ** this amount.  The only way to reach the limit is with sqlite3_malloc() */
18828:     p = 0;
18829:   }else if( sqlite3GlobalConfig.bMemstat ){
18830:     sqlite3_mutex_enter(mem0.mutex);
18831:     mallocWithAlarm(n, &p);
18832:     sqlite3_mutex_leave(mem0.mutex);
18833:   }else{
18834:     p = sqlite3GlobalConfig.m.xMalloc(n);
18835:   }
18836:   assert( EIGHT_BYTE_ALIGNMENT(p) );  /* IMP: R-04675-44850 */
18837:   return p;
18838: }
18839: 
18840: /*
18841: ** This version of the memory allocation is for use by the application.
18842: ** First make sure the memory subsystem is initialized, then do the
18843: ** allocation.
18844: */
18845: SQLITE_API void *sqlite3_malloc(int n){
18846: #ifndef SQLITE_OMIT_AUTOINIT
18847:   if( sqlite3_initialize() ) return 0;
18848: #endif
18849:   return sqlite3Malloc(n);
18850: }
18851: 
18852: /*
18853: ** Each thread may only have a single outstanding allocation from
18854: ** xScratchMalloc().  We verify this constraint in the single-threaded
18855: ** case by setting scratchAllocOut to 1 when an allocation
18856: ** is outstanding clearing it when the allocation is freed.
18857: */
18858: #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
18859: static int scratchAllocOut = 0;
18860: #endif
18861: 
18862: 
18863: /*
18864: ** Allocate memory that is to be used and released right away.
18865: ** This routine is similar to alloca() in that it is not intended
18866: ** for situations where the memory might be held long-term.  This
18867: ** routine is intended to get memory to old large transient data
18868: ** structures that would not normally fit on the stack of an
18869: ** embedded processor.
18870: */
18871: SQLITE_PRIVATE void *sqlite3ScratchMalloc(int n){
18872:   void *p;
18873:   assert( n>0 );
18874: 
18875:   sqlite3_mutex_enter(mem0.mutex);
18876:   if( mem0.nScratchFree && sqlite3GlobalConfig.szScratch>=n ){
18877:     p = mem0.pScratchFree;
18878:     mem0.pScratchFree = mem0.pScratchFree->pNext;
18879:     mem0.nScratchFree--;
18880:     sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
18881:     sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
18882:     sqlite3_mutex_leave(mem0.mutex);
18883:   }else{
18884:     if( sqlite3GlobalConfig.bMemstat ){
18885:       sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
18886:       n = mallocWithAlarm(n, &p);
18887:       if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n);
18888:       sqlite3_mutex_leave(mem0.mutex);
18889:     }else{
18890:       sqlite3_mutex_leave(mem0.mutex);
18891:       p = sqlite3GlobalConfig.m.xMalloc(n);
18892:     }
18893:     sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH);
18894:   }
18895:   assert( sqlite3_mutex_notheld(mem0.mutex) );
18896: 
18897: 
18898: #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
18899:   /* Verify that no more than two scratch allocations per thread
18900:   ** are outstanding at one time.  (This is only checked in the
18901:   ** single-threaded case since checking in the multi-threaded case
18902:   ** would be much more complicated.) */
18903:   assert( scratchAllocOut<=1 );
18904:   if( p ) scratchAllocOut++;
18905: #endif
18906: 
18907:   return p;
18908: }
18909: SQLITE_PRIVATE void sqlite3ScratchFree(void *p){
18910:   if( p ){
18911: 
18912: #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
18913:     /* Verify that no more than two scratch allocation per thread
18914:     ** is outstanding at one time.  (This is only checked in the
18915:     ** single-threaded case since checking in the multi-threaded case
18916:     ** would be much more complicated.) */
18917:     assert( scratchAllocOut>=1 && scratchAllocOut<=2 );
18918:     scratchAllocOut--;
18919: #endif
18920: 
18921:     if( p>=sqlite3GlobalConfig.pScratch && p<mem0.pScratchEnd ){
18922:       /* Release memory from the SQLITE_CONFIG_SCRATCH allocation */
18923:       ScratchFreeslot *pSlot;
18924:       pSlot = (ScratchFreeslot*)p;
18925:       sqlite3_mutex_enter(mem0.mutex);
18926:       pSlot->pNext = mem0.pScratchFree;
18927:       mem0.pScratchFree = pSlot;
18928:       mem0.nScratchFree++;
18929:       assert( mem0.nScratchFree <= (u32)sqlite3GlobalConfig.nScratch );
18930:       sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1);
18931:       sqlite3_mutex_leave(mem0.mutex);
18932:     }else{
18933:       /* Release memory back to the heap */
18934:       assert( sqlite3MemdebugHasType(p, MEMTYPE_SCRATCH) );
18935:       assert( sqlite3MemdebugNoType(p, ~MEMTYPE_SCRATCH) );
18936:       sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
18937:       if( sqlite3GlobalConfig.bMemstat ){
18938:         int iSize = sqlite3MallocSize(p);
18939:         sqlite3_mutex_enter(mem0.mutex);
18940:         sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, -iSize);
18941:         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
18942:         sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1);
18943:         sqlite3GlobalConfig.m.xFree(p);
18944:         sqlite3_mutex_leave(mem0.mutex);
18945:       }else{
18946:         sqlite3GlobalConfig.m.xFree(p);
18947:       }
18948:     }
18949:   }
18950: }
18951: 
18952: /*
18953: ** TRUE if p is a lookaside memory allocation from db
18954: */
18955: #ifndef SQLITE_OMIT_LOOKASIDE
18956: static int isLookaside(sqlite3 *db, void *p){
18957:   return p && p>=db->lookaside.pStart && p<db->lookaside.pEnd;
18958: }
18959: #else
18960: #define isLookaside(A,B) 0
18961: #endif
18962: 
18963: /*
18964: ** Return the size of a memory allocation previously obtained from
18965: ** sqlite3Malloc() or sqlite3_malloc().
18966: */
18967: SQLITE_PRIVATE int sqlite3MallocSize(void *p){
18968:   assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
18969:   assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
18970:   return sqlite3GlobalConfig.m.xSize(p);
18971: }
18972: SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){
18973:   assert( db==0 || sqlite3_mutex_held(db->mutex) );
18974:   if( db && isLookaside(db, p) ){
18975:     return db->lookaside.sz;
18976:   }else{
18977:     assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
18978:     assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
18979:     assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
18980:     return sqlite3GlobalConfig.m.xSize(p);
18981:   }
18982: }
18983: 
18984: /*
18985: ** Free memory previously obtained from sqlite3Malloc().
18986: */
18987: SQLITE_API void sqlite3_free(void *p){
18988:   if( p==0 ) return;  /* IMP: R-49053-54554 */
18989:   assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
18990:   assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
18991:   if( sqlite3GlobalConfig.bMemstat ){
18992:     sqlite3_mutex_enter(mem0.mutex);
18993:     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p));
18994:     sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1);
18995:     sqlite3GlobalConfig.m.xFree(p);
18996:     sqlite3_mutex_leave(mem0.mutex);
18997:   }else{
18998:     sqlite3GlobalConfig.m.xFree(p);
18999:   }
19000: }
19001: 
19002: /*
19003: ** Free memory that might be associated with a particular database
19004: ** connection.
19005: */
19006: SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
19007:   assert( db==0 || sqlite3_mutex_held(db->mutex) );
19008:   if( db ){
19009:     if( db->pnBytesFreed ){
19010:       *db->pnBytesFreed += sqlite3DbMallocSize(db, p);
19011:       return;
19012:     }
19013:     if( isLookaside(db, p) ){
19014:       LookasideSlot *pBuf = (LookasideSlot*)p;
19015:       pBuf->pNext = db->lookaside.pFree;
19016:       db->lookaside.pFree = pBuf;
19017:       db->lookaside.nOut--;
19018:       return;
19019:     }
19020:   }
19021:   assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
19022:   assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
19023:   assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
19024:   sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
19025:   sqlite3_free(p);
19026: }
19027: 
19028: /*
19029: ** Change the size of an existing memory allocation
19030: */
19031: SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, int nBytes){
19032:   int nOld, nNew, nDiff;
19033:   void *pNew;
19034:   if( pOld==0 ){
19035:     return sqlite3Malloc(nBytes); /* IMP: R-28354-25769 */
19036:   }
19037:   if( nBytes<=0 ){
19038:     sqlite3_free(pOld); /* IMP: R-31593-10574 */
19039:     return 0;
19040:   }
19041:   if( nBytes>=0x7fffff00 ){
19042:     /* The 0x7ffff00 limit term is explained in comments on sqlite3Malloc() */
19043:     return 0;
19044:   }
19045:   nOld = sqlite3MallocSize(pOld);
19046:   /* IMPLEMENTATION-OF: R-46199-30249 SQLite guarantees that the second
19047:   ** argument to xRealloc is always a value returned by a prior call to
19048:   ** xRoundup. */
19049:   nNew = sqlite3GlobalConfig.m.xRoundup(nBytes);
19050:   if( nOld==nNew ){
19051:     pNew = pOld;
19052:   }else if( sqlite3GlobalConfig.bMemstat ){
19053:     sqlite3_mutex_enter(mem0.mutex);
19054:     sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);
19055:     nDiff = nNew - nOld;
19056:     if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED) >= 
19057:           mem0.alarmThreshold-nDiff ){
19058:       sqlite3MallocAlarm(nDiff);
19059:     }
19060:     assert( sqlite3MemdebugHasType(pOld, MEMTYPE_HEAP) );
19061:     assert( sqlite3MemdebugNoType(pOld, ~MEMTYPE_HEAP) );
19062:     pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
19063:     if( pNew==0 && mem0.alarmCallback ){
19064:       sqlite3MallocAlarm(nBytes);
19065:       pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
19066:     }
19067:     if( pNew ){
19068:       nNew = sqlite3MallocSize(pNew);
19069:       sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld);
19070:     }
19071:     sqlite3_mutex_leave(mem0.mutex);
19072:   }else{
19073:     pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
19074:   }
19075:   assert( EIGHT_BYTE_ALIGNMENT(pNew) ); /* IMP: R-04675-44850 */
19076:   return pNew;
19077: }
19078: 
19079: /*
19080: ** The public interface to sqlite3Realloc.  Make sure that the memory
19081: ** subsystem is initialized prior to invoking sqliteRealloc.
19082: */
19083: SQLITE_API void *sqlite3_realloc(void *pOld, int n){
19084: #ifndef SQLITE_OMIT_AUTOINIT
19085:   if( sqlite3_initialize() ) return 0;
19086: #endif
19087:   return sqlite3Realloc(pOld, n);
19088: }
19089: 
19090: 
19091: /*
19092: ** Allocate and zero memory.
19093: */ 
19094: SQLITE_PRIVATE void *sqlite3MallocZero(int n){
19095:   void *p = sqlite3Malloc(n);
19096:   if( p ){
19097:     memset(p, 0, n);
19098:   }
19099:   return p;
19100: }
19101: 
19102: /*
19103: ** Allocate and zero memory.  If the allocation fails, make
19104: ** the mallocFailed flag in the connection pointer.
19105: */
19106: SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, int n){
19107:   void *p = sqlite3DbMallocRaw(db, n);
19108:   if( p ){
19109:     memset(p, 0, n);
19110:   }
19111:   return p;
19112: }
19113: 
19114: /*
19115: ** Allocate and zero memory.  If the allocation fails, make
19116: ** the mallocFailed flag in the connection pointer.
19117: **
19118: ** If db!=0 and db->mallocFailed is true (indicating a prior malloc
19119: ** failure on the same database connection) then always return 0.
19120: ** Hence for a particular database connection, once malloc starts
19121: ** failing, it fails consistently until mallocFailed is reset.
19122: ** This is an important assumption.  There are many places in the
19123: ** code that do things like this:
19124: **
19125: **         int *a = (int*)sqlite3DbMallocRaw(db, 100);
19126: **         int *b = (int*)sqlite3DbMallocRaw(db, 200);
19127: **         if( b ) a[10] = 9;
19128: **
19129: ** In other words, if a subsequent malloc (ex: "b") worked, it is assumed
19130: ** that all prior mallocs (ex: "a") worked too.
19131: */
19132: SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, int n){
19133:   void *p;
19134:   assert( db==0 || sqlite3_mutex_held(db->mutex) );
19135:   assert( db==0 || db->pnBytesFreed==0 );
19136: #ifndef SQLITE_OMIT_LOOKASIDE
19137:   if( db ){
19138:     LookasideSlot *pBuf;
19139:     if( db->mallocFailed ){
19140:       return 0;
19141:     }
19142:     if( db->lookaside.bEnabled ){
19143:       if( n>db->lookaside.sz ){
19144:         db->lookaside.anStat[1]++;
19145:       }else if( (pBuf = db->lookaside.pFree)==0 ){
19146:         db->lookaside.anStat[2]++;
19147:       }else{
19148:         db->lookaside.pFree = pBuf->pNext;
19149:         db->lookaside.nOut++;
19150:         db->lookaside.anStat[0]++;
19151:         if( db->lookaside.nOut>db->lookaside.mxOut ){
19152:           db->lookaside.mxOut = db->lookaside.nOut;
19153:         }
19154:         return (void*)pBuf;
19155:       }
19156:     }
19157:   }
19158: #else
19159:   if( db && db->mallocFailed ){
19160:     return 0;
19161:   }
19162: #endif
19163:   p = sqlite3Malloc(n);
19164:   if( !p && db ){
19165:     db->mallocFailed = 1;
19166:   }
19167:   sqlite3MemdebugSetType(p, MEMTYPE_DB |
19168:          ((db && db->lookaside.bEnabled) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
19169:   return p;
19170: }
19171: 
19172: /*
19173: ** Resize the block of memory pointed to by p to n bytes. If the
19174: ** resize fails, set the mallocFailed flag in the connection object.
19175: */
19176: SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
19177:   void *pNew = 0;
19178:   assert( db!=0 );
19179:   assert( sqlite3_mutex_held(db->mutex) );
19180:   if( db->mallocFailed==0 ){
19181:     if( p==0 ){
19182:       return sqlite3DbMallocRaw(db, n);
19183:     }
19184:     if( isLookaside(db, p) ){
19185:       if( n<=db->lookaside.sz ){
19186:         return p;
19187:       }
19188:       pNew = sqlite3DbMallocRaw(db, n);
19189:       if( pNew ){
19190:         memcpy(pNew, p, db->lookaside.sz);
19191:         sqlite3DbFree(db, p);
19192:       }
19193:     }else{
19194:       assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
19195:       assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
19196:       sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
19197:       pNew = sqlite3_realloc(p, n);
19198:       if( !pNew ){
19199:         sqlite3MemdebugSetType(p, MEMTYPE_DB|MEMTYPE_HEAP);
19200:         db->mallocFailed = 1;
19201:       }
19202:       sqlite3MemdebugSetType(pNew, MEMTYPE_DB | 
19203:             (db->lookaside.bEnabled ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
19204:     }
19205:   }
19206:   return pNew;
19207: }
19208: 
19209: /*
19210: ** Attempt to reallocate p.  If the reallocation fails, then free p
19211: ** and set the mallocFailed flag in the database connection.
19212: */
19213: SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, int n){
19214:   void *pNew;
19215:   pNew = sqlite3DbRealloc(db, p, n);
19216:   if( !pNew ){
19217:     sqlite3DbFree(db, p);
19218:   }
19219:   return pNew;
19220: }
19221: 
19222: /*
19223: ** Make a copy of a string in memory obtained from sqliteMalloc(). These 
19224: ** functions call sqlite3MallocRaw() directly instead of sqliteMalloc(). This
19225: ** is because when memory debugging is turned on, these two functions are 
19226: ** called via macros that record the current file and line number in the
19227: ** ThreadData structure.
19228: */
19229: SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3 *db, const char *z){
19230:   char *zNew;
19231:   size_t n;
19232:   if( z==0 ){
19233:     return 0;
19234:   }
19235:   n = sqlite3Strlen30(z) + 1;
19236:   assert( (n&0x7fffffff)==n );
19237:   zNew = sqlite3DbMallocRaw(db, (int)n);
19238:   if( zNew ){
19239:     memcpy(zNew, z, n);
19240:   }
19241:   return zNew;
19242: }
19243: SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, int n){
19244:   char *zNew;
19245:   if( z==0 ){
19246:     return 0;
19247:   }
19248:   assert( (n&0x7fffffff)==n );
19249:   zNew = sqlite3DbMallocRaw(db, n+1);
19250:   if( zNew ){
19251:     memcpy(zNew, z, n);
19252:     zNew[n] = 0;
19253:   }
19254:   return zNew;
19255: }
19256: 
19257: /*
19258: ** Create a string from the zFromat argument and the va_list that follows.
19259: ** Store the string in memory obtained from sqliteMalloc() and make *pz
19260: ** point to that string.
19261: */
19262: SQLITE_PRIVATE void sqlite3SetString(char **pz, sqlite3 *db, const char *zFormat, ...){
19263:   va_list ap;
19264:   char *z;
19265: 
19266:   va_start(ap, zFormat);
19267:   z = sqlite3VMPrintf(db, zFormat, ap);
19268:   va_end(ap);
19269:   sqlite3DbFree(db, *pz);
19270:   *pz = z;
19271: }
19272: 
19273: 
19274: /*
19275: ** This function must be called before exiting any API function (i.e. 
19276: ** returning control to the user) that has called sqlite3_malloc or
19277: ** sqlite3_realloc.
19278: **
19279: ** The returned value is normally a copy of the second argument to this
19280: ** function. However, if a malloc() failure has occurred since the previous
19281: ** invocation SQLITE_NOMEM is returned instead. 
19282: **
19283: ** If the first argument, db, is not NULL and a malloc() error has occurred,
19284: ** then the connection error-code (the value returned by sqlite3_errcode())
19285: ** is set to SQLITE_NOMEM.
19286: */
19287: SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){
19288:   /* If the db handle is not NULL, then we must hold the connection handle
19289:   ** mutex here. Otherwise the read (and possible write) of db->mallocFailed 
19290:   ** is unsafe, as is the call to sqlite3Error().
19291:   */
19292:   assert( !db || sqlite3_mutex_held(db->mutex) );
19293:   if( db && (db->mallocFailed || rc==SQLITE_IOERR_NOMEM) ){
19294:     sqlite3Error(db, SQLITE_NOMEM, 0);
19295:     db->mallocFailed = 0;
19296:     rc = SQLITE_NOMEM;
19297:   }
19298:   return rc & (db ? db->errMask : 0xff);
19299: }
19300: 
19301: /************** End of malloc.c **********************************************/
19302: /************** Begin file printf.c ******************************************/
19303: /*
19304: ** The "printf" code that follows dates from the 1980's.  It is in
19305: ** the public domain.  The original comments are included here for
19306: ** completeness.  They are very out-of-date but might be useful as
19307: ** an historical reference.  Most of the "enhancements" have been backed
19308: ** out so that the functionality is now the same as standard printf().
19309: **
19310: **************************************************************************
19311: **
19312: ** This file contains code for a set of "printf"-like routines.  These
19313: ** routines format strings much like the printf() from the standard C
19314: ** library, though the implementation here has enhancements to support
19315: ** SQLlite.
19316: */
19317: 
19318: /*
19319: ** Conversion types fall into various categories as defined by the
19320: ** following enumeration.
19321: */
19322: #define etRADIX       1 /* Integer types.  %d, %x, %o, and so forth */
19323: #define etFLOAT       2 /* Floating point.  %f */
19324: #define etEXP         3 /* Exponentional notation. %e and %E */
19325: #define etGENERIC     4 /* Floating or exponential, depending on exponent. %g */
19326: #define etSIZE        5 /* Return number of characters processed so far. %n */
19327: #define etSTRING      6 /* Strings. %s */
19328: #define etDYNSTRING   7 /* Dynamically allocated strings. %z */
19329: #define etPERCENT     8 /* Percent symbol. %% */
19330: #define etCHARX       9 /* Characters. %c */
19331: /* The rest are extensions, not normally found in printf() */
19332: #define etSQLESCAPE  10 /* Strings with '\'' doubled.  %q */
19333: #define etSQLESCAPE2 11 /* Strings with '\'' doubled and enclosed in '',
19334:                           NULL pointers replaced by SQL NULL.  %Q */
19335: #define etTOKEN      12 /* a pointer to a Token structure */
19336: #define etSRCLIST    13 /* a pointer to a SrcList */
19337: #define etPOINTER    14 /* The %p conversion */
19338: #define etSQLESCAPE3 15 /* %w -> Strings with '\"' doubled */
19339: #define etORDINAL    16 /* %r -> 1st, 2nd, 3rd, 4th, etc.  English only */
19340: 
19341: #define etINVALID     0 /* Any unrecognized conversion type */
19342: 
19343: 
19344: /*
19345: ** An "etByte" is an 8-bit unsigned value.
19346: */
19347: typedef unsigned char etByte;
19348: 
19349: /*
19350: ** Each builtin conversion character (ex: the 'd' in "%d") is described
19351: ** by an instance of the following structure
19352: */
19353: typedef struct et_info {   /* Information about each format field */
19354:   char fmttype;            /* The format field code letter */
19355:   etByte base;             /* The base for radix conversion */
19356:   etByte flags;            /* One or more of FLAG_ constants below */
19357:   etByte type;             /* Conversion paradigm */
19358:   etByte charset;          /* Offset into aDigits[] of the digits string */
19359:   etByte prefix;           /* Offset into aPrefix[] of the prefix string */
19360: } et_info;
19361: 
19362: /*
19363: ** Allowed values for et_info.flags
19364: */
19365: #define FLAG_SIGNED  1     /* True if the value to convert is signed */
19366: #define FLAG_INTERN  2     /* True if for internal use only */
19367: #define FLAG_STRING  4     /* Allow infinity precision */
19368: 
19369: 
19370: /*
19371: ** The following table is searched linearly, so it is good to put the
19372: ** most frequently used conversion types first.
19373: */
19374: static const char aDigits[] = "0123456789ABCDEF0123456789abcdef";
19375: static const char aPrefix[] = "-x0\000X0";
19376: static const et_info fmtinfo[] = {
19377:   {  'd', 10, 1, etRADIX,      0,  0 },
19378:   {  's',  0, 4, etSTRING,     0,  0 },
19379:   {  'g',  0, 1, etGENERIC,    30, 0 },
19380:   {  'z',  0, 4, etDYNSTRING,  0,  0 },
19381:   {  'q',  0, 4, etSQLESCAPE,  0,  0 },
19382:   {  'Q',  0, 4, etSQLESCAPE2, 0,  0 },
19383:   {  'w',  0, 4, etSQLESCAPE3, 0,  0 },
19384:   {  'c',  0, 0, etCHARX,      0,  0 },
19385:   {  'o',  8, 0, etRADIX,      0,  2 },
19386:   {  'u', 10, 0, etRADIX,      0,  0 },
19387:   {  'x', 16, 0, etRADIX,      16, 1 },
19388:   {  'X', 16, 0, etRADIX,      0,  4 },
19389: #ifndef SQLITE_OMIT_FLOATING_POINT
19390:   {  'f',  0, 1, etFLOAT,      0,  0 },
19391:   {  'e',  0, 1, etEXP,        30, 0 },
19392:   {  'E',  0, 1, etEXP,        14, 0 },
19393:   {  'G',  0, 1, etGENERIC,    14, 0 },
19394: #endif
19395:   {  'i', 10, 1, etRADIX,      0,  0 },
19396:   {  'n',  0, 0, etSIZE,       0,  0 },
19397:   {  '%',  0, 0, etPERCENT,    0,  0 },
19398:   {  'p', 16, 0, etPOINTER,    0,  1 },
19399: 
19400: /* All the rest have the FLAG_INTERN bit set and are thus for internal
19401: ** use only */
19402:   {  'T',  0, 2, etTOKEN,      0,  0 },
19403:   {  'S',  0, 2, etSRCLIST,    0,  0 },
19404:   {  'r', 10, 3, etORDINAL,    0,  0 },
19405: };
19406: 
19407: /*
19408: ** If SQLITE_OMIT_FLOATING_POINT is defined, then none of the floating point
19409: ** conversions will work.
19410: */
19411: #ifndef SQLITE_OMIT_FLOATING_POINT
19412: /*
19413: ** "*val" is a double such that 0.1 <= *val < 10.0
19414: ** Return the ascii code for the leading digit of *val, then
19415: ** multiply "*val" by 10.0 to renormalize.
19416: **
19417: ** Example:
19418: **     input:     *val = 3.14159
19419: **     output:    *val = 1.4159    function return = '3'
19420: **
19421: ** The counter *cnt is incremented each time.  After counter exceeds
19422: ** 16 (the number of significant digits in a 64-bit float) '0' is
19423: ** always returned.
19424: */
19425: static char et_getdigit(LONGDOUBLE_TYPE *val, int *cnt){
19426:   int digit;
19427:   LONGDOUBLE_TYPE d;
19428:   if( (*cnt)++ >= 16 ) return '0';
19429:   digit = (int)*val;
19430:   d = digit;
19431:   digit += '0';
19432:   *val = (*val - d)*10.0;
19433:   return (char)digit;
19434: }
19435: #endif /* SQLITE_OMIT_FLOATING_POINT */
19436: 
19437: /*
19438: ** Append N space characters to the given string buffer.
19439: */
19440: SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum *pAccum, int N){
19441:   static const char zSpaces[] = "                             ";
19442:   while( N>=(int)sizeof(zSpaces)-1 ){
19443:     sqlite3StrAccumAppend(pAccum, zSpaces, sizeof(zSpaces)-1);
19444:     N -= sizeof(zSpaces)-1;
19445:   }
19446:   if( N>0 ){
19447:     sqlite3StrAccumAppend(pAccum, zSpaces, N);
19448:   }
19449: }
19450: 
19451: /*
19452: ** On machines with a small stack size, you can redefine the
19453: ** SQLITE_PRINT_BUF_SIZE to be something smaller, if desired.
19454: */
19455: #ifndef SQLITE_PRINT_BUF_SIZE
19456: # define SQLITE_PRINT_BUF_SIZE 70
19457: #endif
19458: #define etBUFSIZE SQLITE_PRINT_BUF_SIZE  /* Size of the output buffer */
19459: 
19460: /*
19461: ** Render a string given by "fmt" into the StrAccum object.
19462: */
19463: SQLITE_PRIVATE void sqlite3VXPrintf(
19464:   StrAccum *pAccum,                  /* Accumulate results here */
19465:   int useExtended,                   /* Allow extended %-conversions */
19466:   const char *fmt,                   /* Format string */
19467:   va_list ap                         /* arguments */
19468: ){
19469:   int c;                     /* Next character in the format string */
19470:   char *bufpt;               /* Pointer to the conversion buffer */
19471:   int precision;             /* Precision of the current field */
19472:   int length;                /* Length of the field */
19473:   int idx;                   /* A general purpose loop counter */
19474:   int width;                 /* Width of the current field */
19475:   etByte flag_leftjustify;   /* True if "-" flag is present */
19476:   etByte flag_plussign;      /* True if "+" flag is present */
19477:   etByte flag_blanksign;     /* True if " " flag is present */
19478:   etByte flag_alternateform; /* True if "#" flag is present */
19479:   etByte flag_altform2;      /* True if "!" flag is present */
19480:   etByte flag_zeropad;       /* True if field width constant starts with zero */
19481:   etByte flag_long;          /* True if "l" flag is present */
19482:   etByte flag_longlong;      /* True if the "ll" flag is present */
19483:   etByte done;               /* Loop termination flag */
19484:   etByte xtype = 0;          /* Conversion paradigm */
19485:   char prefix;               /* Prefix character.  "+" or "-" or " " or '\0'. */
19486:   sqlite_uint64 longvalue;   /* Value for integer types */
19487:   LONGDOUBLE_TYPE realvalue; /* Value for real types */
19488:   const et_info *infop;      /* Pointer to the appropriate info structure */
19489:   char *zOut;                /* Rendering buffer */
19490:   int nOut;                  /* Size of the rendering buffer */
19491:   char *zExtra;              /* Malloced memory used by some conversion */
19492: #ifndef SQLITE_OMIT_FLOATING_POINT
19493:   int  exp, e2;              /* exponent of real numbers */
19494:   int nsd;                   /* Number of significant digits returned */
19495:   double rounder;            /* Used for rounding floating point values */
19496:   etByte flag_dp;            /* True if decimal point should be shown */
19497:   etByte flag_rtz;           /* True if trailing zeros should be removed */
19498: #endif
19499:   char buf[etBUFSIZE];       /* Conversion buffer */
19500: 
19501:   bufpt = 0;
19502:   for(; (c=(*fmt))!=0; ++fmt){
19503:     if( c!='%' ){
19504:       int amt;
19505:       bufpt = (char *)fmt;
19506:       amt = 1;
19507:       while( (c=(*++fmt))!='%' && c!=0 ) amt++;
19508:       sqlite3StrAccumAppend(pAccum, bufpt, amt);
19509:       if( c==0 ) break;
19510:     }
19511:     if( (c=(*++fmt))==0 ){
19512:       sqlite3StrAccumAppend(pAccum, "%", 1);
19513:       break;
19514:     }
19515:     /* Find out what flags are present */
19516:     flag_leftjustify = flag_plussign = flag_blanksign = 
19517:      flag_alternateform = flag_altform2 = flag_zeropad = 0;
19518:     done = 0;
19519:     do{
19520:       switch( c ){
19521:         case '-':   flag_leftjustify = 1;     break;
19522:         case '+':   flag_plussign = 1;        break;
19523:         case ' ':   flag_blanksign = 1;       break;
19524:         case '#':   flag_alternateform = 1;   break;
19525:         case '!':   flag_altform2 = 1;        break;
19526:         case '0':   flag_zeropad = 1;         break;
19527:         default:    done = 1;                 break;
19528:       }
19529:     }while( !done && (c=(*++fmt))!=0 );
19530:     /* Get the field width */
19531:     width = 0;
19532:     if( c=='*' ){
19533:       width = va_arg(ap,int);
19534:       if( width<0 ){
19535:         flag_leftjustify = 1;
19536:         width = -width;
19537:       }
19538:       c = *++fmt;
19539:     }else{
19540:       while( c>='0' && c<='9' ){
19541:         width = width*10 + c - '0';
19542:         c = *++fmt;
19543:       }
19544:     }
19545:     /* Get the precision */
19546:     if( c=='.' ){
19547:       precision = 0;
19548:       c = *++fmt;
19549:       if( c=='*' ){
19550:         precision = va_arg(ap,int);
19551:         if( precision<0 ) precision = -precision;
19552:         c = *++fmt;
19553:       }else{
19554:         while( c>='0' && c<='9' ){
19555:           precision = precision*10 + c - '0';
19556:           c = *++fmt;
19557:         }
19558:       }
19559:     }else{
19560:       precision = -1;
19561:     }
19562:     /* Get the conversion type modifier */
19563:     if( c=='l' ){
19564:       flag_long = 1;
19565:       c = *++fmt;
19566:       if( c=='l' ){
19567:         flag_longlong = 1;
19568:         c = *++fmt;
19569:       }else{
19570:         flag_longlong = 0;
19571:       }
19572:     }else{
19573:       flag_long = flag_longlong = 0;
19574:     }
19575:     /* Fetch the info entry for the field */
19576:     infop = &fmtinfo[0];
19577:     xtype = etINVALID;
19578:     for(idx=0; idx<ArraySize(fmtinfo); idx++){
19579:       if( c==fmtinfo[idx].fmttype ){
19580:         infop = &fmtinfo[idx];
19581:         if( useExtended || (infop->flags & FLAG_INTERN)==0 ){
19582:           xtype = infop->type;
19583:         }else{
19584:           return;
19585:         }
19586:         break;
19587:       }
19588:     }
19589:     zExtra = 0;
19590: 
19591:     /*
19592:     ** At this point, variables are initialized as follows:
19593:     **
19594:     **   flag_alternateform          TRUE if a '#' is present.
19595:     **   flag_altform2               TRUE if a '!' is present.
19596:     **   flag_plussign               TRUE if a '+' is present.
19597:     **   flag_leftjustify            TRUE if a '-' is present or if the
19598:     **                               field width was negative.
19599:     **   flag_zeropad                TRUE if the width began with 0.
19600:     **   flag_long                   TRUE if the letter 'l' (ell) prefixed
19601:     **                               the conversion character.
19602:     **   flag_longlong               TRUE if the letter 'll' (ell ell) prefixed
19603:     **                               the conversion character.
19604:     **   flag_blanksign              TRUE if a ' ' is present.
19605:     **   width                       The specified field width.  This is
19606:     **                               always non-negative.  Zero is the default.
19607:     **   precision                   The specified precision.  The default
19608:     **                               is -1.
19609:     **   xtype                       The class of the conversion.
19610:     **   infop                       Pointer to the appropriate info struct.
19611:     */
19612:     switch( xtype ){
19613:       case etPOINTER:
19614:         flag_longlong = sizeof(char*)==sizeof(i64);
19615:         flag_long = sizeof(char*)==sizeof(long int);
19616:         /* Fall through into the next case */
19617:       case etORDINAL:
19618:       case etRADIX:
19619:         if( infop->flags & FLAG_SIGNED ){
19620:           i64 v;
19621:           if( flag_longlong ){
19622:             v = va_arg(ap,i64);
19623:           }else if( flag_long ){
19624:             v = va_arg(ap,long int);
19625:           }else{
19626:             v = va_arg(ap,int);
19627:           }
19628:           if( v<0 ){
19629:             if( v==SMALLEST_INT64 ){
19630:               longvalue = ((u64)1)<<63;
19631:             }else{
19632:               longvalue = -v;
19633:             }
19634:             prefix = '-';
19635:           }else{
19636:             longvalue = v;
19637:             if( flag_plussign )        prefix = '+';
19638:             else if( flag_blanksign )  prefix = ' ';
19639:             else                       prefix = 0;
19640:           }
19641:         }else{
19642:           if( flag_longlong ){
19643:             longvalue = va_arg(ap,u64);
19644:           }else if( flag_long ){
19645:             longvalue = va_arg(ap,unsigned long int);
19646:           }else{
19647:             longvalue = va_arg(ap,unsigned int);
19648:           }
19649:           prefix = 0;
19650:         }
19651:         if( longvalue==0 ) flag_alternateform = 0;
19652:         if( flag_zeropad && precision<width-(prefix!=0) ){
19653:           precision = width-(prefix!=0);
19654:         }
19655:         if( precision<etBUFSIZE-10 ){
19656:           nOut = etBUFSIZE;
19657:           zOut = buf;
19658:         }else{
19659:           nOut = precision + 10;
19660:           zOut = zExtra = sqlite3Malloc( nOut );
19661:           if( zOut==0 ){
19662:             pAccum->mallocFailed = 1;
19663:             return;
19664:           }
19665:         }
19666:         bufpt = &zOut[nOut-1];
19667:         if( xtype==etORDINAL ){
19668:           static const char zOrd[] = "thstndrd";
19669:           int x = (int)(longvalue % 10);
19670:           if( x>=4 || (longvalue/10)%10==1 ){
19671:             x = 0;
19672:           }
19673:           *(--bufpt) = zOrd[x*2+1];
19674:           *(--bufpt) = zOrd[x*2];
19675:         }
19676:         {
19677:           register const char *cset;      /* Use registers for speed */
19678:           register int base;
19679:           cset = &aDigits[infop->charset];
19680:           base = infop->base;
19681:           do{                                           /* Convert to ascii */
19682:             *(--bufpt) = cset[longvalue%base];
19683:             longvalue = longvalue/base;
19684:           }while( longvalue>0 );
19685:         }
19686:         length = (int)(&zOut[nOut-1]-bufpt);
19687:         for(idx=precision-length; idx>0; idx--){
19688:           *(--bufpt) = '0';                             /* Zero pad */
19689:         }
19690:         if( prefix ) *(--bufpt) = prefix;               /* Add sign */
19691:         if( flag_alternateform && infop->prefix ){      /* Add "0" or "0x" */
19692:           const char *pre;
19693:           char x;
19694:           pre = &aPrefix[infop->prefix];
19695:           for(; (x=(*pre))!=0; pre++) *(--bufpt) = x;
19696:         }
19697:         length = (int)(&zOut[nOut-1]-bufpt);
19698:         break;
19699:       case etFLOAT:
19700:       case etEXP:
19701:       case etGENERIC:
19702:         realvalue = va_arg(ap,double);
19703: #ifdef SQLITE_OMIT_FLOATING_POINT
19704:         length = 0;
19705: #else
19706:         if( precision<0 ) precision = 6;         /* Set default precision */
19707:         if( realvalue<0.0 ){
19708:           realvalue = -realvalue;
19709:           prefix = '-';
19710:         }else{
19711:           if( flag_plussign )          prefix = '+';
19712:           else if( flag_blanksign )    prefix = ' ';
19713:           else                         prefix = 0;
19714:         }
19715:         if( xtype==etGENERIC && precision>0 ) precision--;
19716: #if 0
19717:         /* Rounding works like BSD when the constant 0.4999 is used.  Wierd! */
19718:         for(idx=precision, rounder=0.4999; idx>0; idx--, rounder*=0.1);
19719: #else
19720:         /* It makes more sense to use 0.5 */
19721:         for(idx=precision, rounder=0.5; idx>0; idx--, rounder*=0.1){}
19722: #endif
19723:         if( xtype==etFLOAT ) realvalue += rounder;
19724:         /* Normalize realvalue to within 10.0 > realvalue >= 1.0 */
19725:         exp = 0;
19726:         if( sqlite3IsNaN((double)realvalue) ){
19727:           bufpt = "NaN";
19728:           length = 3;
19729:           break;
19730:         }
19731:         if( realvalue>0.0 ){
19732:           while( realvalue>=1e32 && exp<=350 ){ realvalue *= 1e-32; exp+=32; }
19733:           while( realvalue>=1e8 && exp<=350 ){ realvalue *= 1e-8; exp+=8; }
19734:           while( realvalue>=10.0 && exp<=350 ){ realvalue *= 0.1; exp++; }
19735:           while( realvalue<1e-8 ){ realvalue *= 1e8; exp-=8; }
19736:           while( realvalue<1.0 ){ realvalue *= 10.0; exp--; }
19737:           if( exp>350 ){
19738:             if( prefix=='-' ){
19739:               bufpt = "-Inf";
19740:             }else if( prefix=='+' ){
19741:               bufpt = "+Inf";
19742:             }else{
19743:               bufpt = "Inf";
19744:             }
19745:             length = sqlite3Strlen30(bufpt);
19746:             break;
19747:           }
19748:         }
19749:         bufpt = buf;
19750:         /*
19751:         ** If the field type is etGENERIC, then convert to either etEXP
19752:         ** or etFLOAT, as appropriate.
19753:         */
19754:         if( xtype!=etFLOAT ){
19755:           realvalue += rounder;
19756:           if( realvalue>=10.0 ){ realvalue *= 0.1; exp++; }
19757:         }
19758:         if( xtype==etGENERIC ){
19759:           flag_rtz = !flag_alternateform;
19760:           if( exp<-4 || exp>precision ){
19761:             xtype = etEXP;
19762:           }else{
19763:             precision = precision - exp;
19764:             xtype = etFLOAT;
19765:           }
19766:         }else{
19767:           flag_rtz = 0;
19768:         }
19769:         if( xtype==etEXP ){
19770:           e2 = 0;
19771:         }else{
19772:           e2 = exp;
19773:         }
19774:         if( e2+precision+width > etBUFSIZE - 15 ){
19775:           bufpt = zExtra = sqlite3Malloc( e2+precision+width+15 );
19776:           if( bufpt==0 ){
19777:             pAccum->mallocFailed = 1;
19778:             return;
19779:           }
19780:         }
19781:         zOut = bufpt;
19782:         nsd = 0;
19783:         flag_dp = (precision>0 ?1:0) | flag_alternateform | flag_altform2;
19784:         /* The sign in front of the number */
19785:         if( prefix ){
19786:           *(bufpt++) = prefix;
19787:         }
19788:         /* Digits prior to the decimal point */
19789:         if( e2<0 ){
19790:           *(bufpt++) = '0';
19791:         }else{
19792:           for(; e2>=0; e2--){
19793:             *(bufpt++) = et_getdigit(&realvalue,&nsd);
19794:           }
19795:         }
19796:         /* The decimal point */
19797:         if( flag_dp ){
19798:           *(bufpt++) = '.';
19799:         }
19800:         /* "0" digits after the decimal point but before the first
19801:         ** significant digit of the number */
19802:         for(e2++; e2<0; precision--, e2++){
19803:           assert( precision>0 );
19804:           *(bufpt++) = '0';
19805:         }
19806:         /* Significant digits after the decimal point */
19807:         while( (precision--)>0 ){
19808:           *(bufpt++) = et_getdigit(&realvalue,&nsd);
19809:         }
19810:         /* Remove trailing zeros and the "." if no digits follow the "." */
19811:         if( flag_rtz && flag_dp ){
19812:           while( bufpt[-1]=='0' ) *(--bufpt) = 0;
19813:           assert( bufpt>zOut );
19814:           if( bufpt[-1]=='.' ){
19815:             if( flag_altform2 ){
19816:               *(bufpt++) = '0';
19817:             }else{
19818:               *(--bufpt) = 0;
19819:             }
19820:           }
19821:         }
19822:         /* Add the "eNNN" suffix */
19823:         if( xtype==etEXP ){
19824:           *(bufpt++) = aDigits[infop->charset];
19825:           if( exp<0 ){
19826:             *(bufpt++) = '-'; exp = -exp;
19827:           }else{
19828:             *(bufpt++) = '+';
19829:           }
19830:           if( exp>=100 ){
19831:             *(bufpt++) = (char)((exp/100)+'0');        /* 100's digit */
19832:             exp %= 100;
19833:           }
19834:           *(bufpt++) = (char)(exp/10+'0');             /* 10's digit */
19835:           *(bufpt++) = (char)(exp%10+'0');             /* 1's digit */
19836:         }
19837:         *bufpt = 0;
19838: 
19839:         /* The converted number is in buf[] and zero terminated. Output it.
19840:         ** Note that the number is in the usual order, not reversed as with
19841:         ** integer conversions. */
19842:         length = (int)(bufpt-zOut);
19843:         bufpt = zOut;
19844: 
19845:         /* Special case:  Add leading zeros if the flag_zeropad flag is
19846:         ** set and we are not left justified */
19847:         if( flag_zeropad && !flag_leftjustify && length < width){
19848:           int i;
19849:           int nPad = width - length;
19850:           for(i=width; i>=nPad; i--){
19851:             bufpt[i] = bufpt[i-nPad];
19852:           }
19853:           i = prefix!=0;
19854:           while( nPad-- ) bufpt[i++] = '0';
19855:           length = width;
19856:         }
19857: #endif /* !defined(SQLITE_OMIT_FLOATING_POINT) */
19858:         break;
19859:       case etSIZE:
19860:         *(va_arg(ap,int*)) = pAccum->nChar;
19861:         length = width = 0;
19862:         break;
19863:       case etPERCENT:
19864:         buf[0] = '%';
19865:         bufpt = buf;
19866:         length = 1;
19867:         break;
19868:       case etCHARX:
19869:         c = va_arg(ap,int);
19870:         buf[0] = (char)c;
19871:         if( precision>=0 ){
19872:           for(idx=1; idx<precision; idx++) buf[idx] = (char)c;
19873:           length = precision;
19874:         }else{
19875:           length =1;
19876:         }
19877:         bufpt = buf;
19878:         break;
19879:       case etSTRING:
19880:       case etDYNSTRING:
19881:         bufpt = va_arg(ap,char*);
19882:         if( bufpt==0 ){
19883:           bufpt = "";
19884:         }else if( xtype==etDYNSTRING ){
19885:           zExtra = bufpt;
19886:         }
19887:         if( precision>=0 ){
19888:           for(length=0; length<precision && bufpt[length]; length++){}
19889:         }else{
19890:           length = sqlite3Strlen30(bufpt);
19891:         }
19892:         break;
19893:       case etSQLESCAPE:
19894:       case etSQLESCAPE2:
19895:       case etSQLESCAPE3: {
19896:         int i, j, k, n, isnull;
19897:         int needQuote;
19898:         char ch;
19899:         char q = ((xtype==etSQLESCAPE3)?'"':'\'');   /* Quote character */
19900:         char *escarg = va_arg(ap,char*);
19901:         isnull = escarg==0;
19902:         if( isnull ) escarg = (xtype==etSQLESCAPE2 ? "NULL" : "(NULL)");
19903:         k = precision;
19904:         for(i=n=0; k!=0 && (ch=escarg[i])!=0; i++, k--){
19905:           if( ch==q )  n++;
19906:         }
19907:         needQuote = !isnull && xtype==etSQLESCAPE2;
19908:         n += i + 1 + needQuote*2;
19909:         if( n>etBUFSIZE ){
19910:           bufpt = zExtra = sqlite3Malloc( n );
19911:           if( bufpt==0 ){
19912:             pAccum->mallocFailed = 1;
19913:             return;
19914:           }
19915:         }else{
19916:           bufpt = buf;
19917:         }
19918:         j = 0;
19919:         if( needQuote ) bufpt[j++] = q;
19920:         k = i;
19921:         for(i=0; i<k; i++){
19922:           bufpt[j++] = ch = escarg[i];
19923:           if( ch==q ) bufpt[j++] = ch;
19924:         }
19925:         if( needQuote ) bufpt[j++] = q;
19926:         bufpt[j] = 0;
19927:         length = j;
19928:         /* The precision in %q and %Q means how many input characters to
19929:         ** consume, not the length of the output...
19930:         ** if( precision>=0 && precision<length ) length = precision; */
19931:         break;
19932:       }
19933:       case etTOKEN: {
19934:         Token *pToken = va_arg(ap, Token*);
19935:         if( pToken ){
19936:           sqlite3StrAccumAppend(pAccum, (const char*)pToken->z, pToken->n);
19937:         }
19938:         length = width = 0;
19939:         break;
19940:       }
19941:       case etSRCLIST: {
19942:         SrcList *pSrc = va_arg(ap, SrcList*);
19943:         int k = va_arg(ap, int);
19944:         struct SrcList_item *pItem = &pSrc->a[k];
19945:         assert( k>=0 && k<pSrc->nSrc );
19946:         if( pItem->zDatabase ){
19947:           sqlite3StrAccumAppend(pAccum, pItem->zDatabase, -1);
19948:           sqlite3StrAccumAppend(pAccum, ".", 1);
19949:         }
19950:         sqlite3StrAccumAppend(pAccum, pItem->zName, -1);
19951:         length = width = 0;
19952:         break;
19953:       }
19954:       default: {
19955:         assert( xtype==etINVALID );
19956:         return;
19957:       }
19958:     }/* End switch over the format type */
19959:     /*
19960:     ** The text of the conversion is pointed to by "bufpt" and is
19961:     ** "length" characters long.  The field width is "width".  Do
19962:     ** the output.
19963:     */
19964:     if( !flag_leftjustify ){
19965:       register int nspace;
19966:       nspace = width-length;
19967:       if( nspace>0 ){
19968:         sqlite3AppendSpace(pAccum, nspace);
19969:       }
19970:     }
19971:     if( length>0 ){
19972:       sqlite3StrAccumAppend(pAccum, bufpt, length);
19973:     }
19974:     if( flag_leftjustify ){
19975:       register int nspace;
19976:       nspace = width-length;
19977:       if( nspace>0 ){
19978:         sqlite3AppendSpace(pAccum, nspace);
19979:       }
19980:     }
19981:     sqlite3_free(zExtra);
19982:   }/* End for loop over the format string */
19983: } /* End of function */
19984: 
19985: /*
19986: ** Append N bytes of text from z to the StrAccum object.
19987: */
19988: SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){
19989:   assert( z!=0 || N==0 );
19990:   if( p->tooBig | p->mallocFailed ){
19991:     testcase(p->tooBig);
19992:     testcase(p->mallocFailed);
19993:     return;
19994:   }
19995:   assert( p->zText!=0 || p->nChar==0 );
19996:   if( N<0 ){
19997:     N = sqlite3Strlen30(z);
19998:   }
19999:   if( N==0 || NEVER(z==0) ){
20000:     return;
20001:   }
20002:   if( p->nChar+N >= p->nAlloc ){
20003:     char *zNew;
20004:     if( !p->useMalloc ){
20005:       p->tooBig = 1;
20006:       N = p->nAlloc - p->nChar - 1;
20007:       if( N<=0 ){
20008:         return;
20009:       }
20010:     }else{
20011:       char *zOld = (p->zText==p->zBase ? 0 : p->zText);
20012:       i64 szNew = p->nChar;
20013:       szNew += N + 1;
20014:       if( szNew > p->mxAlloc ){
20015:         sqlite3StrAccumReset(p);
20016:         p->tooBig = 1;
20017:         return;
20018:       }else{
20019:         p->nAlloc = (int)szNew;
20020:       }
20021:       if( p->useMalloc==1 ){
20022:         zNew = sqlite3DbRealloc(p->db, zOld, p->nAlloc);
20023:       }else{
20024:         zNew = sqlite3_realloc(zOld, p->nAlloc);
20025:       }
20026:       if( zNew ){
20027:         if( zOld==0 && p->nChar>0 ) memcpy(zNew, p->zText, p->nChar);
20028:         p->zText = zNew;
20029:       }else{
20030:         p->mallocFailed = 1;
20031:         sqlite3StrAccumReset(p);
20032:         return;
20033:       }
20034:     }
20035:   }
20036:   assert( p->zText );
20037:   memcpy(&p->zText[p->nChar], z, N);
20038:   p->nChar += N;
20039: }
20040: 
20041: /*
20042: ** Finish off a string by making sure it is zero-terminated.
20043: ** Return a pointer to the resulting string.  Return a NULL
20044: ** pointer if any kind of error was encountered.
20045: */
20046: SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){
20047:   if( p->zText ){
20048:     p->zText[p->nChar] = 0;
20049:     if( p->useMalloc && p->zText==p->zBase ){
20050:       if( p->useMalloc==1 ){
20051:         p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 );
20052:       }else{
20053:         p->zText = sqlite3_malloc(p->nChar+1);
20054:       }
20055:       if( p->zText ){
20056:         memcpy(p->zText, p->zBase, p->nChar+1);
20057:       }else{
20058:         p->mallocFailed = 1;
20059:       }
20060:     }
20061:   }
20062:   return p->zText;
20063: }
20064: 
20065: /*
20066: ** Reset an StrAccum string.  Reclaim all malloced memory.
20067: */
20068: SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum *p){
20069:   if( p->zText!=p->zBase ){
20070:     if( p->useMalloc==1 ){
20071:       sqlite3DbFree(p->db, p->zText);
20072:     }else{
20073:       sqlite3_free(p->zText);
20074:     }
20075:   }
20076:   p->zText = 0;
20077: }
20078: 
20079: /*
20080: ** Initialize a string accumulator
20081: */
20082: SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum *p, char *zBase, int n, int mx){
20083:   p->zText = p->zBase = zBase;
20084:   p->db = 0;
20085:   p->nChar = 0;
20086:   p->nAlloc = n;
20087:   p->mxAlloc = mx;
20088:   p->useMalloc = 1;
20089:   p->tooBig = 0;
20090:   p->mallocFailed = 0;
20091: }
20092: 
20093: /*
20094: ** Print into memory obtained from sqliteMalloc().  Use the internal
20095: ** %-conversion extensions.
20096: */
20097: SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3 *db, const char *zFormat, va_list ap){
20098:   char *z;
20099:   char zBase[SQLITE_PRINT_BUF_SIZE];
20100:   StrAccum acc;
20101:   assert( db!=0 );
20102:   sqlite3StrAccumInit(&acc, zBase, sizeof(zBase),
20103:                       db->aLimit[SQLITE_LIMIT_LENGTH]);
20104:   acc.db = db;
20105:   sqlite3VXPrintf(&acc, 1, zFormat, ap);
20106:   z = sqlite3StrAccumFinish(&acc);
20107:   if( acc.mallocFailed ){
20108:     db->mallocFailed = 1;
20109:   }
20110:   return z;
20111: }
20112: 
20113: /*
20114: ** Print into memory obtained from sqliteMalloc().  Use the internal
20115: ** %-conversion extensions.
20116: */
20117: SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3 *db, const char *zFormat, ...){
20118:   va_list ap;
20119:   char *z;
20120:   va_start(ap, zFormat);
20121:   z = sqlite3VMPrintf(db, zFormat, ap);
20122:   va_end(ap);
20123:   return z;
20124: }
20125: 
20126: /*
20127: ** Like sqlite3MPrintf(), but call sqlite3DbFree() on zStr after formatting
20128: ** the string and before returnning.  This routine is intended to be used
20129: ** to modify an existing string.  For example:
20130: **
20131: **       x = sqlite3MPrintf(db, x, "prefix %s suffix", x);
20132: **
20133: */
20134: SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3 *db, char *zStr, const char *zFormat, ...){
20135:   va_list ap;
20136:   char *z;
20137:   va_start(ap, zFormat);
20138:   z = sqlite3VMPrintf(db, zFormat, ap);
20139:   va_end(ap);
20140:   sqlite3DbFree(db, zStr);
20141:   return z;
20142: }
20143: 
20144: /*
20145: ** Print into memory obtained from sqlite3_malloc().  Omit the internal
20146: ** %-conversion extensions.
20147: */
20148: SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){
20149:   char *z;
20150:   char zBase[SQLITE_PRINT_BUF_SIZE];
20151:   StrAccum acc;
20152: #ifndef SQLITE_OMIT_AUTOINIT
20153:   if( sqlite3_initialize() ) return 0;
20154: #endif
20155:   sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), SQLITE_MAX_LENGTH);
20156:   acc.useMalloc = 2;
20157:   sqlite3VXPrintf(&acc, 0, zFormat, ap);
20158:   z = sqlite3StrAccumFinish(&acc);
20159:   return z;
20160: }
20161: 
20162: /*
20163: ** Print into memory obtained from sqlite3_malloc()().  Omit the internal
20164: ** %-conversion extensions.
20165: */
20166: SQLITE_API char *sqlite3_mprintf(const char *zFormat, ...){
20167:   va_list ap;
20168:   char *z;
20169: #ifndef SQLITE_OMIT_AUTOINIT
20170:   if( sqlite3_initialize() ) return 0;
20171: #endif
20172:   va_start(ap, zFormat);
20173:   z = sqlite3_vmprintf(zFormat, ap);
20174:   va_end(ap);
20175:   return z;
20176: }
20177: 
20178: /*
20179: ** sqlite3_snprintf() works like snprintf() except that it ignores the
20180: ** current locale settings.  This is important for SQLite because we
20181: ** are not able to use a "," as the decimal point in place of "." as
20182: ** specified by some locales.
20183: **
20184: ** Oops:  The first two arguments of sqlite3_snprintf() are backwards
20185: ** from the snprintf() standard.  Unfortunately, it is too late to change
20186: ** this without breaking compatibility, so we just have to live with the
20187: ** mistake.
20188: **
20189: ** sqlite3_vsnprintf() is the varargs version.
20190: */
20191: SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){
20192:   StrAccum acc;
20193:   if( n<=0 ) return zBuf;
20194:   sqlite3StrAccumInit(&acc, zBuf, n, 0);
20195:   acc.useMalloc = 0;
20196:   sqlite3VXPrintf(&acc, 0, zFormat, ap);
20197:   return sqlite3StrAccumFinish(&acc);
20198: }
20199: SQLITE_API char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat, ...){
20200:   char *z;
20201:   va_list ap;
20202:   va_start(ap,zFormat);
20203:   z = sqlite3_vsnprintf(n, zBuf, zFormat, ap);
20204:   va_end(ap);
20205:   return z;
20206: }
20207: 
20208: /*
20209: ** This is the routine that actually formats the sqlite3_log() message.
20210: ** We house it in a separate routine from sqlite3_log() to avoid using
20211: ** stack space on small-stack systems when logging is disabled.
20212: **
20213: ** sqlite3_log() must render into a static buffer.  It cannot dynamically
20214: ** allocate memory because it might be called while the memory allocator
20215: ** mutex is held.
20216: */
20217: static void renderLogMsg(int iErrCode, const char *zFormat, va_list ap){
20218:   StrAccum acc;                          /* String accumulator */
20219:   char zMsg[SQLITE_PRINT_BUF_SIZE*3];    /* Complete log message */
20220: 
20221:   sqlite3StrAccumInit(&acc, zMsg, sizeof(zMsg), 0);
20222:   acc.useMalloc = 0;
20223:   sqlite3VXPrintf(&acc, 0, zFormat, ap);
20224:   sqlite3GlobalConfig.xLog(sqlite3GlobalConfig.pLogArg, iErrCode,
20225:                            sqlite3StrAccumFinish(&acc));
20226: }
20227: 
20228: /*
20229: ** Format and write a message to the log if logging is enabled.
20230: */
20231: SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...){
20232:   va_list ap;                             /* Vararg list */
20233:   if( sqlite3GlobalConfig.xLog ){
20234:     va_start(ap, zFormat);
20235:     renderLogMsg(iErrCode, zFormat, ap);
20236:     va_end(ap);
20237:   }
20238: }
20239: 
20240: #if defined(SQLITE_DEBUG)
20241: /*
20242: ** A version of printf() that understands %lld.  Used for debugging.
20243: ** The printf() built into some versions of windows does not understand %lld
20244: ** and segfaults if you give it a long long int.
20245: */
20246: SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){
20247:   va_list ap;
20248:   StrAccum acc;
20249:   char zBuf[500];
20250:   sqlite3StrAccumInit(&acc, zBuf, sizeof(zBuf), 0);
20251:   acc.useMalloc = 0;
20252:   va_start(ap,zFormat);
20253:   sqlite3VXPrintf(&acc, 0, zFormat, ap);
20254:   va_end(ap);
20255:   sqlite3StrAccumFinish(&acc);
20256:   fprintf(stdout,"%s", zBuf);
20257:   fflush(stdout);
20258: }
20259: #endif
20260: 
20261: #ifndef SQLITE_OMIT_TRACE
20262: /*
20263: ** variable-argument wrapper around sqlite3VXPrintf().
20264: */
20265: SQLITE_PRIVATE void sqlite3XPrintf(StrAccum *p, const char *zFormat, ...){
20266:   va_list ap;
20267:   va_start(ap,zFormat);
20268:   sqlite3VXPrintf(p, 1, zFormat, ap);
20269:   va_end(ap);
20270: }
20271: #endif
20272: 
20273: /************** End of printf.c **********************************************/
20274: /************** Begin file random.c ******************************************/
20275: /*
20276: ** 2001 September 15
20277: **
20278: ** The author disclaims copyright to this source code.  In place of
20279: ** a legal notice, here is a blessing:
20280: **
20281: **    May you do good and not evil.
20282: **    May you find forgiveness for yourself and forgive others.
20283: **    May you share freely, never taking more than you give.
20284: **
20285: *************************************************************************
20286: ** This file contains code to implement a pseudo-random number
20287: ** generator (PRNG) for SQLite.
20288: **
20289: ** Random numbers are used by some of the database backends in order
20290: ** to generate random integer keys for tables or random filenames.
20291: */
20292: 
20293: 
20294: /* All threads share a single random number generator.
20295: ** This structure is the current state of the generator.
20296: */
20297: static SQLITE_WSD struct sqlite3PrngType {
20298:   unsigned char isInit;          /* True if initialized */
20299:   unsigned char i, j;            /* State variables */
20300:   unsigned char s[256];          /* State variables */
20301: } sqlite3Prng;
20302: 
20303: /*
20304: ** Get a single 8-bit random value from the RC4 PRNG.  The Mutex
20305: ** must be held while executing this routine.
20306: **
20307: ** Why not just use a library random generator like lrand48() for this?
20308: ** Because the OP_NewRowid opcode in the VDBE depends on having a very
20309: ** good source of random numbers.  The lrand48() library function may
20310: ** well be good enough.  But maybe not.  Or maybe lrand48() has some
20311: ** subtle problems on some systems that could cause problems.  It is hard
20312: ** to know.  To minimize the risk of problems due to bad lrand48()
20313: ** implementations, SQLite uses this random number generator based
20314: ** on RC4, which we know works very well.
20315: **
20316: ** (Later):  Actually, OP_NewRowid does not depend on a good source of
20317: ** randomness any more.  But we will leave this code in all the same.
20318: */
20319: static u8 randomByte(void){
20320:   unsigned char t;
20321: 
20322: 
20323:   /* The "wsdPrng" macro will resolve to the pseudo-random number generator
20324:   ** state vector.  If writable static data is unsupported on the target,
20325:   ** we have to locate the state vector at run-time.  In the more common
20326:   ** case where writable static data is supported, wsdPrng can refer directly
20327:   ** to the "sqlite3Prng" state vector declared above.
20328:   */
20329: #ifdef SQLITE_OMIT_WSD
20330:   struct sqlite3PrngType *p = &GLOBAL(struct sqlite3PrngType, sqlite3Prng);
20331: # define wsdPrng p[0]
20332: #else
20333: # define wsdPrng sqlite3Prng
20334: #endif
20335: 
20336: 
20337:   /* Initialize the state of the random number generator once,
20338:   ** the first time this routine is called.  The seed value does
20339:   ** not need to contain a lot of randomness since we are not
20340:   ** trying to do secure encryption or anything like that...
20341:   **
20342:   ** Nothing in this file or anywhere else in SQLite does any kind of
20343:   ** encryption.  The RC4 algorithm is being used as a PRNG (pseudo-random
20344:   ** number generator) not as an encryption device.
20345:   */
20346:   if( !wsdPrng.isInit ){
20347:     int i;
20348:     char k[256];
20349:     wsdPrng.j = 0;
20350:     wsdPrng.i = 0;
20351:     sqlite3OsRandomness(sqlite3_vfs_find(0), 256, k);
20352:     for(i=0; i<256; i++){
20353:       wsdPrng.s[i] = (u8)i;
20354:     }
20355:     for(i=0; i<256; i++){
20356:       wsdPrng.j += wsdPrng.s[i] + k[i];
20357:       t = wsdPrng.s[wsdPrng.j];
20358:       wsdPrng.s[wsdPrng.j] = wsdPrng.s[i];
20359:       wsdPrng.s[i] = t;
20360:     }
20361:     wsdPrng.isInit = 1;
20362:   }
20363: 
20364:   /* Generate and return single random byte
20365:   */
20366:   wsdPrng.i++;
20367:   t = wsdPrng.s[wsdPrng.i];
20368:   wsdPrng.j += t;
20369:   wsdPrng.s[wsdPrng.i] = wsdPrng.s[wsdPrng.j];
20370:   wsdPrng.s[wsdPrng.j] = t;
20371:   t += wsdPrng.s[wsdPrng.i];
20372:   return wsdPrng.s[t];
20373: }
20374: 
20375: /*
20376: ** Return N random bytes.
20377: */
20378: SQLITE_API void sqlite3_randomness(int N, void *pBuf){
20379:   unsigned char *zBuf = pBuf;
20380: #if SQLITE_THREADSAFE
20381:   sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
20382: #endif
20383:   sqlite3_mutex_enter(mutex);
20384:   while( N-- ){
20385:     *(zBuf++) = randomByte();
20386:   }
20387:   sqlite3_mutex_leave(mutex);
20388: }
20389: 
20390: #ifndef SQLITE_OMIT_BUILTIN_TEST
20391: /*
20392: ** For testing purposes, we sometimes want to preserve the state of
20393: ** PRNG and restore the PRNG to its saved state at a later time, or
20394: ** to reset the PRNG to its initial state.  These routines accomplish
20395: ** those tasks.
20396: **
20397: ** The sqlite3_test_control() interface calls these routines to
20398: ** control the PRNG.
20399: */
20400: static SQLITE_WSD struct sqlite3PrngType sqlite3SavedPrng;
20401: SQLITE_PRIVATE void sqlite3PrngSaveState(void){
20402:   memcpy(
20403:     &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng),
20404:     &GLOBAL(struct sqlite3PrngType, sqlite3Prng),
20405:     sizeof(sqlite3Prng)
20406:   );
20407: }
20408: SQLITE_PRIVATE void sqlite3PrngRestoreState(void){
20409:   memcpy(
20410:     &GLOBAL(struct sqlite3PrngType, sqlite3Prng),
20411:     &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng),
20412:     sizeof(sqlite3Prng)
20413:   );
20414: }
20415: SQLITE_PRIVATE void sqlite3PrngResetState(void){
20416:   GLOBAL(struct sqlite3PrngType, sqlite3Prng).isInit = 0;
20417: }
20418: #endif /* SQLITE_OMIT_BUILTIN_TEST */
20419: 
20420: /************** End of random.c **********************************************/
20421: /************** Begin file utf.c *********************************************/
20422: /*
20423: ** 2004 April 13
20424: **
20425: ** The author disclaims copyright to this source code.  In place of
20426: ** a legal notice, here is a blessing:
20427: **
20428: **    May you do good and not evil.
20429: **    May you find forgiveness for yourself and forgive others.
20430: **    May you share freely, never taking more than you give.
20431: **
20432: *************************************************************************
20433: ** This file contains routines used to translate between UTF-8, 
20434: ** UTF-16, UTF-16BE, and UTF-16LE.
20435: **
20436: ** Notes on UTF-8:
20437: **
20438: **   Byte-0    Byte-1    Byte-2    Byte-3    Value
20439: **  0xxxxxxx                                 00000000 00000000 0xxxxxxx
20440: **  110yyyyy  10xxxxxx                       00000000 00000yyy yyxxxxxx
20441: **  1110zzzz  10yyyyyy  10xxxxxx             00000000 zzzzyyyy yyxxxxxx
20442: **  11110uuu  10uuzzzz  10yyyyyy  10xxxxxx   000uuuuu zzzzyyyy yyxxxxxx
20443: **
20444: **
20445: ** Notes on UTF-16:  (with wwww+1==uuuuu)
20446: **
20447: **      Word-0               Word-1          Value
20448: **  110110ww wwzzzzyy   110111yy yyxxxxxx    000uuuuu zzzzyyyy yyxxxxxx
20449: **  zzzzyyyy yyxxxxxx                        00000000 zzzzyyyy yyxxxxxx
20450: **
20451: **
20452: ** BOM or Byte Order Mark:
20453: **     0xff 0xfe   little-endian utf-16 follows
20454: **     0xfe 0xff   big-endian utf-16 follows
20455: **
20456: */
20457: /* #include <assert.h> */
20458: 
20459: #ifndef SQLITE_AMALGAMATION
20460: /*
20461: ** The following constant value is used by the SQLITE_BIGENDIAN and
20462: ** SQLITE_LITTLEENDIAN macros.
20463: */
20464: SQLITE_PRIVATE const int sqlite3one = 1;
20465: #endif /* SQLITE_AMALGAMATION */
20466: 
20467: /*
20468: ** This lookup table is used to help decode the first byte of
20469: ** a multi-byte UTF8 character.
20470: */
20471: static const unsigned char sqlite3Utf8Trans1[] = {
20472:   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
20473:   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
20474:   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
20475:   0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
20476:   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
20477:   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
20478:   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
20479:   0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00,
20480: };
20481: 
20482: 
20483: #define WRITE_UTF8(zOut, c) {                          \
20484:   if( c<0x00080 ){                                     \
20485:     *zOut++ = (u8)(c&0xFF);                            \
20486:   }                                                    \
20487:   else if( c<0x00800 ){                                \
20488:     *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);                \
20489:     *zOut++ = 0x80 + (u8)(c & 0x3F);                   \
20490:   }                                                    \
20491:   else if( c<0x10000 ){                                \
20492:     *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);               \
20493:     *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);              \
20494:     *zOut++ = 0x80 + (u8)(c & 0x3F);                   \
20495:   }else{                                               \
20496:     *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);             \
20497:     *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);             \
20498:     *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);              \
20499:     *zOut++ = 0x80 + (u8)(c & 0x3F);                   \
20500:   }                                                    \
20501: }
20502: 
20503: #define WRITE_UTF16LE(zOut, c) {                                    \
20504:   if( c<=0xFFFF ){                                                  \
20505:     *zOut++ = (u8)(c&0x00FF);                                       \
20506:     *zOut++ = (u8)((c>>8)&0x00FF);                                  \
20507:   }else{                                                            \
20508:     *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0));  \
20509:     *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03));              \
20510:     *zOut++ = (u8)(c&0x00FF);                                       \
20511:     *zOut++ = (u8)(0x00DC + ((c>>8)&0x03));                         \
20512:   }                                                                 \
20513: }
20514: 
20515: #define WRITE_UTF16BE(zOut, c) {                                    \
20516:   if( c<=0xFFFF ){                                                  \
20517:     *zOut++ = (u8)((c>>8)&0x00FF);                                  \
20518:     *zOut++ = (u8)(c&0x00FF);                                       \
20519:   }else{                                                            \
20520:     *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03));              \
20521:     *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0));  \
20522:     *zOut++ = (u8)(0x00DC + ((c>>8)&0x03));                         \
20523:     *zOut++ = (u8)(c&0x00FF);                                       \
20524:   }                                                                 \
20525: }
20526: 
20527: #define READ_UTF16LE(zIn, TERM, c){                                   \
20528:   c = (*zIn++);                                                       \
20529:   c += ((*zIn++)<<8);                                                 \
20530:   if( c>=0xD800 && c<0xE000 && TERM ){                                \
20531:     int c2 = (*zIn++);                                                \
20532:     c2 += ((*zIn++)<<8);                                              \
20533:     c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10);   \
20534:   }                                                                   \
20535: }
20536: 
20537: #define READ_UTF16BE(zIn, TERM, c){                                   \
20538:   c = ((*zIn++)<<8);                                                  \
20539:   c += (*zIn++);                                                      \
20540:   if( c>=0xD800 && c<0xE000 && TERM ){                                \
20541:     int c2 = ((*zIn++)<<8);                                           \
20542:     c2 += (*zIn++);                                                   \
20543:     c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10);   \
20544:   }                                                                   \
20545: }
20546: 
20547: /*
20548: ** Translate a single UTF-8 character.  Return the unicode value.
20549: **
20550: ** During translation, assume that the byte that zTerm points
20551: ** is a 0x00.
20552: **
20553: ** Write a pointer to the next unread byte back into *pzNext.
20554: **
20555: ** Notes On Invalid UTF-8:
20556: **
20557: **  *  This routine never allows a 7-bit character (0x00 through 0x7f) to
20558: **     be encoded as a multi-byte character.  Any multi-byte character that
20559: **     attempts to encode a value between 0x00 and 0x7f is rendered as 0xfffd.
20560: **
20561: **  *  This routine never allows a UTF16 surrogate value to be encoded.
20562: **     If a multi-byte character attempts to encode a value between
20563: **     0xd800 and 0xe000 then it is rendered as 0xfffd.
20564: **
20565: **  *  Bytes in the range of 0x80 through 0xbf which occur as the first
20566: **     byte of a character are interpreted as single-byte characters
20567: **     and rendered as themselves even though they are technically
20568: **     invalid characters.
20569: **
20570: **  *  This routine accepts an infinite number of different UTF8 encodings
20571: **     for unicode values 0x80 and greater.  It do not change over-length
20572: **     encodings to 0xfffd as some systems recommend.
20573: */
20574: #define READ_UTF8(zIn, zTerm, c)                           \
20575:   c = *(zIn++);                                            \
20576:   if( c>=0xc0 ){                                           \
20577:     c = sqlite3Utf8Trans1[c-0xc0];                         \
20578:     while( zIn!=zTerm && (*zIn & 0xc0)==0x80 ){            \
20579:       c = (c<<6) + (0x3f & *(zIn++));                      \
20580:     }                                                      \
20581:     if( c<0x80                                             \
20582:         || (c&0xFFFFF800)==0xD800                          \
20583:         || (c&0xFFFFFFFE)==0xFFFE ){  c = 0xFFFD; }        \
20584:   }
20585: SQLITE_PRIVATE u32 sqlite3Utf8Read(
20586:   const unsigned char *zIn,       /* First byte of UTF-8 character */
20587:   const unsigned char **pzNext    /* Write first byte past UTF-8 char here */
20588: ){
20589:   unsigned int c;
20590: 
20591:   /* Same as READ_UTF8() above but without the zTerm parameter.
20592:   ** For this routine, we assume the UTF8 string is always zero-terminated.
20593:   */
20594:   c = *(zIn++);
20595:   if( c>=0xc0 ){
20596:     c = sqlite3Utf8Trans1[c-0xc0];
20597:     while( (*zIn & 0xc0)==0x80 ){
20598:       c = (c<<6) + (0x3f & *(zIn++));
20599:     }
20600:     if( c<0x80
20601:         || (c&0xFFFFF800)==0xD800
20602:         || (c&0xFFFFFFFE)==0xFFFE ){  c = 0xFFFD; }
20603:   }
20604:   *pzNext = zIn;
20605:   return c;
20606: }
20607: 
20608: 
20609: 
20610: 
20611: /*
20612: ** If the TRANSLATE_TRACE macro is defined, the value of each Mem is
20613: ** printed on stderr on the way into and out of sqlite3VdbeMemTranslate().
20614: */ 
20615: /* #define TRANSLATE_TRACE 1 */
20616: 
20617: #ifndef SQLITE_OMIT_UTF16
20618: /*
20619: ** This routine transforms the internal text encoding used by pMem to
20620: ** desiredEnc. It is an error if the string is already of the desired
20621: ** encoding, or if *pMem does not contain a string value.
20622: */
20623: SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){
20624:   int len;                    /* Maximum length of output string in bytes */
20625:   unsigned char *zOut;                  /* Output buffer */
20626:   unsigned char *zIn;                   /* Input iterator */
20627:   unsigned char *zTerm;                 /* End of input */
20628:   unsigned char *z;                     /* Output iterator */
20629:   unsigned int c;
20630: 
20631:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
20632:   assert( pMem->flags&MEM_Str );
20633:   assert( pMem->enc!=desiredEnc );
20634:   assert( pMem->enc!=0 );
20635:   assert( pMem->n>=0 );
20636: 
20637: #if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG)
20638:   {
20639:     char zBuf[100];
20640:     sqlite3VdbeMemPrettyPrint(pMem, zBuf);
20641:     fprintf(stderr, "INPUT:  %s\n", zBuf);
20642:   }
20643: #endif
20644: 
20645:   /* If the translation is between UTF-16 little and big endian, then 
20646:   ** all that is required is to swap the byte order. This case is handled
20647:   ** differently from the others.
20648:   */
20649:   if( pMem->enc!=SQLITE_UTF8 && desiredEnc!=SQLITE_UTF8 ){
20650:     u8 temp;
20651:     int rc;
20652:     rc = sqlite3VdbeMemMakeWriteable(pMem);
20653:     if( rc!=SQLITE_OK ){
20654:       assert( rc==SQLITE_NOMEM );
20655:       return SQLITE_NOMEM;
20656:     }
20657:     zIn = (u8*)pMem->z;
20658:     zTerm = &zIn[pMem->n&~1];
20659:     while( zIn<zTerm ){
20660:       temp = *zIn;
20661:       *zIn = *(zIn+1);
20662:       zIn++;
20663:       *zIn++ = temp;
20664:     }
20665:     pMem->enc = desiredEnc;
20666:     goto translate_out;
20667:   }
20668: 
20669:   /* Set len to the maximum number of bytes required in the output buffer. */
20670:   if( desiredEnc==SQLITE_UTF8 ){
20671:     /* When converting from UTF-16, the maximum growth results from
20672:     ** translating a 2-byte character to a 4-byte UTF-8 character.
20673:     ** A single byte is required for the output string
20674:     ** nul-terminator.
20675:     */
20676:     pMem->n &= ~1;
20677:     len = pMem->n * 2 + 1;
20678:   }else{
20679:     /* When converting from UTF-8 to UTF-16 the maximum growth is caused
20680:     ** when a 1-byte UTF-8 character is translated into a 2-byte UTF-16
20681:     ** character. Two bytes are required in the output buffer for the
20682:     ** nul-terminator.
20683:     */
20684:     len = pMem->n * 2 + 2;
20685:   }
20686: 
20687:   /* Set zIn to point at the start of the input buffer and zTerm to point 1
20688:   ** byte past the end.
20689:   **
20690:   ** Variable zOut is set to point at the output buffer, space obtained
20691:   ** from sqlite3_malloc().
20692:   */
20693:   zIn = (u8*)pMem->z;
20694:   zTerm = &zIn[pMem->n];
20695:   zOut = sqlite3DbMallocRaw(pMem->db, len);
20696:   if( !zOut ){
20697:     return SQLITE_NOMEM;
20698:   }
20699:   z = zOut;
20700: 
20701:   if( pMem->enc==SQLITE_UTF8 ){
20702:     if( desiredEnc==SQLITE_UTF16LE ){
20703:       /* UTF-8 -> UTF-16 Little-endian */
20704:       while( zIn<zTerm ){
20705:         /* c = sqlite3Utf8Read(zIn, zTerm, (const u8**)&zIn); */
20706:         READ_UTF8(zIn, zTerm, c);
20707:         WRITE_UTF16LE(z, c);
20708:       }
20709:     }else{
20710:       assert( desiredEnc==SQLITE_UTF16BE );
20711:       /* UTF-8 -> UTF-16 Big-endian */
20712:       while( zIn<zTerm ){
20713:         /* c = sqlite3Utf8Read(zIn, zTerm, (const u8**)&zIn); */
20714:         READ_UTF8(zIn, zTerm, c);
20715:         WRITE_UTF16BE(z, c);
20716:       }
20717:     }
20718:     pMem->n = (int)(z - zOut);
20719:     *z++ = 0;
20720:   }else{
20721:     assert( desiredEnc==SQLITE_UTF8 );
20722:     if( pMem->enc==SQLITE_UTF16LE ){
20723:       /* UTF-16 Little-endian -> UTF-8 */
20724:       while( zIn<zTerm ){
20725:         READ_UTF16LE(zIn, zIn<zTerm, c); 
20726:         WRITE_UTF8(z, c);
20727:       }
20728:     }else{
20729:       /* UTF-16 Big-endian -> UTF-8 */
20730:       while( zIn<zTerm ){
20731:         READ_UTF16BE(zIn, zIn<zTerm, c); 
20732:         WRITE_UTF8(z, c);
20733:       }
20734:     }
20735:     pMem->n = (int)(z - zOut);
20736:   }
20737:   *z = 0;
20738:   assert( (pMem->n+(desiredEnc==SQLITE_UTF8?1:2))<=len );
20739: 
20740:   sqlite3VdbeMemRelease(pMem);
20741:   pMem->flags &= ~(MEM_Static|MEM_Dyn|MEM_Ephem);
20742:   pMem->enc = desiredEnc;
20743:   pMem->flags |= (MEM_Term|MEM_Dyn);
20744:   pMem->z = (char*)zOut;
20745:   pMem->zMalloc = pMem->z;
20746: 
20747: translate_out:
20748: #if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG)
20749:   {
20750:     char zBuf[100];
20751:     sqlite3VdbeMemPrettyPrint(pMem, zBuf);
20752:     fprintf(stderr, "OUTPUT: %s\n", zBuf);
20753:   }
20754: #endif
20755:   return SQLITE_OK;
20756: }
20757: 
20758: /*
20759: ** This routine checks for a byte-order mark at the beginning of the 
20760: ** UTF-16 string stored in *pMem. If one is present, it is removed and
20761: ** the encoding of the Mem adjusted. This routine does not do any
20762: ** byte-swapping, it just sets Mem.enc appropriately.
20763: **
20764: ** The allocation (static, dynamic etc.) and encoding of the Mem may be
20765: ** changed by this function.
20766: */
20767: SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem){
20768:   int rc = SQLITE_OK;
20769:   u8 bom = 0;
20770: 
20771:   assert( pMem->n>=0 );
20772:   if( pMem->n>1 ){
20773:     u8 b1 = *(u8 *)pMem->z;
20774:     u8 b2 = *(((u8 *)pMem->z) + 1);
20775:     if( b1==0xFE && b2==0xFF ){
20776:       bom = SQLITE_UTF16BE;
20777:     }
20778:     if( b1==0xFF && b2==0xFE ){
20779:       bom = SQLITE_UTF16LE;
20780:     }
20781:   }
20782:   
20783:   if( bom ){
20784:     rc = sqlite3VdbeMemMakeWriteable(pMem);
20785:     if( rc==SQLITE_OK ){
20786:       pMem->n -= 2;
20787:       memmove(pMem->z, &pMem->z[2], pMem->n);
20788:       pMem->z[pMem->n] = '\0';
20789:       pMem->z[pMem->n+1] = '\0';
20790:       pMem->flags |= MEM_Term;
20791:       pMem->enc = bom;
20792:     }
20793:   }
20794:   return rc;
20795: }
20796: #endif /* SQLITE_OMIT_UTF16 */
20797: 
20798: /*
20799: ** pZ is a UTF-8 encoded unicode string. If nByte is less than zero,
20800: ** return the number of unicode characters in pZ up to (but not including)
20801: ** the first 0x00 byte. If nByte is not less than zero, return the
20802: ** number of unicode characters in the first nByte of pZ (or up to 
20803: ** the first 0x00, whichever comes first).
20804: */
20805: SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *zIn, int nByte){
20806:   int r = 0;
20807:   const u8 *z = (const u8*)zIn;
20808:   const u8 *zTerm;
20809:   if( nByte>=0 ){
20810:     zTerm = &z[nByte];
20811:   }else{
20812:     zTerm = (const u8*)(-1);
20813:   }
20814:   assert( z<=zTerm );
20815:   while( *z!=0 && z<zTerm ){
20816:     SQLITE_SKIP_UTF8(z);
20817:     r++;
20818:   }
20819:   return r;
20820: }
20821: 
20822: /* This test function is not currently used by the automated test-suite. 
20823: ** Hence it is only available in debug builds.
20824: */
20825: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
20826: /*
20827: ** Translate UTF-8 to UTF-8.
20828: **
20829: ** This has the effect of making sure that the string is well-formed
20830: ** UTF-8.  Miscoded characters are removed.
20831: **
20832: ** The translation is done in-place and aborted if the output
20833: ** overruns the input.
20834: */
20835: SQLITE_PRIVATE int sqlite3Utf8To8(unsigned char *zIn){
20836:   unsigned char *zOut = zIn;
20837:   unsigned char *zStart = zIn;
20838:   u32 c;
20839: 
20840:   while( zIn[0] && zOut<=zIn ){
20841:     c = sqlite3Utf8Read(zIn, (const u8**)&zIn);
20842:     if( c!=0xfffd ){
20843:       WRITE_UTF8(zOut, c);
20844:     }
20845:   }
20846:   *zOut = 0;
20847:   return (int)(zOut - zStart);
20848: }
20849: #endif
20850: 
20851: #ifndef SQLITE_OMIT_UTF16
20852: /*
20853: ** Convert a UTF-16 string in the native encoding into a UTF-8 string.
20854: ** Memory to hold the UTF-8 string is obtained from sqlite3_malloc and must
20855: ** be freed by the calling function.
20856: **
20857: ** NULL is returned if there is an allocation error.
20858: */
20859: SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *db, const void *z, int nByte, u8 enc){
20860:   Mem m;
20861:   memset(&m, 0, sizeof(m));
20862:   m.db = db;
20863:   sqlite3VdbeMemSetStr(&m, z, nByte, enc, SQLITE_STATIC);
20864:   sqlite3VdbeChangeEncoding(&m, SQLITE_UTF8);
20865:   if( db->mallocFailed ){
20866:     sqlite3VdbeMemRelease(&m);
20867:     m.z = 0;
20868:   }
20869:   assert( (m.flags & MEM_Term)!=0 || db->mallocFailed );
20870:   assert( (m.flags & MEM_Str)!=0 || db->mallocFailed );
20871:   assert( (m.flags & MEM_Dyn)!=0 || db->mallocFailed );
20872:   assert( m.z || db->mallocFailed );
20873:   return m.z;
20874: }
20875: 
20876: /*
20877: ** Convert a UTF-8 string to the UTF-16 encoding specified by parameter
20878: ** enc. A pointer to the new string is returned, and the value of *pnOut
20879: ** is set to the length of the returned string in bytes. The call should
20880: ** arrange to call sqlite3DbFree() on the returned pointer when it is
20881: ** no longer required.
20882: ** 
20883: ** If a malloc failure occurs, NULL is returned and the db.mallocFailed
20884: ** flag set.
20885: */
20886: #ifdef SQLITE_ENABLE_STAT3
20887: SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *db, u8 enc, char *z, int n, int *pnOut){
20888:   Mem m;
20889:   memset(&m, 0, sizeof(m));
20890:   m.db = db;
20891:   sqlite3VdbeMemSetStr(&m, z, n, SQLITE_UTF8, SQLITE_STATIC);
20892:   if( sqlite3VdbeMemTranslate(&m, enc) ){
20893:     assert( db->mallocFailed );
20894:     return 0;
20895:   }
20896:   assert( m.z==m.zMalloc );
20897:   *pnOut = m.n;
20898:   return m.z;
20899: }
20900: #endif
20901: 
20902: /*
20903: ** zIn is a UTF-16 encoded unicode string at least nChar characters long.
20904: ** Return the number of bytes in the first nChar unicode characters
20905: ** in pZ.  nChar must be non-negative.
20906: */
20907: SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *zIn, int nChar){
20908:   int c;
20909:   unsigned char const *z = zIn;
20910:   int n = 0;
20911:   
20912:   if( SQLITE_UTF16NATIVE==SQLITE_UTF16BE ){
20913:     while( n<nChar ){
20914:       READ_UTF16BE(z, 1, c);
20915:       n++;
20916:     }
20917:   }else{
20918:     while( n<nChar ){
20919:       READ_UTF16LE(z, 1, c);
20920:       n++;
20921:     }
20922:   }
20923:   return (int)(z-(unsigned char const *)zIn);
20924: }
20925: 
20926: #if defined(SQLITE_TEST)
20927: /*
20928: ** This routine is called from the TCL test function "translate_selftest".
20929: ** It checks that the primitives for serializing and deserializing
20930: ** characters in each encoding are inverses of each other.
20931: */
20932: SQLITE_PRIVATE void sqlite3UtfSelfTest(void){
20933:   unsigned int i, t;
20934:   unsigned char zBuf[20];
20935:   unsigned char *z;
20936:   int n;
20937:   unsigned int c;
20938: 
20939:   for(i=0; i<0x00110000; i++){
20940:     z = zBuf;
20941:     WRITE_UTF8(z, i);
20942:     n = (int)(z-zBuf);
20943:     assert( n>0 && n<=4 );
20944:     z[0] = 0;
20945:     z = zBuf;
20946:     c = sqlite3Utf8Read(z, (const u8**)&z);
20947:     t = i;
20948:     if( i>=0xD800 && i<=0xDFFF ) t = 0xFFFD;
20949:     if( (i&0xFFFFFFFE)==0xFFFE ) t = 0xFFFD;
20950:     assert( c==t );
20951:     assert( (z-zBuf)==n );
20952:   }
20953:   for(i=0; i<0x00110000; i++){
20954:     if( i>=0xD800 && i<0xE000 ) continue;
20955:     z = zBuf;
20956:     WRITE_UTF16LE(z, i);
20957:     n = (int)(z-zBuf);
20958:     assert( n>0 && n<=4 );
20959:     z[0] = 0;
20960:     z = zBuf;
20961:     READ_UTF16LE(z, 1, c);
20962:     assert( c==i );
20963:     assert( (z-zBuf)==n );
20964:   }
20965:   for(i=0; i<0x00110000; i++){
20966:     if( i>=0xD800 && i<0xE000 ) continue;
20967:     z = zBuf;
20968:     WRITE_UTF16BE(z, i);
20969:     n = (int)(z-zBuf);
20970:     assert( n>0 && n<=4 );
20971:     z[0] = 0;
20972:     z = zBuf;
20973:     READ_UTF16BE(z, 1, c);
20974:     assert( c==i );
20975:     assert( (z-zBuf)==n );
20976:   }
20977: }
20978: #endif /* SQLITE_TEST */
20979: #endif /* SQLITE_OMIT_UTF16 */
20980: 
20981: /************** End of utf.c *************************************************/
20982: /************** Begin file util.c ********************************************/
20983: /*
20984: ** 2001 September 15
20985: **
20986: ** The author disclaims copyright to this source code.  In place of
20987: ** a legal notice, here is a blessing:
20988: **
20989: **    May you do good and not evil.
20990: **    May you find forgiveness for yourself and forgive others.
20991: **    May you share freely, never taking more than you give.
20992: **
20993: *************************************************************************
20994: ** Utility functions used throughout sqlite.
20995: **
20996: ** This file contains functions for allocating memory, comparing
20997: ** strings, and stuff like that.
20998: **
20999: */
21000: /* #include <stdarg.h> */
21001: #ifdef SQLITE_HAVE_ISNAN
21002: # include <math.h>
21003: #endif
21004: 
21005: /*
21006: ** Routine needed to support the testcase() macro.
21007: */
21008: #ifdef SQLITE_COVERAGE_TEST
21009: SQLITE_PRIVATE void sqlite3Coverage(int x){
21010:   static unsigned dummy = 0;
21011:   dummy += (unsigned)x;
21012: }
21013: #endif
21014: 
21015: #ifndef SQLITE_OMIT_FLOATING_POINT
21016: /*
21017: ** Return true if the floating point value is Not a Number (NaN).
21018: **
21019: ** Use the math library isnan() function if compiled with SQLITE_HAVE_ISNAN.
21020: ** Otherwise, we have our own implementation that works on most systems.
21021: */
21022: SQLITE_PRIVATE int sqlite3IsNaN(double x){
21023:   int rc;   /* The value return */
21024: #if !defined(SQLITE_HAVE_ISNAN)
21025:   /*
21026:   ** Systems that support the isnan() library function should probably
21027:   ** make use of it by compiling with -DSQLITE_HAVE_ISNAN.  But we have
21028:   ** found that many systems do not have a working isnan() function so
21029:   ** this implementation is provided as an alternative.
21030:   **
21031:   ** This NaN test sometimes fails if compiled on GCC with -ffast-math.
21032:   ** On the other hand, the use of -ffast-math comes with the following
21033:   ** warning:
21034:   **
21035:   **      This option [-ffast-math] should never be turned on by any
21036:   **      -O option since it can result in incorrect output for programs
21037:   **      which depend on an exact implementation of IEEE or ISO 
21038:   **      rules/specifications for math functions.
21039:   **
21040:   ** Under MSVC, this NaN test may fail if compiled with a floating-
21041:   ** point precision mode other than /fp:precise.  From the MSDN 
21042:   ** documentation:
21043:   **
21044:   **      The compiler [with /fp:precise] will properly handle comparisons 
21045:   **      involving NaN. For example, x != x evaluates to true if x is NaN 
21046:   **      ...
21047:   */
21048: #ifdef __FAST_MATH__
21049: # error SQLite will not work correctly with the -ffast-math option of GCC.
21050: #endif
21051:   volatile double y = x;
21052:   volatile double z = y;
21053:   rc = (y!=z);
21054: #else  /* if defined(SQLITE_HAVE_ISNAN) */
21055:   rc = isnan(x);
21056: #endif /* SQLITE_HAVE_ISNAN */
21057:   testcase( rc );
21058:   return rc;
21059: }
21060: #endif /* SQLITE_OMIT_FLOATING_POINT */
21061: 
21062: /*
21063: ** Compute a string length that is limited to what can be stored in
21064: ** lower 30 bits of a 32-bit signed integer.
21065: **
21066: ** The value returned will never be negative.  Nor will it ever be greater
21067: ** than the actual length of the string.  For very long strings (greater
21068: ** than 1GiB) the value returned might be less than the true string length.
21069: */
21070: SQLITE_PRIVATE int sqlite3Strlen30(const char *z){
21071:   const char *z2 = z;
21072:   if( z==0 ) return 0;
21073:   while( *z2 ){ z2++; }
21074:   return 0x3fffffff & (int)(z2 - z);
21075: }
21076: 
21077: /*
21078: ** Set the most recent error code and error string for the sqlite
21079: ** handle "db". The error code is set to "err_code".
21080: **
21081: ** If it is not NULL, string zFormat specifies the format of the
21082: ** error string in the style of the printf functions: The following
21083: ** format characters are allowed:
21084: **
21085: **      %s      Insert a string
21086: **      %z      A string that should be freed after use
21087: **      %d      Insert an integer
21088: **      %T      Insert a token
21089: **      %S      Insert the first element of a SrcList
21090: **
21091: ** zFormat and any string tokens that follow it are assumed to be
21092: ** encoded in UTF-8.
21093: **
21094: ** To clear the most recent error for sqlite handle "db", sqlite3Error
21095: ** should be called with err_code set to SQLITE_OK and zFormat set
21096: ** to NULL.
21097: */
21098: SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...){
21099:   if( db && (db->pErr || (db->pErr = sqlite3ValueNew(db))!=0) ){
21100:     db->errCode = err_code;
21101:     if( zFormat ){
21102:       char *z;
21103:       va_list ap;
21104:       va_start(ap, zFormat);
21105:       z = sqlite3VMPrintf(db, zFormat, ap);
21106:       va_end(ap);
21107:       sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC);
21108:     }else{
21109:       sqlite3ValueSetStr(db->pErr, 0, 0, SQLITE_UTF8, SQLITE_STATIC);
21110:     }
21111:   }
21112: }
21113: 
21114: /*
21115: ** Add an error message to pParse->zErrMsg and increment pParse->nErr.
21116: ** The following formatting characters are allowed:
21117: **
21118: **      %s      Insert a string
21119: **      %z      A string that should be freed after use
21120: **      %d      Insert an integer
21121: **      %T      Insert a token
21122: **      %S      Insert the first element of a SrcList
21123: **
21124: ** This function should be used to report any error that occurs whilst
21125: ** compiling an SQL statement (i.e. within sqlite3_prepare()). The
21126: ** last thing the sqlite3_prepare() function does is copy the error
21127: ** stored by this function into the database handle using sqlite3Error().
21128: ** Function sqlite3Error() should be used during statement execution
21129: ** (sqlite3_step() etc.).
21130: */
21131: SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
21132:   char *zMsg;
21133:   va_list ap;
21134:   sqlite3 *db = pParse->db;
21135:   va_start(ap, zFormat);
21136:   zMsg = sqlite3VMPrintf(db, zFormat, ap);
21137:   va_end(ap);
21138:   if( db->suppressErr ){
21139:     sqlite3DbFree(db, zMsg);
21140:   }else{
21141:     pParse->nErr++;
21142:     sqlite3DbFree(db, pParse->zErrMsg);
21143:     pParse->zErrMsg = zMsg;
21144:     pParse->rc = SQLITE_ERROR;
21145:   }
21146: }
21147: 
21148: /*
21149: ** Convert an SQL-style quoted string into a normal string by removing
21150: ** the quote characters.  The conversion is done in-place.  If the
21151: ** input does not begin with a quote character, then this routine
21152: ** is a no-op.
21153: **
21154: ** The input string must be zero-terminated.  A new zero-terminator
21155: ** is added to the dequoted string.
21156: **
21157: ** The return value is -1 if no dequoting occurs or the length of the
21158: ** dequoted string, exclusive of the zero terminator, if dequoting does
21159: ** occur.
21160: **
21161: ** 2002-Feb-14: This routine is extended to remove MS-Access style
21162: ** brackets from around identifers.  For example:  "[a-b-c]" becomes
21163: ** "a-b-c".
21164: */
21165: SQLITE_PRIVATE int sqlite3Dequote(char *z){
21166:   char quote;
21167:   int i, j;
21168:   if( z==0 ) return -1;
21169:   quote = z[0];
21170:   switch( quote ){
21171:     case '\'':  break;
21172:     case '"':   break;
21173:     case '`':   break;                /* For MySQL compatibility */
21174:     case '[':   quote = ']';  break;  /* For MS SqlServer compatibility */
21175:     default:    return -1;
21176:   }
21177:   for(i=1, j=0; ALWAYS(z[i]); i++){
21178:     if( z[i]==quote ){
21179:       if( z[i+1]==quote ){
21180:         z[j++] = quote;
21181:         i++;
21182:       }else{
21183:         break;
21184:       }
21185:     }else{
21186:       z[j++] = z[i];
21187:     }
21188:   }
21189:   z[j] = 0;
21190:   return j;
21191: }
21192: 
21193: /* Convenient short-hand */
21194: #define UpperToLower sqlite3UpperToLower
21195: 
21196: /*
21197: ** Some systems have stricmp().  Others have strcasecmp().  Because
21198: ** there is no consistency, we will define our own.
21199: **
21200: ** IMPLEMENTATION-OF: R-20522-24639 The sqlite3_strnicmp() API allows
21201: ** applications and extensions to compare the contents of two buffers
21202: ** containing UTF-8 strings in a case-independent fashion, using the same
21203: ** definition of case independence that SQLite uses internally when
21204: ** comparing identifiers.
21205: */
21206: SQLITE_PRIVATE int sqlite3StrICmp(const char *zLeft, const char *zRight){
21207:   register unsigned char *a, *b;
21208:   a = (unsigned char *)zLeft;
21209:   b = (unsigned char *)zRight;
21210:   while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
21211:   return UpperToLower[*a] - UpperToLower[*b];
21212: }
21213: SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
21214:   register unsigned char *a, *b;
21215:   a = (unsigned char *)zLeft;
21216:   b = (unsigned char *)zRight;
21217:   while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
21218:   return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
21219: }
21220: 
21221: /*
21222: ** The string z[] is an text representation of a real number.
21223: ** Convert this string to a double and write it into *pResult.
21224: **
21225: ** The string z[] is length bytes in length (bytes, not characters) and
21226: ** uses the encoding enc.  The string is not necessarily zero-terminated.
21227: **
21228: ** Return TRUE if the result is a valid real number (or integer) and FALSE
21229: ** if the string is empty or contains extraneous text.  Valid numbers
21230: ** are in one of these formats:
21231: **
21232: **    [+-]digits[E[+-]digits]
21233: **    [+-]digits.[digits][E[+-]digits]
21234: **    [+-].digits[E[+-]digits]
21235: **
21236: ** Leading and trailing whitespace is ignored for the purpose of determining
21237: ** validity.
21238: **
21239: ** If some prefix of the input string is a valid number, this routine
21240: ** returns FALSE but it still converts the prefix and writes the result
21241: ** into *pResult.
21242: */
21243: SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){
21244: #ifndef SQLITE_OMIT_FLOATING_POINT
21245:   int incr = (enc==SQLITE_UTF8?1:2);
21246:   const char *zEnd = z + length;
21247:   /* sign * significand * (10 ^ (esign * exponent)) */
21248:   int sign = 1;    /* sign of significand */
21249:   i64 s = 0;       /* significand */
21250:   int d = 0;       /* adjust exponent for shifting decimal point */
21251:   int esign = 1;   /* sign of exponent */
21252:   int e = 0;       /* exponent */
21253:   int eValid = 1;  /* True exponent is either not used or is well-formed */
21254:   double result;
21255:   int nDigits = 0;
21256: 
21257:   *pResult = 0.0;   /* Default return value, in case of an error */
21258: 
21259:   if( enc==SQLITE_UTF16BE ) z++;
21260: 
21261:   /* skip leading spaces */
21262:   while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
21263:   if( z>=zEnd ) return 0;
21264: 
21265:   /* get sign of significand */
21266:   if( *z=='-' ){
21267:     sign = -1;
21268:     z+=incr;
21269:   }else if( *z=='+' ){
21270:     z+=incr;
21271:   }
21272: 
21273:   /* skip leading zeroes */
21274:   while( z<zEnd && z[0]=='0' ) z+=incr, nDigits++;
21275: 
21276:   /* copy max significant digits to significand */
21277:   while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
21278:     s = s*10 + (*z - '0');
21279:     z+=incr, nDigits++;
21280:   }
21281: 
21282:   /* skip non-significant significand digits
21283:   ** (increase exponent by d to shift decimal left) */
21284:   while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++, d++;
21285:   if( z>=zEnd ) goto do_atof_calc;
21286: 
21287:   /* if decimal point is present */
21288:   if( *z=='.' ){
21289:     z+=incr;
21290:     /* copy digits from after decimal to significand
21291:     ** (decrease exponent by d to shift decimal right) */
21292:     while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
21293:       s = s*10 + (*z - '0');
21294:       z+=incr, nDigits++, d--;
21295:     }
21296:     /* skip non-significant digits */
21297:     while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++;
21298:   }
21299:   if( z>=zEnd ) goto do_atof_calc;
21300: 
21301:   /* if exponent is present */
21302:   if( *z=='e' || *z=='E' ){
21303:     z+=incr;
21304:     eValid = 0;
21305:     if( z>=zEnd ) goto do_atof_calc;
21306:     /* get sign of exponent */
21307:     if( *z=='-' ){
21308:       esign = -1;
21309:       z+=incr;
21310:     }else if( *z=='+' ){
21311:       z+=incr;
21312:     }
21313:     /* copy digits to exponent */
21314:     while( z<zEnd && sqlite3Isdigit(*z) ){
21315:       e = e<10000 ? (e*10 + (*z - '0')) : 10000;
21316:       z+=incr;
21317:       eValid = 1;
21318:     }
21319:   }
21320: 
21321:   /* skip trailing spaces */
21322:   if( nDigits && eValid ){
21323:     while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
21324:   }
21325: 
21326: do_atof_calc:
21327:   /* adjust exponent by d, and update sign */
21328:   e = (e*esign) + d;
21329:   if( e<0 ) {
21330:     esign = -1;
21331:     e *= -1;
21332:   } else {
21333:     esign = 1;
21334:   }
21335: 
21336:   /* if 0 significand */
21337:   if( !s ) {
21338:     /* In the IEEE 754 standard, zero is signed.
21339:     ** Add the sign if we've seen at least one digit */
21340:     result = (sign<0 && nDigits) ? -(double)0 : (double)0;
21341:   } else {
21342:     /* attempt to reduce exponent */
21343:     if( esign>0 ){
21344:       while( s<(LARGEST_INT64/10) && e>0 ) e--,s*=10;
21345:     }else{
21346:       while( !(s%10) && e>0 ) e--,s/=10;
21347:     }
21348: 
21349:     /* adjust the sign of significand */
21350:     s = sign<0 ? -s : s;
21351: 
21352:     /* if exponent, scale significand as appropriate
21353:     ** and store in result. */
21354:     if( e ){
21355:       double scale = 1.0;
21356: #ifndef __vax__
21357:       /* attempt to handle extremely small/large numbers better */
21358:       if( e>307 && e<342 ){
21359:         while( e%308 ) { scale *= 1.0e+1; e -= 1; }
21360:         if( esign<0 ){
21361:           result = s / scale;
21362:           result /= SQLITE_HUGE_DBL;
21363:         }else{
21364:           result = s * scale;
21365:           result *= SQLITE_HUGE_DBL;
21366:         }
21367:       }else if( e>=342 ){
21368:         if( esign<0 ){
21369:           result = 0.0*s;
21370:         }else{
21371:           result = 1e308*1e308*s;  /* Infinity */
21372:         }
21373:       }else
21374: #endif
21375:       {
21376:         /* 1.0e+22 is the largest power of 10 than can be 
21377:         ** represented exactly. */
21378:         while( e%22 ) { scale *= 1.0e+1; e -= 1; }
21379:         while( e>0 ) { scale *= 1.0e+22; e -= 22; }
21380:         if( esign<0 ){
21381:           result = s / scale;
21382:         }else{
21383:           result = s * scale;
21384:         }
21385:       }
21386:     } else {
21387:       result = (double)s;
21388:     }
21389:   }
21390: 
21391:   /* store the result */
21392:   *pResult = result;
21393: 
21394:   /* return true if number and no extra non-whitespace chracters after */
21395:   return z>=zEnd && nDigits>0 && eValid;
21396: #else
21397:   return !sqlite3Atoi64(z, pResult, length, enc);
21398: #endif /* SQLITE_OMIT_FLOATING_POINT */
21399: }
21400: 
21401: /*
21402: ** Compare the 19-character string zNum against the text representation
21403: ** value 2^63:  9223372036854775808.  Return negative, zero, or positive
21404: ** if zNum is less than, equal to, or greater than the string.
21405: ** Note that zNum must contain exactly 19 characters.
21406: **
21407: ** Unlike memcmp() this routine is guaranteed to return the difference
21408: ** in the values of the last digit if the only difference is in the
21409: ** last digit.  So, for example,
21410: **
21411: **      compare2pow63("9223372036854775800", 1)
21412: **
21413: ** will return -8.
21414: */
21415: static int compare2pow63(const char *zNum, int incr){
21416:   int c = 0;
21417:   int i;
21418:                     /* 012345678901234567 */
21419:   const char *pow63 = "922337203685477580";
21420:   for(i=0; c==0 && i<18; i++){
21421:     c = (zNum[i*incr]-pow63[i])*10;
21422:   }
21423:   if( c==0 ){
21424:     c = zNum[18*incr] - '8';
21425:     testcase( c==(-1) );
21426:     testcase( c==0 );
21427:     testcase( c==(+1) );
21428:   }
21429:   return c;
21430: }
21431: 
21432: 
21433: /*
21434: ** Convert zNum to a 64-bit signed integer.
21435: **
21436: ** If the zNum value is representable as a 64-bit twos-complement 
21437: ** integer, then write that value into *pNum and return 0.
21438: **
21439: ** If zNum is exactly 9223372036854665808, return 2.  This special
21440: ** case is broken out because while 9223372036854665808 cannot be a 
21441: ** signed 64-bit integer, its negative -9223372036854665808 can be.
21442: **
21443: ** If zNum is too big for a 64-bit integer and is not
21444: ** 9223372036854665808 then return 1.
21445: **
21446: ** length is the number of bytes in the string (bytes, not characters).
21447: ** The string is not necessarily zero-terminated.  The encoding is
21448: ** given by enc.
21449: */
21450: SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc){
21451:   int incr = (enc==SQLITE_UTF8?1:2);
21452:   u64 u = 0;
21453:   int neg = 0; /* assume positive */
21454:   int i;
21455:   int c = 0;
21456:   const char *zStart;
21457:   const char *zEnd = zNum + length;
21458:   if( enc==SQLITE_UTF16BE ) zNum++;
21459:   while( zNum<zEnd && sqlite3Isspace(*zNum) ) zNum+=incr;
21460:   if( zNum<zEnd ){
21461:     if( *zNum=='-' ){
21462:       neg = 1;
21463:       zNum+=incr;
21464:     }else if( *zNum=='+' ){
21465:       zNum+=incr;
21466:     }
21467:   }
21468:   zStart = zNum;
21469:   while( zNum<zEnd && zNum[0]=='0' ){ zNum+=incr; } /* Skip leading zeros. */
21470:   for(i=0; &zNum[i]<zEnd && (c=zNum[i])>='0' && c<='9'; i+=incr){
21471:     u = u*10 + c - '0';
21472:   }
21473:   if( u>LARGEST_INT64 ){
21474:     *pNum = SMALLEST_INT64;
21475:   }else if( neg ){
21476:     *pNum = -(i64)u;
21477:   }else{
21478:     *pNum = (i64)u;
21479:   }
21480:   testcase( i==18 );
21481:   testcase( i==19 );
21482:   testcase( i==20 );
21483:   if( (c!=0 && &zNum[i]<zEnd) || (i==0 && zStart==zNum) || i>19*incr ){
21484:     /* zNum is empty or contains non-numeric text or is longer
21485:     ** than 19 digits (thus guaranteeing that it is too large) */
21486:     return 1;
21487:   }else if( i<19*incr ){
21488:     /* Less than 19 digits, so we know that it fits in 64 bits */
21489:     assert( u<=LARGEST_INT64 );
21490:     return 0;
21491:   }else{
21492:     /* zNum is a 19-digit numbers.  Compare it against 9223372036854775808. */
21493:     c = compare2pow63(zNum, incr);
21494:     if( c<0 ){
21495:       /* zNum is less than 9223372036854775808 so it fits */
21496:       assert( u<=LARGEST_INT64 );
21497:       return 0;
21498:     }else if( c>0 ){
21499:       /* zNum is greater than 9223372036854775808 so it overflows */
21500:       return 1;
21501:     }else{
21502:       /* zNum is exactly 9223372036854775808.  Fits if negative.  The
21503:       ** special case 2 overflow if positive */
21504:       assert( u-1==LARGEST_INT64 );
21505:       assert( (*pNum)==SMALLEST_INT64 );
21506:       return neg ? 0 : 2;
21507:     }
21508:   }
21509: }
21510: 
21511: /*
21512: ** If zNum represents an integer that will fit in 32-bits, then set
21513: ** *pValue to that integer and return true.  Otherwise return false.
21514: **
21515: ** Any non-numeric characters that following zNum are ignored.
21516: ** This is different from sqlite3Atoi64() which requires the
21517: ** input number to be zero-terminated.
21518: */
21519: SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){
21520:   sqlite_int64 v = 0;
21521:   int i, c;
21522:   int neg = 0;
21523:   if( zNum[0]=='-' ){
21524:     neg = 1;
21525:     zNum++;
21526:   }else if( zNum[0]=='+' ){
21527:     zNum++;
21528:   }
21529:   while( zNum[0]=='0' ) zNum++;
21530:   for(i=0; i<11 && (c = zNum[i] - '0')>=0 && c<=9; i++){
21531:     v = v*10 + c;
21532:   }
21533: 
21534:   /* The longest decimal representation of a 32 bit integer is 10 digits:
21535:   **
21536:   **             1234567890
21537:   **     2^31 -> 2147483648
21538:   */
21539:   testcase( i==10 );
21540:   if( i>10 ){
21541:     return 0;
21542:   }
21543:   testcase( v-neg==2147483647 );
21544:   if( v-neg>2147483647 ){
21545:     return 0;
21546:   }
21547:   if( neg ){
21548:     v = -v;
21549:   }
21550:   *pValue = (int)v;
21551:   return 1;
21552: }
21553: 
21554: /*
21555: ** Return a 32-bit integer value extracted from a string.  If the
21556: ** string is not an integer, just return 0.
21557: */
21558: SQLITE_PRIVATE int sqlite3Atoi(const char *z){
21559:   int x = 0;
21560:   if( z ) sqlite3GetInt32(z, &x);
21561:   return x;
21562: }
21563: 
21564: /*
21565: ** The variable-length integer encoding is as follows:
21566: **
21567: ** KEY:
21568: **         A = 0xxxxxxx    7 bits of data and one flag bit
21569: **         B = 1xxxxxxx    7 bits of data and one flag bit
21570: **         C = xxxxxxxx    8 bits of data
21571: **
21572: **  7 bits - A
21573: ** 14 bits - BA
21574: ** 21 bits - BBA
21575: ** 28 bits - BBBA
21576: ** 35 bits - BBBBA
21577: ** 42 bits - BBBBBA
21578: ** 49 bits - BBBBBBA
21579: ** 56 bits - BBBBBBBA
21580: ** 64 bits - BBBBBBBBC
21581: */
21582: 
21583: /*
21584: ** Write a 64-bit variable-length integer to memory starting at p[0].
21585: ** The length of data write will be between 1 and 9 bytes.  The number
21586: ** of bytes written is returned.
21587: **
21588: ** A variable-length integer consists of the lower 7 bits of each byte
21589: ** for all bytes that have the 8th bit set and one byte with the 8th
21590: ** bit clear.  Except, if we get to the 9th byte, it stores the full
21591: ** 8 bits and is the last byte.
21592: */
21593: SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
21594:   int i, j, n;
21595:   u8 buf[10];
21596:   if( v & (((u64)0xff000000)<<32) ){
21597:     p[8] = (u8)v;
21598:     v >>= 8;
21599:     for(i=7; i>=0; i--){
21600:       p[i] = (u8)((v & 0x7f) | 0x80);
21601:       v >>= 7;
21602:     }
21603:     return 9;
21604:   }    
21605:   n = 0;
21606:   do{
21607:     buf[n++] = (u8)((v & 0x7f) | 0x80);
21608:     v >>= 7;
21609:   }while( v!=0 );
21610:   buf[0] &= 0x7f;
21611:   assert( n<=9 );
21612:   for(i=0, j=n-1; j>=0; j--, i++){
21613:     p[i] = buf[j];
21614:   }
21615:   return n;
21616: }
21617: 
21618: /*
21619: ** This routine is a faster version of sqlite3PutVarint() that only
21620: ** works for 32-bit positive integers and which is optimized for
21621: ** the common case of small integers.  A MACRO version, putVarint32,
21622: ** is provided which inlines the single-byte case.  All code should use
21623: ** the MACRO version as this function assumes the single-byte case has
21624: ** already been handled.
21625: */
21626: SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char *p, u32 v){
21627: #ifndef putVarint32
21628:   if( (v & ~0x7f)==0 ){
21629:     p[0] = v;
21630:     return 1;
21631:   }
21632: #endif
21633:   if( (v & ~0x3fff)==0 ){
21634:     p[0] = (u8)((v>>7) | 0x80);
21635:     p[1] = (u8)(v & 0x7f);
21636:     return 2;
21637:   }
21638:   return sqlite3PutVarint(p, v);
21639: }
21640: 
21641: /*
21642: ** Bitmasks used by sqlite3GetVarint().  These precomputed constants
21643: ** are defined here rather than simply putting the constant expressions
21644: ** inline in order to work around bugs in the RVT compiler.
21645: **
21646: ** SLOT_2_0     A mask for  (0x7f<<14) | 0x7f
21647: **
21648: ** SLOT_4_2_0   A mask for  (0x7f<<28) | SLOT_2_0
21649: */
21650: #define SLOT_2_0     0x001fc07f
21651: #define SLOT_4_2_0   0xf01fc07f
21652: 
21653: 
21654: /*
21655: ** Read a 64-bit variable-length integer from memory starting at p[0].
21656: ** Return the number of bytes read.  The value is stored in *v.
21657: */
21658: SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
21659:   u32 a,b,s;
21660: 
21661:   a = *p;
21662:   /* a: p0 (unmasked) */
21663:   if (!(a&0x80))
21664:   {
21665:     *v = a;
21666:     return 1;
21667:   }
21668: 
21669:   p++;
21670:   b = *p;
21671:   /* b: p1 (unmasked) */
21672:   if (!(b&0x80))
21673:   {
21674:     a &= 0x7f;
21675:     a = a<<7;
21676:     a |= b;
21677:     *v = a;
21678:     return 2;
21679:   }
21680: 
21681:   /* Verify that constants are precomputed correctly */
21682:   assert( SLOT_2_0 == ((0x7f<<14) | (0x7f)) );
21683:   assert( SLOT_4_2_0 == ((0xfU<<28) | (0x7f<<14) | (0x7f)) );
21684: 
21685:   p++;
21686:   a = a<<14;
21687:   a |= *p;
21688:   /* a: p0<<14 | p2 (unmasked) */
21689:   if (!(a&0x80))
21690:   {
21691:     a &= SLOT_2_0;
21692:     b &= 0x7f;
21693:     b = b<<7;
21694:     a |= b;
21695:     *v = a;
21696:     return 3;
21697:   }
21698: 
21699:   /* CSE1 from below */
21700:   a &= SLOT_2_0;
21701:   p++;
21702:   b = b<<14;
21703:   b |= *p;
21704:   /* b: p1<<14 | p3 (unmasked) */
21705:   if (!(b&0x80))
21706:   {
21707:     b &= SLOT_2_0;
21708:     /* moved CSE1 up */
21709:     /* a &= (0x7f<<14)|(0x7f); */
21710:     a = a<<7;
21711:     a |= b;
21712:     *v = a;
21713:     return 4;
21714:   }
21715: 
21716:   /* a: p0<<14 | p2 (masked) */
21717:   /* b: p1<<14 | p3 (unmasked) */
21718:   /* 1:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
21719:   /* moved CSE1 up */
21720:   /* a &= (0x7f<<14)|(0x7f); */
21721:   b &= SLOT_2_0;
21722:   s = a;
21723:   /* s: p0<<14 | p2 (masked) */
21724: 
21725:   p++;
21726:   a = a<<14;
21727:   a |= *p;
21728:   /* a: p0<<28 | p2<<14 | p4 (unmasked) */
21729:   if (!(a&0x80))
21730:   {
21731:     /* we can skip these cause they were (effectively) done above in calc'ing s */
21732:     /* a &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
21733:     /* b &= (0x7f<<14)|(0x7f); */
21734:     b = b<<7;
21735:     a |= b;
21736:     s = s>>18;
21737:     *v = ((u64)s)<<32 | a;
21738:     return 5;
21739:   }
21740: 
21741:   /* 2:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
21742:   s = s<<7;
21743:   s |= b;
21744:   /* s: p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
21745: 
21746:   p++;
21747:   b = b<<14;
21748:   b |= *p;
21749:   /* b: p1<<28 | p3<<14 | p5 (unmasked) */
21750:   if (!(b&0x80))
21751:   {
21752:     /* we can skip this cause it was (effectively) done above in calc'ing s */
21753:     /* b &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
21754:     a &= SLOT_2_0;
21755:     a = a<<7;
21756:     a |= b;
21757:     s = s>>18;
21758:     *v = ((u64)s)<<32 | a;
21759:     return 6;
21760:   }
21761: 
21762:   p++;
21763:   a = a<<14;
21764:   a |= *p;
21765:   /* a: p2<<28 | p4<<14 | p6 (unmasked) */
21766:   if (!(a&0x80))
21767:   {
21768:     a &= SLOT_4_2_0;
21769:     b &= SLOT_2_0;
21770:     b = b<<7;
21771:     a |= b;
21772:     s = s>>11;
21773:     *v = ((u64)s)<<32 | a;
21774:     return 7;
21775:   }
21776: 
21777:   /* CSE2 from below */
21778:   a &= SLOT_2_0;
21779:   p++;
21780:   b = b<<14;
21781:   b |= *p;
21782:   /* b: p3<<28 | p5<<14 | p7 (unmasked) */
21783:   if (!(b&0x80))
21784:   {
21785:     b &= SLOT_4_2_0;
21786:     /* moved CSE2 up */
21787:     /* a &= (0x7f<<14)|(0x7f); */
21788:     a = a<<7;
21789:     a |= b;
21790:     s = s>>4;
21791:     *v = ((u64)s)<<32 | a;
21792:     return 8;
21793:   }
21794: 
21795:   p++;
21796:   a = a<<15;
21797:   a |= *p;
21798:   /* a: p4<<29 | p6<<15 | p8 (unmasked) */
21799: 
21800:   /* moved CSE2 up */
21801:   /* a &= (0x7f<<29)|(0x7f<<15)|(0xff); */
21802:   b &= SLOT_2_0;
21803:   b = b<<8;
21804:   a |= b;
21805: 
21806:   s = s<<4;
21807:   b = p[-4];
21808:   b &= 0x7f;
21809:   b = b>>3;
21810:   s |= b;
21811: 
21812:   *v = ((u64)s)<<32 | a;
21813: 
21814:   return 9;
21815: }
21816: 
21817: /*
21818: ** Read a 32-bit variable-length integer from memory starting at p[0].
21819: ** Return the number of bytes read.  The value is stored in *v.
21820: **
21821: ** If the varint stored in p[0] is larger than can fit in a 32-bit unsigned
21822: ** integer, then set *v to 0xffffffff.
21823: **
21824: ** A MACRO version, getVarint32, is provided which inlines the 
21825: ** single-byte case.  All code should use the MACRO version as 
21826: ** this function assumes the single-byte case has already been handled.
21827: */
21828: SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){
21829:   u32 a,b;
21830: 
21831:   /* The 1-byte case.  Overwhelmingly the most common.  Handled inline
21832:   ** by the getVarin32() macro */
21833:   a = *p;
21834:   /* a: p0 (unmasked) */
21835: #ifndef getVarint32
21836:   if (!(a&0x80))
21837:   {
21838:     /* Values between 0 and 127 */
21839:     *v = a;
21840:     return 1;
21841:   }
21842: #endif
21843: 
21844:   /* The 2-byte case */
21845:   p++;
21846:   b = *p;
21847:   /* b: p1 (unmasked) */
21848:   if (!(b&0x80))
21849:   {
21850:     /* Values between 128 and 16383 */
21851:     a &= 0x7f;
21852:     a = a<<7;
21853:     *v = a | b;
21854:     return 2;
21855:   }
21856: 
21857:   /* The 3-byte case */
21858:   p++;
21859:   a = a<<14;
21860:   a |= *p;
21861:   /* a: p0<<14 | p2 (unmasked) */
21862:   if (!(a&0x80))
21863:   {
21864:     /* Values between 16384 and 2097151 */
21865:     a &= (0x7f<<14)|(0x7f);
21866:     b &= 0x7f;
21867:     b = b<<7;
21868:     *v = a | b;
21869:     return 3;
21870:   }
21871: 
21872:   /* A 32-bit varint is used to store size information in btrees.
21873:   ** Objects are rarely larger than 2MiB limit of a 3-byte varint.
21874:   ** A 3-byte varint is sufficient, for example, to record the size
21875:   ** of a 1048569-byte BLOB or string.
21876:   **
21877:   ** We only unroll the first 1-, 2-, and 3- byte cases.  The very
21878:   ** rare larger cases can be handled by the slower 64-bit varint
21879:   ** routine.
21880:   */
21881: #if 1
21882:   {
21883:     u64 v64;
21884:     u8 n;
21885: 
21886:     p -= 2;
21887:     n = sqlite3GetVarint(p, &v64);
21888:     assert( n>3 && n<=9 );
21889:     if( (v64 & SQLITE_MAX_U32)!=v64 ){
21890:       *v = 0xffffffff;
21891:     }else{
21892:       *v = (u32)v64;
21893:     }
21894:     return n;
21895:   }
21896: 
21897: #else
21898:   /* For following code (kept for historical record only) shows an
21899:   ** unrolling for the 3- and 4-byte varint cases.  This code is
21900:   ** slightly faster, but it is also larger and much harder to test.
21901:   */
21902:   p++;
21903:   b = b<<14;
21904:   b |= *p;
21905:   /* b: p1<<14 | p3 (unmasked) */
21906:   if (!(b&0x80))
21907:   {
21908:     /* Values between 2097152 and 268435455 */
21909:     b &= (0x7f<<14)|(0x7f);
21910:     a &= (0x7f<<14)|(0x7f);
21911:     a = a<<7;
21912:     *v = a | b;
21913:     return 4;
21914:   }
21915: 
21916:   p++;
21917:   a = a<<14;
21918:   a |= *p;
21919:   /* a: p0<<28 | p2<<14 | p4 (unmasked) */
21920:   if (!(a&0x80))
21921:   {
21922:     /* Values  between 268435456 and 34359738367 */
21923:     a &= SLOT_4_2_0;
21924:     b &= SLOT_4_2_0;
21925:     b = b<<7;
21926:     *v = a | b;
21927:     return 5;
21928:   }
21929: 
21930:   /* We can only reach this point when reading a corrupt database
21931:   ** file.  In that case we are not in any hurry.  Use the (relatively
21932:   ** slow) general-purpose sqlite3GetVarint() routine to extract the
21933:   ** value. */
21934:   {
21935:     u64 v64;
21936:     u8 n;
21937: 
21938:     p -= 4;
21939:     n = sqlite3GetVarint(p, &v64);
21940:     assert( n>5 && n<=9 );
21941:     *v = (u32)v64;
21942:     return n;
21943:   }
21944: #endif
21945: }
21946: 
21947: /*
21948: ** Return the number of bytes that will be needed to store the given
21949: ** 64-bit integer.
21950: */
21951: SQLITE_PRIVATE int sqlite3VarintLen(u64 v){
21952:   int i = 0;
21953:   do{
21954:     i++;
21955:     v >>= 7;
21956:   }while( v!=0 && ALWAYS(i<9) );
21957:   return i;
21958: }
21959: 
21960: 
21961: /*
21962: ** Read or write a four-byte big-endian integer value.
21963: */
21964: SQLITE_PRIVATE u32 sqlite3Get4byte(const u8 *p){
21965:   return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
21966: }
21967: SQLITE_PRIVATE void sqlite3Put4byte(unsigned char *p, u32 v){
21968:   p[0] = (u8)(v>>24);
21969:   p[1] = (u8)(v>>16);
21970:   p[2] = (u8)(v>>8);
21971:   p[3] = (u8)v;
21972: }
21973: 
21974: 
21975: 
21976: /*
21977: ** Translate a single byte of Hex into an integer.
21978: ** This routine only works if h really is a valid hexadecimal
21979: ** character:  0..9a..fA..F
21980: */
21981: SQLITE_PRIVATE u8 sqlite3HexToInt(int h){
21982:   assert( (h>='0' && h<='9') ||  (h>='a' && h<='f') ||  (h>='A' && h<='F') );
21983: #ifdef SQLITE_ASCII
21984:   h += 9*(1&(h>>6));
21985: #endif
21986: #ifdef SQLITE_EBCDIC
21987:   h += 9*(1&~(h>>4));
21988: #endif
21989:   return (u8)(h & 0xf);
21990: }
21991: 
21992: #if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC)
21993: /*
21994: ** Convert a BLOB literal of the form "x'hhhhhh'" into its binary
21995: ** value.  Return a pointer to its binary value.  Space to hold the
21996: ** binary value has been obtained from malloc and must be freed by
21997: ** the calling routine.
21998: */
21999: SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){
22000:   char *zBlob;
22001:   int i;
22002: 
22003:   zBlob = (char *)sqlite3DbMallocRaw(db, n/2 + 1);
22004:   n--;
22005:   if( zBlob ){
22006:     for(i=0; i<n; i+=2){
22007:       zBlob[i/2] = (sqlite3HexToInt(z[i])<<4) | sqlite3HexToInt(z[i+1]);
22008:     }
22009:     zBlob[i/2] = 0;
22010:   }
22011:   return zBlob;
22012: }
22013: #endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */
22014: 
22015: /*
22016: ** Log an error that is an API call on a connection pointer that should
22017: ** not have been used.  The "type" of connection pointer is given as the
22018: ** argument.  The zType is a word like "NULL" or "closed" or "invalid".
22019: */
22020: static void logBadConnection(const char *zType){
22021:   sqlite3_log(SQLITE_MISUSE, 
22022:      "API call with %s database connection pointer",
22023:      zType
22024:   );
22025: }
22026: 
22027: /*
22028: ** Check to make sure we have a valid db pointer.  This test is not
22029: ** foolproof but it does provide some measure of protection against
22030: ** misuse of the interface such as passing in db pointers that are
22031: ** NULL or which have been previously closed.  If this routine returns
22032: ** 1 it means that the db pointer is valid and 0 if it should not be
22033: ** dereferenced for any reason.  The calling function should invoke
22034: ** SQLITE_MISUSE immediately.
22035: **
22036: ** sqlite3SafetyCheckOk() requires that the db pointer be valid for
22037: ** use.  sqlite3SafetyCheckSickOrOk() allows a db pointer that failed to
22038: ** open properly and is not fit for general use but which can be
22039: ** used as an argument to sqlite3_errmsg() or sqlite3_close().
22040: */
22041: SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3 *db){
22042:   u32 magic;
22043:   if( db==0 ){
22044:     logBadConnection("NULL");
22045:     return 0;
22046:   }
22047:   magic = db->magic;
22048:   if( magic!=SQLITE_MAGIC_OPEN ){
22049:     if( sqlite3SafetyCheckSickOrOk(db) ){
22050:       testcase( sqlite3GlobalConfig.xLog!=0 );
22051:       logBadConnection("unopened");
22052:     }
22053:     return 0;
22054:   }else{
22055:     return 1;
22056:   }
22057: }
22058: SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
22059:   u32 magic;
22060:   magic = db->magic;
22061:   if( magic!=SQLITE_MAGIC_SICK &&
22062:       magic!=SQLITE_MAGIC_OPEN &&
22063:       magic!=SQLITE_MAGIC_BUSY ){
22064:     testcase( sqlite3GlobalConfig.xLog!=0 );
22065:     logBadConnection("invalid");
22066:     return 0;
22067:   }else{
22068:     return 1;
22069:   }
22070: }
22071: 
22072: /*
22073: ** Attempt to add, substract, or multiply the 64-bit signed value iB against
22074: ** the other 64-bit signed integer at *pA and store the result in *pA.
22075: ** Return 0 on success.  Or if the operation would have resulted in an
22076: ** overflow, leave *pA unchanged and return 1.
22077: */
22078: SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){
22079:   i64 iA = *pA;
22080:   testcase( iA==0 ); testcase( iA==1 );
22081:   testcase( iB==-1 ); testcase( iB==0 );
22082:   if( iB>=0 ){
22083:     testcase( iA>0 && LARGEST_INT64 - iA == iB );
22084:     testcase( iA>0 && LARGEST_INT64 - iA == iB - 1 );
22085:     if( iA>0 && LARGEST_INT64 - iA < iB ) return 1;
22086:     *pA += iB;
22087:   }else{
22088:     testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 1 );
22089:     testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 2 );
22090:     if( iA<0 && -(iA + LARGEST_INT64) > iB + 1 ) return 1;
22091:     *pA += iB;
22092:   }
22093:   return 0; 
22094: }
22095: SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){
22096:   testcase( iB==SMALLEST_INT64+1 );
22097:   if( iB==SMALLEST_INT64 ){
22098:     testcase( (*pA)==(-1) ); testcase( (*pA)==0 );
22099:     if( (*pA)>=0 ) return 1;
22100:     *pA -= iB;
22101:     return 0;
22102:   }else{
22103:     return sqlite3AddInt64(pA, -iB);
22104:   }
22105: }
22106: #define TWOPOWER32 (((i64)1)<<32)
22107: #define TWOPOWER31 (((i64)1)<<31)
22108: SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){
22109:   i64 iA = *pA;
22110:   i64 iA1, iA0, iB1, iB0, r;
22111: 
22112:   iA1 = iA/TWOPOWER32;
22113:   iA0 = iA % TWOPOWER32;
22114:   iB1 = iB/TWOPOWER32;
22115:   iB0 = iB % TWOPOWER32;
22116:   if( iA1*iB1 != 0 ) return 1;
22117:   assert( iA1*iB0==0 || iA0*iB1==0 );
22118:   r = iA1*iB0 + iA0*iB1;
22119:   testcase( r==(-TWOPOWER31)-1 );
22120:   testcase( r==(-TWOPOWER31) );
22121:   testcase( r==TWOPOWER31 );
22122:   testcase( r==TWOPOWER31-1 );
22123:   if( r<(-TWOPOWER31) || r>=TWOPOWER31 ) return 1;
22124:   r *= TWOPOWER32;
22125:   if( sqlite3AddInt64(&r, iA0*iB0) ) return 1;
22126:   *pA = r;
22127:   return 0;
22128: }
22129: 
22130: /*
22131: ** Compute the absolute value of a 32-bit signed integer, of possible.  Or 
22132: ** if the integer has a value of -2147483648, return +2147483647
22133: */
22134: SQLITE_PRIVATE int sqlite3AbsInt32(int x){
22135:   if( x>=0 ) return x;
22136:   if( x==(int)0x80000000 ) return 0x7fffffff;
22137:   return -x;
22138: }
22139: 
22140: #ifdef SQLITE_ENABLE_8_3_NAMES
22141: /*
22142: ** If SQLITE_ENABLE_8_3_NAMES is set at compile-time and if the database
22143: ** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and
22144: ** if filename in z[] has a suffix (a.k.a. "extension") that is longer than
22145: ** three characters, then shorten the suffix on z[] to be the last three
22146: ** characters of the original suffix.
22147: **
22148: ** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always
22149: ** do the suffix shortening regardless of URI parameter.
22150: **
22151: ** Examples:
22152: **
22153: **     test.db-journal    =>   test.nal
22154: **     test.db-wal        =>   test.wal
22155: **     test.db-shm        =>   test.shm
22156: **     test.db-mj7f3319fa =>   test.9fa
22157: */
22158: SQLITE_PRIVATE void sqlite3FileSuffix3(const char *zBaseFilename, char *z){
22159: #if SQLITE_ENABLE_8_3_NAMES<2
22160:   if( sqlite3_uri_boolean(zBaseFilename, "8_3_names", 0) )
22161: #endif
22162:   {
22163:     int i, sz;
22164:     sz = sqlite3Strlen30(z);
22165:     for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){}
22166:     if( z[i]=='.' && ALWAYS(sz>i+4) ) memmove(&z[i+1], &z[sz-3], 4);
22167:   }
22168: }
22169: #endif
22170: 
22171: /************** End of util.c ************************************************/
22172: /************** Begin file hash.c ********************************************/
22173: /*
22174: ** 2001 September 22
22175: **
22176: ** The author disclaims copyright to this source code.  In place of
22177: ** a legal notice, here is a blessing:
22178: **
22179: **    May you do good and not evil.
22180: **    May you find forgiveness for yourself and forgive others.
22181: **    May you share freely, never taking more than you give.
22182: **
22183: *************************************************************************
22184: ** This is the implementation of generic hash-tables
22185: ** used in SQLite.
22186: */
22187: /* #include <assert.h> */
22188: 
22189: /* Turn bulk memory into a hash table object by initializing the
22190: ** fields of the Hash structure.
22191: **
22192: ** "pNew" is a pointer to the hash table that is to be initialized.
22193: */
22194: SQLITE_PRIVATE void sqlite3HashInit(Hash *pNew){
22195:   assert( pNew!=0 );
22196:   pNew->first = 0;
22197:   pNew->count = 0;
22198:   pNew->htsize = 0;
22199:   pNew->ht = 0;
22200: }
22201: 
22202: /* Remove all entries from a hash table.  Reclaim all memory.
22203: ** Call this routine to delete a hash table or to reset a hash table
22204: ** to the empty state.
22205: */
22206: SQLITE_PRIVATE void sqlite3HashClear(Hash *pH){
22207:   HashElem *elem;         /* For looping over all elements of the table */
22208: 
22209:   assert( pH!=0 );
22210:   elem = pH->first;
22211:   pH->first = 0;
22212:   sqlite3_free(pH->ht);
22213:   pH->ht = 0;
22214:   pH->htsize = 0;
22215:   while( elem ){
22216:     HashElem *next_elem = elem->next;
22217:     sqlite3_free(elem);
22218:     elem = next_elem;
22219:   }
22220:   pH->count = 0;
22221: }
22222: 
22223: /*
22224: ** The hashing function.
22225: */
22226: static unsigned int strHash(const char *z, int nKey){
22227:   int h = 0;
22228:   assert( nKey>=0 );
22229:   while( nKey > 0  ){
22230:     h = (h<<3) ^ h ^ sqlite3UpperToLower[(unsigned char)*z++];
22231:     nKey--;
22232:   }
22233:   return h;
22234: }
22235: 
22236: 
22237: /* Link pNew element into the hash table pH.  If pEntry!=0 then also
22238: ** insert pNew into the pEntry hash bucket.
22239: */
22240: static void insertElement(
22241:   Hash *pH,              /* The complete hash table */
22242:   struct _ht *pEntry,    /* The entry into which pNew is inserted */
22243:   HashElem *pNew         /* The element to be inserted */
22244: ){
22245:   HashElem *pHead;       /* First element already in pEntry */
22246:   if( pEntry ){
22247:     pHead = pEntry->count ? pEntry->chain : 0;
22248:     pEntry->count++;
22249:     pEntry->chain = pNew;
22250:   }else{
22251:     pHead = 0;
22252:   }
22253:   if( pHead ){
22254:     pNew->next = pHead;
22255:     pNew->prev = pHead->prev;
22256:     if( pHead->prev ){ pHead->prev->next = pNew; }
22257:     else             { pH->first = pNew; }
22258:     pHead->prev = pNew;
22259:   }else{
22260:     pNew->next = pH->first;
22261:     if( pH->first ){ pH->first->prev = pNew; }
22262:     pNew->prev = 0;
22263:     pH->first = pNew;
22264:   }
22265: }
22266: 
22267: 
22268: /* Resize the hash table so that it cantains "new_size" buckets.
22269: **
22270: ** The hash table might fail to resize if sqlite3_malloc() fails or
22271: ** if the new size is the same as the prior size.
22272: ** Return TRUE if the resize occurs and false if not.
22273: */
22274: static int rehash(Hash *pH, unsigned int new_size){
22275:   struct _ht *new_ht;            /* The new hash table */
22276:   HashElem *elem, *next_elem;    /* For looping over existing elements */
22277: 
22278: #if SQLITE_MALLOC_SOFT_LIMIT>0
22279:   if( new_size*sizeof(struct _ht)>SQLITE_MALLOC_SOFT_LIMIT ){
22280:     new_size = SQLITE_MALLOC_SOFT_LIMIT/sizeof(struct _ht);
22281:   }
22282:   if( new_size==pH->htsize ) return 0;
22283: #endif
22284: 
22285:   /* The inability to allocates space for a larger hash table is
22286:   ** a performance hit but it is not a fatal error.  So mark the
22287:   ** allocation as a benign.
22288:   */
22289:   sqlite3BeginBenignMalloc();
22290:   new_ht = (struct _ht *)sqlite3Malloc( new_size*sizeof(struct _ht) );
22291:   sqlite3EndBenignMalloc();
22292: 
22293:   if( new_ht==0 ) return 0;
22294:   sqlite3_free(pH->ht);
22295:   pH->ht = new_ht;
22296:   pH->htsize = new_size = sqlite3MallocSize(new_ht)/sizeof(struct _ht);
22297:   memset(new_ht, 0, new_size*sizeof(struct _ht));
22298:   for(elem=pH->first, pH->first=0; elem; elem = next_elem){
22299:     unsigned int h = strHash(elem->pKey, elem->nKey) % new_size;
22300:     next_elem = elem->next;
22301:     insertElement(pH, &new_ht[h], elem);
22302:   }
22303:   return 1;
22304: }
22305: 
22306: /* This function (for internal use only) locates an element in an
22307: ** hash table that matches the given key.  The hash for this key has
22308: ** already been computed and is passed as the 4th parameter.
22309: */
22310: static HashElem *findElementGivenHash(
22311:   const Hash *pH,     /* The pH to be searched */
22312:   const char *pKey,   /* The key we are searching for */
22313:   int nKey,           /* Bytes in key (not counting zero terminator) */
22314:   unsigned int h      /* The hash for this key. */
22315: ){
22316:   HashElem *elem;                /* Used to loop thru the element list */
22317:   int count;                     /* Number of elements left to test */
22318: 
22319:   if( pH->ht ){
22320:     struct _ht *pEntry = &pH->ht[h];
22321:     elem = pEntry->chain;
22322:     count = pEntry->count;
22323:   }else{
22324:     elem = pH->first;
22325:     count = pH->count;
22326:   }
22327:   while( count-- && ALWAYS(elem) ){
22328:     if( elem->nKey==nKey && sqlite3StrNICmp(elem->pKey,pKey,nKey)==0 ){ 
22329:       return elem;
22330:     }
22331:     elem = elem->next;
22332:   }
22333:   return 0;
22334: }
22335: 
22336: /* Remove a single entry from the hash table given a pointer to that
22337: ** element and a hash on the element's key.
22338: */
22339: static void removeElementGivenHash(
22340:   Hash *pH,         /* The pH containing "elem" */
22341:   HashElem* elem,   /* The element to be removed from the pH */
22342:   unsigned int h    /* Hash value for the element */
22343: ){
22344:   struct _ht *pEntry;
22345:   if( elem->prev ){
22346:     elem->prev->next = elem->next; 
22347:   }else{
22348:     pH->first = elem->next;
22349:   }
22350:   if( elem->next ){
22351:     elem->next->prev = elem->prev;
22352:   }
22353:   if( pH->ht ){
22354:     pEntry = &pH->ht[h];
22355:     if( pEntry->chain==elem ){
22356:       pEntry->chain = elem->next;
22357:     }
22358:     pEntry->count--;
22359:     assert( pEntry->count>=0 );
22360:   }
22361:   sqlite3_free( elem );
22362:   pH->count--;
22363:   if( pH->count<=0 ){
22364:     assert( pH->first==0 );
22365:     assert( pH->count==0 );
22366:     sqlite3HashClear(pH);
22367:   }
22368: }
22369: 
22370: /* Attempt to locate an element of the hash table pH with a key
22371: ** that matches pKey,nKey.  Return the data for this element if it is
22372: ** found, or NULL if there is no match.
22373: */
22374: SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey, int nKey){
22375:   HashElem *elem;    /* The element that matches key */
22376:   unsigned int h;    /* A hash on key */
22377: 
22378:   assert( pH!=0 );
22379:   assert( pKey!=0 );
22380:   assert( nKey>=0 );
22381:   if( pH->ht ){
22382:     h = strHash(pKey, nKey) % pH->htsize;
22383:   }else{
22384:     h = 0;
22385:   }
22386:   elem = findElementGivenHash(pH, pKey, nKey, h);
22387:   return elem ? elem->data : 0;
22388: }
22389: 
22390: /* Insert an element into the hash table pH.  The key is pKey,nKey
22391: ** and the data is "data".
22392: **
22393: ** If no element exists with a matching key, then a new
22394: ** element is created and NULL is returned.
22395: **
22396: ** If another element already exists with the same key, then the
22397: ** new data replaces the old data and the old data is returned.
22398: ** The key is not copied in this instance.  If a malloc fails, then
22399: ** the new data is returned and the hash table is unchanged.
22400: **
22401: ** If the "data" parameter to this function is NULL, then the
22402: ** element corresponding to "key" is removed from the hash table.
22403: */
22404: SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, int nKey, void *data){
22405:   unsigned int h;       /* the hash of the key modulo hash table size */
22406:   HashElem *elem;       /* Used to loop thru the element list */
22407:   HashElem *new_elem;   /* New element added to the pH */
22408: 
22409:   assert( pH!=0 );
22410:   assert( pKey!=0 );
22411:   assert( nKey>=0 );
22412:   if( pH->htsize ){
22413:     h = strHash(pKey, nKey) % pH->htsize;
22414:   }else{
22415:     h = 0;
22416:   }
22417:   elem = findElementGivenHash(pH,pKey,nKey,h);
22418:   if( elem ){
22419:     void *old_data = elem->data;
22420:     if( data==0 ){
22421:       removeElementGivenHash(pH,elem,h);
22422:     }else{
22423:       elem->data = data;
22424:       elem->pKey = pKey;
22425:       assert(nKey==elem->nKey);
22426:     }
22427:     return old_data;
22428:   }
22429:   if( data==0 ) return 0;
22430:   new_elem = (HashElem*)sqlite3Malloc( sizeof(HashElem) );
22431:   if( new_elem==0 ) return data;
22432:   new_elem->pKey = pKey;
22433:   new_elem->nKey = nKey;
22434:   new_elem->data = data;
22435:   pH->count++;
22436:   if( pH->count>=10 && pH->count > 2*pH->htsize ){
22437:     if( rehash(pH, pH->count*2) ){
22438:       assert( pH->htsize>0 );
22439:       h = strHash(pKey, nKey) % pH->htsize;
22440:     }
22441:   }
22442:   if( pH->ht ){
22443:     insertElement(pH, &pH->ht[h], new_elem);
22444:   }else{
22445:     insertElement(pH, 0, new_elem);
22446:   }
22447:   return 0;
22448: }
22449: 
22450: /************** End of hash.c ************************************************/
22451: /************** Begin file opcodes.c *****************************************/
22452: /* Automatically generated.  Do not edit */
22453: /* See the mkopcodec.awk script for details. */
22454: #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
22455: SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
22456:  static const char *const azName[] = { "?",
22457:      /*   1 */ "Goto",
22458:      /*   2 */ "Gosub",
22459:      /*   3 */ "Return",
22460:      /*   4 */ "Yield",
22461:      /*   5 */ "HaltIfNull",
22462:      /*   6 */ "Halt",
22463:      /*   7 */ "Integer",
22464:      /*   8 */ "Int64",
22465:      /*   9 */ "String",
22466:      /*  10 */ "Null",
22467:      /*  11 */ "Blob",
22468:      /*  12 */ "Variable",
22469:      /*  13 */ "Move",
22470:      /*  14 */ "Copy",
22471:      /*  15 */ "SCopy",
22472:      /*  16 */ "ResultRow",
22473:      /*  17 */ "CollSeq",
22474:      /*  18 */ "Function",
22475:      /*  19 */ "Not",
22476:      /*  20 */ "AddImm",
22477:      /*  21 */ "MustBeInt",
22478:      /*  22 */ "RealAffinity",
22479:      /*  23 */ "Permutation",
22480:      /*  24 */ "Compare",
22481:      /*  25 */ "Jump",
22482:      /*  26 */ "Once",
22483:      /*  27 */ "If",
22484:      /*  28 */ "IfNot",
22485:      /*  29 */ "Column",
22486:      /*  30 */ "Affinity",
22487:      /*  31 */ "MakeRecord",
22488:      /*  32 */ "Count",
22489:      /*  33 */ "Savepoint",
22490:      /*  34 */ "AutoCommit",
22491:      /*  35 */ "Transaction",
22492:      /*  36 */ "ReadCookie",
22493:      /*  37 */ "SetCookie",
22494:      /*  38 */ "VerifyCookie",
22495:      /*  39 */ "OpenRead",
22496:      /*  40 */ "OpenWrite",
22497:      /*  41 */ "OpenAutoindex",
22498:      /*  42 */ "OpenEphemeral",
22499:      /*  43 */ "SorterOpen",
22500:      /*  44 */ "OpenPseudo",
22501:      /*  45 */ "Close",
22502:      /*  46 */ "SeekLt",
22503:      /*  47 */ "SeekLe",
22504:      /*  48 */ "SeekGe",
22505:      /*  49 */ "SeekGt",
22506:      /*  50 */ "Seek",
22507:      /*  51 */ "NotFound",
22508:      /*  52 */ "Found",
22509:      /*  53 */ "IsUnique",
22510:      /*  54 */ "NotExists",
22511:      /*  55 */ "Sequence",
22512:      /*  56 */ "NewRowid",
22513:      /*  57 */ "Insert",
22514:      /*  58 */ "InsertInt",
22515:      /*  59 */ "Delete",
22516:      /*  60 */ "ResetCount",
22517:      /*  61 */ "SorterCompare",
22518:      /*  62 */ "SorterData",
22519:      /*  63 */ "RowKey",
22520:      /*  64 */ "RowData",
22521:      /*  65 */ "Rowid",
22522:      /*  66 */ "NullRow",
22523:      /*  67 */ "Last",
22524:      /*  68 */ "Or",
22525:      /*  69 */ "And",
22526:      /*  70 */ "SorterSort",
22527:      /*  71 */ "Sort",
22528:      /*  72 */ "Rewind",
22529:      /*  73 */ "IsNull",
22530:      /*  74 */ "NotNull",
22531:      /*  75 */ "Ne",
22532:      /*  76 */ "Eq",
22533:      /*  77 */ "Gt",
22534:      /*  78 */ "Le",
22535:      /*  79 */ "Lt",
22536:      /*  80 */ "Ge",
22537:      /*  81 */ "SorterNext",
22538:      /*  82 */ "BitAnd",
22539:      /*  83 */ "BitOr",
22540:      /*  84 */ "ShiftLeft",
22541:      /*  85 */ "ShiftRight",
22542:      /*  86 */ "Add",
22543:      /*  87 */ "Subtract",
22544:      /*  88 */ "Multiply",
22545:      /*  89 */ "Divide",
22546:      /*  90 */ "Remainder",
22547:      /*  91 */ "Concat",
22548:      /*  92 */ "Prev",
22549:      /*  93 */ "BitNot",
22550:      /*  94 */ "String8",
22551:      /*  95 */ "Next",
22552:      /*  96 */ "SorterInsert",
22553:      /*  97 */ "IdxInsert",
22554:      /*  98 */ "IdxDelete",
22555:      /*  99 */ "IdxRowid",
22556:      /* 100 */ "IdxLT",
22557:      /* 101 */ "IdxGE",
22558:      /* 102 */ "Destroy",
22559:      /* 103 */ "Clear",
22560:      /* 104 */ "CreateIndex",
22561:      /* 105 */ "CreateTable",
22562:      /* 106 */ "ParseSchema",
22563:      /* 107 */ "LoadAnalysis",
22564:      /* 108 */ "DropTable",
22565:      /* 109 */ "DropIndex",
22566:      /* 110 */ "DropTrigger",
22567:      /* 111 */ "IntegrityCk",
22568:      /* 112 */ "RowSetAdd",
22569:      /* 113 */ "RowSetRead",
22570:      /* 114 */ "RowSetTest",
22571:      /* 115 */ "Program",
22572:      /* 116 */ "Param",
22573:      /* 117 */ "FkCounter",
22574:      /* 118 */ "FkIfZero",
22575:      /* 119 */ "MemMax",
22576:      /* 120 */ "IfPos",
22577:      /* 121 */ "IfNeg",
22578:      /* 122 */ "IfZero",
22579:      /* 123 */ "AggStep",
22580:      /* 124 */ "AggFinal",
22581:      /* 125 */ "Checkpoint",
22582:      /* 126 */ "JournalMode",
22583:      /* 127 */ "Vacuum",
22584:      /* 128 */ "IncrVacuum",
22585:      /* 129 */ "Expire",
22586:      /* 130 */ "Real",
22587:      /* 131 */ "TableLock",
22588:      /* 132 */ "VBegin",
22589:      /* 133 */ "VCreate",
22590:      /* 134 */ "VDestroy",
22591:      /* 135 */ "VOpen",
22592:      /* 136 */ "VFilter",
22593:      /* 137 */ "VColumn",
22594:      /* 138 */ "VNext",
22595:      /* 139 */ "VRename",
22596:      /* 140 */ "VUpdate",
22597:      /* 141 */ "ToText",
22598:      /* 142 */ "ToBlob",
22599:      /* 143 */ "ToNumeric",
22600:      /* 144 */ "ToInt",
22601:      /* 145 */ "ToReal",
22602:      /* 146 */ "Pagecount",
22603:      /* 147 */ "MaxPgcnt",
22604:      /* 148 */ "Trace",
22605:      /* 149 */ "Noop",
22606:      /* 150 */ "Explain",
22607:   };
22608:   return azName[i];
22609: }
22610: #endif
22611: 
22612: /************** End of opcodes.c *********************************************/
22613: /************** Begin file os_os2.c ******************************************/
22614: /*
22615: ** 2006 Feb 14
22616: **
22617: ** The author disclaims copyright to this source code.  In place of
22618: ** a legal notice, here is a blessing:
22619: **
22620: **    May you do good and not evil.
22621: **    May you find forgiveness for yourself and forgive others.
22622: **    May you share freely, never taking more than you give.
22623: **
22624: ******************************************************************************
22625: **
22626: ** This file contains code that is specific to OS/2.
22627: */
22628: 
22629: 
22630: #if SQLITE_OS_OS2
22631: 
22632: /*
22633: ** A Note About Memory Allocation:
22634: **
22635: ** This driver uses malloc()/free() directly rather than going through
22636: ** the SQLite-wrappers sqlite3_malloc()/sqlite3_free().  Those wrappers
22637: ** are designed for use on embedded systems where memory is scarce and
22638: ** malloc failures happen frequently.  OS/2 does not typically run on
22639: ** embedded systems, and when it does the developers normally have bigger
22640: ** problems to worry about than running out of memory.  So there is not
22641: ** a compelling need to use the wrappers.
22642: **
22643: ** But there is a good reason to not use the wrappers.  If we use the
22644: ** wrappers then we will get simulated malloc() failures within this
22645: ** driver.  And that causes all kinds of problems for our tests.  We
22646: ** could enhance SQLite to deal with simulated malloc failures within
22647: ** the OS driver, but the code to deal with those failure would not
22648: ** be exercised on Linux (which does not need to malloc() in the driver)
22649: ** and so we would have difficulty writing coverage tests for that
22650: ** code.  Better to leave the code out, we think.
22651: **
22652: ** The point of this discussion is as follows:  When creating a new
22653: ** OS layer for an embedded system, if you use this file as an example,
22654: ** avoid the use of malloc()/free().  Those routines work ok on OS/2
22655: ** desktops but not so well in embedded systems.
22656: */
22657: 
22658: /*
22659: ** Macros used to determine whether or not to use threads.
22660: */
22661: #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE
22662: # define SQLITE_OS2_THREADS 1
22663: #endif
22664: 
22665: /*
22666: ** Include code that is common to all os_*.c files
22667: */
22668: /************** Include os_common.h in the middle of os_os2.c ****************/
22669: /************** Begin file os_common.h ***************************************/
22670: /*
22671: ** 2004 May 22
22672: **
22673: ** The author disclaims copyright to this source code.  In place of
22674: ** a legal notice, here is a blessing:
22675: **
22676: **    May you do good and not evil.
22677: **    May you find forgiveness for yourself and forgive others.
22678: **    May you share freely, never taking more than you give.
22679: **
22680: ******************************************************************************
22681: **
22682: ** This file contains macros and a little bit of code that is common to
22683: ** all of the platform-specific files (os_*.c) and is #included into those
22684: ** files.
22685: **
22686: ** This file should be #included by the os_*.c files only.  It is not a
22687: ** general purpose header file.
22688: */
22689: #ifndef _OS_COMMON_H_
22690: #define _OS_COMMON_H_
22691: 
22692: /*
22693: ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
22694: ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
22695: ** switch.  The following code should catch this problem at compile-time.
22696: */
22697: #ifdef MEMORY_DEBUG
22698: # error "The MEMORY_DEBUG macro is obsolete.  Use SQLITE_DEBUG instead."
22699: #endif
22700: 
22701: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
22702: # ifndef SQLITE_DEBUG_OS_TRACE
22703: #   define SQLITE_DEBUG_OS_TRACE 0
22704: # endif
22705:   int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
22706: # define OSTRACE(X)          if( sqlite3OSTrace ) sqlite3DebugPrintf X
22707: #else
22708: # define OSTRACE(X)
22709: #endif
22710: 
22711: /*
22712: ** Macros for performance tracing.  Normally turned off.  Only works
22713: ** on i486 hardware.
22714: */
22715: #ifdef SQLITE_PERFORMANCE_TRACE
22716: 
22717: /* 
22718: ** hwtime.h contains inline assembler code for implementing 
22719: ** high-performance timing routines.
22720: */
22721: /************** Include hwtime.h in the middle of os_common.h ****************/
22722: /************** Begin file hwtime.h ******************************************/
22723: /*
22724: ** 2008 May 27
22725: **
22726: ** The author disclaims copyright to this source code.  In place of
22727: ** a legal notice, here is a blessing:
22728: **
22729: **    May you do good and not evil.
22730: **    May you find forgiveness for yourself and forgive others.
22731: **    May you share freely, never taking more than you give.
22732: **
22733: ******************************************************************************
22734: **
22735: ** This file contains inline asm code for retrieving "high-performance"
22736: ** counters for x86 class CPUs.
22737: */
22738: #ifndef _HWTIME_H_
22739: #define _HWTIME_H_
22740: 
22741: /*
22742: ** The following routine only works on pentium-class (or newer) processors.
22743: ** It uses the RDTSC opcode to read the cycle count value out of the
22744: ** processor and returns that value.  This can be used for high-res
22745: ** profiling.
22746: */
22747: #if (defined(__GNUC__) || defined(_MSC_VER)) && \
22748:       (defined(i386) || defined(__i386__) || defined(_M_IX86))
22749: 
22750:   #if defined(__GNUC__)
22751: 
22752:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
22753:      unsigned int lo, hi;
22754:      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
22755:      return (sqlite_uint64)hi << 32 | lo;
22756:   }
22757: 
22758:   #elif defined(_MSC_VER)
22759: 
22760:   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
22761:      __asm {
22762:         rdtsc
22763:         ret       ; return value at EDX:EAX
22764:      }
22765:   }
22766: 
22767:   #endif
22768: 
22769: #elif (defined(__GNUC__) && defined(__x86_64__))
22770: 
22771:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
22772:       unsigned long val;
22773:       __asm__ __volatile__ ("rdtsc" : "=A" (val));
22774:       return val;
22775:   }
22776:  
22777: #elif (defined(__GNUC__) && defined(__ppc__))
22778: 
22779:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
22780:       unsigned long long retval;
22781:       unsigned long junk;
22782:       __asm__ __volatile__ ("\n\
22783:           1:      mftbu   %1\n\
22784:                   mftb    %L0\n\
22785:                   mftbu   %0\n\
22786:                   cmpw    %0,%1\n\
22787:                   bne     1b"
22788:                   : "=r" (retval), "=r" (junk));
22789:       return retval;
22790:   }
22791: 
22792: #else
22793: 
22794:   #error Need implementation of sqlite3Hwtime() for your platform.
22795: 
22796:   /*
22797:   ** To compile without implementing sqlite3Hwtime() for your platform,
22798:   ** you can remove the above #error and use the following
22799:   ** stub function.  You will lose timing support for many
22800:   ** of the debugging and testing utilities, but it should at
22801:   ** least compile and run.
22802:   */
22803: SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
22804: 
22805: #endif
22806: 
22807: #endif /* !defined(_HWTIME_H_) */
22808: 
22809: /************** End of hwtime.h **********************************************/
22810: /************** Continuing where we left off in os_common.h ******************/
22811: 
22812: static sqlite_uint64 g_start;
22813: static sqlite_uint64 g_elapsed;
22814: #define TIMER_START       g_start=sqlite3Hwtime()
22815: #define TIMER_END         g_elapsed=sqlite3Hwtime()-g_start
22816: #define TIMER_ELAPSED     g_elapsed
22817: #else
22818: #define TIMER_START
22819: #define TIMER_END
22820: #define TIMER_ELAPSED     ((sqlite_uint64)0)
22821: #endif
22822: 
22823: /*
22824: ** If we compile with the SQLITE_TEST macro set, then the following block
22825: ** of code will give us the ability to simulate a disk I/O error.  This
22826: ** is used for testing the I/O recovery logic.
22827: */
22828: #ifdef SQLITE_TEST
22829: SQLITE_API int sqlite3_io_error_hit = 0;            /* Total number of I/O Errors */
22830: SQLITE_API int sqlite3_io_error_hardhit = 0;        /* Number of non-benign errors */
22831: SQLITE_API int sqlite3_io_error_pending = 0;        /* Count down to first I/O error */
22832: SQLITE_API int sqlite3_io_error_persist = 0;        /* True if I/O errors persist */
22833: SQLITE_API int sqlite3_io_error_benign = 0;         /* True if errors are benign */
22834: SQLITE_API int sqlite3_diskfull_pending = 0;
22835: SQLITE_API int sqlite3_diskfull = 0;
22836: #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
22837: #define SimulateIOError(CODE)  \
22838:   if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
22839:        || sqlite3_io_error_pending-- == 1 )  \
22840:               { local_ioerr(); CODE; }
22841: static void local_ioerr(){
22842:   IOTRACE(("IOERR\n"));
22843:   sqlite3_io_error_hit++;
22844:   if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
22845: }
22846: #define SimulateDiskfullError(CODE) \
22847:    if( sqlite3_diskfull_pending ){ \
22848:      if( sqlite3_diskfull_pending == 1 ){ \
22849:        local_ioerr(); \
22850:        sqlite3_diskfull = 1; \
22851:        sqlite3_io_error_hit = 1; \
22852:        CODE; \
22853:      }else{ \
22854:        sqlite3_diskfull_pending--; \
22855:      } \
22856:    }
22857: #else
22858: #define SimulateIOErrorBenign(X)
22859: #define SimulateIOError(A)
22860: #define SimulateDiskfullError(A)
22861: #endif
22862: 
22863: /*
22864: ** When testing, keep a count of the number of open files.
22865: */
22866: #ifdef SQLITE_TEST
22867: SQLITE_API int sqlite3_open_file_count = 0;
22868: #define OpenCounter(X)  sqlite3_open_file_count+=(X)
22869: #else
22870: #define OpenCounter(X)
22871: #endif
22872: 
22873: #endif /* !defined(_OS_COMMON_H_) */
22874: 
22875: /************** End of os_common.h *******************************************/
22876: /************** Continuing where we left off in os_os2.c *********************/
22877: 
22878: /* Forward references */
22879: typedef struct os2File os2File;         /* The file structure */
22880: typedef struct os2ShmNode os2ShmNode;   /* A shared descritive memory node */
22881: typedef struct os2ShmLink os2ShmLink;   /* A connection to shared-memory */
22882: 
22883: /*
22884: ** The os2File structure is subclass of sqlite3_file specific for the OS/2
22885: ** protability layer.
22886: */
22887: struct os2File {
22888:   const sqlite3_io_methods *pMethod;  /* Always the first entry */
22889:   HFILE h;                  /* Handle for accessing the file */
22890:   int flags;                /* Flags provided to os2Open() */
22891:   int locktype;             /* Type of lock currently held on this file */
22892:   int szChunk;              /* Chunk size configured by FCNTL_CHUNK_SIZE */
22893:   char *zFullPathCp;        /* Full path name of this file */
22894:   os2ShmLink *pShmLink;     /* Instance of shared memory on this file */
22895: };
22896: 
22897: #define LOCK_TIMEOUT 10L /* the default locking timeout */
22898: 
22899: /*
22900: ** Missing from some versions of the OS/2 toolkit -
22901: ** used to allocate from high memory if possible
22902: */
22903: #ifndef OBJ_ANY
22904: # define OBJ_ANY 0x00000400
22905: #endif
22906: 
22907: /*****************************************************************************
22908: ** The next group of routines implement the I/O methods specified
22909: ** by the sqlite3_io_methods object.
22910: ******************************************************************************/
22911: 
22912: /*
22913: ** Close a file.
22914: */
22915: static int os2Close( sqlite3_file *id ){
22916:   APIRET rc;
22917:   os2File *pFile = (os2File*)id;
22918: 
22919:   assert( id!=0 );
22920:   OSTRACE(( "CLOSE %d (%s)\n", pFile->h, pFile->zFullPathCp ));
22921: 
22922:   rc = DosClose( pFile->h );
22923: 
22924:   if( pFile->flags & SQLITE_OPEN_DELETEONCLOSE )
22925:     DosForceDelete( (PSZ)pFile->zFullPathCp );
22926: 
22927:   free( pFile->zFullPathCp );
22928:   pFile->zFullPathCp = NULL;
22929:   pFile->locktype = NO_LOCK;
22930:   pFile->h = (HFILE)-1;
22931:   pFile->flags = 0;
22932: 
22933:   OpenCounter( -1 );
22934:   return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
22935: }
22936: 
22937: /*
22938: ** Read data from a file into a buffer.  Return SQLITE_OK if all
22939: ** bytes were read successfully and SQLITE_IOERR if anything goes
22940: ** wrong.
22941: */
22942: static int os2Read(
22943:   sqlite3_file *id,               /* File to read from */
22944:   void *pBuf,                     /* Write content into this buffer */
22945:   int amt,                        /* Number of bytes to read */
22946:   sqlite3_int64 offset            /* Begin reading at this offset */
22947: ){
22948:   ULONG fileLocation = 0L;
22949:   ULONG got;
22950:   os2File *pFile = (os2File*)id;
22951:   assert( id!=0 );
22952:   SimulateIOError( return SQLITE_IOERR_READ );
22953:   OSTRACE(( "READ %d lock=%d\n", pFile->h, pFile->locktype ));
22954:   if( DosSetFilePtr(pFile->h, offset, FILE_BEGIN, &fileLocation) != NO_ERROR ){
22955:     return SQLITE_IOERR;
22956:   }
22957:   if( DosRead( pFile->h, pBuf, amt, &got ) != NO_ERROR ){
22958:     return SQLITE_IOERR_READ;
22959:   }
22960:   if( got == (ULONG)amt )
22961:     return SQLITE_OK;
22962:   else {
22963:     /* Unread portions of the input buffer must be zero-filled */
22964:     memset(&((char*)pBuf)[got], 0, amt-got);
22965:     return SQLITE_IOERR_SHORT_READ;
22966:   }
22967: }
22968: 
22969: /*
22970: ** Write data from a buffer into a file.  Return SQLITE_OK on success
22971: ** or some other error code on failure.
22972: */
22973: static int os2Write(
22974:   sqlite3_file *id,               /* File to write into */
22975:   const void *pBuf,               /* The bytes to be written */
22976:   int amt,                        /* Number of bytes to write */
22977:   sqlite3_int64 offset            /* Offset into the file to begin writing at */
22978: ){
22979:   ULONG fileLocation = 0L;
22980:   APIRET rc = NO_ERROR;
22981:   ULONG wrote;
22982:   os2File *pFile = (os2File*)id;
22983:   assert( id!=0 );
22984:   SimulateIOError( return SQLITE_IOERR_WRITE );
22985:   SimulateDiskfullError( return SQLITE_FULL );
22986:   OSTRACE(( "WRITE %d lock=%d\n", pFile->h, pFile->locktype ));
22987:   if( DosSetFilePtr(pFile->h, offset, FILE_BEGIN, &fileLocation) != NO_ERROR ){
22988:     return SQLITE_IOERR;
22989:   }
22990:   assert( amt>0 );
22991:   while( amt > 0 &&
22992:          ( rc = DosWrite( pFile->h, (PVOID)pBuf, amt, &wrote ) ) == NO_ERROR &&
22993:          wrote > 0
22994:   ){
22995:     amt -= wrote;
22996:     pBuf = &((char*)pBuf)[wrote];
22997:   }
22998: 
22999:   return ( rc != NO_ERROR || amt > (int)wrote ) ? SQLITE_FULL : SQLITE_OK;
23000: }
23001: 
23002: /*
23003: ** Truncate an open file to a specified size
23004: */
23005: static int os2Truncate( sqlite3_file *id, i64 nByte ){
23006:   APIRET rc;
23007:   os2File *pFile = (os2File*)id;
23008:   assert( id!=0 );
23009:   OSTRACE(( "TRUNCATE %d %lld\n", pFile->h, nByte ));
23010:   SimulateIOError( return SQLITE_IOERR_TRUNCATE );
23011: 
23012:   /* If the user has configured a chunk-size for this file, truncate the
23013:   ** file so that it consists of an integer number of chunks (i.e. the
23014:   ** actual file size after the operation may be larger than the requested
23015:   ** size).
23016:   */
23017:   if( pFile->szChunk ){
23018:     nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
23019:   }
23020:   
23021:   rc = DosSetFileSize( pFile->h, nByte );
23022:   return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR_TRUNCATE;
23023: }
23024: 
23025: #ifdef SQLITE_TEST
23026: /*
23027: ** Count the number of fullsyncs and normal syncs.  This is used to test
23028: ** that syncs and fullsyncs are occuring at the right times.
23029: */
23030: SQLITE_API int sqlite3_sync_count = 0;
23031: SQLITE_API int sqlite3_fullsync_count = 0;
23032: #endif
23033: 
23034: /*
23035: ** Make sure all writes to a particular file are committed to disk.
23036: */
23037: static int os2Sync( sqlite3_file *id, int flags ){
23038:   os2File *pFile = (os2File*)id;
23039:   OSTRACE(( "SYNC %d lock=%d\n", pFile->h, pFile->locktype ));
23040: #ifdef SQLITE_TEST
23041:   if( flags & SQLITE_SYNC_FULL){
23042:     sqlite3_fullsync_count++;
23043:   }
23044:   sqlite3_sync_count++;
23045: #endif
23046:   /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
23047:   ** no-op
23048:   */
23049: #ifdef SQLITE_NO_SYNC
23050:   UNUSED_PARAMETER(pFile);
23051:   return SQLITE_OK;
23052: #else
23053:   return DosResetBuffer( pFile->h ) == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
23054: #endif
23055: }
23056: 
23057: /*
23058: ** Determine the current size of a file in bytes
23059: */
23060: static int os2FileSize( sqlite3_file *id, sqlite3_int64 *pSize ){
23061:   APIRET rc = NO_ERROR;
23062:   FILESTATUS3 fsts3FileInfo;
23063:   memset(&fsts3FileInfo, 0, sizeof(fsts3FileInfo));
23064:   assert( id!=0 );
23065:   SimulateIOError( return SQLITE_IOERR_FSTAT );
23066:   rc = DosQueryFileInfo( ((os2File*)id)->h, FIL_STANDARD, &fsts3FileInfo, sizeof(FILESTATUS3) );
23067:   if( rc == NO_ERROR ){
23068:     *pSize = fsts3FileInfo.cbFile;
23069:     return SQLITE_OK;
23070:   }else{
23071:     return SQLITE_IOERR_FSTAT;
23072:   }
23073: }
23074: 
23075: /*
23076: ** Acquire a reader lock.
23077: */
23078: static int getReadLock( os2File *pFile ){
23079:   FILELOCK  LockArea,
23080:             UnlockArea;
23081:   APIRET res;
23082:   memset(&LockArea, 0, sizeof(LockArea));
23083:   memset(&UnlockArea, 0, sizeof(UnlockArea));
23084:   LockArea.lOffset = SHARED_FIRST;
23085:   LockArea.lRange = SHARED_SIZE;
23086:   UnlockArea.lOffset = 0L;
23087:   UnlockArea.lRange = 0L;
23088:   res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 1L );
23089:   OSTRACE(( "GETREADLOCK %d res=%d\n", pFile->h, res ));
23090:   return res;
23091: }
23092: 
23093: /*
23094: ** Undo a readlock
23095: */
23096: static int unlockReadLock( os2File *id ){
23097:   FILELOCK  LockArea,
23098:             UnlockArea;
23099:   APIRET res;
23100:   memset(&LockArea, 0, sizeof(LockArea));
23101:   memset(&UnlockArea, 0, sizeof(UnlockArea));
23102:   LockArea.lOffset = 0L;
23103:   LockArea.lRange = 0L;
23104:   UnlockArea.lOffset = SHARED_FIRST;
23105:   UnlockArea.lRange = SHARED_SIZE;
23106:   res = DosSetFileLocks( id->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 1L );
23107:   OSTRACE(( "UNLOCK-READLOCK file handle=%d res=%d?\n", id->h, res ));
23108:   return res;
23109: }
23110: 
23111: /*
23112: ** Lock the file with the lock specified by parameter locktype - one
23113: ** of the following:
23114: **
23115: **     (1) SHARED_LOCK
23116: **     (2) RESERVED_LOCK
23117: **     (3) PENDING_LOCK
23118: **     (4) EXCLUSIVE_LOCK
23119: **
23120: ** Sometimes when requesting one lock state, additional lock states
23121: ** are inserted in between.  The locking might fail on one of the later
23122: ** transitions leaving the lock state different from what it started but
23123: ** still short of its goal.  The following chart shows the allowed
23124: ** transitions and the inserted intermediate states:
23125: **
23126: **    UNLOCKED -> SHARED
23127: **    SHARED -> RESERVED
23128: **    SHARED -> (PENDING) -> EXCLUSIVE
23129: **    RESERVED -> (PENDING) -> EXCLUSIVE
23130: **    PENDING -> EXCLUSIVE
23131: **
23132: ** This routine will only increase a lock.  The os2Unlock() routine
23133: ** erases all locks at once and returns us immediately to locking level 0.
23134: ** It is not possible to lower the locking level one step at a time.  You
23135: ** must go straight to locking level 0.
23136: */
23137: static int os2Lock( sqlite3_file *id, int locktype ){
23138:   int rc = SQLITE_OK;       /* Return code from subroutines */
23139:   APIRET res = NO_ERROR;    /* Result of an OS/2 lock call */
23140:   int newLocktype;       /* Set pFile->locktype to this value before exiting */
23141:   int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */
23142:   FILELOCK  LockArea,
23143:             UnlockArea;
23144:   os2File *pFile = (os2File*)id;
23145:   memset(&LockArea, 0, sizeof(LockArea));
23146:   memset(&UnlockArea, 0, sizeof(UnlockArea));
23147:   assert( pFile!=0 );
23148:   OSTRACE(( "LOCK %d %d was %d\n", pFile->h, locktype, pFile->locktype ));
23149: 
23150:   /* If there is already a lock of this type or more restrictive on the
23151:   ** os2File, do nothing. Don't use the end_lock: exit path, as
23152:   ** sqlite3_mutex_enter() hasn't been called yet.
23153:   */
23154:   if( pFile->locktype>=locktype ){
23155:     OSTRACE(( "LOCK %d %d ok (already held)\n", pFile->h, locktype ));
23156:     return SQLITE_OK;
23157:   }
23158: 
23159:   /* Make sure the locking sequence is correct
23160:   */
23161:   assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK );
23162:   assert( locktype!=PENDING_LOCK );
23163:   assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK );
23164: 
23165:   /* Lock the PENDING_LOCK byte if we need to acquire a PENDING lock or
23166:   ** a SHARED lock.  If we are acquiring a SHARED lock, the acquisition of
23167:   ** the PENDING_LOCK byte is temporary.
23168:   */
23169:   newLocktype = pFile->locktype;
23170:   if( pFile->locktype==NO_LOCK
23171:       || (locktype==EXCLUSIVE_LOCK && pFile->locktype==RESERVED_LOCK)
23172:   ){
23173:     LockArea.lOffset = PENDING_BYTE;
23174:     LockArea.lRange = 1L;
23175:     UnlockArea.lOffset = 0L;
23176:     UnlockArea.lRange = 0L;
23177: 
23178:     /* wait longer than LOCK_TIMEOUT here not to have to try multiple times */
23179:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, 100L, 0L );
23180:     if( res == NO_ERROR ){
23181:       gotPendingLock = 1;
23182:       OSTRACE(( "LOCK %d pending lock boolean set.  res=%d\n", pFile->h, res ));
23183:     }
23184:   }
23185: 
23186:   /* Acquire a shared lock
23187:   */
23188:   if( locktype==SHARED_LOCK && res == NO_ERROR ){
23189:     assert( pFile->locktype==NO_LOCK );
23190:     res = getReadLock(pFile);
23191:     if( res == NO_ERROR ){
23192:       newLocktype = SHARED_LOCK;
23193:     }
23194:     OSTRACE(( "LOCK %d acquire shared lock. res=%d\n", pFile->h, res ));
23195:   }
23196: 
23197:   /* Acquire a RESERVED lock
23198:   */
23199:   if( locktype==RESERVED_LOCK && res == NO_ERROR ){
23200:     assert( pFile->locktype==SHARED_LOCK );
23201:     LockArea.lOffset = RESERVED_BYTE;
23202:     LockArea.lRange = 1L;
23203:     UnlockArea.lOffset = 0L;
23204:     UnlockArea.lRange = 0L;
23205:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23206:     if( res == NO_ERROR ){
23207:       newLocktype = RESERVED_LOCK;
23208:     }
23209:     OSTRACE(( "LOCK %d acquire reserved lock. res=%d\n", pFile->h, res ));
23210:   }
23211: 
23212:   /* Acquire a PENDING lock
23213:   */
23214:   if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){
23215:     newLocktype = PENDING_LOCK;
23216:     gotPendingLock = 0;
23217:     OSTRACE(( "LOCK %d acquire pending lock. pending lock boolean unset.\n",
23218:                pFile->h ));
23219:   }
23220: 
23221:   /* Acquire an EXCLUSIVE lock
23222:   */
23223:   if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){
23224:     assert( pFile->locktype>=SHARED_LOCK );
23225:     res = unlockReadLock(pFile);
23226:     OSTRACE(( "unreadlock = %d\n", res ));
23227:     LockArea.lOffset = SHARED_FIRST;
23228:     LockArea.lRange = SHARED_SIZE;
23229:     UnlockArea.lOffset = 0L;
23230:     UnlockArea.lRange = 0L;
23231:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23232:     if( res == NO_ERROR ){
23233:       newLocktype = EXCLUSIVE_LOCK;
23234:     }else{
23235:       OSTRACE(( "OS/2 error-code = %d\n", res ));
23236:       getReadLock(pFile);
23237:     }
23238:     OSTRACE(( "LOCK %d acquire exclusive lock.  res=%d\n", pFile->h, res ));
23239:   }
23240: 
23241:   /* If we are holding a PENDING lock that ought to be released, then
23242:   ** release it now.
23243:   */
23244:   if( gotPendingLock && locktype==SHARED_LOCK ){
23245:     int r;
23246:     LockArea.lOffset = 0L;
23247:     LockArea.lRange = 0L;
23248:     UnlockArea.lOffset = PENDING_BYTE;
23249:     UnlockArea.lRange = 1L;
23250:     r = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23251:     OSTRACE(( "LOCK %d unlocking pending/is shared. r=%d\n", pFile->h, r ));
23252:   }
23253: 
23254:   /* Update the state of the lock has held in the file descriptor then
23255:   ** return the appropriate result code.
23256:   */
23257:   if( res == NO_ERROR ){
23258:     rc = SQLITE_OK;
23259:   }else{
23260:     OSTRACE(( "LOCK FAILED %d trying for %d but got %d\n", pFile->h,
23261:               locktype, newLocktype ));
23262:     rc = SQLITE_BUSY;
23263:   }
23264:   pFile->locktype = newLocktype;
23265:   OSTRACE(( "LOCK %d now %d\n", pFile->h, pFile->locktype ));
23266:   return rc;
23267: }
23268: 
23269: /*
23270: ** This routine checks if there is a RESERVED lock held on the specified
23271: ** file by this or any other process. If such a lock is held, return
23272: ** non-zero, otherwise zero.
23273: */
23274: static int os2CheckReservedLock( sqlite3_file *id, int *pOut ){
23275:   int r = 0;
23276:   os2File *pFile = (os2File*)id;
23277:   assert( pFile!=0 );
23278:   if( pFile->locktype>=RESERVED_LOCK ){
23279:     r = 1;
23280:     OSTRACE(( "TEST WR-LOCK %d %d (local)\n", pFile->h, r ));
23281:   }else{
23282:     FILELOCK  LockArea,
23283:               UnlockArea;
23284:     APIRET rc = NO_ERROR;
23285:     memset(&LockArea, 0, sizeof(LockArea));
23286:     memset(&UnlockArea, 0, sizeof(UnlockArea));
23287:     LockArea.lOffset = RESERVED_BYTE;
23288:     LockArea.lRange = 1L;
23289:     UnlockArea.lOffset = 0L;
23290:     UnlockArea.lRange = 0L;
23291:     rc = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23292:     OSTRACE(( "TEST WR-LOCK %d lock reserved byte rc=%d\n", pFile->h, rc ));
23293:     if( rc == NO_ERROR ){
23294:       APIRET rcu = NO_ERROR; /* return code for unlocking */
23295:       LockArea.lOffset = 0L;
23296:       LockArea.lRange = 0L;
23297:       UnlockArea.lOffset = RESERVED_BYTE;
23298:       UnlockArea.lRange = 1L;
23299:       rcu = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23300:       OSTRACE(( "TEST WR-LOCK %d unlock reserved byte r=%d\n", pFile->h, rcu ));
23301:     }
23302:     r = !(rc == NO_ERROR);
23303:     OSTRACE(( "TEST WR-LOCK %d %d (remote)\n", pFile->h, r ));
23304:   }
23305:   *pOut = r;
23306:   return SQLITE_OK;
23307: }
23308: 
23309: /*
23310: ** Lower the locking level on file descriptor id to locktype.  locktype
23311: ** must be either NO_LOCK or SHARED_LOCK.
23312: **
23313: ** If the locking level of the file descriptor is already at or below
23314: ** the requested locking level, this routine is a no-op.
23315: **
23316: ** It is not possible for this routine to fail if the second argument
23317: ** is NO_LOCK.  If the second argument is SHARED_LOCK then this routine
23318: ** might return SQLITE_IOERR;
23319: */
23320: static int os2Unlock( sqlite3_file *id, int locktype ){
23321:   int type;
23322:   os2File *pFile = (os2File*)id;
23323:   APIRET rc = SQLITE_OK;
23324:   APIRET res = NO_ERROR;
23325:   FILELOCK  LockArea,
23326:             UnlockArea;
23327:   memset(&LockArea, 0, sizeof(LockArea));
23328:   memset(&UnlockArea, 0, sizeof(UnlockArea));
23329:   assert( pFile!=0 );
23330:   assert( locktype<=SHARED_LOCK );
23331:   OSTRACE(( "UNLOCK %d to %d was %d\n", pFile->h, locktype, pFile->locktype ));
23332:   type = pFile->locktype;
23333:   if( type>=EXCLUSIVE_LOCK ){
23334:     LockArea.lOffset = 0L;
23335:     LockArea.lRange = 0L;
23336:     UnlockArea.lOffset = SHARED_FIRST;
23337:     UnlockArea.lRange = SHARED_SIZE;
23338:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23339:     OSTRACE(( "UNLOCK %d exclusive lock res=%d\n", pFile->h, res ));
23340:     if( locktype==SHARED_LOCK && getReadLock(pFile) != NO_ERROR ){
23341:       /* This should never happen.  We should always be able to
23342:       ** reacquire the read lock */
23343:       OSTRACE(( "UNLOCK %d to %d getReadLock() failed\n", pFile->h, locktype ));
23344:       rc = SQLITE_IOERR_UNLOCK;
23345:     }
23346:   }
23347:   if( type>=RESERVED_LOCK ){
23348:     LockArea.lOffset = 0L;
23349:     LockArea.lRange = 0L;
23350:     UnlockArea.lOffset = RESERVED_BYTE;
23351:     UnlockArea.lRange = 1L;
23352:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23353:     OSTRACE(( "UNLOCK %d reserved res=%d\n", pFile->h, res ));
23354:   }
23355:   if( locktype==NO_LOCK && type>=SHARED_LOCK ){
23356:     res = unlockReadLock(pFile);
23357:     OSTRACE(( "UNLOCK %d is %d want %d res=%d\n",
23358:               pFile->h, type, locktype, res ));
23359:   }
23360:   if( type>=PENDING_LOCK ){
23361:     LockArea.lOffset = 0L;
23362:     LockArea.lRange = 0L;
23363:     UnlockArea.lOffset = PENDING_BYTE;
23364:     UnlockArea.lRange = 1L;
23365:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23366:     OSTRACE(( "UNLOCK %d pending res=%d\n", pFile->h, res ));
23367:   }
23368:   pFile->locktype = locktype;
23369:   OSTRACE(( "UNLOCK %d now %d\n", pFile->h, pFile->locktype ));
23370:   return rc;
23371: }
23372: 
23373: /*
23374: ** Control and query of the open file handle.
23375: */
23376: static int os2FileControl(sqlite3_file *id, int op, void *pArg){
23377:   switch( op ){
23378:     case SQLITE_FCNTL_LOCKSTATE: {
23379:       *(int*)pArg = ((os2File*)id)->locktype;
23380:       OSTRACE(( "FCNTL_LOCKSTATE %d lock=%d\n",
23381:                 ((os2File*)id)->h, ((os2File*)id)->locktype ));
23382:       return SQLITE_OK;
23383:     }
23384:     case SQLITE_FCNTL_CHUNK_SIZE: {
23385:       ((os2File*)id)->szChunk = *(int*)pArg;
23386:       return SQLITE_OK;
23387:     }
23388:     case SQLITE_FCNTL_SIZE_HINT: {
23389:       sqlite3_int64 sz = *(sqlite3_int64*)pArg;
23390:       SimulateIOErrorBenign(1);
23391:       os2Truncate(id, sz);
23392:       SimulateIOErrorBenign(0);
23393:       return SQLITE_OK;
23394:     }
23395:     case SQLITE_FCNTL_SYNC_OMITTED: {
23396:       return SQLITE_OK;
23397:     }
23398:   }
23399:   return SQLITE_NOTFOUND;
23400: }
23401: 
23402: /*
23403: ** Return the sector size in bytes of the underlying block device for
23404: ** the specified file. This is almost always 512 bytes, but may be
23405: ** larger for some devices.
23406: **
23407: ** SQLite code assumes this function cannot fail. It also assumes that
23408: ** if two files are created in the same file-system directory (i.e.
23409: ** a database and its journal file) that the sector size will be the
23410: ** same for both.
23411: */
23412: static int os2SectorSize(sqlite3_file *id){
23413:   UNUSED_PARAMETER(id);
23414:   return SQLITE_DEFAULT_SECTOR_SIZE;
23415: }
23416: 
23417: /*
23418: ** Return a vector of device characteristics.
23419: */
23420: static int os2DeviceCharacteristics(sqlite3_file *id){
23421:   UNUSED_PARAMETER(id);
23422:   return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;
23423: }
23424: 
23425: 
23426: /*
23427: ** Character set conversion objects used by conversion routines.
23428: */
23429: static UconvObject ucUtf8 = NULL; /* convert between UTF-8 and UCS-2 */
23430: static UconvObject uclCp = NULL;  /* convert between local codepage and UCS-2 */
23431: 
23432: /*
23433: ** Helper function to initialize the conversion objects from and to UTF-8.
23434: */
23435: static void initUconvObjects( void ){
23436:   if( UniCreateUconvObject( UTF_8, &ucUtf8 ) != ULS_SUCCESS )
23437:     ucUtf8 = NULL;
23438:   if ( UniCreateUconvObject( (UniChar *)L"@path=yes", &uclCp ) != ULS_SUCCESS )
23439:     uclCp = NULL;
23440: }
23441: 
23442: /*
23443: ** Helper function to free the conversion objects from and to UTF-8.
23444: */
23445: static void freeUconvObjects( void ){
23446:   if ( ucUtf8 )
23447:     UniFreeUconvObject( ucUtf8 );
23448:   if ( uclCp )
23449:     UniFreeUconvObject( uclCp );
23450:   ucUtf8 = NULL;
23451:   uclCp = NULL;
23452: }
23453: 
23454: /*
23455: ** Helper function to convert UTF-8 filenames to local OS/2 codepage.
23456: ** The two-step process: first convert the incoming UTF-8 string
23457: ** into UCS-2 and then from UCS-2 to the current codepage.
23458: ** The returned char pointer has to be freed.
23459: */
23460: static char *convertUtf8PathToCp( const char *in ){
23461:   UniChar tempPath[CCHMAXPATH];
23462:   char *out = (char *)calloc( CCHMAXPATH, 1 );
23463: 
23464:   if( !out )
23465:     return NULL;
23466: 
23467:   if( !ucUtf8 || !uclCp )
23468:     initUconvObjects();
23469: 
23470:   /* determine string for the conversion of UTF-8 which is CP1208 */
23471:   if( UniStrToUcs( ucUtf8, tempPath, (char *)in, CCHMAXPATH ) != ULS_SUCCESS )
23472:     return out; /* if conversion fails, return the empty string */
23473: 
23474:   /* conversion for current codepage which can be used for paths */
23475:   UniStrFromUcs( uclCp, out, tempPath, CCHMAXPATH );
23476: 
23477:   return out;
23478: }
23479: 
23480: /*
23481: ** Helper function to convert filenames from local codepage to UTF-8.
23482: ** The two-step process: first convert the incoming codepage-specific
23483: ** string into UCS-2 and then from UCS-2 to the codepage of UTF-8.
23484: ** The returned char pointer has to be freed.
23485: **
23486: ** This function is non-static to be able to use this in shell.c and
23487: ** similar applications that take command line arguments.
23488: */
23489: char *convertCpPathToUtf8( const char *in ){
23490:   UniChar tempPath[CCHMAXPATH];
23491:   char *out = (char *)calloc( CCHMAXPATH, 1 );
23492: 
23493:   if( !out )
23494:     return NULL;
23495: 
23496:   if( !ucUtf8 || !uclCp )
23497:     initUconvObjects();
23498: 
23499:   /* conversion for current codepage which can be used for paths */
23500:   if( UniStrToUcs( uclCp, tempPath, (char *)in, CCHMAXPATH ) != ULS_SUCCESS )
23501:     return out; /* if conversion fails, return the empty string */
23502: 
23503:   /* determine string for the conversion of UTF-8 which is CP1208 */
23504:   UniStrFromUcs( ucUtf8, out, tempPath, CCHMAXPATH );
23505: 
23506:   return out;
23507: }
23508: 
23509: 
23510: #ifndef SQLITE_OMIT_WAL
23511: 
23512: /*
23513: ** Use main database file for interprocess locking. If un-defined
23514: ** a separate file is created for this purpose. The file will be
23515: ** used only to set file locks. There will be no data written to it.
23516: */
23517: #define SQLITE_OS2_NO_WAL_LOCK_FILE     
23518: 
23519: #if 0
23520: static void _ERR_TRACE( const char *fmt, ... ) {
23521:   va_list  ap;
23522:   va_start(ap, fmt);
23523:   vfprintf(stderr, fmt, ap);
23524:   fflush(stderr);
23525: }
23526: #define ERR_TRACE(rc, msg)        \
23527:         if( (rc) != SQLITE_OK ) _ERR_TRACE msg;
23528: #else
23529: #define ERR_TRACE(rc, msg)
23530: #endif
23531: 
23532: /*
23533: ** Helper functions to obtain and relinquish the global mutex. The
23534: ** global mutex is used to protect os2ShmNodeList.
23535: **
23536: ** Function os2ShmMutexHeld() is used to assert() that the global mutex 
23537: ** is held when required. This function is only used as part of assert() 
23538: ** statements. e.g.
23539: **
23540: **   os2ShmEnterMutex()
23541: **     assert( os2ShmMutexHeld() );
23542: **   os2ShmLeaveMutex()
23543: */
23544: static void os2ShmEnterMutex(void){
23545:   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
23546: }
23547: static void os2ShmLeaveMutex(void){
23548:   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
23549: }
23550: #ifdef SQLITE_DEBUG
23551: static int os2ShmMutexHeld(void) {
23552:   return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
23553: }
23554: int GetCurrentProcessId(void) {
23555:   PPIB pib;
23556:   DosGetInfoBlocks(NULL, &pib);
23557:   return (int)pib->pib_ulpid;
23558: }
23559: #endif
23560: 
23561: /*
23562: ** Object used to represent a the shared memory area for a single log file.
23563: ** When multiple threads all reference the same log-summary, each thread has
23564: ** its own os2File object, but they all point to a single instance of this 
23565: ** object.  In other words, each log-summary is opened only once per process.
23566: **
23567: ** os2ShmMutexHeld() must be true when creating or destroying
23568: ** this object or while reading or writing the following fields:
23569: **
23570: **      nRef
23571: **      pNext 
23572: **
23573: ** The following fields are read-only after the object is created:
23574: ** 
23575: **      szRegion
23576: **      hLockFile
23577: **      shmBaseName
23578: **
23579: ** Either os2ShmNode.mutex must be held or os2ShmNode.nRef==0 and
23580: ** os2ShmMutexHeld() is true when reading or writing any other field
23581: ** in this structure.
23582: **
23583: */
23584: struct os2ShmNode {
23585:   sqlite3_mutex *mutex;      /* Mutex to access this object */
23586:   os2ShmNode *pNext;         /* Next in list of all os2ShmNode objects */
23587: 
23588:   int szRegion;              /* Size of shared-memory regions */
23589: 
23590:   int nRegion;               /* Size of array apRegion */
23591:   void **apRegion;           /* Array of pointers to shared-memory regions */
23592: 
23593:   int nRef;                  /* Number of os2ShmLink objects pointing to this */
23594:   os2ShmLink *pFirst;        /* First os2ShmLink object pointing to this */
23595: 
23596:   HFILE hLockFile;           /* File used for inter-process memory locking */
23597:   char shmBaseName[1];       /* Name of the memory object !!! must last !!! */
23598: };
23599: 
23600: 
23601: /*
23602: ** Structure used internally by this VFS to record the state of an
23603: ** open shared memory connection.
23604: **
23605: ** The following fields are initialized when this object is created and
23606: ** are read-only thereafter:
23607: **
23608: **    os2Shm.pShmNode
23609: **    os2Shm.id
23610: **
23611: ** All other fields are read/write.  The os2Shm.pShmNode->mutex must be held
23612: ** while accessing any read/write fields.
23613: */
23614: struct os2ShmLink {
23615:   os2ShmNode *pShmNode;      /* The underlying os2ShmNode object */
23616:   os2ShmLink *pNext;         /* Next os2Shm with the same os2ShmNode */
23617:   u32 sharedMask;            /* Mask of shared locks held */
23618:   u32 exclMask;              /* Mask of exclusive locks held */
23619: #ifdef SQLITE_DEBUG
23620:   u8 id;                     /* Id of this connection with its os2ShmNode */
23621: #endif
23622: };
23623: 
23624: 
23625: /*
23626: ** A global list of all os2ShmNode objects.
23627: **
23628: ** The os2ShmMutexHeld() must be true while reading or writing this list.
23629: */
23630: static os2ShmNode *os2ShmNodeList = NULL;
23631: 
23632: /*
23633: ** Constants used for locking
23634: */
23635: #ifdef  SQLITE_OS2_NO_WAL_LOCK_FILE
23636: #define OS2_SHM_BASE   (PENDING_BYTE + 0x10000)         /* first lock byte */
23637: #else
23638: #define OS2_SHM_BASE   ((22+SQLITE_SHM_NLOCK)*4)        /* first lock byte */
23639: #endif
23640: 
23641: #define OS2_SHM_DMS    (OS2_SHM_BASE+SQLITE_SHM_NLOCK)  /* deadman switch */
23642: 
23643: /*
23644: ** Apply advisory locks for all n bytes beginning at ofst.
23645: */
23646: #define _SHM_UNLCK  1   /* no lock */
23647: #define _SHM_RDLCK  2   /* shared lock, no wait */
23648: #define _SHM_WRLCK  3   /* exlusive lock, no wait */
23649: #define _SHM_WRLCK_WAIT 4 /* exclusive lock, wait */
23650: static int os2ShmSystemLock(
23651:   os2ShmNode *pNode,    /* Apply locks to this open shared-memory segment */
23652:   int lockType,         /* _SHM_UNLCK, _SHM_RDLCK, _SHM_WRLCK or _SHM_WRLCK_WAIT */
23653:   int ofst,             /* Offset to first byte to be locked/unlocked */
23654:   int nByte             /* Number of bytes to lock or unlock */
23655: ){
23656:   APIRET rc;
23657:   FILELOCK area;
23658:   ULONG mode, timeout;
23659: 
23660:   /* Access to the os2ShmNode object is serialized by the caller */
23661:   assert( sqlite3_mutex_held(pNode->mutex) || pNode->nRef==0 );
23662: 
23663:   mode = 1;     /* shared lock */
23664:   timeout = 0;  /* no wait */
23665:   area.lOffset = ofst;
23666:   area.lRange = nByte;
23667: 
23668:   switch( lockType ) {
23669:     case _SHM_WRLCK_WAIT:
23670:       timeout = (ULONG)-1;      /* wait forever */
23671:     case _SHM_WRLCK:
23672:       mode = 0;                 /* exclusive lock */
23673:     case _SHM_RDLCK:
23674:       rc = DosSetFileLocks(pNode->hLockFile, 
23675:                            NULL, &area, timeout, mode);
23676:       break;
23677:     /* case _SHM_UNLCK: */
23678:     default:
23679:       rc = DosSetFileLocks(pNode->hLockFile, 
23680:                            &area, NULL, 0, 0);
23681:       break;
23682:   }
23683:                           
23684:   OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n", 
23685:            pNode->hLockFile,
23686:            rc==SQLITE_OK ? "ok" : "failed",
23687:            lockType==_SHM_UNLCK ? "Unlock" : "Lock",
23688:            rc));
23689: 
23690:   ERR_TRACE(rc, ("os2ShmSystemLock: %d %s\n", rc, pNode->shmBaseName))
23691: 
23692:   return ( rc == 0 ) ?  SQLITE_OK : SQLITE_BUSY;
23693: }
23694: 
23695: /*
23696: ** Find an os2ShmNode in global list or allocate a new one, if not found.
23697: **
23698: ** This is not a VFS shared-memory method; it is a utility function called
23699: ** by VFS shared-memory methods.
23700: */
23701: static int os2OpenSharedMemory( os2File *fd, int szRegion ) {
23702:   os2ShmLink *pLink;
23703:   os2ShmNode *pNode;
23704:   int cbShmName, rc = SQLITE_OK;
23705:   char shmName[CCHMAXPATH + 30];
23706: #ifndef SQLITE_OS2_NO_WAL_LOCK_FILE
23707:   ULONG action;
23708: #endif
23709:   
23710:   /* We need some additional space at the end to append the region number */
23711:   cbShmName = sprintf(shmName, "\\SHAREMEM\\%s", fd->zFullPathCp );
23712:   if( cbShmName >= CCHMAXPATH-8 )
23713:     return SQLITE_IOERR_SHMOPEN; 
23714: 
23715:   /* Replace colon in file name to form a valid shared memory name */
23716:   shmName[10+1] = '!';
23717: 
23718:   /* Allocate link object (we free it later in case of failure) */
23719:   pLink = sqlite3_malloc( sizeof(*pLink) );
23720:   if( !pLink )
23721:     return SQLITE_NOMEM;
23722: 
23723:   /* Access node list */
23724:   os2ShmEnterMutex();
23725: 
23726:   /* Find node by it's shared memory base name */
23727:   for( pNode = os2ShmNodeList; 
23728:        pNode && stricmp(shmName, pNode->shmBaseName) != 0; 
23729:        pNode = pNode->pNext )   ;
23730: 
23731:   /* Not found: allocate a new node */
23732:   if( !pNode ) {
23733:     pNode = sqlite3_malloc( sizeof(*pNode) + cbShmName );
23734:     if( pNode ) {
23735:       memset(pNode, 0, sizeof(*pNode) );
23736:       pNode->szRegion = szRegion;
23737:       pNode->hLockFile = (HFILE)-1;      
23738:       strcpy(pNode->shmBaseName, shmName);
23739: 
23740: #ifdef SQLITE_OS2_NO_WAL_LOCK_FILE
23741:       if( DosDupHandle(fd->h, &pNode->hLockFile) != 0 ) {
23742: #else
23743:       sprintf(shmName, "%s-lck", fd->zFullPathCp);
23744:       if( DosOpen((PSZ)shmName, &pNode->hLockFile, &action, 0, FILE_NORMAL, 
23745:                   OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW,
23746:                   OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE | 
23747:                   OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_FAIL_ON_ERROR,
23748:                   NULL) != 0 ) {
23749: #endif
23750:         sqlite3_free(pNode);  
23751:         rc = SQLITE_IOERR;
23752:       } else {
23753:         pNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
23754:         if( !pNode->mutex ) {
23755:           sqlite3_free(pNode);  
23756:           rc = SQLITE_NOMEM;
23757:         }
23758:       }   
23759:     } else {
23760:       rc = SQLITE_NOMEM;
23761:     }
23762:     
23763:     if( rc == SQLITE_OK ) {
23764:       pNode->pNext = os2ShmNodeList;
23765:       os2ShmNodeList = pNode;
23766:     } else {
23767:       pNode = NULL;
23768:     }
23769:   } else if( pNode->szRegion != szRegion ) {
23770:     rc = SQLITE_IOERR_SHMSIZE;
23771:     pNode = NULL;
23772:   }
23773: 
23774:   if( pNode ) {
23775:     sqlite3_mutex_enter(pNode->mutex);
23776: 
23777:     memset(pLink, 0, sizeof(*pLink));
23778: 
23779:     pLink->pShmNode = pNode;
23780:     pLink->pNext = pNode->pFirst;
23781:     pNode->pFirst = pLink;
23782:     pNode->nRef++;
23783: 
23784:     fd->pShmLink = pLink;
23785: 
23786:     sqlite3_mutex_leave(pNode->mutex);
23787:     
23788:   } else {
23789:     /* Error occured. Free our link object. */
23790:     sqlite3_free(pLink);  
23791:   }
23792: 
23793:   os2ShmLeaveMutex();
23794: 
23795:   ERR_TRACE(rc, ("os2OpenSharedMemory: %d  %s\n", rc, fd->zFullPathCp))  
23796:   
23797:   return rc;
23798: }
23799: 
23800: /*
23801: ** Purge the os2ShmNodeList list of all entries with nRef==0.
23802: **
23803: ** This is not a VFS shared-memory method; it is a utility function called
23804: ** by VFS shared-memory methods.
23805: */
23806: static void os2PurgeShmNodes( int deleteFlag ) {
23807:   os2ShmNode *pNode;
23808:   os2ShmNode **ppNode;
23809: 
23810:   os2ShmEnterMutex();
23811:   
23812:   ppNode = &os2ShmNodeList;
23813: 
23814:   while( *ppNode ) {
23815:     pNode = *ppNode;
23816: 
23817:     if( pNode->nRef == 0 ) {
23818:       *ppNode = pNode->pNext;   
23819:      
23820:       if( pNode->apRegion ) {
23821:         /* Prevent other processes from resizing the shared memory */
23822:         os2ShmSystemLock(pNode, _SHM_WRLCK_WAIT, OS2_SHM_DMS, 1);
23823: 
23824:         while( pNode->nRegion-- ) {
23825: #ifdef SQLITE_DEBUG
23826:           int rc = 
23827: #endif          
23828:           DosFreeMem(pNode->apRegion[pNode->nRegion]);
23829: 
23830:           OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n",
23831:                   (int)GetCurrentProcessId(), pNode->nRegion,
23832:                   rc == 0 ? "ok" : "failed"));
23833:         }
23834: 
23835:         /* Allow other processes to resize the shared memory */
23836:         os2ShmSystemLock(pNode, _SHM_UNLCK, OS2_SHM_DMS, 1);
23837: 
23838:         sqlite3_free(pNode->apRegion);
23839:       }  
23840: 
23841:       DosClose(pNode->hLockFile);
23842:       
23843: #ifndef SQLITE_OS2_NO_WAL_LOCK_FILE
23844:       if( deleteFlag ) {
23845:          char fileName[CCHMAXPATH];
23846:          /* Skip "\\SHAREMEM\\" */
23847:          sprintf(fileName, "%s-lck", pNode->shmBaseName + 10);
23848:          /* restore colon */
23849:          fileName[1] = ':';
23850:          
23851:          DosForceDelete(fileName); 
23852:       }
23853: #endif
23854: 
23855:       sqlite3_mutex_free(pNode->mutex);
23856: 
23857:       sqlite3_free(pNode);
23858:       
23859:     } else {
23860:       ppNode = &pNode->pNext;
23861:     }
23862:   } 
23863: 
23864:   os2ShmLeaveMutex();
23865: }
23866: 
23867: /*
23868: ** This function is called to obtain a pointer to region iRegion of the
23869: ** shared-memory associated with the database file id. Shared-memory regions
23870: ** are numbered starting from zero. Each shared-memory region is szRegion
23871: ** bytes in size.
23872: **
23873: ** If an error occurs, an error code is returned and *pp is set to NULL.
23874: **
23875: ** Otherwise, if the bExtend parameter is 0 and the requested shared-memory
23876: ** region has not been allocated (by any client, including one running in a
23877: ** separate process), then *pp is set to NULL and SQLITE_OK returned. If
23878: ** bExtend is non-zero and the requested shared-memory region has not yet
23879: ** been allocated, it is allocated by this function.
23880: **
23881: ** If the shared-memory region has already been allocated or is allocated by
23882: ** this call as described above, then it is mapped into this processes
23883: ** address space (if it is not already), *pp is set to point to the mapped
23884: ** memory and SQLITE_OK returned.
23885: */
23886: static int os2ShmMap(
23887:   sqlite3_file *id,               /* Handle open on database file */
23888:   int iRegion,                    /* Region to retrieve */
23889:   int szRegion,                   /* Size of regions */
23890:   int bExtend,                    /* True to extend block if necessary */
23891:   void volatile **pp              /* OUT: Mapped memory */
23892: ){
23893:   PVOID pvTemp;
23894:   void **apRegion;
23895:   os2ShmNode *pNode;
23896:   int n, rc = SQLITE_OK;
23897:   char shmName[CCHMAXPATH];
23898:   os2File *pFile = (os2File*)id;
23899:   
23900:   *pp = NULL;
23901: 
23902:   if( !pFile->pShmLink )
23903:     rc = os2OpenSharedMemory( pFile, szRegion );
23904:   
23905:   if( rc == SQLITE_OK ) {
23906:     pNode = pFile->pShmLink->pShmNode ;
23907:     
23908:     sqlite3_mutex_enter(pNode->mutex);
23909:     
23910:     assert( szRegion==pNode->szRegion );
23911: 
23912:     /* Unmapped region ? */
23913:     if( iRegion >= pNode->nRegion ) {
23914:       /* Prevent other processes from resizing the shared memory */
23915:       os2ShmSystemLock(pNode, _SHM_WRLCK_WAIT, OS2_SHM_DMS, 1);
23916: 
23917:       apRegion = sqlite3_realloc(
23918:         pNode->apRegion, (iRegion + 1) * sizeof(apRegion[0]));
23919: 
23920:       if( apRegion ) {
23921:         pNode->apRegion = apRegion;
23922: 
23923:         while( pNode->nRegion <= iRegion ) {
23924:           sprintf(shmName, "%s-%u", 
23925:                   pNode->shmBaseName, pNode->nRegion);
23926: 
23927:           if( DosGetNamedSharedMem(&pvTemp, (PSZ)shmName, 
23928:                 PAG_READ | PAG_WRITE) != NO_ERROR ) {
23929:             if( !bExtend )
23930:               break;
23931: 
23932:             if( DosAllocSharedMem(&pvTemp, (PSZ)shmName, szRegion,
23933:                   PAG_READ | PAG_WRITE | PAG_COMMIT | OBJ_ANY) != NO_ERROR && 
23934:                 DosAllocSharedMem(&pvTemp, (PSZ)shmName, szRegion,
23935:                   PAG_READ | PAG_WRITE | PAG_COMMIT) != NO_ERROR ) { 
23936:               rc = SQLITE_NOMEM;
23937:               break;
23938:             }
23939:           }
23940: 
23941:           apRegion[pNode->nRegion++] = pvTemp;
23942:         }
23943: 
23944:         /* zero out remaining entries */ 
23945:         for( n = pNode->nRegion; n <= iRegion; n++ )
23946:           pNode->apRegion[n] = NULL;
23947: 
23948:         /* Return this region (maybe zero) */
23949:         *pp = pNode->apRegion[iRegion];
23950:       } else {
23951:         rc = SQLITE_NOMEM;
23952:       }
23953: 
23954:       /* Allow other processes to resize the shared memory */
23955:       os2ShmSystemLock(pNode, _SHM_UNLCK, OS2_SHM_DMS, 1);
23956:       
23957:     } else {
23958:       /* Region has been mapped previously */
23959:       *pp = pNode->apRegion[iRegion];
23960:     }
23961: 
23962:     sqlite3_mutex_leave(pNode->mutex);
23963:   } 
23964: 
23965:   ERR_TRACE(rc, ("os2ShmMap: %s iRgn = %d, szRgn = %d, bExt = %d : %d\n", 
23966:                  pFile->zFullPathCp, iRegion, szRegion, bExtend, rc))
23967:           
23968:   return rc;
23969: }
23970: 
23971: /*
23972: ** Close a connection to shared-memory.  Delete the underlying
23973: ** storage if deleteFlag is true.
23974: **
23975: ** If there is no shared memory associated with the connection then this
23976: ** routine is a harmless no-op.
23977: */
23978: static int os2ShmUnmap(
23979:   sqlite3_file *id,               /* The underlying database file */
23980:   int deleteFlag                  /* Delete shared-memory if true */
23981: ){
23982:   os2File *pFile = (os2File*)id;
23983:   os2ShmLink *pLink = pFile->pShmLink;
23984:   
23985:   if( pLink ) {
23986:     int nRef = -1;
23987:     os2ShmLink **ppLink;
23988:     os2ShmNode *pNode = pLink->pShmNode;
23989: 
23990:     sqlite3_mutex_enter(pNode->mutex);
23991:     
23992:     for( ppLink = &pNode->pFirst;
23993:          *ppLink && *ppLink != pLink;
23994:          ppLink = &(*ppLink)->pNext )   ;
23995:          
23996:     assert(*ppLink);
23997: 
23998:     if( *ppLink ) {
23999:       *ppLink = pLink->pNext;
24000:       nRef = --pNode->nRef;
24001:     } else {
24002:       ERR_TRACE(1, ("os2ShmUnmap: link not found ! %s\n", 
24003:                     pNode->shmBaseName))
24004:     }
24005:     
24006:     pFile->pShmLink = NULL;
24007:     sqlite3_free(pLink);
24008: 
24009:     sqlite3_mutex_leave(pNode->mutex);
24010:     
24011:     if( nRef == 0 )
24012:       os2PurgeShmNodes( deleteFlag );
24013:   }
24014: 
24015:   return SQLITE_OK;
24016: }
24017: 
24018: /*
24019: ** Change the lock state for a shared-memory segment.
24020: **
24021: ** Note that the relationship between SHAREd and EXCLUSIVE locks is a little
24022: ** different here than in posix.  In xShmLock(), one can go from unlocked
24023: ** to shared and back or from unlocked to exclusive and back.  But one may
24024: ** not go from shared to exclusive or from exclusive to shared.
24025: */
24026: static int os2ShmLock(
24027:   sqlite3_file *id,          /* Database file holding the shared memory */
24028:   int ofst,                  /* First lock to acquire or release */
24029:   int n,                     /* Number of locks to acquire or release */
24030:   int flags                  /* What to do with the lock */
24031: ){
24032:   u32 mask;                             /* Mask of locks to take or release */
24033:   int rc = SQLITE_OK;                   /* Result code */
24034:   os2File *pFile = (os2File*)id;
24035:   os2ShmLink *p = pFile->pShmLink;      /* The shared memory being locked */
24036:   os2ShmLink *pX;                       /* For looping over all siblings */
24037:   os2ShmNode *pShmNode = p->pShmNode;   /* Our node */
24038:   
24039:   assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
24040:   assert( n>=1 );
24041:   assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
24042:        || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
24043:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
24044:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
24045:   assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
24046: 
24047:   mask = (u32)((1U<<(ofst+n)) - (1U<<ofst));
24048:   assert( n>1 || mask==(1<<ofst) );
24049: 
24050: 
24051:   sqlite3_mutex_enter(pShmNode->mutex);
24052: 
24053:   if( flags & SQLITE_SHM_UNLOCK ){
24054:     u32 allMask = 0; /* Mask of locks held by siblings */
24055: 
24056:     /* See if any siblings hold this same lock */
24057:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
24058:       if( pX==p ) continue;
24059:       assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
24060:       allMask |= pX->sharedMask;
24061:     }
24062: 
24063:     /* Unlock the system-level locks */
24064:     if( (mask & allMask)==0 ){
24065:       rc = os2ShmSystemLock(pShmNode, _SHM_UNLCK, ofst+OS2_SHM_BASE, n);
24066:     }else{
24067:       rc = SQLITE_OK;
24068:     }
24069: 
24070:     /* Undo the local locks */
24071:     if( rc==SQLITE_OK ){
24072:       p->exclMask &= ~mask;
24073:       p->sharedMask &= ~mask;
24074:     } 
24075:   }else if( flags & SQLITE_SHM_SHARED ){
24076:     u32 allShared = 0;  /* Union of locks held by connections other than "p" */
24077: 
24078:     /* Find out which shared locks are already held by sibling connections.
24079:     ** If any sibling already holds an exclusive lock, go ahead and return
24080:     ** SQLITE_BUSY.
24081:     */
24082:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
24083:       if( (pX->exclMask & mask)!=0 ){
24084:         rc = SQLITE_BUSY;
24085:         break;
24086:       }
24087:       allShared |= pX->sharedMask;
24088:     }
24089: 
24090:     /* Get shared locks at the system level, if necessary */
24091:     if( rc==SQLITE_OK ){
24092:       if( (allShared & mask)==0 ){
24093:         rc = os2ShmSystemLock(pShmNode, _SHM_RDLCK, ofst+OS2_SHM_BASE, n);
24094:       }else{
24095:         rc = SQLITE_OK;
24096:       }
24097:     }
24098: 
24099:     /* Get the local shared locks */
24100:     if( rc==SQLITE_OK ){
24101:       p->sharedMask |= mask;
24102:     }
24103:   }else{
24104:     /* Make sure no sibling connections hold locks that will block this
24105:     ** lock.  If any do, return SQLITE_BUSY right away.
24106:     */
24107:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
24108:       if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
24109:         rc = SQLITE_BUSY;
24110:         break;
24111:       }
24112:     }
24113:   
24114:     /* Get the exclusive locks at the system level.  Then if successful
24115:     ** also mark the local connection as being locked.
24116:     */
24117:     if( rc==SQLITE_OK ){
24118:       rc = os2ShmSystemLock(pShmNode, _SHM_WRLCK, ofst+OS2_SHM_BASE, n);
24119:       if( rc==SQLITE_OK ){
24120:         assert( (p->sharedMask & mask)==0 );
24121:         p->exclMask |= mask;
24122:       }
24123:     }
24124:   }
24125: 
24126:   sqlite3_mutex_leave(pShmNode->mutex);
24127:   
24128:   OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n",
24129:            p->id, (int)GetCurrentProcessId(), p->sharedMask, p->exclMask,
24130:            rc ? "failed" : "ok"));
24131: 
24132:   ERR_TRACE(rc, ("os2ShmLock: ofst = %d, n = %d, flags = 0x%x -> %d \n", 
24133:                  ofst, n, flags, rc))
24134:                   
24135:   return rc; 
24136: }
24137: 
24138: /*
24139: ** Implement a memory barrier or memory fence on shared memory.
24140: **
24141: ** All loads and stores begun before the barrier must complete before
24142: ** any load or store begun after the barrier.
24143: */
24144: static void os2ShmBarrier(
24145:   sqlite3_file *id                /* Database file holding the shared memory */
24146: ){
24147:   UNUSED_PARAMETER(id);
24148:   os2ShmEnterMutex();
24149:   os2ShmLeaveMutex();
24150: }
24151: 
24152: #else
24153: # define os2ShmMap     0
24154: # define os2ShmLock    0
24155: # define os2ShmBarrier 0
24156: # define os2ShmUnmap   0
24157: #endif /* #ifndef SQLITE_OMIT_WAL */
24158: 
24159: 
24160: /*
24161: ** This vector defines all the methods that can operate on an
24162: ** sqlite3_file for os2.
24163: */
24164: static const sqlite3_io_methods os2IoMethod = {
24165:   2,                              /* iVersion */
24166:   os2Close,                       /* xClose */
24167:   os2Read,                        /* xRead */
24168:   os2Write,                       /* xWrite */
24169:   os2Truncate,                    /* xTruncate */
24170:   os2Sync,                        /* xSync */
24171:   os2FileSize,                    /* xFileSize */
24172:   os2Lock,                        /* xLock */
24173:   os2Unlock,                      /* xUnlock */
24174:   os2CheckReservedLock,           /* xCheckReservedLock */
24175:   os2FileControl,                 /* xFileControl */
24176:   os2SectorSize,                  /* xSectorSize */
24177:   os2DeviceCharacteristics,       /* xDeviceCharacteristics */
24178:   os2ShmMap,                      /* xShmMap */
24179:   os2ShmLock,                     /* xShmLock */
24180:   os2ShmBarrier,                  /* xShmBarrier */
24181:   os2ShmUnmap                     /* xShmUnmap */
24182: };
24183: 
24184: 
24185: /***************************************************************************
24186: ** Here ends the I/O methods that form the sqlite3_io_methods object.
24187: **
24188: ** The next block of code implements the VFS methods.
24189: ****************************************************************************/
24190: 
24191: /*
24192: ** Create a temporary file name in zBuf.  zBuf must be big enough to
24193: ** hold at pVfs->mxPathname characters.
24194: */
24195: static int getTempname(int nBuf, char *zBuf ){
24196:   static const char zChars[] =
24197:     "abcdefghijklmnopqrstuvwxyz"
24198:     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
24199:     "0123456789";
24200:   int i, j;
24201:   PSZ zTempPathCp;      
24202:   char zTempPath[CCHMAXPATH];
24203:   ULONG ulDriveNum, ulDriveMap;
24204:   
24205:   /* It's odd to simulate an io-error here, but really this is just
24206:   ** using the io-error infrastructure to test that SQLite handles this
24207:   ** function failing. 
24208:   */
24209:   SimulateIOError( return SQLITE_IOERR );
24210: 
24211:   if( sqlite3_temp_directory ) {
24212:     sqlite3_snprintf(CCHMAXPATH-30, zTempPath, "%s", sqlite3_temp_directory);
24213:   } else if( DosScanEnv( (PSZ)"TEMP",   &zTempPathCp ) == NO_ERROR ||
24214:              DosScanEnv( (PSZ)"TMP",    &zTempPathCp ) == NO_ERROR ||
24215:              DosScanEnv( (PSZ)"TMPDIR", &zTempPathCp ) == NO_ERROR ) {
24216:     char *zTempPathUTF = convertCpPathToUtf8( (char *)zTempPathCp );
24217:     sqlite3_snprintf(CCHMAXPATH-30, zTempPath, "%s", zTempPathUTF);
24218:     free( zTempPathUTF );
24219:   } else if( DosQueryCurrentDisk( &ulDriveNum, &ulDriveMap ) == NO_ERROR ) {
24220:     zTempPath[0] = (char)('A' + ulDriveNum - 1);
24221:     zTempPath[1] = ':'; 
24222:     zTempPath[2] = '\0'; 
24223:   } else {
24224:     zTempPath[0] = '\0'; 
24225:   }
24226:   
24227:   /* Strip off a trailing slashes or backslashes, otherwise we would get *
24228:    * multiple (back)slashes which causes DosOpen() to fail.              *
24229:    * Trailing spaces are not allowed, either.                            */
24230:   j = sqlite3Strlen30(zTempPath);
24231:   while( j > 0 && ( zTempPath[j-1] == '\\' || zTempPath[j-1] == '/' || 
24232:                     zTempPath[j-1] == ' ' ) ){
24233:     j--;
24234:   }
24235:   zTempPath[j] = '\0';
24236:   
24237:   /* We use 20 bytes to randomize the name */
24238:   sqlite3_snprintf(nBuf-22, zBuf,
24239:                    "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath);
24240:   j = sqlite3Strlen30(zBuf);
24241:   sqlite3_randomness( 20, &zBuf[j] );
24242:   for( i = 0; i < 20; i++, j++ ){
24243:     zBuf[j] = zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
24244:   }
24245:   zBuf[j] = 0;
24246: 
24247:   OSTRACE(( "TEMP FILENAME: %s\n", zBuf ));
24248:   return SQLITE_OK;
24249: }
24250: 
24251: 
24252: /*
24253: ** Turn a relative pathname into a full pathname.  Write the full
24254: ** pathname into zFull[].  zFull[] will be at least pVfs->mxPathname
24255: ** bytes in size.
24256: */
24257: static int os2FullPathname(
24258:   sqlite3_vfs *pVfs,          /* Pointer to vfs object */
24259:   const char *zRelative,      /* Possibly relative input path */
24260:   int nFull,                  /* Size of output buffer in bytes */
24261:   char *zFull                 /* Output buffer */
24262: ){
24263:   char *zRelativeCp = convertUtf8PathToCp( zRelative );
24264:   char zFullCp[CCHMAXPATH] = "\0";
24265:   char *zFullUTF;
24266:   APIRET rc = DosQueryPathInfo( (PSZ)zRelativeCp, FIL_QUERYFULLNAME, 
24267:                                 zFullCp, CCHMAXPATH );
24268:   free( zRelativeCp );
24269:   zFullUTF = convertCpPathToUtf8( zFullCp );
24270:   sqlite3_snprintf( nFull, zFull, zFullUTF );
24271:   free( zFullUTF );
24272:   return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
24273: }
24274: 
24275: 
24276: /*
24277: ** Open a file.
24278: */
24279: static int os2Open(
24280:   sqlite3_vfs *pVfs,            /* Not used */
24281:   const char *zName,            /* Name of the file (UTF-8) */
24282:   sqlite3_file *id,             /* Write the SQLite file handle here */
24283:   int flags,                    /* Open mode flags */
24284:   int *pOutFlags                /* Status return flags */
24285: ){
24286:   HFILE h;
24287:   ULONG ulOpenFlags = 0;
24288:   ULONG ulOpenMode = 0;
24289:   ULONG ulAction = 0;
24290:   ULONG rc;
24291:   os2File *pFile = (os2File*)id;
24292:   const char *zUtf8Name = zName;
24293:   char *zNameCp;
24294:   char  zTmpname[CCHMAXPATH];
24295: 
24296:   int isExclusive  = (flags & SQLITE_OPEN_EXCLUSIVE);
24297:   int isCreate     = (flags & SQLITE_OPEN_CREATE);
24298:   int isReadWrite  = (flags & SQLITE_OPEN_READWRITE);
24299: #ifndef NDEBUG
24300:   int isDelete     = (flags & SQLITE_OPEN_DELETEONCLOSE);
24301:   int isReadonly   = (flags & SQLITE_OPEN_READONLY);
24302:   int eType        = (flags & 0xFFFFFF00);
24303:   int isOpenJournal = (isCreate && (
24304:         eType==SQLITE_OPEN_MASTER_JOURNAL 
24305:      || eType==SQLITE_OPEN_MAIN_JOURNAL 
24306:      || eType==SQLITE_OPEN_WAL
24307:   ));
24308: #endif
24309: 
24310:   UNUSED_PARAMETER(pVfs);
24311:   assert( id!=0 );
24312: 
24313:   /* Check the following statements are true: 
24314:   **
24315:   **   (a) Exactly one of the READWRITE and READONLY flags must be set, and 
24316:   **   (b) if CREATE is set, then READWRITE must also be set, and
24317:   **   (c) if EXCLUSIVE is set, then CREATE must also be set.
24318:   **   (d) if DELETEONCLOSE is set, then CREATE must also be set.
24319:   */
24320:   assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
24321:   assert(isCreate==0 || isReadWrite);
24322:   assert(isExclusive==0 || isCreate);
24323:   assert(isDelete==0 || isCreate);
24324: 
24325:   /* The main DB, main journal, WAL file and master journal are never 
24326:   ** automatically deleted. Nor are they ever temporary files.  */
24327:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
24328:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
24329:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
24330:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
24331: 
24332:   /* Assert that the upper layer has set one of the "file-type" flags. */
24333:   assert( eType==SQLITE_OPEN_MAIN_DB      || eType==SQLITE_OPEN_TEMP_DB 
24334:        || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL 
24335:        || eType==SQLITE_OPEN_SUBJOURNAL   || eType==SQLITE_OPEN_MASTER_JOURNAL 
24336:        || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
24337:   );
24338: 
24339:   memset( pFile, 0, sizeof(*pFile) );
24340:   pFile->h = (HFILE)-1;
24341: 
24342:   /* If the second argument to this function is NULL, generate a 
24343:   ** temporary file name to use 
24344:   */
24345:   if( !zUtf8Name ){
24346:     assert(isDelete && !isOpenJournal);
24347:     rc = getTempname(CCHMAXPATH, zTmpname);
24348:     if( rc!=SQLITE_OK ){
24349:       return rc;
24350:     }
24351:     zUtf8Name = zTmpname;
24352:   }
24353: 
24354:   if( isReadWrite ){
24355:     ulOpenMode |= OPEN_ACCESS_READWRITE;
24356:   }else{
24357:     ulOpenMode |= OPEN_ACCESS_READONLY;
24358:   }
24359: 
24360:   /* Open in random access mode for possibly better speed.  Allow full
24361:   ** sharing because file locks will provide exclusive access when needed.
24362:   ** The handle should not be inherited by child processes and we don't 
24363:   ** want popups from the critical error handler.
24364:   */
24365:   ulOpenMode |= OPEN_FLAGS_RANDOM | OPEN_SHARE_DENYNONE | 
24366:                 OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_FAIL_ON_ERROR;
24367: 
24368:   /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is 
24369:   ** created. SQLite doesn't use it to indicate "exclusive access" 
24370:   ** as it is usually understood.
24371:   */
24372:   if( isExclusive ){
24373:     /* Creates a new file, only if it does not already exist. */
24374:     /* If the file exists, it fails. */
24375:     ulOpenFlags |= OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS;
24376:   }else if( isCreate ){
24377:     /* Open existing file, or create if it doesn't exist */
24378:     ulOpenFlags |= OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS;
24379:   }else{
24380:     /* Opens a file, only if it exists. */
24381:     ulOpenFlags |= OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS;
24382:   }
24383: 
24384:   zNameCp = convertUtf8PathToCp( zUtf8Name );
24385:   rc = DosOpen( (PSZ)zNameCp,
24386:                 &h,
24387:                 &ulAction,
24388:                 0L,
24389:                 FILE_NORMAL,
24390:                 ulOpenFlags,
24391:                 ulOpenMode,
24392:                 (PEAOP2)NULL );
24393:   free( zNameCp );
24394: 
24395:   if( rc != NO_ERROR ){
24396:     OSTRACE(( "OPEN Invalid handle rc=%d: zName=%s, ulAction=%#lx, ulFlags=%#lx, ulMode=%#lx\n",
24397:               rc, zUtf8Name, ulAction, ulOpenFlags, ulOpenMode ));
24398: 
24399:     if( isReadWrite ){
24400:       return os2Open( pVfs, zName, id,
24401:                       ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)),
24402:                       pOutFlags );
24403:     }else{
24404:       return SQLITE_CANTOPEN;
24405:     }
24406:   }
24407: 
24408:   if( pOutFlags ){
24409:     *pOutFlags = isReadWrite ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY;
24410:   }
24411: 
24412:   os2FullPathname( pVfs, zUtf8Name, sizeof( zTmpname ), zTmpname );
24413:   pFile->zFullPathCp = convertUtf8PathToCp( zTmpname );
24414:   pFile->pMethod = &os2IoMethod;
24415:   pFile->flags = flags;
24416:   pFile->h = h;
24417: 
24418:   OpenCounter(+1);
24419:   OSTRACE(( "OPEN %d pOutFlags=%d\n", pFile->h, pOutFlags ));
24420:   return SQLITE_OK;
24421: }
24422: 
24423: /*
24424: ** Delete the named file.
24425: */
24426: static int os2Delete(
24427:   sqlite3_vfs *pVfs,                     /* Not used on os2 */
24428:   const char *zFilename,                 /* Name of file to delete */
24429:   int syncDir                            /* Not used on os2 */
24430: ){
24431:   APIRET rc;
24432:   char *zFilenameCp;
24433:   SimulateIOError( return SQLITE_IOERR_DELETE );
24434:   zFilenameCp = convertUtf8PathToCp( zFilename );
24435:   rc = DosDelete( (PSZ)zFilenameCp );
24436:   free( zFilenameCp );
24437:   OSTRACE(( "DELETE \"%s\"\n", zFilename ));
24438:   return (rc == NO_ERROR ||
24439:           rc == ERROR_FILE_NOT_FOUND ||
24440:           rc == ERROR_PATH_NOT_FOUND ) ? SQLITE_OK : SQLITE_IOERR_DELETE;
24441: }
24442: 
24443: /*
24444: ** Check the existance and status of a file.
24445: */
24446: static int os2Access(
24447:   sqlite3_vfs *pVfs,        /* Not used on os2 */
24448:   const char *zFilename,    /* Name of file to check */
24449:   int flags,                /* Type of test to make on this file */
24450:   int *pOut                 /* Write results here */
24451: ){
24452:   APIRET rc;
24453:   FILESTATUS3 fsts3ConfigInfo;
24454:   char *zFilenameCp;
24455: 
24456:   UNUSED_PARAMETER(pVfs);
24457:   SimulateIOError( return SQLITE_IOERR_ACCESS; );
24458:   
24459:   zFilenameCp = convertUtf8PathToCp( zFilename );
24460:   rc = DosQueryPathInfo( (PSZ)zFilenameCp, FIL_STANDARD,
24461:                          &fsts3ConfigInfo, sizeof(FILESTATUS3) );
24462:   free( zFilenameCp );
24463:   OSTRACE(( "ACCESS fsts3ConfigInfo.attrFile=%d flags=%d rc=%d\n",
24464:             fsts3ConfigInfo.attrFile, flags, rc ));
24465: 
24466:   switch( flags ){
24467:     case SQLITE_ACCESS_EXISTS:
24468:       /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
24469:       ** as if it does not exist.
24470:       */
24471:       if( fsts3ConfigInfo.cbFile == 0 ) 
24472:         rc = ERROR_FILE_NOT_FOUND;
24473:       break;
24474:     case SQLITE_ACCESS_READ:
24475:       break;
24476:     case SQLITE_ACCESS_READWRITE:
24477:       if( fsts3ConfigInfo.attrFile & FILE_READONLY )
24478:         rc = ERROR_ACCESS_DENIED;
24479:       break;
24480:     default:
24481:       rc = ERROR_FILE_NOT_FOUND;
24482:       assert( !"Invalid flags argument" );
24483:   }
24484: 
24485:   *pOut = (rc == NO_ERROR);
24486:   OSTRACE(( "ACCESS %s flags %d: rc=%d\n", zFilename, flags, *pOut ));
24487: 
24488:   return SQLITE_OK;
24489: }
24490: 
24491: 
24492: #ifndef SQLITE_OMIT_LOAD_EXTENSION
24493: /*
24494: ** Interfaces for opening a shared library, finding entry points
24495: ** within the shared library, and closing the shared library.
24496: */
24497: /*
24498: ** Interfaces for opening a shared library, finding entry points
24499: ** within the shared library, and closing the shared library.
24500: */
24501: static void *os2DlOpen(sqlite3_vfs *pVfs, const char *zFilename){
24502:   HMODULE hmod;
24503:   APIRET rc;
24504:   char *zFilenameCp = convertUtf8PathToCp(zFilename);
24505:   rc = DosLoadModule(NULL, 0, (PSZ)zFilenameCp, &hmod);
24506:   free(zFilenameCp);
24507:   return rc != NO_ERROR ? 0 : (void*)hmod;
24508: }
24509: /*
24510: ** A no-op since the error code is returned on the DosLoadModule call.
24511: ** os2Dlopen returns zero if DosLoadModule is not successful.
24512: */
24513: static void os2DlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
24514: /* no-op */
24515: }
24516: static void (*os2DlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){
24517:   PFN pfn;
24518:   APIRET rc;
24519:   rc = DosQueryProcAddr((HMODULE)pHandle, 0L, (PSZ)zSymbol, &pfn);
24520:   if( rc != NO_ERROR ){
24521:     /* if the symbol itself was not found, search again for the same
24522:      * symbol with an extra underscore, that might be needed depending
24523:      * on the calling convention */
24524:     char _zSymbol[256] = "_";
24525:     strncat(_zSymbol, zSymbol, 254);
24526:     rc = DosQueryProcAddr((HMODULE)pHandle, 0L, (PSZ)_zSymbol, &pfn);
24527:   }
24528:   return rc != NO_ERROR ? 0 : (void(*)(void))pfn;
24529: }
24530: static void os2DlClose(sqlite3_vfs *pVfs, void *pHandle){
24531:   DosFreeModule((HMODULE)pHandle);
24532: }
24533: #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
24534:   #define os2DlOpen 0
24535:   #define os2DlError 0
24536:   #define os2DlSym 0
24537:   #define os2DlClose 0
24538: #endif
24539: 
24540: 
24541: /*
24542: ** Write up to nBuf bytes of randomness into zBuf.
24543: */
24544: static int os2Randomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf ){
24545:   int n = 0;
24546: #if defined(SQLITE_TEST)
24547:   n = nBuf;
24548:   memset(zBuf, 0, nBuf);
24549: #else
24550:   int i;                           
24551:   PPIB ppib;
24552:   PTIB ptib;
24553:   DATETIME dt; 
24554:   static unsigned c = 0;
24555:   /* Ordered by variation probability */
24556:   static ULONG svIdx[6] = { QSV_MS_COUNT, QSV_TIME_LOW,
24557:                             QSV_MAXPRMEM, QSV_MAXSHMEM,
24558:                             QSV_TOTAVAILMEM, QSV_TOTRESMEM };
24559: 
24560:   /* 8 bytes; timezone and weekday don't increase the randomness much */
24561:   if( (int)sizeof(dt)-3 <= nBuf - n ){
24562:     c += 0x0100;
24563:     DosGetDateTime(&dt);
24564:     dt.year = (USHORT)((dt.year - 1900) | c);
24565:     memcpy(&zBuf[n], &dt, sizeof(dt)-3);
24566:     n += sizeof(dt)-3;
24567:   }
24568: 
24569:   /* 4 bytes; PIDs and TIDs are 16 bit internally, so combine them */
24570:   if( (int)sizeof(ULONG) <= nBuf - n ){
24571:     DosGetInfoBlocks(&ptib, &ppib);
24572:     *(PULONG)&zBuf[n] = MAKELONG(ppib->pib_ulpid,
24573:                                  ptib->tib_ptib2->tib2_ultid);
24574:     n += sizeof(ULONG);
24575:   }
24576: 
24577:   /* Up to 6 * 4 bytes; variables depend on the system state */
24578:   for( i = 0; i < 6 && (int)sizeof(ULONG) <= nBuf - n; i++ ){
24579:     DosQuerySysInfo(svIdx[i], svIdx[i], 
24580:                     (PULONG)&zBuf[n], sizeof(ULONG));
24581:     n += sizeof(ULONG);
24582:   } 
24583: #endif
24584: 
24585:   return n;
24586: }
24587: 
24588: /*
24589: ** Sleep for a little while.  Return the amount of time slept.
24590: ** The argument is the number of microseconds we want to sleep.
24591: ** The return value is the number of microseconds of sleep actually
24592: ** requested from the underlying operating system, a number which
24593: ** might be greater than or equal to the argument, but not less
24594: ** than the argument.
24595: */
24596: static int os2Sleep( sqlite3_vfs *pVfs, int microsec ){
24597:   DosSleep( (microsec/1000) );
24598:   return microsec;
24599: }
24600: 
24601: /*
24602: ** The following variable, if set to a non-zero value, becomes the result
24603: ** returned from sqlite3OsCurrentTime().  This is used for testing.
24604: */
24605: #ifdef SQLITE_TEST
24606: SQLITE_API int sqlite3_current_time = 0;
24607: #endif
24608: 
24609: /*
24610: ** Find the current time (in Universal Coordinated Time).  Write into *piNow
24611: ** the current time and date as a Julian Day number times 86_400_000.  In
24612: ** other words, write into *piNow the number of milliseconds since the Julian
24613: ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
24614: ** proleptic Gregorian calendar.
24615: **
24616: ** On success, return 0.  Return 1 if the time and date cannot be found.
24617: */
24618: static int os2CurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){
24619: #ifdef SQLITE_TEST
24620:   static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
24621: #endif
24622:   int year, month, datepart, timepart;
24623:  
24624:   DATETIME dt;
24625:   DosGetDateTime( &dt );
24626: 
24627:   year = dt.year;
24628:   month = dt.month;
24629: 
24630:   /* Calculations from http://www.astro.keele.ac.uk/~rno/Astronomy/hjd.html
24631:   ** http://www.astro.keele.ac.uk/~rno/Astronomy/hjd-0.1.c
24632:   ** Calculate the Julian days
24633:   */
24634:   datepart = (int)dt.day - 32076 +
24635:     1461*(year + 4800 + (month - 14)/12)/4 +
24636:     367*(month - 2 - (month - 14)/12*12)/12 -
24637:     3*((year + 4900 + (month - 14)/12)/100)/4;
24638: 
24639:   /* Time in milliseconds, hours to noon added */
24640:   timepart = 12*3600*1000 + dt.hundredths*10 + dt.seconds*1000 +
24641:     ((int)dt.minutes + dt.timezone)*60*1000 + dt.hours*3600*1000;
24642: 
24643:   *piNow = (sqlite3_int64)datepart*86400*1000 + timepart;
24644:    
24645: #ifdef SQLITE_TEST
24646:   if( sqlite3_current_time ){
24647:     *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
24648:   }
24649: #endif
24650: 
24651:   UNUSED_PARAMETER(pVfs);
24652:   return 0;
24653: }
24654: 
24655: /*
24656: ** Find the current time (in Universal Coordinated Time).  Write the
24657: ** current time and date as a Julian Day number into *prNow and
24658: ** return 0.  Return 1 if the time and date cannot be found.
24659: */
24660: static int os2CurrentTime( sqlite3_vfs *pVfs, double *prNow ){
24661:   int rc;
24662:   sqlite3_int64 i;
24663:   rc = os2CurrentTimeInt64(pVfs, &i);
24664:   if( !rc ){
24665:     *prNow = i/86400000.0;
24666:   }
24667:   return rc;
24668: }
24669: 
24670: /*
24671: ** The idea is that this function works like a combination of
24672: ** GetLastError() and FormatMessage() on windows (or errno and
24673: ** strerror_r() on unix). After an error is returned by an OS
24674: ** function, SQLite calls this function with zBuf pointing to
24675: ** a buffer of nBuf bytes. The OS layer should populate the
24676: ** buffer with a nul-terminated UTF-8 encoded error message
24677: ** describing the last IO error to have occurred within the calling
24678: ** thread.
24679: **
24680: ** If the error message is too large for the supplied buffer,
24681: ** it should be truncated. The return value of xGetLastError
24682: ** is zero if the error message fits in the buffer, or non-zero
24683: ** otherwise (if the message was truncated). If non-zero is returned,
24684: ** then it is not necessary to include the nul-terminator character
24685: ** in the output buffer.
24686: **
24687: ** Not supplying an error message will have no adverse effect
24688: ** on SQLite. It is fine to have an implementation that never
24689: ** returns an error message:
24690: **
24691: **   int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
24692: **     assert(zBuf[0]=='\0');
24693: **     return 0;
24694: **   }
24695: **
24696: ** However if an error message is supplied, it will be incorporated
24697: ** by sqlite into the error message available to the user using
24698: ** sqlite3_errmsg(), possibly making IO errors easier to debug.
24699: */
24700: static int os2GetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
24701:   assert(zBuf[0]=='\0');
24702:   return 0;
24703: }
24704: 
24705: /*
24706: ** Initialize and deinitialize the operating system interface.
24707: */
24708: SQLITE_API int sqlite3_os_init(void){
24709:   static sqlite3_vfs os2Vfs = {
24710:     3,                 /* iVersion */
24711:     sizeof(os2File),   /* szOsFile */
24712:     CCHMAXPATH,        /* mxPathname */
24713:     0,                 /* pNext */
24714:     "os2",             /* zName */
24715:     0,                 /* pAppData */
24716: 
24717:     os2Open,           /* xOpen */
24718:     os2Delete,         /* xDelete */
24719:     os2Access,         /* xAccess */
24720:     os2FullPathname,   /* xFullPathname */
24721:     os2DlOpen,         /* xDlOpen */
24722:     os2DlError,        /* xDlError */
24723:     os2DlSym,          /* xDlSym */
24724:     os2DlClose,        /* xDlClose */
24725:     os2Randomness,     /* xRandomness */
24726:     os2Sleep,          /* xSleep */
24727:     os2CurrentTime,    /* xCurrentTime */
24728:     os2GetLastError,   /* xGetLastError */
24729:     os2CurrentTimeInt64, /* xCurrentTimeInt64 */
24730:     0,                 /* xSetSystemCall */
24731:     0,                 /* xGetSystemCall */
24732:     0                  /* xNextSystemCall */
24733:   };
24734:   sqlite3_vfs_register(&os2Vfs, 1);
24735:   initUconvObjects();
24736: /*  sqlite3OSTrace = 1; */
24737:   return SQLITE_OK;
24738: }
24739: SQLITE_API int sqlite3_os_end(void){
24740:   freeUconvObjects();
24741:   return SQLITE_OK;
24742: }
24743: 
24744: #endif /* SQLITE_OS_OS2 */
24745: 
24746: /************** End of os_os2.c **********************************************/
24747: /************** Begin file os_unix.c *****************************************/
24748: /*
24749: ** 2004 May 22
24750: **
24751: ** The author disclaims copyright to this source code.  In place of
24752: ** a legal notice, here is a blessing:
24753: **
24754: **    May you do good and not evil.
24755: **    May you find forgiveness for yourself and forgive others.
24756: **    May you share freely, never taking more than you give.
24757: **
24758: ******************************************************************************
24759: **
24760: ** This file contains the VFS implementation for unix-like operating systems
24761: ** include Linux, MacOSX, *BSD, QNX, VxWorks, AIX, HPUX, and others.
24762: **
24763: ** There are actually several different VFS implementations in this file.
24764: ** The differences are in the way that file locking is done.  The default
24765: ** implementation uses Posix Advisory Locks.  Alternative implementations
24766: ** use flock(), dot-files, various proprietary locking schemas, or simply
24767: ** skip locking all together.
24768: **
24769: ** This source file is organized into divisions where the logic for various
24770: ** subfunctions is contained within the appropriate division.  PLEASE
24771: ** KEEP THE STRUCTURE OF THIS FILE INTACT.  New code should be placed
24772: ** in the correct division and should be clearly labeled.
24773: **
24774: ** The layout of divisions is as follows:
24775: **
24776: **   *  General-purpose declarations and utility functions.
24777: **   *  Unique file ID logic used by VxWorks.
24778: **   *  Various locking primitive implementations (all except proxy locking):
24779: **      + for Posix Advisory Locks
24780: **      + for no-op locks
24781: **      + for dot-file locks
24782: **      + for flock() locking
24783: **      + for named semaphore locks (VxWorks only)
24784: **      + for AFP filesystem locks (MacOSX only)
24785: **   *  sqlite3_file methods not associated with locking.
24786: **   *  Definitions of sqlite3_io_methods objects for all locking
24787: **      methods plus "finder" functions for each locking method.
24788: **   *  sqlite3_vfs method implementations.
24789: **   *  Locking primitives for the proxy uber-locking-method. (MacOSX only)
24790: **   *  Definitions of sqlite3_vfs objects for all locking methods
24791: **      plus implementations of sqlite3_os_init() and sqlite3_os_end().
24792: */
24793: #if SQLITE_OS_UNIX              /* This file is used on unix only */
24794: 
24795: /*
24796: ** There are various methods for file locking used for concurrency
24797: ** control:
24798: **
24799: **   1. POSIX locking (the default),
24800: **   2. No locking,
24801: **   3. Dot-file locking,
24802: **   4. flock() locking,
24803: **   5. AFP locking (OSX only),
24804: **   6. Named POSIX semaphores (VXWorks only),
24805: **   7. proxy locking. (OSX only)
24806: **
24807: ** Styles 4, 5, and 7 are only available of SQLITE_ENABLE_LOCKING_STYLE
24808: ** is defined to 1.  The SQLITE_ENABLE_LOCKING_STYLE also enables automatic
24809: ** selection of the appropriate locking style based on the filesystem
24810: ** where the database is located.  
24811: */
24812: #if !defined(SQLITE_ENABLE_LOCKING_STYLE)
24813: #  if defined(__APPLE__)
24814: #    define SQLITE_ENABLE_LOCKING_STYLE 1
24815: #  else
24816: #    define SQLITE_ENABLE_LOCKING_STYLE 0
24817: #  endif
24818: #endif
24819: 
24820: /*
24821: ** Define the OS_VXWORKS pre-processor macro to 1 if building on 
24822: ** vxworks, or 0 otherwise.
24823: */
24824: #ifndef OS_VXWORKS
24825: #  if defined(__RTP__) || defined(_WRS_KERNEL)
24826: #    define OS_VXWORKS 1
24827: #  else
24828: #    define OS_VXWORKS 0
24829: #  endif
24830: #endif
24831: 
24832: /*
24833: ** These #defines should enable >2GB file support on Posix if the
24834: ** underlying operating system supports it.  If the OS lacks
24835: ** large file support, these should be no-ops.
24836: **
24837: ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch
24838: ** on the compiler command line.  This is necessary if you are compiling
24839: ** on a recent machine (ex: RedHat 7.2) but you want your code to work
24840: ** on an older machine (ex: RedHat 6.0).  If you compile on RedHat 7.2
24841: ** without this option, LFS is enable.  But LFS does not exist in the kernel
24842: ** in RedHat 6.0, so the code won't work.  Hence, for maximum binary
24843: ** portability you should omit LFS.
24844: **
24845: ** The previous paragraph was written in 2005.  (This paragraph is written
24846: ** on 2008-11-28.) These days, all Linux kernels support large files, so
24847: ** you should probably leave LFS enabled.  But some embedded platforms might
24848: ** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful.
24849: */
24850: #ifndef SQLITE_DISABLE_LFS
24851: # define _LARGE_FILE       1
24852: # ifndef _FILE_OFFSET_BITS
24853: #   define _FILE_OFFSET_BITS 64
24854: # endif
24855: # define _LARGEFILE_SOURCE 1
24856: #endif
24857: 
24858: /*
24859: ** standard include files.
24860: */
24861: #include <sys/types.h>
24862: #include <sys/stat.h>
24863: #include <fcntl.h>
24864: #include <unistd.h>
24865: /* #include <time.h> */
24866: #include <sys/time.h>
24867: #include <errno.h>
24868: #ifndef SQLITE_OMIT_WAL
24869: #include <sys/mman.h>
24870: #endif
24871: 
24872: 
24873: #if SQLITE_ENABLE_LOCKING_STYLE
24874: # include <sys/ioctl.h>
24875: # if OS_VXWORKS
24876: #  include <semaphore.h>
24877: #  include <limits.h>
24878: # else
24879: #  include <sys/file.h>
24880: #  include <sys/param.h>
24881: # endif
24882: #endif /* SQLITE_ENABLE_LOCKING_STYLE */
24883: 
24884: #if defined(__APPLE__) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS)
24885: # include <sys/mount.h>
24886: #endif
24887: 
24888: #ifdef HAVE_UTIME
24889: # include <utime.h>
24890: #endif
24891: 
24892: /*
24893: ** Allowed values of unixFile.fsFlags
24894: */
24895: #define SQLITE_FSFLAGS_IS_MSDOS     0x1
24896: 
24897: /*
24898: ** If we are to be thread-safe, include the pthreads header and define
24899: ** the SQLITE_UNIX_THREADS macro.
24900: */
24901: #if SQLITE_THREADSAFE
24902: /* # include <pthread.h> */
24903: # define SQLITE_UNIX_THREADS 1
24904: #endif
24905: 
24906: /*
24907: ** Default permissions when creating a new file
24908: */
24909: #ifndef SQLITE_DEFAULT_FILE_PERMISSIONS
24910: # define SQLITE_DEFAULT_FILE_PERMISSIONS 0644
24911: #endif
24912: 
24913: /*
24914:  ** Default permissions when creating auto proxy dir
24915:  */
24916: #ifndef SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
24917: # define SQLITE_DEFAULT_PROXYDIR_PERMISSIONS 0755
24918: #endif
24919: 
24920: /*
24921: ** Maximum supported path-length.
24922: */
24923: #define MAX_PATHNAME 512
24924: 
24925: /*
24926: ** Only set the lastErrno if the error code is a real error and not 
24927: ** a normal expected return code of SQLITE_BUSY or SQLITE_OK
24928: */
24929: #define IS_LOCK_ERROR(x)  ((x != SQLITE_OK) && (x != SQLITE_BUSY))
24930: 
24931: /* Forward references */
24932: typedef struct unixShm unixShm;               /* Connection shared memory */
24933: typedef struct unixShmNode unixShmNode;       /* Shared memory instance */
24934: typedef struct unixInodeInfo unixInodeInfo;   /* An i-node */
24935: typedef struct UnixUnusedFd UnixUnusedFd;     /* An unused file descriptor */
24936: 
24937: /*
24938: ** Sometimes, after a file handle is closed by SQLite, the file descriptor
24939: ** cannot be closed immediately. In these cases, instances of the following
24940: ** structure are used to store the file descriptor while waiting for an
24941: ** opportunity to either close or reuse it.
24942: */
24943: struct UnixUnusedFd {
24944:   int fd;                   /* File descriptor to close */
24945:   int flags;                /* Flags this file descriptor was opened with */
24946:   UnixUnusedFd *pNext;      /* Next unused file descriptor on same file */
24947: };
24948: 
24949: /*
24950: ** The unixFile structure is subclass of sqlite3_file specific to the unix
24951: ** VFS implementations.
24952: */
24953: typedef struct unixFile unixFile;
24954: struct unixFile {
24955:   sqlite3_io_methods const *pMethod;  /* Always the first entry */
24956:   sqlite3_vfs *pVfs;                  /* The VFS that created this unixFile */
24957:   unixInodeInfo *pInode;              /* Info about locks on this inode */
24958:   int h;                              /* The file descriptor */
24959:   unsigned char eFileLock;            /* The type of lock held on this fd */
24960:   unsigned char ctrlFlags;            /* Behavioral bits.  UNIXFILE_* flags */
24961:   int lastErrno;                      /* The unix errno from last I/O error */
24962:   void *lockingContext;               /* Locking style specific state */
24963:   UnixUnusedFd *pUnused;              /* Pre-allocated UnixUnusedFd */
24964:   const char *zPath;                  /* Name of the file */
24965:   unixShm *pShm;                      /* Shared memory segment information */
24966:   int szChunk;                        /* Configured by FCNTL_CHUNK_SIZE */
24967: #if SQLITE_ENABLE_LOCKING_STYLE
24968:   int openFlags;                      /* The flags specified at open() */
24969: #endif
24970: #if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__)
24971:   unsigned fsFlags;                   /* cached details from statfs() */
24972: #endif
24973: #if OS_VXWORKS
24974:   struct vxworksFileId *pId;          /* Unique file ID */
24975: #endif
24976: #ifndef NDEBUG
24977:   /* The next group of variables are used to track whether or not the
24978:   ** transaction counter in bytes 24-27 of database files are updated
24979:   ** whenever any part of the database changes.  An assertion fault will
24980:   ** occur if a file is updated without also updating the transaction
24981:   ** counter.  This test is made to avoid new problems similar to the
24982:   ** one described by ticket #3584. 
24983:   */
24984:   unsigned char transCntrChng;   /* True if the transaction counter changed */
24985:   unsigned char dbUpdate;        /* True if any part of database file changed */
24986:   unsigned char inNormalWrite;   /* True if in a normal write operation */
24987: #endif
24988: #ifdef SQLITE_TEST
24989:   /* In test mode, increase the size of this structure a bit so that 
24990:   ** it is larger than the struct CrashFile defined in test6.c.
24991:   */
24992:   char aPadding[32];
24993: #endif
24994: };
24995: 
24996: /*
24997: ** Allowed values for the unixFile.ctrlFlags bitmask:
24998: */
24999: #define UNIXFILE_EXCL        0x01     /* Connections from one process only */
25000: #define UNIXFILE_RDONLY      0x02     /* Connection is read only */
25001: #define UNIXFILE_PERSIST_WAL 0x04     /* Persistent WAL mode */
25002: #ifndef SQLITE_DISABLE_DIRSYNC
25003: # define UNIXFILE_DIRSYNC    0x08     /* Directory sync needed */
25004: #else
25005: # define UNIXFILE_DIRSYNC    0x00
25006: #endif
25007: #define UNIXFILE_PSOW        0x10     /* SQLITE_IOCAP_POWERSAFE_OVERWRITE */
25008: #define UNIXFILE_DELETE      0x20     /* Delete on close */
25009: #define UNIXFILE_URI         0x40     /* Filename might have query parameters */
25010: #define UNIXFILE_NOLOCK      0x80     /* Do no file locking */
25011: 
25012: /*
25013: ** Include code that is common to all os_*.c files
25014: */
25015: /************** Include os_common.h in the middle of os_unix.c ***************/
25016: /************** Begin file os_common.h ***************************************/
25017: /*
25018: ** 2004 May 22
25019: **
25020: ** The author disclaims copyright to this source code.  In place of
25021: ** a legal notice, here is a blessing:
25022: **
25023: **    May you do good and not evil.
25024: **    May you find forgiveness for yourself and forgive others.
25025: **    May you share freely, never taking more than you give.
25026: **
25027: ******************************************************************************
25028: **
25029: ** This file contains macros and a little bit of code that is common to
25030: ** all of the platform-specific files (os_*.c) and is #included into those
25031: ** files.
25032: **
25033: ** This file should be #included by the os_*.c files only.  It is not a
25034: ** general purpose header file.
25035: */
25036: #ifndef _OS_COMMON_H_
25037: #define _OS_COMMON_H_
25038: 
25039: /*
25040: ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
25041: ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
25042: ** switch.  The following code should catch this problem at compile-time.
25043: */
25044: #ifdef MEMORY_DEBUG
25045: # error "The MEMORY_DEBUG macro is obsolete.  Use SQLITE_DEBUG instead."
25046: #endif
25047: 
25048: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
25049: # ifndef SQLITE_DEBUG_OS_TRACE
25050: #   define SQLITE_DEBUG_OS_TRACE 0
25051: # endif
25052:   int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
25053: # define OSTRACE(X)          if( sqlite3OSTrace ) sqlite3DebugPrintf X
25054: #else
25055: # define OSTRACE(X)
25056: #endif
25057: 
25058: /*
25059: ** Macros for performance tracing.  Normally turned off.  Only works
25060: ** on i486 hardware.
25061: */
25062: #ifdef SQLITE_PERFORMANCE_TRACE
25063: 
25064: /* 
25065: ** hwtime.h contains inline assembler code for implementing 
25066: ** high-performance timing routines.
25067: */
25068: /************** Include hwtime.h in the middle of os_common.h ****************/
25069: /************** Begin file hwtime.h ******************************************/
25070: /*
25071: ** 2008 May 27
25072: **
25073: ** The author disclaims copyright to this source code.  In place of
25074: ** a legal notice, here is a blessing:
25075: **
25076: **    May you do good and not evil.
25077: **    May you find forgiveness for yourself and forgive others.
25078: **    May you share freely, never taking more than you give.
25079: **
25080: ******************************************************************************
25081: **
25082: ** This file contains inline asm code for retrieving "high-performance"
25083: ** counters for x86 class CPUs.
25084: */
25085: #ifndef _HWTIME_H_
25086: #define _HWTIME_H_
25087: 
25088: /*
25089: ** The following routine only works on pentium-class (or newer) processors.
25090: ** It uses the RDTSC opcode to read the cycle count value out of the
25091: ** processor and returns that value.  This can be used for high-res
25092: ** profiling.
25093: */
25094: #if (defined(__GNUC__) || defined(_MSC_VER)) && \
25095:       (defined(i386) || defined(__i386__) || defined(_M_IX86))
25096: 
25097:   #if defined(__GNUC__)
25098: 
25099:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
25100:      unsigned int lo, hi;
25101:      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
25102:      return (sqlite_uint64)hi << 32 | lo;
25103:   }
25104: 
25105:   #elif defined(_MSC_VER)
25106: 
25107:   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
25108:      __asm {
25109:         rdtsc
25110:         ret       ; return value at EDX:EAX
25111:      }
25112:   }
25113: 
25114:   #endif
25115: 
25116: #elif (defined(__GNUC__) && defined(__x86_64__))
25117: 
25118:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
25119:       unsigned long val;
25120:       __asm__ __volatile__ ("rdtsc" : "=A" (val));
25121:       return val;
25122:   }
25123:  
25124: #elif (defined(__GNUC__) && defined(__ppc__))
25125: 
25126:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
25127:       unsigned long long retval;
25128:       unsigned long junk;
25129:       __asm__ __volatile__ ("\n\
25130:           1:      mftbu   %1\n\
25131:                   mftb    %L0\n\
25132:                   mftbu   %0\n\
25133:                   cmpw    %0,%1\n\
25134:                   bne     1b"
25135:                   : "=r" (retval), "=r" (junk));
25136:       return retval;
25137:   }
25138: 
25139: #else
25140: 
25141:   #error Need implementation of sqlite3Hwtime() for your platform.
25142: 
25143:   /*
25144:   ** To compile without implementing sqlite3Hwtime() for your platform,
25145:   ** you can remove the above #error and use the following
25146:   ** stub function.  You will lose timing support for many
25147:   ** of the debugging and testing utilities, but it should at
25148:   ** least compile and run.
25149:   */
25150: SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
25151: 
25152: #endif
25153: 
25154: #endif /* !defined(_HWTIME_H_) */
25155: 
25156: /************** End of hwtime.h **********************************************/
25157: /************** Continuing where we left off in os_common.h ******************/
25158: 
25159: static sqlite_uint64 g_start;
25160: static sqlite_uint64 g_elapsed;
25161: #define TIMER_START       g_start=sqlite3Hwtime()
25162: #define TIMER_END         g_elapsed=sqlite3Hwtime()-g_start
25163: #define TIMER_ELAPSED     g_elapsed
25164: #else
25165: #define TIMER_START
25166: #define TIMER_END
25167: #define TIMER_ELAPSED     ((sqlite_uint64)0)
25168: #endif
25169: 
25170: /*
25171: ** If we compile with the SQLITE_TEST macro set, then the following block
25172: ** of code will give us the ability to simulate a disk I/O error.  This
25173: ** is used for testing the I/O recovery logic.
25174: */
25175: #ifdef SQLITE_TEST
25176: SQLITE_API int sqlite3_io_error_hit = 0;            /* Total number of I/O Errors */
25177: SQLITE_API int sqlite3_io_error_hardhit = 0;        /* Number of non-benign errors */
25178: SQLITE_API int sqlite3_io_error_pending = 0;        /* Count down to first I/O error */
25179: SQLITE_API int sqlite3_io_error_persist = 0;        /* True if I/O errors persist */
25180: SQLITE_API int sqlite3_io_error_benign = 0;         /* True if errors are benign */
25181: SQLITE_API int sqlite3_diskfull_pending = 0;
25182: SQLITE_API int sqlite3_diskfull = 0;
25183: #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
25184: #define SimulateIOError(CODE)  \
25185:   if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
25186:        || sqlite3_io_error_pending-- == 1 )  \
25187:               { local_ioerr(); CODE; }
25188: static void local_ioerr(){
25189:   IOTRACE(("IOERR\n"));
25190:   sqlite3_io_error_hit++;
25191:   if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
25192: }
25193: #define SimulateDiskfullError(CODE) \
25194:    if( sqlite3_diskfull_pending ){ \
25195:      if( sqlite3_diskfull_pending == 1 ){ \
25196:        local_ioerr(); \
25197:        sqlite3_diskfull = 1; \
25198:        sqlite3_io_error_hit = 1; \
25199:        CODE; \
25200:      }else{ \
25201:        sqlite3_diskfull_pending--; \
25202:      } \
25203:    }
25204: #else
25205: #define SimulateIOErrorBenign(X)
25206: #define SimulateIOError(A)
25207: #define SimulateDiskfullError(A)
25208: #endif
25209: 
25210: /*
25211: ** When testing, keep a count of the number of open files.
25212: */
25213: #ifdef SQLITE_TEST
25214: SQLITE_API int sqlite3_open_file_count = 0;
25215: #define OpenCounter(X)  sqlite3_open_file_count+=(X)
25216: #else
25217: #define OpenCounter(X)
25218: #endif
25219: 
25220: #endif /* !defined(_OS_COMMON_H_) */
25221: 
25222: /************** End of os_common.h *******************************************/
25223: /************** Continuing where we left off in os_unix.c ********************/
25224: 
25225: /*
25226: ** Define various macros that are missing from some systems.
25227: */
25228: #ifndef O_LARGEFILE
25229: # define O_LARGEFILE 0
25230: #endif
25231: #ifdef SQLITE_DISABLE_LFS
25232: # undef O_LARGEFILE
25233: # define O_LARGEFILE 0
25234: #endif
25235: #ifndef O_NOFOLLOW
25236: # define O_NOFOLLOW 0
25237: #endif
25238: #ifndef O_BINARY
25239: # define O_BINARY 0
25240: #endif
25241: 
25242: /*
25243: ** The threadid macro resolves to the thread-id or to 0.  Used for
25244: ** testing and debugging only.
25245: */
25246: #if SQLITE_THREADSAFE
25247: #define threadid pthread_self()
25248: #else
25249: #define threadid 0
25250: #endif
25251: 
25252: /*
25253: ** Different Unix systems declare open() in different ways.  Same use
25254: ** open(const char*,int,mode_t).  Others use open(const char*,int,...).
25255: ** The difference is important when using a pointer to the function.
25256: **
25257: ** The safest way to deal with the problem is to always use this wrapper
25258: ** which always has the same well-defined interface.
25259: */
25260: static int posixOpen(const char *zFile, int flags, int mode){
25261:   return open(zFile, flags, mode);
25262: }
25263: 
25264: /* Forward reference */
25265: static int openDirectory(const char*, int*);
25266: 
25267: /*
25268: ** Many system calls are accessed through pointer-to-functions so that
25269: ** they may be overridden at runtime to facilitate fault injection during
25270: ** testing and sandboxing.  The following array holds the names and pointers
25271: ** to all overrideable system calls.
25272: */
25273: static struct unix_syscall {
25274:   const char *zName;            /* Name of the sytem call */
25275:   sqlite3_syscall_ptr pCurrent; /* Current value of the system call */
25276:   sqlite3_syscall_ptr pDefault; /* Default value */
25277: } aSyscall[] = {
25278:   { "open",         (sqlite3_syscall_ptr)posixOpen,  0  },
25279: #define osOpen      ((int(*)(const char*,int,int))aSyscall[0].pCurrent)
25280: 
25281:   { "close",        (sqlite3_syscall_ptr)close,      0  },
25282: #define osClose     ((int(*)(int))aSyscall[1].pCurrent)
25283: 
25284:   { "access",       (sqlite3_syscall_ptr)access,     0  },
25285: #define osAccess    ((int(*)(const char*,int))aSyscall[2].pCurrent)
25286: 
25287:   { "getcwd",       (sqlite3_syscall_ptr)getcwd,     0  },
25288: #define osGetcwd    ((char*(*)(char*,size_t))aSyscall[3].pCurrent)
25289: 
25290:   { "stat",         (sqlite3_syscall_ptr)stat,       0  },
25291: #define osStat      ((int(*)(const char*,struct stat*))aSyscall[4].pCurrent)
25292: 
25293: /*
25294: ** The DJGPP compiler environment looks mostly like Unix, but it
25295: ** lacks the fcntl() system call.  So redefine fcntl() to be something
25296: ** that always succeeds.  This means that locking does not occur under
25297: ** DJGPP.  But it is DOS - what did you expect?
25298: */
25299: #ifdef __DJGPP__
25300:   { "fstat",        0,                 0  },
25301: #define osFstat(a,b,c)    0
25302: #else     
25303:   { "fstat",        (sqlite3_syscall_ptr)fstat,      0  },
25304: #define osFstat     ((int(*)(int,struct stat*))aSyscall[5].pCurrent)
25305: #endif
25306: 
25307:   { "ftruncate",    (sqlite3_syscall_ptr)ftruncate,  0  },
25308: #define osFtruncate ((int(*)(int,off_t))aSyscall[6].pCurrent)
25309: 
25310:   { "fcntl",        (sqlite3_syscall_ptr)fcntl,      0  },
25311: #define osFcntl     ((int(*)(int,int,...))aSyscall[7].pCurrent)
25312: 
25313:   { "read",         (sqlite3_syscall_ptr)read,       0  },
25314: #define osRead      ((ssize_t(*)(int,void*,size_t))aSyscall[8].pCurrent)
25315: 
25316: #if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE
25317:   { "pread",        (sqlite3_syscall_ptr)pread,      0  },
25318: #else
25319:   { "pread",        (sqlite3_syscall_ptr)0,          0  },
25320: #endif
25321: #define osPread     ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[9].pCurrent)
25322: 
25323: #if defined(USE_PREAD64)
25324:   { "pread64",      (sqlite3_syscall_ptr)pread64,    0  },
25325: #else
25326:   { "pread64",      (sqlite3_syscall_ptr)0,          0  },
25327: #endif
25328: #define osPread64   ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[10].pCurrent)
25329: 
25330:   { "write",        (sqlite3_syscall_ptr)write,      0  },
25331: #define osWrite     ((ssize_t(*)(int,const void*,size_t))aSyscall[11].pCurrent)
25332: 
25333: #if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE
25334:   { "pwrite",       (sqlite3_syscall_ptr)pwrite,     0  },
25335: #else
25336:   { "pwrite",       (sqlite3_syscall_ptr)0,          0  },
25337: #endif
25338: #define osPwrite    ((ssize_t(*)(int,const void*,size_t,off_t))\
25339:                     aSyscall[12].pCurrent)
25340: 
25341: #if defined(USE_PREAD64)
25342:   { "pwrite64",     (sqlite3_syscall_ptr)pwrite64,   0  },
25343: #else
25344:   { "pwrite64",     (sqlite3_syscall_ptr)0,          0  },
25345: #endif
25346: #define osPwrite64  ((ssize_t(*)(int,const void*,size_t,off_t))\
25347:                     aSyscall[13].pCurrent)
25348: 
25349: #if SQLITE_ENABLE_LOCKING_STYLE
25350:   { "fchmod",       (sqlite3_syscall_ptr)fchmod,     0  },
25351: #else
25352:   { "fchmod",       (sqlite3_syscall_ptr)0,          0  },
25353: #endif
25354: #define osFchmod    ((int(*)(int,mode_t))aSyscall[14].pCurrent)
25355: 
25356: #if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
25357:   { "fallocate",    (sqlite3_syscall_ptr)posix_fallocate,  0 },
25358: #else
25359:   { "fallocate",    (sqlite3_syscall_ptr)0,                0 },
25360: #endif
25361: #define osFallocate ((int(*)(int,off_t,off_t))aSyscall[15].pCurrent)
25362: 
25363:   { "unlink",       (sqlite3_syscall_ptr)unlink,           0 },
25364: #define osUnlink    ((int(*)(const char*))aSyscall[16].pCurrent)
25365: 
25366:   { "openDirectory",    (sqlite3_syscall_ptr)openDirectory,      0 },
25367: #define osOpenDirectory ((int(*)(const char*,int*))aSyscall[17].pCurrent)
25368: 
25369:   { "mkdir",        (sqlite3_syscall_ptr)mkdir,           0 },
25370: #define osMkdir     ((int(*)(const char*,mode_t))aSyscall[18].pCurrent)
25371: 
25372:   { "rmdir",        (sqlite3_syscall_ptr)rmdir,           0 },
25373: #define osRmdir     ((int(*)(const char*))aSyscall[19].pCurrent)
25374: 
25375: }; /* End of the overrideable system calls */
25376: 
25377: /*
25378: ** This is the xSetSystemCall() method of sqlite3_vfs for all of the
25379: ** "unix" VFSes.  Return SQLITE_OK opon successfully updating the
25380: ** system call pointer, or SQLITE_NOTFOUND if there is no configurable
25381: ** system call named zName.
25382: */
25383: static int unixSetSystemCall(
25384:   sqlite3_vfs *pNotUsed,        /* The VFS pointer.  Not used */
25385:   const char *zName,            /* Name of system call to override */
25386:   sqlite3_syscall_ptr pNewFunc  /* Pointer to new system call value */
25387: ){
25388:   unsigned int i;
25389:   int rc = SQLITE_NOTFOUND;
25390: 
25391:   UNUSED_PARAMETER(pNotUsed);
25392:   if( zName==0 ){
25393:     /* If no zName is given, restore all system calls to their default
25394:     ** settings and return NULL
25395:     */
25396:     rc = SQLITE_OK;
25397:     for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
25398:       if( aSyscall[i].pDefault ){
25399:         aSyscall[i].pCurrent = aSyscall[i].pDefault;
25400:       }
25401:     }
25402:   }else{
25403:     /* If zName is specified, operate on only the one system call
25404:     ** specified.
25405:     */
25406:     for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
25407:       if( strcmp(zName, aSyscall[i].zName)==0 ){
25408:         if( aSyscall[i].pDefault==0 ){
25409:           aSyscall[i].pDefault = aSyscall[i].pCurrent;
25410:         }
25411:         rc = SQLITE_OK;
25412:         if( pNewFunc==0 ) pNewFunc = aSyscall[i].pDefault;
25413:         aSyscall[i].pCurrent = pNewFunc;
25414:         break;
25415:       }
25416:     }
25417:   }
25418:   return rc;
25419: }
25420: 
25421: /*
25422: ** Return the value of a system call.  Return NULL if zName is not a
25423: ** recognized system call name.  NULL is also returned if the system call
25424: ** is currently undefined.
25425: */
25426: static sqlite3_syscall_ptr unixGetSystemCall(
25427:   sqlite3_vfs *pNotUsed,
25428:   const char *zName
25429: ){
25430:   unsigned int i;
25431: 
25432:   UNUSED_PARAMETER(pNotUsed);
25433:   for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
25434:     if( strcmp(zName, aSyscall[i].zName)==0 ) return aSyscall[i].pCurrent;
25435:   }
25436:   return 0;
25437: }
25438: 
25439: /*
25440: ** Return the name of the first system call after zName.  If zName==NULL
25441: ** then return the name of the first system call.  Return NULL if zName
25442: ** is the last system call or if zName is not the name of a valid
25443: ** system call.
25444: */
25445: static const char *unixNextSystemCall(sqlite3_vfs *p, const char *zName){
25446:   int i = -1;
25447: 
25448:   UNUSED_PARAMETER(p);
25449:   if( zName ){
25450:     for(i=0; i<ArraySize(aSyscall)-1; i++){
25451:       if( strcmp(zName, aSyscall[i].zName)==0 ) break;
25452:     }
25453:   }
25454:   for(i++; i<ArraySize(aSyscall); i++){
25455:     if( aSyscall[i].pCurrent!=0 ) return aSyscall[i].zName;
25456:   }
25457:   return 0;
25458: }
25459: 
25460: /*
25461: ** Retry open() calls that fail due to EINTR
25462: */
25463: static int robust_open(const char *z, int f, int m){
25464:   int rc;
25465:   do{ rc = osOpen(z,f,m); }while( rc<0 && errno==EINTR );
25466:   return rc;
25467: }
25468: 
25469: /*
25470: ** Helper functions to obtain and relinquish the global mutex. The
25471: ** global mutex is used to protect the unixInodeInfo and
25472: ** vxworksFileId objects used by this file, all of which may be 
25473: ** shared by multiple threads.
25474: **
25475: ** Function unixMutexHeld() is used to assert() that the global mutex 
25476: ** is held when required. This function is only used as part of assert() 
25477: ** statements. e.g.
25478: **
25479: **   unixEnterMutex()
25480: **     assert( unixMutexHeld() );
25481: **   unixEnterLeave()
25482: */
25483: static void unixEnterMutex(void){
25484:   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
25485: }
25486: static void unixLeaveMutex(void){
25487:   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
25488: }
25489: #ifdef SQLITE_DEBUG
25490: static int unixMutexHeld(void) {
25491:   return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
25492: }
25493: #endif
25494: 
25495: 
25496: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
25497: /*
25498: ** Helper function for printing out trace information from debugging
25499: ** binaries. This returns the string represetation of the supplied
25500: ** integer lock-type.
25501: */
25502: static const char *azFileLock(int eFileLock){
25503:   switch( eFileLock ){
25504:     case NO_LOCK: return "NONE";
25505:     case SHARED_LOCK: return "SHARED";
25506:     case RESERVED_LOCK: return "RESERVED";
25507:     case PENDING_LOCK: return "PENDING";
25508:     case EXCLUSIVE_LOCK: return "EXCLUSIVE";
25509:   }
25510:   return "ERROR";
25511: }
25512: #endif
25513: 
25514: #ifdef SQLITE_LOCK_TRACE
25515: /*
25516: ** Print out information about all locking operations.
25517: **
25518: ** This routine is used for troubleshooting locks on multithreaded
25519: ** platforms.  Enable by compiling with the -DSQLITE_LOCK_TRACE
25520: ** command-line option on the compiler.  This code is normally
25521: ** turned off.
25522: */
25523: static int lockTrace(int fd, int op, struct flock *p){
25524:   char *zOpName, *zType;
25525:   int s;
25526:   int savedErrno;
25527:   if( op==F_GETLK ){
25528:     zOpName = "GETLK";
25529:   }else if( op==F_SETLK ){
25530:     zOpName = "SETLK";
25531:   }else{
25532:     s = osFcntl(fd, op, p);
25533:     sqlite3DebugPrintf("fcntl unknown %d %d %d\n", fd, op, s);
25534:     return s;
25535:   }
25536:   if( p->l_type==F_RDLCK ){
25537:     zType = "RDLCK";
25538:   }else if( p->l_type==F_WRLCK ){
25539:     zType = "WRLCK";
25540:   }else if( p->l_type==F_UNLCK ){
25541:     zType = "UNLCK";
25542:   }else{
25543:     assert( 0 );
25544:   }
25545:   assert( p->l_whence==SEEK_SET );
25546:   s = osFcntl(fd, op, p);
25547:   savedErrno = errno;
25548:   sqlite3DebugPrintf("fcntl %d %d %s %s %d %d %d %d\n",
25549:      threadid, fd, zOpName, zType, (int)p->l_start, (int)p->l_len,
25550:      (int)p->l_pid, s);
25551:   if( s==(-1) && op==F_SETLK && (p->l_type==F_RDLCK || p->l_type==F_WRLCK) ){
25552:     struct flock l2;
25553:     l2 = *p;
25554:     osFcntl(fd, F_GETLK, &l2);
25555:     if( l2.l_type==F_RDLCK ){
25556:       zType = "RDLCK";
25557:     }else if( l2.l_type==F_WRLCK ){
25558:       zType = "WRLCK";
25559:     }else if( l2.l_type==F_UNLCK ){
25560:       zType = "UNLCK";
25561:     }else{
25562:       assert( 0 );
25563:     }
25564:     sqlite3DebugPrintf("fcntl-failure-reason: %s %d %d %d\n",
25565:        zType, (int)l2.l_start, (int)l2.l_len, (int)l2.l_pid);
25566:   }
25567:   errno = savedErrno;
25568:   return s;
25569: }
25570: #undef osFcntl
25571: #define osFcntl lockTrace
25572: #endif /* SQLITE_LOCK_TRACE */
25573: 
25574: /*
25575: ** Retry ftruncate() calls that fail due to EINTR
25576: */
25577: static int robust_ftruncate(int h, sqlite3_int64 sz){
25578:   int rc;
25579:   do{ rc = osFtruncate(h,sz); }while( rc<0 && errno==EINTR );
25580:   return rc;
25581: }
25582: 
25583: /*
25584: ** This routine translates a standard POSIX errno code into something
25585: ** useful to the clients of the sqlite3 functions.  Specifically, it is
25586: ** intended to translate a variety of "try again" errors into SQLITE_BUSY
25587: ** and a variety of "please close the file descriptor NOW" errors into 
25588: ** SQLITE_IOERR
25589: ** 
25590: ** Errors during initialization of locks, or file system support for locks,
25591: ** should handle ENOLCK, ENOTSUP, EOPNOTSUPP separately.
25592: */
25593: static int sqliteErrorFromPosixError(int posixError, int sqliteIOErr) {
25594:   switch (posixError) {
25595: #if 0
25596:   /* At one point this code was not commented out. In theory, this branch
25597:   ** should never be hit, as this function should only be called after
25598:   ** a locking-related function (i.e. fcntl()) has returned non-zero with
25599:   ** the value of errno as the first argument. Since a system call has failed,
25600:   ** errno should be non-zero.
25601:   **
25602:   ** Despite this, if errno really is zero, we still don't want to return
25603:   ** SQLITE_OK. The system call failed, and *some* SQLite error should be
25604:   ** propagated back to the caller. Commenting this branch out means errno==0
25605:   ** will be handled by the "default:" case below.
25606:   */
25607:   case 0: 
25608:     return SQLITE_OK;
25609: #endif
25610: 
25611:   case EAGAIN:
25612:   case ETIMEDOUT:
25613:   case EBUSY:
25614:   case EINTR:
25615:   case ENOLCK:  
25616:     /* random NFS retry error, unless during file system support 
25617:      * introspection, in which it actually means what it says */
25618:     return SQLITE_BUSY;
25619:     
25620:   case EACCES: 
25621:     /* EACCES is like EAGAIN during locking operations, but not any other time*/
25622:     if( (sqliteIOErr == SQLITE_IOERR_LOCK) || 
25623: 	(sqliteIOErr == SQLITE_IOERR_UNLOCK) || 
25624: 	(sqliteIOErr == SQLITE_IOERR_RDLOCK) ||
25625: 	(sqliteIOErr == SQLITE_IOERR_CHECKRESERVEDLOCK) ){
25626:       return SQLITE_BUSY;
25627:     }
25628:     /* else fall through */
25629:   case EPERM: 
25630:     return SQLITE_PERM;
25631:     
25632:   /* EDEADLK is only possible if a call to fcntl(F_SETLKW) is made. And
25633:   ** this module never makes such a call. And the code in SQLite itself 
25634:   ** asserts that SQLITE_IOERR_BLOCKED is never returned. For these reasons
25635:   ** this case is also commented out. If the system does set errno to EDEADLK,
25636:   ** the default SQLITE_IOERR_XXX code will be returned. */
25637: #if 0
25638:   case EDEADLK:
25639:     return SQLITE_IOERR_BLOCKED;
25640: #endif
25641:     
25642: #if EOPNOTSUPP!=ENOTSUP
25643:   case EOPNOTSUPP: 
25644:     /* something went terribly awry, unless during file system support 
25645:      * introspection, in which it actually means what it says */
25646: #endif
25647: #ifdef ENOTSUP
25648:   case ENOTSUP: 
25649:     /* invalid fd, unless during file system support introspection, in which 
25650:      * it actually means what it says */
25651: #endif
25652:   case EIO:
25653:   case EBADF:
25654:   case EINVAL:
25655:   case ENOTCONN:
25656:   case ENODEV:
25657:   case ENXIO:
25658:   case ENOENT:
25659: #ifdef ESTALE                     /* ESTALE is not defined on Interix systems */
25660:   case ESTALE:
25661: #endif
25662:   case ENOSYS:
25663:     /* these should force the client to close the file and reconnect */
25664:     
25665:   default: 
25666:     return sqliteIOErr;
25667:   }
25668: }
25669: 
25670: 
25671: 
25672: /******************************************************************************
25673: ****************** Begin Unique File ID Utility Used By VxWorks ***************
25674: **
25675: ** On most versions of unix, we can get a unique ID for a file by concatenating
25676: ** the device number and the inode number.  But this does not work on VxWorks.
25677: ** On VxWorks, a unique file id must be based on the canonical filename.
25678: **
25679: ** A pointer to an instance of the following structure can be used as a
25680: ** unique file ID in VxWorks.  Each instance of this structure contains
25681: ** a copy of the canonical filename.  There is also a reference count.  
25682: ** The structure is reclaimed when the number of pointers to it drops to
25683: ** zero.
25684: **
25685: ** There are never very many files open at one time and lookups are not
25686: ** a performance-critical path, so it is sufficient to put these
25687: ** structures on a linked list.
25688: */
25689: struct vxworksFileId {
25690:   struct vxworksFileId *pNext;  /* Next in a list of them all */
25691:   int nRef;                     /* Number of references to this one */
25692:   int nName;                    /* Length of the zCanonicalName[] string */
25693:   char *zCanonicalName;         /* Canonical filename */
25694: };
25695: 
25696: #if OS_VXWORKS
25697: /* 
25698: ** All unique filenames are held on a linked list headed by this
25699: ** variable:
25700: */
25701: static struct vxworksFileId *vxworksFileList = 0;
25702: 
25703: /*
25704: ** Simplify a filename into its canonical form
25705: ** by making the following changes:
25706: **
25707: **  * removing any trailing and duplicate /
25708: **  * convert /./ into just /
25709: **  * convert /A/../ where A is any simple name into just /
25710: **
25711: ** Changes are made in-place.  Return the new name length.
25712: **
25713: ** The original filename is in z[0..n-1].  Return the number of
25714: ** characters in the simplified name.
25715: */
25716: static int vxworksSimplifyName(char *z, int n){
25717:   int i, j;
25718:   while( n>1 && z[n-1]=='/' ){ n--; }
25719:   for(i=j=0; i<n; i++){
25720:     if( z[i]=='/' ){
25721:       if( z[i+1]=='/' ) continue;
25722:       if( z[i+1]=='.' && i+2<n && z[i+2]=='/' ){
25723:         i += 1;
25724:         continue;
25725:       }
25726:       if( z[i+1]=='.' && i+3<n && z[i+2]=='.' && z[i+3]=='/' ){
25727:         while( j>0 && z[j-1]!='/' ){ j--; }
25728:         if( j>0 ){ j--; }
25729:         i += 2;
25730:         continue;
25731:       }
25732:     }
25733:     z[j++] = z[i];
25734:   }
25735:   z[j] = 0;
25736:   return j;
25737: }
25738: 
25739: /*
25740: ** Find a unique file ID for the given absolute pathname.  Return
25741: ** a pointer to the vxworksFileId object.  This pointer is the unique
25742: ** file ID.
25743: **
25744: ** The nRef field of the vxworksFileId object is incremented before
25745: ** the object is returned.  A new vxworksFileId object is created
25746: ** and added to the global list if necessary.
25747: **
25748: ** If a memory allocation error occurs, return NULL.
25749: */
25750: static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){
25751:   struct vxworksFileId *pNew;         /* search key and new file ID */
25752:   struct vxworksFileId *pCandidate;   /* For looping over existing file IDs */
25753:   int n;                              /* Length of zAbsoluteName string */
25754: 
25755:   assert( zAbsoluteName[0]=='/' );
25756:   n = (int)strlen(zAbsoluteName);
25757:   pNew = sqlite3_malloc( sizeof(*pNew) + (n+1) );
25758:   if( pNew==0 ) return 0;
25759:   pNew->zCanonicalName = (char*)&pNew[1];
25760:   memcpy(pNew->zCanonicalName, zAbsoluteName, n+1);
25761:   n = vxworksSimplifyName(pNew->zCanonicalName, n);
25762: 
25763:   /* Search for an existing entry that matching the canonical name.
25764:   ** If found, increment the reference count and return a pointer to
25765:   ** the existing file ID.
25766:   */
25767:   unixEnterMutex();
25768:   for(pCandidate=vxworksFileList; pCandidate; pCandidate=pCandidate->pNext){
25769:     if( pCandidate->nName==n 
25770:      && memcmp(pCandidate->zCanonicalName, pNew->zCanonicalName, n)==0
25771:     ){
25772:        sqlite3_free(pNew);
25773:        pCandidate->nRef++;
25774:        unixLeaveMutex();
25775:        return pCandidate;
25776:     }
25777:   }
25778: 
25779:   /* No match was found.  We will make a new file ID */
25780:   pNew->nRef = 1;
25781:   pNew->nName = n;
25782:   pNew->pNext = vxworksFileList;
25783:   vxworksFileList = pNew;
25784:   unixLeaveMutex();
25785:   return pNew;
25786: }
25787: 
25788: /*
25789: ** Decrement the reference count on a vxworksFileId object.  Free
25790: ** the object when the reference count reaches zero.
25791: */
25792: static void vxworksReleaseFileId(struct vxworksFileId *pId){
25793:   unixEnterMutex();
25794:   assert( pId->nRef>0 );
25795:   pId->nRef--;
25796:   if( pId->nRef==0 ){
25797:     struct vxworksFileId **pp;
25798:     for(pp=&vxworksFileList; *pp && *pp!=pId; pp = &((*pp)->pNext)){}
25799:     assert( *pp==pId );
25800:     *pp = pId->pNext;
25801:     sqlite3_free(pId);
25802:   }
25803:   unixLeaveMutex();
25804: }
25805: #endif /* OS_VXWORKS */
25806: /*************** End of Unique File ID Utility Used By VxWorks ****************
25807: ******************************************************************************/
25808: 
25809: 
25810: /******************************************************************************
25811: *************************** Posix Advisory Locking ****************************
25812: **
25813: ** POSIX advisory locks are broken by design.  ANSI STD 1003.1 (1996)
25814: ** section 6.5.2.2 lines 483 through 490 specify that when a process
25815: ** sets or clears a lock, that operation overrides any prior locks set
25816: ** by the same process.  It does not explicitly say so, but this implies
25817: ** that it overrides locks set by the same process using a different
25818: ** file descriptor.  Consider this test case:
25819: **
25820: **       int fd1 = open("./file1", O_RDWR|O_CREAT, 0644);
25821: **       int fd2 = open("./file2", O_RDWR|O_CREAT, 0644);
25822: **
25823: ** Suppose ./file1 and ./file2 are really the same file (because
25824: ** one is a hard or symbolic link to the other) then if you set
25825: ** an exclusive lock on fd1, then try to get an exclusive lock
25826: ** on fd2, it works.  I would have expected the second lock to
25827: ** fail since there was already a lock on the file due to fd1.
25828: ** But not so.  Since both locks came from the same process, the
25829: ** second overrides the first, even though they were on different
25830: ** file descriptors opened on different file names.
25831: **
25832: ** This means that we cannot use POSIX locks to synchronize file access
25833: ** among competing threads of the same process.  POSIX locks will work fine
25834: ** to synchronize access for threads in separate processes, but not
25835: ** threads within the same process.
25836: **
25837: ** To work around the problem, SQLite has to manage file locks internally
25838: ** on its own.  Whenever a new database is opened, we have to find the
25839: ** specific inode of the database file (the inode is determined by the
25840: ** st_dev and st_ino fields of the stat structure that fstat() fills in)
25841: ** and check for locks already existing on that inode.  When locks are
25842: ** created or removed, we have to look at our own internal record of the
25843: ** locks to see if another thread has previously set a lock on that same
25844: ** inode.
25845: **
25846: ** (Aside: The use of inode numbers as unique IDs does not work on VxWorks.
25847: ** For VxWorks, we have to use the alternative unique ID system based on
25848: ** canonical filename and implemented in the previous division.)
25849: **
25850: ** The sqlite3_file structure for POSIX is no longer just an integer file
25851: ** descriptor.  It is now a structure that holds the integer file
25852: ** descriptor and a pointer to a structure that describes the internal
25853: ** locks on the corresponding inode.  There is one locking structure
25854: ** per inode, so if the same inode is opened twice, both unixFile structures
25855: ** point to the same locking structure.  The locking structure keeps
25856: ** a reference count (so we will know when to delete it) and a "cnt"
25857: ** field that tells us its internal lock status.  cnt==0 means the
25858: ** file is unlocked.  cnt==-1 means the file has an exclusive lock.
25859: ** cnt>0 means there are cnt shared locks on the file.
25860: **
25861: ** Any attempt to lock or unlock a file first checks the locking
25862: ** structure.  The fcntl() system call is only invoked to set a 
25863: ** POSIX lock if the internal lock structure transitions between
25864: ** a locked and an unlocked state.
25865: **
25866: ** But wait:  there are yet more problems with POSIX advisory locks.
25867: **
25868: ** If you close a file descriptor that points to a file that has locks,
25869: ** all locks on that file that are owned by the current process are
25870: ** released.  To work around this problem, each unixInodeInfo object
25871: ** maintains a count of the number of pending locks on tha inode.
25872: ** When an attempt is made to close an unixFile, if there are
25873: ** other unixFile open on the same inode that are holding locks, the call
25874: ** to close() the file descriptor is deferred until all of the locks clear.
25875: ** The unixInodeInfo structure keeps a list of file descriptors that need to
25876: ** be closed and that list is walked (and cleared) when the last lock
25877: ** clears.
25878: **
25879: ** Yet another problem:  LinuxThreads do not play well with posix locks.
25880: **
25881: ** Many older versions of linux use the LinuxThreads library which is
25882: ** not posix compliant.  Under LinuxThreads, a lock created by thread
25883: ** A cannot be modified or overridden by a different thread B.
25884: ** Only thread A can modify the lock.  Locking behavior is correct
25885: ** if the appliation uses the newer Native Posix Thread Library (NPTL)
25886: ** on linux - with NPTL a lock created by thread A can override locks
25887: ** in thread B.  But there is no way to know at compile-time which
25888: ** threading library is being used.  So there is no way to know at
25889: ** compile-time whether or not thread A can override locks on thread B.
25890: ** One has to do a run-time check to discover the behavior of the
25891: ** current process.
25892: **
25893: ** SQLite used to support LinuxThreads.  But support for LinuxThreads
25894: ** was dropped beginning with version 3.7.0.  SQLite will still work with
25895: ** LinuxThreads provided that (1) there is no more than one connection 
25896: ** per database file in the same process and (2) database connections
25897: ** do not move across threads.
25898: */
25899: 
25900: /*
25901: ** An instance of the following structure serves as the key used
25902: ** to locate a particular unixInodeInfo object.
25903: */
25904: struct unixFileId {
25905:   dev_t dev;                  /* Device number */
25906: #if OS_VXWORKS
25907:   struct vxworksFileId *pId;  /* Unique file ID for vxworks. */
25908: #else
25909:   ino_t ino;                  /* Inode number */
25910: #endif
25911: };
25912: 
25913: /*
25914: ** An instance of the following structure is allocated for each open
25915: ** inode.  Or, on LinuxThreads, there is one of these structures for
25916: ** each inode opened by each thread.
25917: **
25918: ** A single inode can have multiple file descriptors, so each unixFile
25919: ** structure contains a pointer to an instance of this object and this
25920: ** object keeps a count of the number of unixFile pointing to it.
25921: */
25922: struct unixInodeInfo {
25923:   struct unixFileId fileId;       /* The lookup key */
25924:   int nShared;                    /* Number of SHARED locks held */
25925:   unsigned char eFileLock;        /* One of SHARED_LOCK, RESERVED_LOCK etc. */
25926:   unsigned char bProcessLock;     /* An exclusive process lock is held */
25927:   int nRef;                       /* Number of pointers to this structure */
25928:   unixShmNode *pShmNode;          /* Shared memory associated with this inode */
25929:   int nLock;                      /* Number of outstanding file locks */
25930:   UnixUnusedFd *pUnused;          /* Unused file descriptors to close */
25931:   unixInodeInfo *pNext;           /* List of all unixInodeInfo objects */
25932:   unixInodeInfo *pPrev;           /*    .... doubly linked */
25933: #if SQLITE_ENABLE_LOCKING_STYLE
25934:   unsigned long long sharedByte;  /* for AFP simulated shared lock */
25935: #endif
25936: #if OS_VXWORKS
25937:   sem_t *pSem;                    /* Named POSIX semaphore */
25938:   char aSemName[MAX_PATHNAME+2];  /* Name of that semaphore */
25939: #endif
25940: };
25941: 
25942: /*
25943: ** A lists of all unixInodeInfo objects.
25944: */
25945: static unixInodeInfo *inodeList = 0;
25946: 
25947: /*
25948: **
25949: ** This function - unixLogError_x(), is only ever called via the macro
25950: ** unixLogError().
25951: **
25952: ** It is invoked after an error occurs in an OS function and errno has been
25953: ** set. It logs a message using sqlite3_log() containing the current value of
25954: ** errno and, if possible, the human-readable equivalent from strerror() or
25955: ** strerror_r().
25956: **
25957: ** The first argument passed to the macro should be the error code that
25958: ** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN). 
25959: ** The two subsequent arguments should be the name of the OS function that
25960: ** failed (e.g. "unlink", "open") and the the associated file-system path,
25961: ** if any.
25962: */
25963: #define unixLogError(a,b,c)     unixLogErrorAtLine(a,b,c,__LINE__)
25964: static int unixLogErrorAtLine(
25965:   int errcode,                    /* SQLite error code */
25966:   const char *zFunc,              /* Name of OS function that failed */
25967:   const char *zPath,              /* File path associated with error */
25968:   int iLine                       /* Source line number where error occurred */
25969: ){
25970:   char *zErr;                     /* Message from strerror() or equivalent */
25971:   int iErrno = errno;             /* Saved syscall error number */
25972: 
25973:   /* If this is not a threadsafe build (SQLITE_THREADSAFE==0), then use
25974:   ** the strerror() function to obtain the human-readable error message
25975:   ** equivalent to errno. Otherwise, use strerror_r().
25976:   */ 
25977: #if SQLITE_THREADSAFE && defined(HAVE_STRERROR_R)
25978:   char aErr[80];
25979:   memset(aErr, 0, sizeof(aErr));
25980:   zErr = aErr;
25981: 
25982:   /* If STRERROR_R_CHAR_P (set by autoconf scripts) or __USE_GNU is defined,
25983:   ** assume that the system provides the the GNU version of strerror_r() that 
25984:   ** returns a pointer to a buffer containing the error message. That pointer 
25985:   ** may point to aErr[], or it may point to some static storage somewhere. 
25986:   ** Otherwise, assume that the system provides the POSIX version of 
25987:   ** strerror_r(), which always writes an error message into aErr[].
25988:   **
25989:   ** If the code incorrectly assumes that it is the POSIX version that is
25990:   ** available, the error message will often be an empty string. Not a
25991:   ** huge problem. Incorrectly concluding that the GNU version is available 
25992:   ** could lead to a segfault though.
25993:   */
25994: #if defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)
25995:   zErr = 
25996: # endif
25997:   strerror_r(iErrno, aErr, sizeof(aErr)-1);
25998: 
25999: #elif SQLITE_THREADSAFE
26000:   /* This is a threadsafe build, but strerror_r() is not available. */
26001:   zErr = "";
26002: #else
26003:   /* Non-threadsafe build, use strerror(). */
26004:   zErr = strerror(iErrno);
26005: #endif
26006: 
26007:   assert( errcode!=SQLITE_OK );
26008:   if( zPath==0 ) zPath = "";
26009:   sqlite3_log(errcode,
26010:       "os_unix.c:%d: (%d) %s(%s) - %s",
26011:       iLine, iErrno, zFunc, zPath, zErr
26012:   );
26013: 
26014:   return errcode;
26015: }
26016: 
26017: /*
26018: ** Close a file descriptor.
26019: **
26020: ** We assume that close() almost always works, since it is only in a
26021: ** very sick application or on a very sick platform that it might fail.
26022: ** If it does fail, simply leak the file descriptor, but do log the
26023: ** error.
26024: **
26025: ** Note that it is not safe to retry close() after EINTR since the
26026: ** file descriptor might have already been reused by another thread.
26027: ** So we don't even try to recover from an EINTR.  Just log the error
26028: ** and move on.
26029: */
26030: static void robust_close(unixFile *pFile, int h, int lineno){
26031:   if( osClose(h) ){
26032:     unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close",
26033:                        pFile ? pFile->zPath : 0, lineno);
26034:   }
26035: }
26036: 
26037: /*
26038: ** Close all file descriptors accumuated in the unixInodeInfo->pUnused list.
26039: */ 
26040: static void closePendingFds(unixFile *pFile){
26041:   unixInodeInfo *pInode = pFile->pInode;
26042:   UnixUnusedFd *p;
26043:   UnixUnusedFd *pNext;
26044:   for(p=pInode->pUnused; p; p=pNext){
26045:     pNext = p->pNext;
26046:     robust_close(pFile, p->fd, __LINE__);
26047:     sqlite3_free(p);
26048:   }
26049:   pInode->pUnused = 0;
26050: }
26051: 
26052: /*
26053: ** Release a unixInodeInfo structure previously allocated by findInodeInfo().
26054: **
26055: ** The mutex entered using the unixEnterMutex() function must be held
26056: ** when this function is called.
26057: */
26058: static void releaseInodeInfo(unixFile *pFile){
26059:   unixInodeInfo *pInode = pFile->pInode;
26060:   assert( unixMutexHeld() );
26061:   if( ALWAYS(pInode) ){
26062:     pInode->nRef--;
26063:     if( pInode->nRef==0 ){
26064:       assert( pInode->pShmNode==0 );
26065:       closePendingFds(pFile);
26066:       if( pInode->pPrev ){
26067:         assert( pInode->pPrev->pNext==pInode );
26068:         pInode->pPrev->pNext = pInode->pNext;
26069:       }else{
26070:         assert( inodeList==pInode );
26071:         inodeList = pInode->pNext;
26072:       }
26073:       if( pInode->pNext ){
26074:         assert( pInode->pNext->pPrev==pInode );
26075:         pInode->pNext->pPrev = pInode->pPrev;
26076:       }
26077:       sqlite3_free(pInode);
26078:     }
26079:   }
26080: }
26081: 
26082: /*
26083: ** Given a file descriptor, locate the unixInodeInfo object that
26084: ** describes that file descriptor.  Create a new one if necessary.  The
26085: ** return value might be uninitialized if an error occurs.
26086: **
26087: ** The mutex entered using the unixEnterMutex() function must be held
26088: ** when this function is called.
26089: **
26090: ** Return an appropriate error code.
26091: */
26092: static int findInodeInfo(
26093:   unixFile *pFile,               /* Unix file with file desc used in the key */
26094:   unixInodeInfo **ppInode        /* Return the unixInodeInfo object here */
26095: ){
26096:   int rc;                        /* System call return code */
26097:   int fd;                        /* The file descriptor for pFile */
26098:   struct unixFileId fileId;      /* Lookup key for the unixInodeInfo */
26099:   struct stat statbuf;           /* Low-level file information */
26100:   unixInodeInfo *pInode = 0;     /* Candidate unixInodeInfo object */
26101: 
26102:   assert( unixMutexHeld() );
26103: 
26104:   /* Get low-level information about the file that we can used to
26105:   ** create a unique name for the file.
26106:   */
26107:   fd = pFile->h;
26108:   rc = osFstat(fd, &statbuf);
26109:   if( rc!=0 ){
26110:     pFile->lastErrno = errno;
26111: #ifdef EOVERFLOW
26112:     if( pFile->lastErrno==EOVERFLOW ) return SQLITE_NOLFS;
26113: #endif
26114:     return SQLITE_IOERR;
26115:   }
26116: 
26117: #ifdef __APPLE__
26118:   /* On OS X on an msdos filesystem, the inode number is reported
26119:   ** incorrectly for zero-size files.  See ticket #3260.  To work
26120:   ** around this problem (we consider it a bug in OS X, not SQLite)
26121:   ** we always increase the file size to 1 by writing a single byte
26122:   ** prior to accessing the inode number.  The one byte written is
26123:   ** an ASCII 'S' character which also happens to be the first byte
26124:   ** in the header of every SQLite database.  In this way, if there
26125:   ** is a race condition such that another thread has already populated
26126:   ** the first page of the database, no damage is done.
26127:   */
26128:   if( statbuf.st_size==0 && (pFile->fsFlags & SQLITE_FSFLAGS_IS_MSDOS)!=0 ){
26129:     do{ rc = osWrite(fd, "S", 1); }while( rc<0 && errno==EINTR );
26130:     if( rc!=1 ){
26131:       pFile->lastErrno = errno;
26132:       return SQLITE_IOERR;
26133:     }
26134:     rc = osFstat(fd, &statbuf);
26135:     if( rc!=0 ){
26136:       pFile->lastErrno = errno;
26137:       return SQLITE_IOERR;
26138:     }
26139:   }
26140: #endif
26141: 
26142:   memset(&fileId, 0, sizeof(fileId));
26143:   fileId.dev = statbuf.st_dev;
26144: #if OS_VXWORKS
26145:   fileId.pId = pFile->pId;
26146: #else
26147:   fileId.ino = statbuf.st_ino;
26148: #endif
26149:   pInode = inodeList;
26150:   while( pInode && memcmp(&fileId, &pInode->fileId, sizeof(fileId)) ){
26151:     pInode = pInode->pNext;
26152:   }
26153:   if( pInode==0 ){
26154:     pInode = sqlite3_malloc( sizeof(*pInode) );
26155:     if( pInode==0 ){
26156:       return SQLITE_NOMEM;
26157:     }
26158:     memset(pInode, 0, sizeof(*pInode));
26159:     memcpy(&pInode->fileId, &fileId, sizeof(fileId));
26160:     pInode->nRef = 1;
26161:     pInode->pNext = inodeList;
26162:     pInode->pPrev = 0;
26163:     if( inodeList ) inodeList->pPrev = pInode;
26164:     inodeList = pInode;
26165:   }else{
26166:     pInode->nRef++;
26167:   }
26168:   *ppInode = pInode;
26169:   return SQLITE_OK;
26170: }
26171: 
26172: 
26173: /*
26174: ** This routine checks if there is a RESERVED lock held on the specified
26175: ** file by this or any other process. If such a lock is held, set *pResOut
26176: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
26177: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
26178: */
26179: static int unixCheckReservedLock(sqlite3_file *id, int *pResOut){
26180:   int rc = SQLITE_OK;
26181:   int reserved = 0;
26182:   unixFile *pFile = (unixFile*)id;
26183: 
26184:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
26185: 
26186:   assert( pFile );
26187:   unixEnterMutex(); /* Because pFile->pInode is shared across threads */
26188: 
26189:   /* Check if a thread in this process holds such a lock */
26190:   if( pFile->pInode->eFileLock>SHARED_LOCK ){
26191:     reserved = 1;
26192:   }
26193: 
26194:   /* Otherwise see if some other process holds it.
26195:   */
26196: #ifndef __DJGPP__
26197:   if( !reserved && !pFile->pInode->bProcessLock ){
26198:     struct flock lock;
26199:     lock.l_whence = SEEK_SET;
26200:     lock.l_start = RESERVED_BYTE;
26201:     lock.l_len = 1;
26202:     lock.l_type = F_WRLCK;
26203:     if( osFcntl(pFile->h, F_GETLK, &lock) ){
26204:       rc = SQLITE_IOERR_CHECKRESERVEDLOCK;
26205:       pFile->lastErrno = errno;
26206:     } else if( lock.l_type!=F_UNLCK ){
26207:       reserved = 1;
26208:     }
26209:   }
26210: #endif
26211:   
26212:   unixLeaveMutex();
26213:   OSTRACE(("TEST WR-LOCK %d %d %d (unix)\n", pFile->h, rc, reserved));
26214: 
26215:   *pResOut = reserved;
26216:   return rc;
26217: }
26218: 
26219: /*
26220: ** Attempt to set a system-lock on the file pFile.  The lock is 
26221: ** described by pLock.
26222: **
26223: ** If the pFile was opened read/write from unix-excl, then the only lock
26224: ** ever obtained is an exclusive lock, and it is obtained exactly once
26225: ** the first time any lock is attempted.  All subsequent system locking
26226: ** operations become no-ops.  Locking operations still happen internally,
26227: ** in order to coordinate access between separate database connections
26228: ** within this process, but all of that is handled in memory and the
26229: ** operating system does not participate.
26230: **
26231: ** This function is a pass-through to fcntl(F_SETLK) if pFile is using
26232: ** any VFS other than "unix-excl" or if pFile is opened on "unix-excl"
26233: ** and is read-only.
26234: **
26235: ** Zero is returned if the call completes successfully, or -1 if a call
26236: ** to fcntl() fails. In this case, errno is set appropriately (by fcntl()).
26237: */
26238: static int unixFileLock(unixFile *pFile, struct flock *pLock){
26239:   int rc;
26240:   unixInodeInfo *pInode = pFile->pInode;
26241:   assert( unixMutexHeld() );
26242:   assert( pInode!=0 );
26243:   if( ((pFile->ctrlFlags & UNIXFILE_EXCL)!=0 || pInode->bProcessLock)
26244:    && ((pFile->ctrlFlags & UNIXFILE_RDONLY)==0)
26245:   ){
26246:     if( pInode->bProcessLock==0 ){
26247:       struct flock lock;
26248:       assert( pInode->nLock==0 );
26249:       lock.l_whence = SEEK_SET;
26250:       lock.l_start = SHARED_FIRST;
26251:       lock.l_len = SHARED_SIZE;
26252:       lock.l_type = F_WRLCK;
26253:       rc = osFcntl(pFile->h, F_SETLK, &lock);
26254:       if( rc<0 ) return rc;
26255:       pInode->bProcessLock = 1;
26256:       pInode->nLock++;
26257:     }else{
26258:       rc = 0;
26259:     }
26260:   }else{
26261:     rc = osFcntl(pFile->h, F_SETLK, pLock);
26262:   }
26263:   return rc;
26264: }
26265: 
26266: /*
26267: ** Lock the file with the lock specified by parameter eFileLock - one
26268: ** of the following:
26269: **
26270: **     (1) SHARED_LOCK
26271: **     (2) RESERVED_LOCK
26272: **     (3) PENDING_LOCK
26273: **     (4) EXCLUSIVE_LOCK
26274: **
26275: ** Sometimes when requesting one lock state, additional lock states
26276: ** are inserted in between.  The locking might fail on one of the later
26277: ** transitions leaving the lock state different from what it started but
26278: ** still short of its goal.  The following chart shows the allowed
26279: ** transitions and the inserted intermediate states:
26280: **
26281: **    UNLOCKED -> SHARED
26282: **    SHARED -> RESERVED
26283: **    SHARED -> (PENDING) -> EXCLUSIVE
26284: **    RESERVED -> (PENDING) -> EXCLUSIVE
26285: **    PENDING -> EXCLUSIVE
26286: **
26287: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
26288: ** routine to lower a locking level.
26289: */
26290: static int unixLock(sqlite3_file *id, int eFileLock){
26291:   /* The following describes the implementation of the various locks and
26292:   ** lock transitions in terms of the POSIX advisory shared and exclusive
26293:   ** lock primitives (called read-locks and write-locks below, to avoid
26294:   ** confusion with SQLite lock names). The algorithms are complicated
26295:   ** slightly in order to be compatible with windows systems simultaneously
26296:   ** accessing the same database file, in case that is ever required.
26297:   **
26298:   ** Symbols defined in os.h indentify the 'pending byte' and the 'reserved
26299:   ** byte', each single bytes at well known offsets, and the 'shared byte
26300:   ** range', a range of 510 bytes at a well known offset.
26301:   **
26302:   ** To obtain a SHARED lock, a read-lock is obtained on the 'pending
26303:   ** byte'.  If this is successful, a random byte from the 'shared byte
26304:   ** range' is read-locked and the lock on the 'pending byte' released.
26305:   **
26306:   ** A process may only obtain a RESERVED lock after it has a SHARED lock.
26307:   ** A RESERVED lock is implemented by grabbing a write-lock on the
26308:   ** 'reserved byte'. 
26309:   **
26310:   ** A process may only obtain a PENDING lock after it has obtained a
26311:   ** SHARED lock. A PENDING lock is implemented by obtaining a write-lock
26312:   ** on the 'pending byte'. This ensures that no new SHARED locks can be
26313:   ** obtained, but existing SHARED locks are allowed to persist. A process
26314:   ** does not have to obtain a RESERVED lock on the way to a PENDING lock.
26315:   ** This property is used by the algorithm for rolling back a journal file
26316:   ** after a crash.
26317:   **
26318:   ** An EXCLUSIVE lock, obtained after a PENDING lock is held, is
26319:   ** implemented by obtaining a write-lock on the entire 'shared byte
26320:   ** range'. Since all other locks require a read-lock on one of the bytes
26321:   ** within this range, this ensures that no other locks are held on the
26322:   ** database. 
26323:   **
26324:   ** The reason a single byte cannot be used instead of the 'shared byte
26325:   ** range' is that some versions of windows do not support read-locks. By
26326:   ** locking a random byte from a range, concurrent SHARED locks may exist
26327:   ** even if the locking primitive used is always a write-lock.
26328:   */
26329:   int rc = SQLITE_OK;
26330:   unixFile *pFile = (unixFile*)id;
26331:   unixInodeInfo *pInode;
26332:   struct flock lock;
26333:   int tErrno = 0;
26334: 
26335:   assert( pFile );
26336:   OSTRACE(("LOCK    %d %s was %s(%s,%d) pid=%d (unix)\n", pFile->h,
26337:       azFileLock(eFileLock), azFileLock(pFile->eFileLock),
26338:       azFileLock(pFile->pInode->eFileLock), pFile->pInode->nShared , getpid()));
26339: 
26340:   /* If there is already a lock of this type or more restrictive on the
26341:   ** unixFile, do nothing. Don't use the end_lock: exit path, as
26342:   ** unixEnterMutex() hasn't been called yet.
26343:   */
26344:   if( pFile->eFileLock>=eFileLock ){
26345:     OSTRACE(("LOCK    %d %s ok (already held) (unix)\n", pFile->h,
26346:             azFileLock(eFileLock)));
26347:     return SQLITE_OK;
26348:   }
26349: 
26350:   /* Make sure the locking sequence is correct.
26351:   **  (1) We never move from unlocked to anything higher than shared lock.
26352:   **  (2) SQLite never explicitly requests a pendig lock.
26353:   **  (3) A shared lock is always held when a reserve lock is requested.
26354:   */
26355:   assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK );
26356:   assert( eFileLock!=PENDING_LOCK );
26357:   assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK );
26358: 
26359:   /* This mutex is needed because pFile->pInode is shared across threads
26360:   */
26361:   unixEnterMutex();
26362:   pInode = pFile->pInode;
26363: 
26364:   /* If some thread using this PID has a lock via a different unixFile*
26365:   ** handle that precludes the requested lock, return BUSY.
26366:   */
26367:   if( (pFile->eFileLock!=pInode->eFileLock && 
26368:           (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK))
26369:   ){
26370:     rc = SQLITE_BUSY;
26371:     goto end_lock;
26372:   }
26373: 
26374:   /* If a SHARED lock is requested, and some thread using this PID already
26375:   ** has a SHARED or RESERVED lock, then increment reference counts and
26376:   ** return SQLITE_OK.
26377:   */
26378:   if( eFileLock==SHARED_LOCK && 
26379:       (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){
26380:     assert( eFileLock==SHARED_LOCK );
26381:     assert( pFile->eFileLock==0 );
26382:     assert( pInode->nShared>0 );
26383:     pFile->eFileLock = SHARED_LOCK;
26384:     pInode->nShared++;
26385:     pInode->nLock++;
26386:     goto end_lock;
26387:   }
26388: 
26389: 
26390:   /* A PENDING lock is needed before acquiring a SHARED lock and before
26391:   ** acquiring an EXCLUSIVE lock.  For the SHARED lock, the PENDING will
26392:   ** be released.
26393:   */
26394:   lock.l_len = 1L;
26395:   lock.l_whence = SEEK_SET;
26396:   if( eFileLock==SHARED_LOCK 
26397:       || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK)
26398:   ){
26399:     lock.l_type = (eFileLock==SHARED_LOCK?F_RDLCK:F_WRLCK);
26400:     lock.l_start = PENDING_BYTE;
26401:     if( unixFileLock(pFile, &lock) ){
26402:       tErrno = errno;
26403:       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
26404:       if( rc!=SQLITE_BUSY ){
26405:         pFile->lastErrno = tErrno;
26406:       }
26407:       goto end_lock;
26408:     }
26409:   }
26410: 
26411: 
26412:   /* If control gets to this point, then actually go ahead and make
26413:   ** operating system calls for the specified lock.
26414:   */
26415:   if( eFileLock==SHARED_LOCK ){
26416:     assert( pInode->nShared==0 );
26417:     assert( pInode->eFileLock==0 );
26418:     assert( rc==SQLITE_OK );
26419: 
26420:     /* Now get the read-lock */
26421:     lock.l_start = SHARED_FIRST;
26422:     lock.l_len = SHARED_SIZE;
26423:     if( unixFileLock(pFile, &lock) ){
26424:       tErrno = errno;
26425:       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
26426:     }
26427: 
26428:     /* Drop the temporary PENDING lock */
26429:     lock.l_start = PENDING_BYTE;
26430:     lock.l_len = 1L;
26431:     lock.l_type = F_UNLCK;
26432:     if( unixFileLock(pFile, &lock) && rc==SQLITE_OK ){
26433:       /* This could happen with a network mount */
26434:       tErrno = errno;
26435:       rc = SQLITE_IOERR_UNLOCK; 
26436:     }
26437: 
26438:     if( rc ){
26439:       if( rc!=SQLITE_BUSY ){
26440:         pFile->lastErrno = tErrno;
26441:       }
26442:       goto end_lock;
26443:     }else{
26444:       pFile->eFileLock = SHARED_LOCK;
26445:       pInode->nLock++;
26446:       pInode->nShared = 1;
26447:     }
26448:   }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){
26449:     /* We are trying for an exclusive lock but another thread in this
26450:     ** same process is still holding a shared lock. */
26451:     rc = SQLITE_BUSY;
26452:   }else{
26453:     /* The request was for a RESERVED or EXCLUSIVE lock.  It is
26454:     ** assumed that there is a SHARED or greater lock on the file
26455:     ** already.
26456:     */
26457:     assert( 0!=pFile->eFileLock );
26458:     lock.l_type = F_WRLCK;
26459: 
26460:     assert( eFileLock==RESERVED_LOCK || eFileLock==EXCLUSIVE_LOCK );
26461:     if( eFileLock==RESERVED_LOCK ){
26462:       lock.l_start = RESERVED_BYTE;
26463:       lock.l_len = 1L;
26464:     }else{
26465:       lock.l_start = SHARED_FIRST;
26466:       lock.l_len = SHARED_SIZE;
26467:     }
26468: 
26469:     if( unixFileLock(pFile, &lock) ){
26470:       tErrno = errno;
26471:       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
26472:       if( rc!=SQLITE_BUSY ){
26473:         pFile->lastErrno = tErrno;
26474:       }
26475:     }
26476:   }
26477:   
26478: 
26479: #ifndef NDEBUG
26480:   /* Set up the transaction-counter change checking flags when
26481:   ** transitioning from a SHARED to a RESERVED lock.  The change
26482:   ** from SHARED to RESERVED marks the beginning of a normal
26483:   ** write operation (not a hot journal rollback).
26484:   */
26485:   if( rc==SQLITE_OK
26486:    && pFile->eFileLock<=SHARED_LOCK
26487:    && eFileLock==RESERVED_LOCK
26488:   ){
26489:     pFile->transCntrChng = 0;
26490:     pFile->dbUpdate = 0;
26491:     pFile->inNormalWrite = 1;
26492:   }
26493: #endif
26494: 
26495: 
26496:   if( rc==SQLITE_OK ){
26497:     pFile->eFileLock = eFileLock;
26498:     pInode->eFileLock = eFileLock;
26499:   }else if( eFileLock==EXCLUSIVE_LOCK ){
26500:     pFile->eFileLock = PENDING_LOCK;
26501:     pInode->eFileLock = PENDING_LOCK;
26502:   }
26503: 
26504: end_lock:
26505:   unixLeaveMutex();
26506:   OSTRACE(("LOCK    %d %s %s (unix)\n", pFile->h, azFileLock(eFileLock), 
26507:       rc==SQLITE_OK ? "ok" : "failed"));
26508:   return rc;
26509: }
26510: 
26511: /*
26512: ** Add the file descriptor used by file handle pFile to the corresponding
26513: ** pUnused list.
26514: */
26515: static void setPendingFd(unixFile *pFile){
26516:   unixInodeInfo *pInode = pFile->pInode;
26517:   UnixUnusedFd *p = pFile->pUnused;
26518:   p->pNext = pInode->pUnused;
26519:   pInode->pUnused = p;
26520:   pFile->h = -1;
26521:   pFile->pUnused = 0;
26522: }
26523: 
26524: /*
26525: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
26526: ** must be either NO_LOCK or SHARED_LOCK.
26527: **
26528: ** If the locking level of the file descriptor is already at or below
26529: ** the requested locking level, this routine is a no-op.
26530: ** 
26531: ** If handleNFSUnlock is true, then on downgrading an EXCLUSIVE_LOCK to SHARED
26532: ** the byte range is divided into 2 parts and the first part is unlocked then
26533: ** set to a read lock, then the other part is simply unlocked.  This works 
26534: ** around a bug in BSD NFS lockd (also seen on MacOSX 10.3+) that fails to 
26535: ** remove the write lock on a region when a read lock is set.
26536: */
26537: static int posixUnlock(sqlite3_file *id, int eFileLock, int handleNFSUnlock){
26538:   unixFile *pFile = (unixFile*)id;
26539:   unixInodeInfo *pInode;
26540:   struct flock lock;
26541:   int rc = SQLITE_OK;
26542: 
26543:   assert( pFile );
26544:   OSTRACE(("UNLOCK  %d %d was %d(%d,%d) pid=%d (unix)\n", pFile->h, eFileLock,
26545:       pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared,
26546:       getpid()));
26547: 
26548:   assert( eFileLock<=SHARED_LOCK );
26549:   if( pFile->eFileLock<=eFileLock ){
26550:     return SQLITE_OK;
26551:   }
26552:   unixEnterMutex();
26553:   pInode = pFile->pInode;
26554:   assert( pInode->nShared!=0 );
26555:   if( pFile->eFileLock>SHARED_LOCK ){
26556:     assert( pInode->eFileLock==pFile->eFileLock );
26557: 
26558: #ifndef NDEBUG
26559:     /* When reducing a lock such that other processes can start
26560:     ** reading the database file again, make sure that the
26561:     ** transaction counter was updated if any part of the database
26562:     ** file changed.  If the transaction counter is not updated,
26563:     ** other connections to the same file might not realize that
26564:     ** the file has changed and hence might not know to flush their
26565:     ** cache.  The use of a stale cache can lead to database corruption.
26566:     */
26567:     pFile->inNormalWrite = 0;
26568: #endif
26569: 
26570:     /* downgrading to a shared lock on NFS involves clearing the write lock
26571:     ** before establishing the readlock - to avoid a race condition we downgrade
26572:     ** the lock in 2 blocks, so that part of the range will be covered by a 
26573:     ** write lock until the rest is covered by a read lock:
26574:     **  1:   [WWWWW]
26575:     **  2:   [....W]
26576:     **  3:   [RRRRW]
26577:     **  4:   [RRRR.]
26578:     */
26579:     if( eFileLock==SHARED_LOCK ){
26580: 
26581: #if !defined(__APPLE__) || !SQLITE_ENABLE_LOCKING_STYLE
26582:       (void)handleNFSUnlock;
26583:       assert( handleNFSUnlock==0 );
26584: #endif
26585: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
26586:       if( handleNFSUnlock ){
26587:         int tErrno;               /* Error code from system call errors */
26588:         off_t divSize = SHARED_SIZE - 1;
26589:         
26590:         lock.l_type = F_UNLCK;
26591:         lock.l_whence = SEEK_SET;
26592:         lock.l_start = SHARED_FIRST;
26593:         lock.l_len = divSize;
26594:         if( unixFileLock(pFile, &lock)==(-1) ){
26595:           tErrno = errno;
26596:           rc = SQLITE_IOERR_UNLOCK;
26597:           if( IS_LOCK_ERROR(rc) ){
26598:             pFile->lastErrno = tErrno;
26599:           }
26600:           goto end_unlock;
26601:         }
26602:         lock.l_type = F_RDLCK;
26603:         lock.l_whence = SEEK_SET;
26604:         lock.l_start = SHARED_FIRST;
26605:         lock.l_len = divSize;
26606:         if( unixFileLock(pFile, &lock)==(-1) ){
26607:           tErrno = errno;
26608:           rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_RDLOCK);
26609:           if( IS_LOCK_ERROR(rc) ){
26610:             pFile->lastErrno = tErrno;
26611:           }
26612:           goto end_unlock;
26613:         }
26614:         lock.l_type = F_UNLCK;
26615:         lock.l_whence = SEEK_SET;
26616:         lock.l_start = SHARED_FIRST+divSize;
26617:         lock.l_len = SHARED_SIZE-divSize;
26618:         if( unixFileLock(pFile, &lock)==(-1) ){
26619:           tErrno = errno;
26620:           rc = SQLITE_IOERR_UNLOCK;
26621:           if( IS_LOCK_ERROR(rc) ){
26622:             pFile->lastErrno = tErrno;
26623:           }
26624:           goto end_unlock;
26625:         }
26626:       }else
26627: #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
26628:       {
26629:         lock.l_type = F_RDLCK;
26630:         lock.l_whence = SEEK_SET;
26631:         lock.l_start = SHARED_FIRST;
26632:         lock.l_len = SHARED_SIZE;
26633:         if( unixFileLock(pFile, &lock) ){
26634:           /* In theory, the call to unixFileLock() cannot fail because another
26635:           ** process is holding an incompatible lock. If it does, this 
26636:           ** indicates that the other process is not following the locking
26637:           ** protocol. If this happens, return SQLITE_IOERR_RDLOCK. Returning
26638:           ** SQLITE_BUSY would confuse the upper layer (in practice it causes 
26639:           ** an assert to fail). */ 
26640:           rc = SQLITE_IOERR_RDLOCK;
26641:           pFile->lastErrno = errno;
26642:           goto end_unlock;
26643:         }
26644:       }
26645:     }
26646:     lock.l_type = F_UNLCK;
26647:     lock.l_whence = SEEK_SET;
26648:     lock.l_start = PENDING_BYTE;
26649:     lock.l_len = 2L;  assert( PENDING_BYTE+1==RESERVED_BYTE );
26650:     if( unixFileLock(pFile, &lock)==0 ){
26651:       pInode->eFileLock = SHARED_LOCK;
26652:     }else{
26653:       rc = SQLITE_IOERR_UNLOCK;
26654:       pFile->lastErrno = errno;
26655:       goto end_unlock;
26656:     }
26657:   }
26658:   if( eFileLock==NO_LOCK ){
26659:     /* Decrement the shared lock counter.  Release the lock using an
26660:     ** OS call only when all threads in this same process have released
26661:     ** the lock.
26662:     */
26663:     pInode->nShared--;
26664:     if( pInode->nShared==0 ){
26665:       lock.l_type = F_UNLCK;
26666:       lock.l_whence = SEEK_SET;
26667:       lock.l_start = lock.l_len = 0L;
26668:       if( unixFileLock(pFile, &lock)==0 ){
26669:         pInode->eFileLock = NO_LOCK;
26670:       }else{
26671:         rc = SQLITE_IOERR_UNLOCK;
26672: 	pFile->lastErrno = errno;
26673:         pInode->eFileLock = NO_LOCK;
26674:         pFile->eFileLock = NO_LOCK;
26675:       }
26676:     }
26677: 
26678:     /* Decrement the count of locks against this same file.  When the
26679:     ** count reaches zero, close any other file descriptors whose close
26680:     ** was deferred because of outstanding locks.
26681:     */
26682:     pInode->nLock--;
26683:     assert( pInode->nLock>=0 );
26684:     if( pInode->nLock==0 ){
26685:       closePendingFds(pFile);
26686:     }
26687:   }
26688: 	
26689: end_unlock:
26690:   unixLeaveMutex();
26691:   if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock;
26692:   return rc;
26693: }
26694: 
26695: /*
26696: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
26697: ** must be either NO_LOCK or SHARED_LOCK.
26698: **
26699: ** If the locking level of the file descriptor is already at or below
26700: ** the requested locking level, this routine is a no-op.
26701: */
26702: static int unixUnlock(sqlite3_file *id, int eFileLock){
26703:   return posixUnlock(id, eFileLock, 0);
26704: }
26705: 
26706: /*
26707: ** This function performs the parts of the "close file" operation 
26708: ** common to all locking schemes. It closes the directory and file
26709: ** handles, if they are valid, and sets all fields of the unixFile
26710: ** structure to 0.
26711: **
26712: ** It is *not* necessary to hold the mutex when this routine is called,
26713: ** even on VxWorks.  A mutex will be acquired on VxWorks by the
26714: ** vxworksReleaseFileId() routine.
26715: */
26716: static int closeUnixFile(sqlite3_file *id){
26717:   unixFile *pFile = (unixFile*)id;
26718:   if( pFile->h>=0 ){
26719:     robust_close(pFile, pFile->h, __LINE__);
26720:     pFile->h = -1;
26721:   }
26722: #if OS_VXWORKS
26723:   if( pFile->pId ){
26724:     if( pFile->ctrlFlags & UNIXFILE_DELETE ){
26725:       osUnlink(pFile->pId->zCanonicalName);
26726:     }
26727:     vxworksReleaseFileId(pFile->pId);
26728:     pFile->pId = 0;
26729:   }
26730: #endif
26731:   OSTRACE(("CLOSE   %-3d\n", pFile->h));
26732:   OpenCounter(-1);
26733:   sqlite3_free(pFile->pUnused);
26734:   memset(pFile, 0, sizeof(unixFile));
26735:   return SQLITE_OK;
26736: }
26737: 
26738: /*
26739: ** Close a file.
26740: */
26741: static int unixClose(sqlite3_file *id){
26742:   int rc = SQLITE_OK;
26743:   unixFile *pFile = (unixFile *)id;
26744:   unixUnlock(id, NO_LOCK);
26745:   unixEnterMutex();
26746: 
26747:   /* unixFile.pInode is always valid here. Otherwise, a different close
26748:   ** routine (e.g. nolockClose()) would be called instead.
26749:   */
26750:   assert( pFile->pInode->nLock>0 || pFile->pInode->bProcessLock==0 );
26751:   if( ALWAYS(pFile->pInode) && pFile->pInode->nLock ){
26752:     /* If there are outstanding locks, do not actually close the file just
26753:     ** yet because that would clear those locks.  Instead, add the file
26754:     ** descriptor to pInode->pUnused list.  It will be automatically closed 
26755:     ** when the last lock is cleared.
26756:     */
26757:     setPendingFd(pFile);
26758:   }
26759:   releaseInodeInfo(pFile);
26760:   rc = closeUnixFile(id);
26761:   unixLeaveMutex();
26762:   return rc;
26763: }
26764: 
26765: /************** End of the posix advisory lock implementation *****************
26766: ******************************************************************************/
26767: 
26768: /******************************************************************************
26769: ****************************** No-op Locking **********************************
26770: **
26771: ** Of the various locking implementations available, this is by far the
26772: ** simplest:  locking is ignored.  No attempt is made to lock the database
26773: ** file for reading or writing.
26774: **
26775: ** This locking mode is appropriate for use on read-only databases
26776: ** (ex: databases that are burned into CD-ROM, for example.)  It can
26777: ** also be used if the application employs some external mechanism to
26778: ** prevent simultaneous access of the same database by two or more
26779: ** database connections.  But there is a serious risk of database
26780: ** corruption if this locking mode is used in situations where multiple
26781: ** database connections are accessing the same database file at the same
26782: ** time and one or more of those connections are writing.
26783: */
26784: 
26785: static int nolockCheckReservedLock(sqlite3_file *NotUsed, int *pResOut){
26786:   UNUSED_PARAMETER(NotUsed);
26787:   *pResOut = 0;
26788:   return SQLITE_OK;
26789: }
26790: static int nolockLock(sqlite3_file *NotUsed, int NotUsed2){
26791:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
26792:   return SQLITE_OK;
26793: }
26794: static int nolockUnlock(sqlite3_file *NotUsed, int NotUsed2){
26795:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
26796:   return SQLITE_OK;
26797: }
26798: 
26799: /*
26800: ** Close the file.
26801: */
26802: static int nolockClose(sqlite3_file *id) {
26803:   return closeUnixFile(id);
26804: }
26805: 
26806: /******************* End of the no-op lock implementation *********************
26807: ******************************************************************************/
26808: 
26809: /******************************************************************************
26810: ************************* Begin dot-file Locking ******************************
26811: **
26812: ** The dotfile locking implementation uses the existance of separate lock
26813: ** files (really a directory) to control access to the database.  This works
26814: ** on just about every filesystem imaginable.  But there are serious downsides:
26815: **
26816: **    (1)  There is zero concurrency.  A single reader blocks all other
26817: **         connections from reading or writing the database.
26818: **
26819: **    (2)  An application crash or power loss can leave stale lock files
26820: **         sitting around that need to be cleared manually.
26821: **
26822: ** Nevertheless, a dotlock is an appropriate locking mode for use if no
26823: ** other locking strategy is available.
26824: **
26825: ** Dotfile locking works by creating a subdirectory in the same directory as
26826: ** the database and with the same name but with a ".lock" extension added.
26827: ** The existance of a lock directory implies an EXCLUSIVE lock.  All other
26828: ** lock types (SHARED, RESERVED, PENDING) are mapped into EXCLUSIVE.
26829: */
26830: 
26831: /*
26832: ** The file suffix added to the data base filename in order to create the
26833: ** lock directory.
26834: */
26835: #define DOTLOCK_SUFFIX ".lock"
26836: 
26837: /*
26838: ** This routine checks if there is a RESERVED lock held on the specified
26839: ** file by this or any other process. If such a lock is held, set *pResOut
26840: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
26841: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
26842: **
26843: ** In dotfile locking, either a lock exists or it does not.  So in this
26844: ** variation of CheckReservedLock(), *pResOut is set to true if any lock
26845: ** is held on the file and false if the file is unlocked.
26846: */
26847: static int dotlockCheckReservedLock(sqlite3_file *id, int *pResOut) {
26848:   int rc = SQLITE_OK;
26849:   int reserved = 0;
26850:   unixFile *pFile = (unixFile*)id;
26851: 
26852:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
26853:   
26854:   assert( pFile );
26855: 
26856:   /* Check if a thread in this process holds such a lock */
26857:   if( pFile->eFileLock>SHARED_LOCK ){
26858:     /* Either this connection or some other connection in the same process
26859:     ** holds a lock on the file.  No need to check further. */
26860:     reserved = 1;
26861:   }else{
26862:     /* The lock is held if and only if the lockfile exists */
26863:     const char *zLockFile = (const char*)pFile->lockingContext;
26864:     reserved = osAccess(zLockFile, 0)==0;
26865:   }
26866:   OSTRACE(("TEST WR-LOCK %d %d %d (dotlock)\n", pFile->h, rc, reserved));
26867:   *pResOut = reserved;
26868:   return rc;
26869: }
26870: 
26871: /*
26872: ** Lock the file with the lock specified by parameter eFileLock - one
26873: ** of the following:
26874: **
26875: **     (1) SHARED_LOCK
26876: **     (2) RESERVED_LOCK
26877: **     (3) PENDING_LOCK
26878: **     (4) EXCLUSIVE_LOCK
26879: **
26880: ** Sometimes when requesting one lock state, additional lock states
26881: ** are inserted in between.  The locking might fail on one of the later
26882: ** transitions leaving the lock state different from what it started but
26883: ** still short of its goal.  The following chart shows the allowed
26884: ** transitions and the inserted intermediate states:
26885: **
26886: **    UNLOCKED -> SHARED
26887: **    SHARED -> RESERVED
26888: **    SHARED -> (PENDING) -> EXCLUSIVE
26889: **    RESERVED -> (PENDING) -> EXCLUSIVE
26890: **    PENDING -> EXCLUSIVE
26891: **
26892: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
26893: ** routine to lower a locking level.
26894: **
26895: ** With dotfile locking, we really only support state (4): EXCLUSIVE.
26896: ** But we track the other locking levels internally.
26897: */
26898: static int dotlockLock(sqlite3_file *id, int eFileLock) {
26899:   unixFile *pFile = (unixFile*)id;
26900:   char *zLockFile = (char *)pFile->lockingContext;
26901:   int rc = SQLITE_OK;
26902: 
26903: 
26904:   /* If we have any lock, then the lock file already exists.  All we have
26905:   ** to do is adjust our internal record of the lock level.
26906:   */
26907:   if( pFile->eFileLock > NO_LOCK ){
26908:     pFile->eFileLock = eFileLock;
26909:     /* Always update the timestamp on the old file */
26910: #ifdef HAVE_UTIME
26911:     utime(zLockFile, NULL);
26912: #else
26913:     utimes(zLockFile, NULL);
26914: #endif
26915:     return SQLITE_OK;
26916:   }
26917:   
26918:   /* grab an exclusive lock */
26919:   rc = osMkdir(zLockFile, 0777);
26920:   if( rc<0 ){
26921:     /* failed to open/create the lock directory */
26922:     int tErrno = errno;
26923:     if( EEXIST == tErrno ){
26924:       rc = SQLITE_BUSY;
26925:     } else {
26926:       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
26927:       if( IS_LOCK_ERROR(rc) ){
26928:         pFile->lastErrno = tErrno;
26929:       }
26930:     }
26931:     return rc;
26932:   } 
26933:   
26934:   /* got it, set the type and return ok */
26935:   pFile->eFileLock = eFileLock;
26936:   return rc;
26937: }
26938: 
26939: /*
26940: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
26941: ** must be either NO_LOCK or SHARED_LOCK.
26942: **
26943: ** If the locking level of the file descriptor is already at or below
26944: ** the requested locking level, this routine is a no-op.
26945: **
26946: ** When the locking level reaches NO_LOCK, delete the lock file.
26947: */
26948: static int dotlockUnlock(sqlite3_file *id, int eFileLock) {
26949:   unixFile *pFile = (unixFile*)id;
26950:   char *zLockFile = (char *)pFile->lockingContext;
26951:   int rc;
26952: 
26953:   assert( pFile );
26954:   OSTRACE(("UNLOCK  %d %d was %d pid=%d (dotlock)\n", pFile->h, eFileLock,
26955: 	   pFile->eFileLock, getpid()));
26956:   assert( eFileLock<=SHARED_LOCK );
26957:   
26958:   /* no-op if possible */
26959:   if( pFile->eFileLock==eFileLock ){
26960:     return SQLITE_OK;
26961:   }
26962: 
26963:   /* To downgrade to shared, simply update our internal notion of the
26964:   ** lock state.  No need to mess with the file on disk.
26965:   */
26966:   if( eFileLock==SHARED_LOCK ){
26967:     pFile->eFileLock = SHARED_LOCK;
26968:     return SQLITE_OK;
26969:   }
26970:   
26971:   /* To fully unlock the database, delete the lock file */
26972:   assert( eFileLock==NO_LOCK );
26973:   rc = osRmdir(zLockFile);
26974:   if( rc<0 && errno==ENOTDIR ) rc = osUnlink(zLockFile);
26975:   if( rc<0 ){
26976:     int tErrno = errno;
26977:     rc = 0;
26978:     if( ENOENT != tErrno ){
26979:       rc = SQLITE_IOERR_UNLOCK;
26980:     }
26981:     if( IS_LOCK_ERROR(rc) ){
26982:       pFile->lastErrno = tErrno;
26983:     }
26984:     return rc; 
26985:   }
26986:   pFile->eFileLock = NO_LOCK;
26987:   return SQLITE_OK;
26988: }
26989: 
26990: /*
26991: ** Close a file.  Make sure the lock has been released before closing.
26992: */
26993: static int dotlockClose(sqlite3_file *id) {
26994:   int rc;
26995:   if( id ){
26996:     unixFile *pFile = (unixFile*)id;
26997:     dotlockUnlock(id, NO_LOCK);
26998:     sqlite3_free(pFile->lockingContext);
26999:   }
27000:   rc = closeUnixFile(id);
27001:   return rc;
27002: }
27003: /****************** End of the dot-file lock implementation *******************
27004: ******************************************************************************/
27005: 
27006: /******************************************************************************
27007: ************************** Begin flock Locking ********************************
27008: **
27009: ** Use the flock() system call to do file locking.
27010: **
27011: ** flock() locking is like dot-file locking in that the various
27012: ** fine-grain locking levels supported by SQLite are collapsed into
27013: ** a single exclusive lock.  In other words, SHARED, RESERVED, and
27014: ** PENDING locks are the same thing as an EXCLUSIVE lock.  SQLite
27015: ** still works when you do this, but concurrency is reduced since
27016: ** only a single process can be reading the database at a time.
27017: **
27018: ** Omit this section if SQLITE_ENABLE_LOCKING_STYLE is turned off or if
27019: ** compiling for VXWORKS.
27020: */
27021: #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
27022: 
27023: /*
27024: ** Retry flock() calls that fail with EINTR
27025: */
27026: #ifdef EINTR
27027: static int robust_flock(int fd, int op){
27028:   int rc;
27029:   do{ rc = flock(fd,op); }while( rc<0 && errno==EINTR );
27030:   return rc;
27031: }
27032: #else
27033: # define robust_flock(a,b) flock(a,b)
27034: #endif
27035:      
27036: 
27037: /*
27038: ** This routine checks if there is a RESERVED lock held on the specified
27039: ** file by this or any other process. If such a lock is held, set *pResOut
27040: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
27041: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
27042: */
27043: static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){
27044:   int rc = SQLITE_OK;
27045:   int reserved = 0;
27046:   unixFile *pFile = (unixFile*)id;
27047:   
27048:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
27049:   
27050:   assert( pFile );
27051:   
27052:   /* Check if a thread in this process holds such a lock */
27053:   if( pFile->eFileLock>SHARED_LOCK ){
27054:     reserved = 1;
27055:   }
27056:   
27057:   /* Otherwise see if some other process holds it. */
27058:   if( !reserved ){
27059:     /* attempt to get the lock */
27060:     int lrc = robust_flock(pFile->h, LOCK_EX | LOCK_NB);
27061:     if( !lrc ){
27062:       /* got the lock, unlock it */
27063:       lrc = robust_flock(pFile->h, LOCK_UN);
27064:       if ( lrc ) {
27065:         int tErrno = errno;
27066:         /* unlock failed with an error */
27067:         lrc = SQLITE_IOERR_UNLOCK; 
27068:         if( IS_LOCK_ERROR(lrc) ){
27069:           pFile->lastErrno = tErrno;
27070:           rc = lrc;
27071:         }
27072:       }
27073:     } else {
27074:       int tErrno = errno;
27075:       reserved = 1;
27076:       /* someone else might have it reserved */
27077:       lrc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); 
27078:       if( IS_LOCK_ERROR(lrc) ){
27079:         pFile->lastErrno = tErrno;
27080:         rc = lrc;
27081:       }
27082:     }
27083:   }
27084:   OSTRACE(("TEST WR-LOCK %d %d %d (flock)\n", pFile->h, rc, reserved));
27085: 
27086: #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
27087:   if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
27088:     rc = SQLITE_OK;
27089:     reserved=1;
27090:   }
27091: #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
27092:   *pResOut = reserved;
27093:   return rc;
27094: }
27095: 
27096: /*
27097: ** Lock the file with the lock specified by parameter eFileLock - one
27098: ** of the following:
27099: **
27100: **     (1) SHARED_LOCK
27101: **     (2) RESERVED_LOCK
27102: **     (3) PENDING_LOCK
27103: **     (4) EXCLUSIVE_LOCK
27104: **
27105: ** Sometimes when requesting one lock state, additional lock states
27106: ** are inserted in between.  The locking might fail on one of the later
27107: ** transitions leaving the lock state different from what it started but
27108: ** still short of its goal.  The following chart shows the allowed
27109: ** transitions and the inserted intermediate states:
27110: **
27111: **    UNLOCKED -> SHARED
27112: **    SHARED -> RESERVED
27113: **    SHARED -> (PENDING) -> EXCLUSIVE
27114: **    RESERVED -> (PENDING) -> EXCLUSIVE
27115: **    PENDING -> EXCLUSIVE
27116: **
27117: ** flock() only really support EXCLUSIVE locks.  We track intermediate
27118: ** lock states in the sqlite3_file structure, but all locks SHARED or
27119: ** above are really EXCLUSIVE locks and exclude all other processes from
27120: ** access the file.
27121: **
27122: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
27123: ** routine to lower a locking level.
27124: */
27125: static int flockLock(sqlite3_file *id, int eFileLock) {
27126:   int rc = SQLITE_OK;
27127:   unixFile *pFile = (unixFile*)id;
27128: 
27129:   assert( pFile );
27130: 
27131:   /* if we already have a lock, it is exclusive.  
27132:   ** Just adjust level and punt on outta here. */
27133:   if (pFile->eFileLock > NO_LOCK) {
27134:     pFile->eFileLock = eFileLock;
27135:     return SQLITE_OK;
27136:   }
27137:   
27138:   /* grab an exclusive lock */
27139:   
27140:   if (robust_flock(pFile->h, LOCK_EX | LOCK_NB)) {
27141:     int tErrno = errno;
27142:     /* didn't get, must be busy */
27143:     rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
27144:     if( IS_LOCK_ERROR(rc) ){
27145:       pFile->lastErrno = tErrno;
27146:     }
27147:   } else {
27148:     /* got it, set the type and return ok */
27149:     pFile->eFileLock = eFileLock;
27150:   }
27151:   OSTRACE(("LOCK    %d %s %s (flock)\n", pFile->h, azFileLock(eFileLock), 
27152:            rc==SQLITE_OK ? "ok" : "failed"));
27153: #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
27154:   if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
27155:     rc = SQLITE_BUSY;
27156:   }
27157: #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
27158:   return rc;
27159: }
27160: 
27161: 
27162: /*
27163: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
27164: ** must be either NO_LOCK or SHARED_LOCK.
27165: **
27166: ** If the locking level of the file descriptor is already at or below
27167: ** the requested locking level, this routine is a no-op.
27168: */
27169: static int flockUnlock(sqlite3_file *id, int eFileLock) {
27170:   unixFile *pFile = (unixFile*)id;
27171:   
27172:   assert( pFile );
27173:   OSTRACE(("UNLOCK  %d %d was %d pid=%d (flock)\n", pFile->h, eFileLock,
27174:            pFile->eFileLock, getpid()));
27175:   assert( eFileLock<=SHARED_LOCK );
27176:   
27177:   /* no-op if possible */
27178:   if( pFile->eFileLock==eFileLock ){
27179:     return SQLITE_OK;
27180:   }
27181:   
27182:   /* shared can just be set because we always have an exclusive */
27183:   if (eFileLock==SHARED_LOCK) {
27184:     pFile->eFileLock = eFileLock;
27185:     return SQLITE_OK;
27186:   }
27187:   
27188:   /* no, really, unlock. */
27189:   if( robust_flock(pFile->h, LOCK_UN) ){
27190: #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
27191:     return SQLITE_OK;
27192: #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
27193:     return SQLITE_IOERR_UNLOCK;
27194:   }else{
27195:     pFile->eFileLock = NO_LOCK;
27196:     return SQLITE_OK;
27197:   }
27198: }
27199: 
27200: /*
27201: ** Close a file.
27202: */
27203: static int flockClose(sqlite3_file *id) {
27204:   if( id ){
27205:     flockUnlock(id, NO_LOCK);
27206:   }
27207:   return closeUnixFile(id);
27208: }
27209: 
27210: #endif /* SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORK */
27211: 
27212: /******************* End of the flock lock implementation *********************
27213: ******************************************************************************/
27214: 
27215: /******************************************************************************
27216: ************************ Begin Named Semaphore Locking ************************
27217: **
27218: ** Named semaphore locking is only supported on VxWorks.
27219: **
27220: ** Semaphore locking is like dot-lock and flock in that it really only
27221: ** supports EXCLUSIVE locking.  Only a single process can read or write
27222: ** the database file at a time.  This reduces potential concurrency, but
27223: ** makes the lock implementation much easier.
27224: */
27225: #if OS_VXWORKS
27226: 
27227: /*
27228: ** This routine checks if there is a RESERVED lock held on the specified
27229: ** file by this or any other process. If such a lock is held, set *pResOut
27230: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
27231: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
27232: */
27233: static int semCheckReservedLock(sqlite3_file *id, int *pResOut) {
27234:   int rc = SQLITE_OK;
27235:   int reserved = 0;
27236:   unixFile *pFile = (unixFile*)id;
27237: 
27238:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
27239:   
27240:   assert( pFile );
27241: 
27242:   /* Check if a thread in this process holds such a lock */
27243:   if( pFile->eFileLock>SHARED_LOCK ){
27244:     reserved = 1;
27245:   }
27246:   
27247:   /* Otherwise see if some other process holds it. */
27248:   if( !reserved ){
27249:     sem_t *pSem = pFile->pInode->pSem;
27250:     struct stat statBuf;
27251: 
27252:     if( sem_trywait(pSem)==-1 ){
27253:       int tErrno = errno;
27254:       if( EAGAIN != tErrno ){
27255:         rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_CHECKRESERVEDLOCK);
27256:         pFile->lastErrno = tErrno;
27257:       } else {
27258:         /* someone else has the lock when we are in NO_LOCK */
27259:         reserved = (pFile->eFileLock < SHARED_LOCK);
27260:       }
27261:     }else{
27262:       /* we could have it if we want it */
27263:       sem_post(pSem);
27264:     }
27265:   }
27266:   OSTRACE(("TEST WR-LOCK %d %d %d (sem)\n", pFile->h, rc, reserved));
27267: 
27268:   *pResOut = reserved;
27269:   return rc;
27270: }
27271: 
27272: /*
27273: ** Lock the file with the lock specified by parameter eFileLock - one
27274: ** of the following:
27275: **
27276: **     (1) SHARED_LOCK
27277: **     (2) RESERVED_LOCK
27278: **     (3) PENDING_LOCK
27279: **     (4) EXCLUSIVE_LOCK
27280: **
27281: ** Sometimes when requesting one lock state, additional lock states
27282: ** are inserted in between.  The locking might fail on one of the later
27283: ** transitions leaving the lock state different from what it started but
27284: ** still short of its goal.  The following chart shows the allowed
27285: ** transitions and the inserted intermediate states:
27286: **
27287: **    UNLOCKED -> SHARED
27288: **    SHARED -> RESERVED
27289: **    SHARED -> (PENDING) -> EXCLUSIVE
27290: **    RESERVED -> (PENDING) -> EXCLUSIVE
27291: **    PENDING -> EXCLUSIVE
27292: **
27293: ** Semaphore locks only really support EXCLUSIVE locks.  We track intermediate
27294: ** lock states in the sqlite3_file structure, but all locks SHARED or
27295: ** above are really EXCLUSIVE locks and exclude all other processes from
27296: ** access the file.
27297: **
27298: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
27299: ** routine to lower a locking level.
27300: */
27301: static int semLock(sqlite3_file *id, int eFileLock) {
27302:   unixFile *pFile = (unixFile*)id;
27303:   int fd;
27304:   sem_t *pSem = pFile->pInode->pSem;
27305:   int rc = SQLITE_OK;
27306: 
27307:   /* if we already have a lock, it is exclusive.  
27308:   ** Just adjust level and punt on outta here. */
27309:   if (pFile->eFileLock > NO_LOCK) {
27310:     pFile->eFileLock = eFileLock;
27311:     rc = SQLITE_OK;
27312:     goto sem_end_lock;
27313:   }
27314:   
27315:   /* lock semaphore now but bail out when already locked. */
27316:   if( sem_trywait(pSem)==-1 ){
27317:     rc = SQLITE_BUSY;
27318:     goto sem_end_lock;
27319:   }
27320: 
27321:   /* got it, set the type and return ok */
27322:   pFile->eFileLock = eFileLock;
27323: 
27324:  sem_end_lock:
27325:   return rc;
27326: }
27327: 
27328: /*
27329: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
27330: ** must be either NO_LOCK or SHARED_LOCK.
27331: **
27332: ** If the locking level of the file descriptor is already at or below
27333: ** the requested locking level, this routine is a no-op.
27334: */
27335: static int semUnlock(sqlite3_file *id, int eFileLock) {
27336:   unixFile *pFile = (unixFile*)id;
27337:   sem_t *pSem = pFile->pInode->pSem;
27338: 
27339:   assert( pFile );
27340:   assert( pSem );
27341:   OSTRACE(("UNLOCK  %d %d was %d pid=%d (sem)\n", pFile->h, eFileLock,
27342: 	   pFile->eFileLock, getpid()));
27343:   assert( eFileLock<=SHARED_LOCK );
27344:   
27345:   /* no-op if possible */
27346:   if( pFile->eFileLock==eFileLock ){
27347:     return SQLITE_OK;
27348:   }
27349:   
27350:   /* shared can just be set because we always have an exclusive */
27351:   if (eFileLock==SHARED_LOCK) {
27352:     pFile->eFileLock = eFileLock;
27353:     return SQLITE_OK;
27354:   }
27355:   
27356:   /* no, really unlock. */
27357:   if ( sem_post(pSem)==-1 ) {
27358:     int rc, tErrno = errno;
27359:     rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
27360:     if( IS_LOCK_ERROR(rc) ){
27361:       pFile->lastErrno = tErrno;
27362:     }
27363:     return rc; 
27364:   }
27365:   pFile->eFileLock = NO_LOCK;
27366:   return SQLITE_OK;
27367: }
27368: 
27369: /*
27370:  ** Close a file.
27371:  */
27372: static int semClose(sqlite3_file *id) {
27373:   if( id ){
27374:     unixFile *pFile = (unixFile*)id;
27375:     semUnlock(id, NO_LOCK);
27376:     assert( pFile );
27377:     unixEnterMutex();
27378:     releaseInodeInfo(pFile);
27379:     unixLeaveMutex();
27380:     closeUnixFile(id);
27381:   }
27382:   return SQLITE_OK;
27383: }
27384: 
27385: #endif /* OS_VXWORKS */
27386: /*
27387: ** Named semaphore locking is only available on VxWorks.
27388: **
27389: *************** End of the named semaphore lock implementation ****************
27390: ******************************************************************************/
27391: 
27392: 
27393: /******************************************************************************
27394: *************************** Begin AFP Locking *********************************
27395: **
27396: ** AFP is the Apple Filing Protocol.  AFP is a network filesystem found
27397: ** on Apple Macintosh computers - both OS9 and OSX.
27398: **
27399: ** Third-party implementations of AFP are available.  But this code here
27400: ** only works on OSX.
27401: */
27402: 
27403: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
27404: /*
27405: ** The afpLockingContext structure contains all afp lock specific state
27406: */
27407: typedef struct afpLockingContext afpLockingContext;
27408: struct afpLockingContext {
27409:   int reserved;
27410:   const char *dbPath;             /* Name of the open file */
27411: };
27412: 
27413: struct ByteRangeLockPB2
27414: {
27415:   unsigned long long offset;        /* offset to first byte to lock */
27416:   unsigned long long length;        /* nbr of bytes to lock */
27417:   unsigned long long retRangeStart; /* nbr of 1st byte locked if successful */
27418:   unsigned char unLockFlag;         /* 1 = unlock, 0 = lock */
27419:   unsigned char startEndFlag;       /* 1=rel to end of fork, 0=rel to start */
27420:   int fd;                           /* file desc to assoc this lock with */
27421: };
27422: 
27423: #define afpfsByteRangeLock2FSCTL        _IOWR('z', 23, struct ByteRangeLockPB2)
27424: 
27425: /*
27426: ** This is a utility for setting or clearing a bit-range lock on an
27427: ** AFP filesystem.
27428: ** 
27429: ** Return SQLITE_OK on success, SQLITE_BUSY on failure.
27430: */
27431: static int afpSetLock(
27432:   const char *path,              /* Name of the file to be locked or unlocked */
27433:   unixFile *pFile,               /* Open file descriptor on path */
27434:   unsigned long long offset,     /* First byte to be locked */
27435:   unsigned long long length,     /* Number of bytes to lock */
27436:   int setLockFlag                /* True to set lock.  False to clear lock */
27437: ){
27438:   struct ByteRangeLockPB2 pb;
27439:   int err;
27440:   
27441:   pb.unLockFlag = setLockFlag ? 0 : 1;
27442:   pb.startEndFlag = 0;
27443:   pb.offset = offset;
27444:   pb.length = length; 
27445:   pb.fd = pFile->h;
27446:   
27447:   OSTRACE(("AFPSETLOCK [%s] for %d%s in range %llx:%llx\n", 
27448:     (setLockFlag?"ON":"OFF"), pFile->h, (pb.fd==-1?"[testval-1]":""),
27449:     offset, length));
27450:   err = fsctl(path, afpfsByteRangeLock2FSCTL, &pb, 0);
27451:   if ( err==-1 ) {
27452:     int rc;
27453:     int tErrno = errno;
27454:     OSTRACE(("AFPSETLOCK failed to fsctl() '%s' %d %s\n",
27455:              path, tErrno, strerror(tErrno)));
27456: #ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS
27457:     rc = SQLITE_BUSY;
27458: #else
27459:     rc = sqliteErrorFromPosixError(tErrno,
27460:                     setLockFlag ? SQLITE_IOERR_LOCK : SQLITE_IOERR_UNLOCK);
27461: #endif /* SQLITE_IGNORE_AFP_LOCK_ERRORS */
27462:     if( IS_LOCK_ERROR(rc) ){
27463:       pFile->lastErrno = tErrno;
27464:     }
27465:     return rc;
27466:   } else {
27467:     return SQLITE_OK;
27468:   }
27469: }
27470: 
27471: /*
27472: ** This routine checks if there is a RESERVED lock held on the specified
27473: ** file by this or any other process. If such a lock is held, set *pResOut
27474: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
27475: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
27476: */
27477: static int afpCheckReservedLock(sqlite3_file *id, int *pResOut){
27478:   int rc = SQLITE_OK;
27479:   int reserved = 0;
27480:   unixFile *pFile = (unixFile*)id;
27481:   afpLockingContext *context;
27482:   
27483:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
27484:   
27485:   assert( pFile );
27486:   context = (afpLockingContext *) pFile->lockingContext;
27487:   if( context->reserved ){
27488:     *pResOut = 1;
27489:     return SQLITE_OK;
27490:   }
27491:   unixEnterMutex(); /* Because pFile->pInode is shared across threads */
27492:   
27493:   /* Check if a thread in this process holds such a lock */
27494:   if( pFile->pInode->eFileLock>SHARED_LOCK ){
27495:     reserved = 1;
27496:   }
27497:   
27498:   /* Otherwise see if some other process holds it.
27499:    */
27500:   if( !reserved ){
27501:     /* lock the RESERVED byte */
27502:     int lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1);  
27503:     if( SQLITE_OK==lrc ){
27504:       /* if we succeeded in taking the reserved lock, unlock it to restore
27505:       ** the original state */
27506:       lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0);
27507:     } else {
27508:       /* if we failed to get the lock then someone else must have it */
27509:       reserved = 1;
27510:     }
27511:     if( IS_LOCK_ERROR(lrc) ){
27512:       rc=lrc;
27513:     }
27514:   }
27515:   
27516:   unixLeaveMutex();
27517:   OSTRACE(("TEST WR-LOCK %d %d %d (afp)\n", pFile->h, rc, reserved));
27518:   
27519:   *pResOut = reserved;
27520:   return rc;
27521: }
27522: 
27523: /*
27524: ** Lock the file with the lock specified by parameter eFileLock - one
27525: ** of the following:
27526: **
27527: **     (1) SHARED_LOCK
27528: **     (2) RESERVED_LOCK
27529: **     (3) PENDING_LOCK
27530: **     (4) EXCLUSIVE_LOCK
27531: **
27532: ** Sometimes when requesting one lock state, additional lock states
27533: ** are inserted in between.  The locking might fail on one of the later
27534: ** transitions leaving the lock state different from what it started but
27535: ** still short of its goal.  The following chart shows the allowed
27536: ** transitions and the inserted intermediate states:
27537: **
27538: **    UNLOCKED -> SHARED
27539: **    SHARED -> RESERVED
27540: **    SHARED -> (PENDING) -> EXCLUSIVE
27541: **    RESERVED -> (PENDING) -> EXCLUSIVE
27542: **    PENDING -> EXCLUSIVE
27543: **
27544: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
27545: ** routine to lower a locking level.
27546: */
27547: static int afpLock(sqlite3_file *id, int eFileLock){
27548:   int rc = SQLITE_OK;
27549:   unixFile *pFile = (unixFile*)id;
27550:   unixInodeInfo *pInode = pFile->pInode;
27551:   afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
27552:   
27553:   assert( pFile );
27554:   OSTRACE(("LOCK    %d %s was %s(%s,%d) pid=%d (afp)\n", pFile->h,
27555:            azFileLock(eFileLock), azFileLock(pFile->eFileLock),
27556:            azFileLock(pInode->eFileLock), pInode->nShared , getpid()));
27557: 
27558:   /* If there is already a lock of this type or more restrictive on the
27559:   ** unixFile, do nothing. Don't use the afp_end_lock: exit path, as
27560:   ** unixEnterMutex() hasn't been called yet.
27561:   */
27562:   if( pFile->eFileLock>=eFileLock ){
27563:     OSTRACE(("LOCK    %d %s ok (already held) (afp)\n", pFile->h,
27564:            azFileLock(eFileLock)));
27565:     return SQLITE_OK;
27566:   }
27567: 
27568:   /* Make sure the locking sequence is correct
27569:   **  (1) We never move from unlocked to anything higher than shared lock.
27570:   **  (2) SQLite never explicitly requests a pendig lock.
27571:   **  (3) A shared lock is always held when a reserve lock is requested.
27572:   */
27573:   assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK );
27574:   assert( eFileLock!=PENDING_LOCK );
27575:   assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK );
27576:   
27577:   /* This mutex is needed because pFile->pInode is shared across threads
27578:   */
27579:   unixEnterMutex();
27580:   pInode = pFile->pInode;
27581: 
27582:   /* If some thread using this PID has a lock via a different unixFile*
27583:   ** handle that precludes the requested lock, return BUSY.
27584:   */
27585:   if( (pFile->eFileLock!=pInode->eFileLock && 
27586:        (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK))
27587:      ){
27588:     rc = SQLITE_BUSY;
27589:     goto afp_end_lock;
27590:   }
27591:   
27592:   /* If a SHARED lock is requested, and some thread using this PID already
27593:   ** has a SHARED or RESERVED lock, then increment reference counts and
27594:   ** return SQLITE_OK.
27595:   */
27596:   if( eFileLock==SHARED_LOCK && 
27597:      (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){
27598:     assert( eFileLock==SHARED_LOCK );
27599:     assert( pFile->eFileLock==0 );
27600:     assert( pInode->nShared>0 );
27601:     pFile->eFileLock = SHARED_LOCK;
27602:     pInode->nShared++;
27603:     pInode->nLock++;
27604:     goto afp_end_lock;
27605:   }
27606:     
27607:   /* A PENDING lock is needed before acquiring a SHARED lock and before
27608:   ** acquiring an EXCLUSIVE lock.  For the SHARED lock, the PENDING will
27609:   ** be released.
27610:   */
27611:   if( eFileLock==SHARED_LOCK 
27612:       || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK)
27613:   ){
27614:     int failed;
27615:     failed = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 1);
27616:     if (failed) {
27617:       rc = failed;
27618:       goto afp_end_lock;
27619:     }
27620:   }
27621:   
27622:   /* If control gets to this point, then actually go ahead and make
27623:   ** operating system calls for the specified lock.
27624:   */
27625:   if( eFileLock==SHARED_LOCK ){
27626:     int lrc1, lrc2, lrc1Errno = 0;
27627:     long lk, mask;
27628:     
27629:     assert( pInode->nShared==0 );
27630:     assert( pInode->eFileLock==0 );
27631:         
27632:     mask = (sizeof(long)==8) ? LARGEST_INT64 : 0x7fffffff;
27633:     /* Now get the read-lock SHARED_LOCK */
27634:     /* note that the quality of the randomness doesn't matter that much */
27635:     lk = random(); 
27636:     pInode->sharedByte = (lk & mask)%(SHARED_SIZE - 1);
27637:     lrc1 = afpSetLock(context->dbPath, pFile, 
27638:           SHARED_FIRST+pInode->sharedByte, 1, 1);
27639:     if( IS_LOCK_ERROR(lrc1) ){
27640:       lrc1Errno = pFile->lastErrno;
27641:     }
27642:     /* Drop the temporary PENDING lock */
27643:     lrc2 = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0);
27644:     
27645:     if( IS_LOCK_ERROR(lrc1) ) {
27646:       pFile->lastErrno = lrc1Errno;
27647:       rc = lrc1;
27648:       goto afp_end_lock;
27649:     } else if( IS_LOCK_ERROR(lrc2) ){
27650:       rc = lrc2;
27651:       goto afp_end_lock;
27652:     } else if( lrc1 != SQLITE_OK ) {
27653:       rc = lrc1;
27654:     } else {
27655:       pFile->eFileLock = SHARED_LOCK;
27656:       pInode->nLock++;
27657:       pInode->nShared = 1;
27658:     }
27659:   }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){
27660:     /* We are trying for an exclusive lock but another thread in this
27661:      ** same process is still holding a shared lock. */
27662:     rc = SQLITE_BUSY;
27663:   }else{
27664:     /* The request was for a RESERVED or EXCLUSIVE lock.  It is
27665:     ** assumed that there is a SHARED or greater lock on the file
27666:     ** already.
27667:     */
27668:     int failed = 0;
27669:     assert( 0!=pFile->eFileLock );
27670:     if (eFileLock >= RESERVED_LOCK && pFile->eFileLock < RESERVED_LOCK) {
27671:         /* Acquire a RESERVED lock */
27672:         failed = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1);
27673:       if( !failed ){
27674:         context->reserved = 1;
27675:       }
27676:     }
27677:     if (!failed && eFileLock == EXCLUSIVE_LOCK) {
27678:       /* Acquire an EXCLUSIVE lock */
27679:         
27680:       /* Remove the shared lock before trying the range.  we'll need to 
27681:       ** reestablish the shared lock if we can't get the  afpUnlock
27682:       */
27683:       if( !(failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST +
27684:                          pInode->sharedByte, 1, 0)) ){
27685:         int failed2 = SQLITE_OK;
27686:         /* now attemmpt to get the exclusive lock range */
27687:         failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST, 
27688:                                SHARED_SIZE, 1);
27689:         if( failed && (failed2 = afpSetLock(context->dbPath, pFile, 
27690:                        SHARED_FIRST + pInode->sharedByte, 1, 1)) ){
27691:           /* Can't reestablish the shared lock.  Sqlite can't deal, this is
27692:           ** a critical I/O error
27693:           */
27694:           rc = ((failed & SQLITE_IOERR) == SQLITE_IOERR) ? failed2 : 
27695:                SQLITE_IOERR_LOCK;
27696:           goto afp_end_lock;
27697:         } 
27698:       }else{
27699:         rc = failed; 
27700:       }
27701:     }
27702:     if( failed ){
27703:       rc = failed;
27704:     }
27705:   }
27706:   
27707:   if( rc==SQLITE_OK ){
27708:     pFile->eFileLock = eFileLock;
27709:     pInode->eFileLock = eFileLock;
27710:   }else if( eFileLock==EXCLUSIVE_LOCK ){
27711:     pFile->eFileLock = PENDING_LOCK;
27712:     pInode->eFileLock = PENDING_LOCK;
27713:   }
27714:   
27715: afp_end_lock:
27716:   unixLeaveMutex();
27717:   OSTRACE(("LOCK    %d %s %s (afp)\n", pFile->h, azFileLock(eFileLock), 
27718:          rc==SQLITE_OK ? "ok" : "failed"));
27719:   return rc;
27720: }
27721: 
27722: /*
27723: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
27724: ** must be either NO_LOCK or SHARED_LOCK.
27725: **
27726: ** If the locking level of the file descriptor is already at or below
27727: ** the requested locking level, this routine is a no-op.
27728: */
27729: static int afpUnlock(sqlite3_file *id, int eFileLock) {
27730:   int rc = SQLITE_OK;
27731:   unixFile *pFile = (unixFile*)id;
27732:   unixInodeInfo *pInode;
27733:   afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
27734:   int skipShared = 0;
27735: #ifdef SQLITE_TEST
27736:   int h = pFile->h;
27737: #endif
27738: 
27739:   assert( pFile );
27740:   OSTRACE(("UNLOCK  %d %d was %d(%d,%d) pid=%d (afp)\n", pFile->h, eFileLock,
27741:            pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared,
27742:            getpid()));
27743: 
27744:   assert( eFileLock<=SHARED_LOCK );
27745:   if( pFile->eFileLock<=eFileLock ){
27746:     return SQLITE_OK;
27747:   }
27748:   unixEnterMutex();
27749:   pInode = pFile->pInode;
27750:   assert( pInode->nShared!=0 );
27751:   if( pFile->eFileLock>SHARED_LOCK ){
27752:     assert( pInode->eFileLock==pFile->eFileLock );
27753:     SimulateIOErrorBenign(1);
27754:     SimulateIOError( h=(-1) )
27755:     SimulateIOErrorBenign(0);
27756:     
27757: #ifndef NDEBUG
27758:     /* When reducing a lock such that other processes can start
27759:     ** reading the database file again, make sure that the
27760:     ** transaction counter was updated if any part of the database
27761:     ** file changed.  If the transaction counter is not updated,
27762:     ** other connections to the same file might not realize that
27763:     ** the file has changed and hence might not know to flush their
27764:     ** cache.  The use of a stale cache can lead to database corruption.
27765:     */
27766:     assert( pFile->inNormalWrite==0
27767:            || pFile->dbUpdate==0
27768:            || pFile->transCntrChng==1 );
27769:     pFile->inNormalWrite = 0;
27770: #endif
27771:     
27772:     if( pFile->eFileLock==EXCLUSIVE_LOCK ){
27773:       rc = afpSetLock(context->dbPath, pFile, SHARED_FIRST, SHARED_SIZE, 0);
27774:       if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1) ){
27775:         /* only re-establish the shared lock if necessary */
27776:         int sharedLockByte = SHARED_FIRST+pInode->sharedByte;
27777:         rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 1);
27778:       } else {
27779:         skipShared = 1;
27780:       }
27781:     }
27782:     if( rc==SQLITE_OK && pFile->eFileLock>=PENDING_LOCK ){
27783:       rc = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0);
27784:     } 
27785:     if( rc==SQLITE_OK && pFile->eFileLock>=RESERVED_LOCK && context->reserved ){
27786:       rc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0);
27787:       if( !rc ){ 
27788:         context->reserved = 0; 
27789:       }
27790:     }
27791:     if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1)){
27792:       pInode->eFileLock = SHARED_LOCK;
27793:     }
27794:   }
27795:   if( rc==SQLITE_OK && eFileLock==NO_LOCK ){
27796: 
27797:     /* Decrement the shared lock counter.  Release the lock using an
27798:     ** OS call only when all threads in this same process have released
27799:     ** the lock.
27800:     */
27801:     unsigned long long sharedLockByte = SHARED_FIRST+pInode->sharedByte;
27802:     pInode->nShared--;
27803:     if( pInode->nShared==0 ){
27804:       SimulateIOErrorBenign(1);
27805:       SimulateIOError( h=(-1) )
27806:       SimulateIOErrorBenign(0);
27807:       if( !skipShared ){
27808:         rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 0);
27809:       }
27810:       if( !rc ){
27811:         pInode->eFileLock = NO_LOCK;
27812:         pFile->eFileLock = NO_LOCK;
27813:       }
27814:     }
27815:     if( rc==SQLITE_OK ){
27816:       pInode->nLock--;
27817:       assert( pInode->nLock>=0 );
27818:       if( pInode->nLock==0 ){
27819:         closePendingFds(pFile);
27820:       }
27821:     }
27822:   }
27823:   
27824:   unixLeaveMutex();
27825:   if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock;
27826:   return rc;
27827: }
27828: 
27829: /*
27830: ** Close a file & cleanup AFP specific locking context 
27831: */
27832: static int afpClose(sqlite3_file *id) {
27833:   int rc = SQLITE_OK;
27834:   if( id ){
27835:     unixFile *pFile = (unixFile*)id;
27836:     afpUnlock(id, NO_LOCK);
27837:     unixEnterMutex();
27838:     if( pFile->pInode && pFile->pInode->nLock ){
27839:       /* If there are outstanding locks, do not actually close the file just
27840:       ** yet because that would clear those locks.  Instead, add the file
27841:       ** descriptor to pInode->aPending.  It will be automatically closed when
27842:       ** the last lock is cleared.
27843:       */
27844:       setPendingFd(pFile);
27845:     }
27846:     releaseInodeInfo(pFile);
27847:     sqlite3_free(pFile->lockingContext);
27848:     rc = closeUnixFile(id);
27849:     unixLeaveMutex();
27850:   }
27851:   return rc;
27852: }
27853: 
27854: #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
27855: /*
27856: ** The code above is the AFP lock implementation.  The code is specific
27857: ** to MacOSX and does not work on other unix platforms.  No alternative
27858: ** is available.  If you don't compile for a mac, then the "unix-afp"
27859: ** VFS is not available.
27860: **
27861: ********************* End of the AFP lock implementation **********************
27862: ******************************************************************************/
27863: 
27864: /******************************************************************************
27865: *************************** Begin NFS Locking ********************************/
27866: 
27867: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
27868: /*
27869:  ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
27870:  ** must be either NO_LOCK or SHARED_LOCK.
27871:  **
27872:  ** If the locking level of the file descriptor is already at or below
27873:  ** the requested locking level, this routine is a no-op.
27874:  */
27875: static int nfsUnlock(sqlite3_file *id, int eFileLock){
27876:   return posixUnlock(id, eFileLock, 1);
27877: }
27878: 
27879: #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
27880: /*
27881: ** The code above is the NFS lock implementation.  The code is specific
27882: ** to MacOSX and does not work on other unix platforms.  No alternative
27883: ** is available.  
27884: **
27885: ********************* End of the NFS lock implementation **********************
27886: ******************************************************************************/
27887: 
27888: /******************************************************************************
27889: **************** Non-locking sqlite3_file methods *****************************
27890: **
27891: ** The next division contains implementations for all methods of the 
27892: ** sqlite3_file object other than the locking methods.  The locking
27893: ** methods were defined in divisions above (one locking method per
27894: ** division).  Those methods that are common to all locking modes
27895: ** are gather together into this division.
27896: */
27897: 
27898: /*
27899: ** Seek to the offset passed as the second argument, then read cnt 
27900: ** bytes into pBuf. Return the number of bytes actually read.
27901: **
27902: ** NB:  If you define USE_PREAD or USE_PREAD64, then it might also
27903: ** be necessary to define _XOPEN_SOURCE to be 500.  This varies from
27904: ** one system to another.  Since SQLite does not define USE_PREAD
27905: ** any any form by default, we will not attempt to define _XOPEN_SOURCE.
27906: ** See tickets #2741 and #2681.
27907: **
27908: ** To avoid stomping the errno value on a failed read the lastErrno value
27909: ** is set before returning.
27910: */
27911: static int seekAndRead(unixFile *id, sqlite3_int64 offset, void *pBuf, int cnt){
27912:   int got;
27913:   int prior = 0;
27914: #if (!defined(USE_PREAD) && !defined(USE_PREAD64))
27915:   i64 newOffset;
27916: #endif
27917:   TIMER_START;
27918:   do{
27919: #if defined(USE_PREAD)
27920:     got = osPread(id->h, pBuf, cnt, offset);
27921:     SimulateIOError( got = -1 );
27922: #elif defined(USE_PREAD64)
27923:     got = osPread64(id->h, pBuf, cnt, offset);
27924:     SimulateIOError( got = -1 );
27925: #else
27926:     newOffset = lseek(id->h, offset, SEEK_SET);
27927:     SimulateIOError( newOffset-- );
27928:     if( newOffset!=offset ){
27929:       if( newOffset == -1 ){
27930:         ((unixFile*)id)->lastErrno = errno;
27931:       }else{
27932:         ((unixFile*)id)->lastErrno = 0;			
27933:       }
27934:       return -1;
27935:     }
27936:     got = osRead(id->h, pBuf, cnt);
27937: #endif
27938:     if( got==cnt ) break;
27939:     if( got<0 ){
27940:       if( errno==EINTR ){ got = 1; continue; }
27941:       prior = 0;
27942:       ((unixFile*)id)->lastErrno = errno;
27943:       break;
27944:     }else if( got>0 ){
27945:       cnt -= got;
27946:       offset += got;
27947:       prior += got;
27948:       pBuf = (void*)(got + (char*)pBuf);
27949:     }
27950:   }while( got>0 );
27951:   TIMER_END;
27952:   OSTRACE(("READ    %-3d %5d %7lld %llu\n",
27953:             id->h, got+prior, offset-prior, TIMER_ELAPSED));
27954:   return got+prior;
27955: }
27956: 
27957: /*
27958: ** Read data from a file into a buffer.  Return SQLITE_OK if all
27959: ** bytes were read successfully and SQLITE_IOERR if anything goes
27960: ** wrong.
27961: */
27962: static int unixRead(
27963:   sqlite3_file *id, 
27964:   void *pBuf, 
27965:   int amt,
27966:   sqlite3_int64 offset
27967: ){
27968:   unixFile *pFile = (unixFile *)id;
27969:   int got;
27970:   assert( id );
27971: 
27972:   /* If this is a database file (not a journal, master-journal or temp
27973:   ** file), the bytes in the locking range should never be read or written. */
27974: #if 0
27975:   assert( pFile->pUnused==0
27976:        || offset>=PENDING_BYTE+512
27977:        || offset+amt<=PENDING_BYTE 
27978:   );
27979: #endif
27980: 
27981:   got = seekAndRead(pFile, offset, pBuf, amt);
27982:   if( got==amt ){
27983:     return SQLITE_OK;
27984:   }else if( got<0 ){
27985:     /* lastErrno set by seekAndRead */
27986:     return SQLITE_IOERR_READ;
27987:   }else{
27988:     pFile->lastErrno = 0; /* not a system error */
27989:     /* Unread parts of the buffer must be zero-filled */
27990:     memset(&((char*)pBuf)[got], 0, amt-got);
27991:     return SQLITE_IOERR_SHORT_READ;
27992:   }
27993: }
27994: 
27995: /*
27996: ** Seek to the offset in id->offset then read cnt bytes into pBuf.
27997: ** Return the number of bytes actually read.  Update the offset.
27998: **
27999: ** To avoid stomping the errno value on a failed write the lastErrno value
28000: ** is set before returning.
28001: */
28002: static int seekAndWrite(unixFile *id, i64 offset, const void *pBuf, int cnt){
28003:   int got;
28004: #if (!defined(USE_PREAD) && !defined(USE_PREAD64))
28005:   i64 newOffset;
28006: #endif
28007:   TIMER_START;
28008: #if defined(USE_PREAD)
28009:   do{ got = osPwrite(id->h, pBuf, cnt, offset); }while( got<0 && errno==EINTR );
28010: #elif defined(USE_PREAD64)
28011:   do{ got = osPwrite64(id->h, pBuf, cnt, offset);}while( got<0 && errno==EINTR);
28012: #else
28013:   do{
28014:     newOffset = lseek(id->h, offset, SEEK_SET);
28015:     SimulateIOError( newOffset-- );
28016:     if( newOffset!=offset ){
28017:       if( newOffset == -1 ){
28018:         ((unixFile*)id)->lastErrno = errno;
28019:       }else{
28020:         ((unixFile*)id)->lastErrno = 0;			
28021:       }
28022:       return -1;
28023:     }
28024:     got = osWrite(id->h, pBuf, cnt);
28025:   }while( got<0 && errno==EINTR );
28026: #endif
28027:   TIMER_END;
28028:   if( got<0 ){
28029:     ((unixFile*)id)->lastErrno = errno;
28030:   }
28031: 
28032:   OSTRACE(("WRITE   %-3d %5d %7lld %llu\n", id->h, got, offset, TIMER_ELAPSED));
28033:   return got;
28034: }
28035: 
28036: 
28037: /*
28038: ** Write data from a buffer into a file.  Return SQLITE_OK on success
28039: ** or some other error code on failure.
28040: */
28041: static int unixWrite(
28042:   sqlite3_file *id, 
28043:   const void *pBuf, 
28044:   int amt,
28045:   sqlite3_int64 offset 
28046: ){
28047:   unixFile *pFile = (unixFile*)id;
28048:   int wrote = 0;
28049:   assert( id );
28050:   assert( amt>0 );
28051: 
28052:   /* If this is a database file (not a journal, master-journal or temp
28053:   ** file), the bytes in the locking range should never be read or written. */
28054: #if 0
28055:   assert( pFile->pUnused==0
28056:        || offset>=PENDING_BYTE+512
28057:        || offset+amt<=PENDING_BYTE 
28058:   );
28059: #endif
28060: 
28061: #ifndef NDEBUG
28062:   /* If we are doing a normal write to a database file (as opposed to
28063:   ** doing a hot-journal rollback or a write to some file other than a
28064:   ** normal database file) then record the fact that the database
28065:   ** has changed.  If the transaction counter is modified, record that
28066:   ** fact too.
28067:   */
28068:   if( pFile->inNormalWrite ){
28069:     pFile->dbUpdate = 1;  /* The database has been modified */
28070:     if( offset<=24 && offset+amt>=27 ){
28071:       int rc;
28072:       char oldCntr[4];
28073:       SimulateIOErrorBenign(1);
28074:       rc = seekAndRead(pFile, 24, oldCntr, 4);
28075:       SimulateIOErrorBenign(0);
28076:       if( rc!=4 || memcmp(oldCntr, &((char*)pBuf)[24-offset], 4)!=0 ){
28077:         pFile->transCntrChng = 1;  /* The transaction counter has changed */
28078:       }
28079:     }
28080:   }
28081: #endif
28082: 
28083:   while( amt>0 && (wrote = seekAndWrite(pFile, offset, pBuf, amt))>0 ){
28084:     amt -= wrote;
28085:     offset += wrote;
28086:     pBuf = &((char*)pBuf)[wrote];
28087:   }
28088:   SimulateIOError(( wrote=(-1), amt=1 ));
28089:   SimulateDiskfullError(( wrote=0, amt=1 ));
28090: 
28091:   if( amt>0 ){
28092:     if( wrote<0 && pFile->lastErrno!=ENOSPC ){
28093:       /* lastErrno set by seekAndWrite */
28094:       return SQLITE_IOERR_WRITE;
28095:     }else{
28096:       pFile->lastErrno = 0; /* not a system error */
28097:       return SQLITE_FULL;
28098:     }
28099:   }
28100: 
28101:   return SQLITE_OK;
28102: }
28103: 
28104: #ifdef SQLITE_TEST
28105: /*
28106: ** Count the number of fullsyncs and normal syncs.  This is used to test
28107: ** that syncs and fullsyncs are occurring at the right times.
28108: */
28109: SQLITE_API int sqlite3_sync_count = 0;
28110: SQLITE_API int sqlite3_fullsync_count = 0;
28111: #endif
28112: 
28113: /*
28114: ** We do not trust systems to provide a working fdatasync().  Some do.
28115: ** Others do no.  To be safe, we will stick with the (slightly slower)
28116: ** fsync(). If you know that your system does support fdatasync() correctly,
28117: ** then simply compile with -Dfdatasync=fdatasync
28118: */
28119: #if !defined(fdatasync)
28120: # define fdatasync fsync
28121: #endif
28122: 
28123: /*
28124: ** Define HAVE_FULLFSYNC to 0 or 1 depending on whether or not
28125: ** the F_FULLFSYNC macro is defined.  F_FULLFSYNC is currently
28126: ** only available on Mac OS X.  But that could change.
28127: */
28128: #ifdef F_FULLFSYNC
28129: # define HAVE_FULLFSYNC 1
28130: #else
28131: # define HAVE_FULLFSYNC 0
28132: #endif
28133: 
28134: 
28135: /*
28136: ** The fsync() system call does not work as advertised on many
28137: ** unix systems.  The following procedure is an attempt to make
28138: ** it work better.
28139: **
28140: ** The SQLITE_NO_SYNC macro disables all fsync()s.  This is useful
28141: ** for testing when we want to run through the test suite quickly.
28142: ** You are strongly advised *not* to deploy with SQLITE_NO_SYNC
28143: ** enabled, however, since with SQLITE_NO_SYNC enabled, an OS crash
28144: ** or power failure will likely corrupt the database file.
28145: **
28146: ** SQLite sets the dataOnly flag if the size of the file is unchanged.
28147: ** The idea behind dataOnly is that it should only write the file content
28148: ** to disk, not the inode.  We only set dataOnly if the file size is 
28149: ** unchanged since the file size is part of the inode.  However, 
28150: ** Ted Ts'o tells us that fdatasync() will also write the inode if the
28151: ** file size has changed.  The only real difference between fdatasync()
28152: ** and fsync(), Ted tells us, is that fdatasync() will not flush the
28153: ** inode if the mtime or owner or other inode attributes have changed.
28154: ** We only care about the file size, not the other file attributes, so
28155: ** as far as SQLite is concerned, an fdatasync() is always adequate.
28156: ** So, we always use fdatasync() if it is available, regardless of
28157: ** the value of the dataOnly flag.
28158: */
28159: static int full_fsync(int fd, int fullSync, int dataOnly){
28160:   int rc;
28161: 
28162:   /* The following "ifdef/elif/else/" block has the same structure as
28163:   ** the one below. It is replicated here solely to avoid cluttering 
28164:   ** up the real code with the UNUSED_PARAMETER() macros.
28165:   */
28166: #ifdef SQLITE_NO_SYNC
28167:   UNUSED_PARAMETER(fd);
28168:   UNUSED_PARAMETER(fullSync);
28169:   UNUSED_PARAMETER(dataOnly);
28170: #elif HAVE_FULLFSYNC
28171:   UNUSED_PARAMETER(dataOnly);
28172: #else
28173:   UNUSED_PARAMETER(fullSync);
28174:   UNUSED_PARAMETER(dataOnly);
28175: #endif
28176: 
28177:   /* Record the number of times that we do a normal fsync() and 
28178:   ** FULLSYNC.  This is used during testing to verify that this procedure
28179:   ** gets called with the correct arguments.
28180:   */
28181: #ifdef SQLITE_TEST
28182:   if( fullSync ) sqlite3_fullsync_count++;
28183:   sqlite3_sync_count++;
28184: #endif
28185: 
28186:   /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
28187:   ** no-op
28188:   */
28189: #ifdef SQLITE_NO_SYNC
28190:   rc = SQLITE_OK;
28191: #elif HAVE_FULLFSYNC
28192:   if( fullSync ){
28193:     rc = osFcntl(fd, F_FULLFSYNC, 0);
28194:   }else{
28195:     rc = 1;
28196:   }
28197:   /* If the FULLFSYNC failed, fall back to attempting an fsync().
28198:   ** It shouldn't be possible for fullfsync to fail on the local 
28199:   ** file system (on OSX), so failure indicates that FULLFSYNC
28200:   ** isn't supported for this file system. So, attempt an fsync 
28201:   ** and (for now) ignore the overhead of a superfluous fcntl call.  
28202:   ** It'd be better to detect fullfsync support once and avoid 
28203:   ** the fcntl call every time sync is called.
28204:   */
28205:   if( rc ) rc = fsync(fd);
28206: 
28207: #elif defined(__APPLE__)
28208:   /* fdatasync() on HFS+ doesn't yet flush the file size if it changed correctly
28209:   ** so currently we default to the macro that redefines fdatasync to fsync
28210:   */
28211:   rc = fsync(fd);
28212: #else 
28213:   rc = fdatasync(fd);
28214: #if OS_VXWORKS
28215:   if( rc==-1 && errno==ENOTSUP ){
28216:     rc = fsync(fd);
28217:   }
28218: #endif /* OS_VXWORKS */
28219: #endif /* ifdef SQLITE_NO_SYNC elif HAVE_FULLFSYNC */
28220: 
28221:   if( OS_VXWORKS && rc!= -1 ){
28222:     rc = 0;
28223:   }
28224:   return rc;
28225: }
28226: 
28227: /*
28228: ** Open a file descriptor to the directory containing file zFilename.
28229: ** If successful, *pFd is set to the opened file descriptor and
28230: ** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM
28231: ** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined
28232: ** value.
28233: **
28234: ** The directory file descriptor is used for only one thing - to
28235: ** fsync() a directory to make sure file creation and deletion events
28236: ** are flushed to disk.  Such fsyncs are not needed on newer
28237: ** journaling filesystems, but are required on older filesystems.
28238: **
28239: ** This routine can be overridden using the xSetSysCall interface.
28240: ** The ability to override this routine was added in support of the
28241: ** chromium sandbox.  Opening a directory is a security risk (we are
28242: ** told) so making it overrideable allows the chromium sandbox to
28243: ** replace this routine with a harmless no-op.  To make this routine
28244: ** a no-op, replace it with a stub that returns SQLITE_OK but leaves
28245: ** *pFd set to a negative number.
28246: **
28247: ** If SQLITE_OK is returned, the caller is responsible for closing
28248: ** the file descriptor *pFd using close().
28249: */
28250: static int openDirectory(const char *zFilename, int *pFd){
28251:   int ii;
28252:   int fd = -1;
28253:   char zDirname[MAX_PATHNAME+1];
28254: 
28255:   sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename);
28256:   for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--);
28257:   if( ii>0 ){
28258:     zDirname[ii] = '\0';
28259:     fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0);
28260:     if( fd>=0 ){
28261: #ifdef FD_CLOEXEC
28262:       osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
28263: #endif
28264:       OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname));
28265:     }
28266:   }
28267:   *pFd = fd;
28268:   return (fd>=0?SQLITE_OK:unixLogError(SQLITE_CANTOPEN_BKPT, "open", zDirname));
28269: }
28270: 
28271: /*
28272: ** Make sure all writes to a particular file are committed to disk.
28273: **
28274: ** If dataOnly==0 then both the file itself and its metadata (file
28275: ** size, access time, etc) are synced.  If dataOnly!=0 then only the
28276: ** file data is synced.
28277: **
28278: ** Under Unix, also make sure that the directory entry for the file
28279: ** has been created by fsync-ing the directory that contains the file.
28280: ** If we do not do this and we encounter a power failure, the directory
28281: ** entry for the journal might not exist after we reboot.  The next
28282: ** SQLite to access the file will not know that the journal exists (because
28283: ** the directory entry for the journal was never created) and the transaction
28284: ** will not roll back - possibly leading to database corruption.
28285: */
28286: static int unixSync(sqlite3_file *id, int flags){
28287:   int rc;
28288:   unixFile *pFile = (unixFile*)id;
28289: 
28290:   int isDataOnly = (flags&SQLITE_SYNC_DATAONLY);
28291:   int isFullsync = (flags&0x0F)==SQLITE_SYNC_FULL;
28292: 
28293:   /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */
28294:   assert((flags&0x0F)==SQLITE_SYNC_NORMAL
28295:       || (flags&0x0F)==SQLITE_SYNC_FULL
28296:   );
28297: 
28298:   /* Unix cannot, but some systems may return SQLITE_FULL from here. This
28299:   ** line is to test that doing so does not cause any problems.
28300:   */
28301:   SimulateDiskfullError( return SQLITE_FULL );
28302: 
28303:   assert( pFile );
28304:   OSTRACE(("SYNC    %-3d\n", pFile->h));
28305:   rc = full_fsync(pFile->h, isFullsync, isDataOnly);
28306:   SimulateIOError( rc=1 );
28307:   if( rc ){
28308:     pFile->lastErrno = errno;
28309:     return unixLogError(SQLITE_IOERR_FSYNC, "full_fsync", pFile->zPath);
28310:   }
28311: 
28312:   /* Also fsync the directory containing the file if the DIRSYNC flag
28313:   ** is set.  This is a one-time occurrance.  Many systems (examples: AIX)
28314:   ** are unable to fsync a directory, so ignore errors on the fsync.
28315:   */
28316:   if( pFile->ctrlFlags & UNIXFILE_DIRSYNC ){
28317:     int dirfd;
28318:     OSTRACE(("DIRSYNC %s (have_fullfsync=%d fullsync=%d)\n", pFile->zPath,
28319:             HAVE_FULLFSYNC, isFullsync));
28320:     rc = osOpenDirectory(pFile->zPath, &dirfd);
28321:     if( rc==SQLITE_OK && dirfd>=0 ){
28322:       full_fsync(dirfd, 0, 0);
28323:       robust_close(pFile, dirfd, __LINE__);
28324:     }else if( rc==SQLITE_CANTOPEN ){
28325:       rc = SQLITE_OK;
28326:     }
28327:     pFile->ctrlFlags &= ~UNIXFILE_DIRSYNC;
28328:   }
28329:   return rc;
28330: }
28331: 
28332: /*
28333: ** Truncate an open file to a specified size
28334: */
28335: static int unixTruncate(sqlite3_file *id, i64 nByte){
28336:   unixFile *pFile = (unixFile *)id;
28337:   int rc;
28338:   assert( pFile );
28339:   SimulateIOError( return SQLITE_IOERR_TRUNCATE );
28340: 
28341:   /* If the user has configured a chunk-size for this file, truncate the
28342:   ** file so that it consists of an integer number of chunks (i.e. the
28343:   ** actual file size after the operation may be larger than the requested
28344:   ** size).
28345:   */
28346:   if( pFile->szChunk ){
28347:     nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
28348:   }
28349: 
28350:   rc = robust_ftruncate(pFile->h, (off_t)nByte);
28351:   if( rc ){
28352:     pFile->lastErrno = errno;
28353:     return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath);
28354:   }else{
28355: #ifndef NDEBUG
28356:     /* If we are doing a normal write to a database file (as opposed to
28357:     ** doing a hot-journal rollback or a write to some file other than a
28358:     ** normal database file) and we truncate the file to zero length,
28359:     ** that effectively updates the change counter.  This might happen
28360:     ** when restoring a database using the backup API from a zero-length
28361:     ** source.
28362:     */
28363:     if( pFile->inNormalWrite && nByte==0 ){
28364:       pFile->transCntrChng = 1;
28365:     }
28366: #endif
28367: 
28368:     return SQLITE_OK;
28369:   }
28370: }
28371: 
28372: /*
28373: ** Determine the current size of a file in bytes
28374: */
28375: static int unixFileSize(sqlite3_file *id, i64 *pSize){
28376:   int rc;
28377:   struct stat buf;
28378:   assert( id );
28379:   rc = osFstat(((unixFile*)id)->h, &buf);
28380:   SimulateIOError( rc=1 );
28381:   if( rc!=0 ){
28382:     ((unixFile*)id)->lastErrno = errno;
28383:     return SQLITE_IOERR_FSTAT;
28384:   }
28385:   *pSize = buf.st_size;
28386: 
28387:   /* When opening a zero-size database, the findInodeInfo() procedure
28388:   ** writes a single byte into that file in order to work around a bug
28389:   ** in the OS-X msdos filesystem.  In order to avoid problems with upper
28390:   ** layers, we need to report this file size as zero even though it is
28391:   ** really 1.   Ticket #3260.
28392:   */
28393:   if( *pSize==1 ) *pSize = 0;
28394: 
28395: 
28396:   return SQLITE_OK;
28397: }
28398: 
28399: #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
28400: /*
28401: ** Handler for proxy-locking file-control verbs.  Defined below in the
28402: ** proxying locking division.
28403: */
28404: static int proxyFileControl(sqlite3_file*,int,void*);
28405: #endif
28406: 
28407: /* 
28408: ** This function is called to handle the SQLITE_FCNTL_SIZE_HINT 
28409: ** file-control operation.  Enlarge the database to nBytes in size
28410: ** (rounded up to the next chunk-size).  If the database is already
28411: ** nBytes or larger, this routine is a no-op.
28412: */
28413: static int fcntlSizeHint(unixFile *pFile, i64 nByte){
28414:   if( pFile->szChunk>0 ){
28415:     i64 nSize;                    /* Required file size */
28416:     struct stat buf;              /* Used to hold return values of fstat() */
28417:    
28418:     if( osFstat(pFile->h, &buf) ) return SQLITE_IOERR_FSTAT;
28419: 
28420:     nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
28421:     if( nSize>(i64)buf.st_size ){
28422: 
28423: #if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
28424:       /* The code below is handling the return value of osFallocate() 
28425:       ** correctly. posix_fallocate() is defined to "returns zero on success, 
28426:       ** or an error number on  failure". See the manpage for details. */
28427:       int err;
28428:       do{
28429:         err = osFallocate(pFile->h, buf.st_size, nSize-buf.st_size);
28430:       }while( err==EINTR );
28431:       if( err ) return SQLITE_IOERR_WRITE;
28432: #else
28433:       /* If the OS does not have posix_fallocate(), fake it. First use
28434:       ** ftruncate() to set the file size, then write a single byte to
28435:       ** the last byte in each block within the extended region. This
28436:       ** is the same technique used by glibc to implement posix_fallocate()
28437:       ** on systems that do not have a real fallocate() system call.
28438:       */
28439:       int nBlk = buf.st_blksize;  /* File-system block size */
28440:       i64 iWrite;                 /* Next offset to write to */
28441: 
28442:       if( robust_ftruncate(pFile->h, nSize) ){
28443:         pFile->lastErrno = errno;
28444:         return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath);
28445:       }
28446:       iWrite = ((buf.st_size + 2*nBlk - 1)/nBlk)*nBlk-1;
28447:       while( iWrite<nSize ){
28448:         int nWrite = seekAndWrite(pFile, iWrite, "", 1);
28449:         if( nWrite!=1 ) return SQLITE_IOERR_WRITE;
28450:         iWrite += nBlk;
28451:       }
28452: #endif
28453:     }
28454:   }
28455: 
28456:   return SQLITE_OK;
28457: }
28458: 
28459: /*
28460: ** If *pArg is inititially negative then this is a query.  Set *pArg to
28461: ** 1 or 0 depending on whether or not bit mask of pFile->ctrlFlags is set.
28462: **
28463: ** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags.
28464: */
28465: static void unixModeBit(unixFile *pFile, unsigned char mask, int *pArg){
28466:   if( *pArg<0 ){
28467:     *pArg = (pFile->ctrlFlags & mask)!=0;
28468:   }else if( (*pArg)==0 ){
28469:     pFile->ctrlFlags &= ~mask;
28470:   }else{
28471:     pFile->ctrlFlags |= mask;
28472:   }
28473: }
28474: 
28475: /*
28476: ** Information and control of an open file handle.
28477: */
28478: static int unixFileControl(sqlite3_file *id, int op, void *pArg){
28479:   unixFile *pFile = (unixFile*)id;
28480:   switch( op ){
28481:     case SQLITE_FCNTL_LOCKSTATE: {
28482:       *(int*)pArg = pFile->eFileLock;
28483:       return SQLITE_OK;
28484:     }
28485:     case SQLITE_LAST_ERRNO: {
28486:       *(int*)pArg = pFile->lastErrno;
28487:       return SQLITE_OK;
28488:     }
28489:     case SQLITE_FCNTL_CHUNK_SIZE: {
28490:       pFile->szChunk = *(int *)pArg;
28491:       return SQLITE_OK;
28492:     }
28493:     case SQLITE_FCNTL_SIZE_HINT: {
28494:       int rc;
28495:       SimulateIOErrorBenign(1);
28496:       rc = fcntlSizeHint(pFile, *(i64 *)pArg);
28497:       SimulateIOErrorBenign(0);
28498:       return rc;
28499:     }
28500:     case SQLITE_FCNTL_PERSIST_WAL: {
28501:       unixModeBit(pFile, UNIXFILE_PERSIST_WAL, (int*)pArg);
28502:       return SQLITE_OK;
28503:     }
28504:     case SQLITE_FCNTL_POWERSAFE_OVERWRITE: {
28505:       unixModeBit(pFile, UNIXFILE_PSOW, (int*)pArg);
28506:       return SQLITE_OK;
28507:     }
28508:     case SQLITE_FCNTL_VFSNAME: {
28509:       *(char**)pArg = sqlite3_mprintf("%s", pFile->pVfs->zName);
28510:       return SQLITE_OK;
28511:     }
28512: #ifndef NDEBUG
28513:     /* The pager calls this method to signal that it has done
28514:     ** a rollback and that the database is therefore unchanged and
28515:     ** it hence it is OK for the transaction change counter to be
28516:     ** unchanged.
28517:     */
28518:     case SQLITE_FCNTL_DB_UNCHANGED: {
28519:       ((unixFile*)id)->dbUpdate = 0;
28520:       return SQLITE_OK;
28521:     }
28522: #endif
28523: #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
28524:     case SQLITE_SET_LOCKPROXYFILE:
28525:     case SQLITE_GET_LOCKPROXYFILE: {
28526:       return proxyFileControl(id,op,pArg);
28527:     }
28528: #endif /* SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) */
28529:   }
28530:   return SQLITE_NOTFOUND;
28531: }
28532: 
28533: /*
28534: ** Return the sector size in bytes of the underlying block device for
28535: ** the specified file. This is almost always 512 bytes, but may be
28536: ** larger for some devices.
28537: **
28538: ** SQLite code assumes this function cannot fail. It also assumes that
28539: ** if two files are created in the same file-system directory (i.e.
28540: ** a database and its journal file) that the sector size will be the
28541: ** same for both.
28542: */
28543: static int unixSectorSize(sqlite3_file *pFile){
28544:   (void)pFile;
28545:   return SQLITE_DEFAULT_SECTOR_SIZE;
28546: }
28547: 
28548: /*
28549: ** Return the device characteristics for the file.
28550: **
28551: ** This VFS is set up to return SQLITE_IOCAP_POWERSAFE_OVERWRITE by default.
28552: ** However, that choice is contraversial since technically the underlying
28553: ** file system does not always provide powersafe overwrites.  (In other
28554: ** words, after a power-loss event, parts of the file that were never
28555: ** written might end up being altered.)  However, non-PSOW behavior is very,
28556: ** very rare.  And asserting PSOW makes a large reduction in the amount
28557: ** of required I/O for journaling, since a lot of padding is eliminated.
28558: **  Hence, while POWERSAFE_OVERWRITE is on by default, there is a file-control
28559: ** available to turn it off and URI query parameter available to turn it off.
28560: */
28561: static int unixDeviceCharacteristics(sqlite3_file *id){
28562:   unixFile *p = (unixFile*)id;
28563:   if( p->ctrlFlags & UNIXFILE_PSOW ){
28564:     return SQLITE_IOCAP_POWERSAFE_OVERWRITE;
28565:   }else{
28566:     return 0;
28567:   }
28568: }
28569: 
28570: #ifndef SQLITE_OMIT_WAL
28571: 
28572: 
28573: /*
28574: ** Object used to represent an shared memory buffer.  
28575: **
28576: ** When multiple threads all reference the same wal-index, each thread
28577: ** has its own unixShm object, but they all point to a single instance
28578: ** of this unixShmNode object.  In other words, each wal-index is opened
28579: ** only once per process.
28580: **
28581: ** Each unixShmNode object is connected to a single unixInodeInfo object.
28582: ** We could coalesce this object into unixInodeInfo, but that would mean
28583: ** every open file that does not use shared memory (in other words, most
28584: ** open files) would have to carry around this extra information.  So
28585: ** the unixInodeInfo object contains a pointer to this unixShmNode object
28586: ** and the unixShmNode object is created only when needed.
28587: **
28588: ** unixMutexHeld() must be true when creating or destroying
28589: ** this object or while reading or writing the following fields:
28590: **
28591: **      nRef
28592: **
28593: ** The following fields are read-only after the object is created:
28594: ** 
28595: **      fid
28596: **      zFilename
28597: **
28598: ** Either unixShmNode.mutex must be held or unixShmNode.nRef==0 and
28599: ** unixMutexHeld() is true when reading or writing any other field
28600: ** in this structure.
28601: */
28602: struct unixShmNode {
28603:   unixInodeInfo *pInode;     /* unixInodeInfo that owns this SHM node */
28604:   sqlite3_mutex *mutex;      /* Mutex to access this object */
28605:   char *zFilename;           /* Name of the mmapped file */
28606:   int h;                     /* Open file descriptor */
28607:   int szRegion;              /* Size of shared-memory regions */
28608:   u16 nRegion;               /* Size of array apRegion */
28609:   u8 isReadonly;             /* True if read-only */
28610:   char **apRegion;           /* Array of mapped shared-memory regions */
28611:   int nRef;                  /* Number of unixShm objects pointing to this */
28612:   unixShm *pFirst;           /* All unixShm objects pointing to this */
28613: #ifdef SQLITE_DEBUG
28614:   u8 exclMask;               /* Mask of exclusive locks held */
28615:   u8 sharedMask;             /* Mask of shared locks held */
28616:   u8 nextShmId;              /* Next available unixShm.id value */
28617: #endif
28618: };
28619: 
28620: /*
28621: ** Structure used internally by this VFS to record the state of an
28622: ** open shared memory connection.
28623: **
28624: ** The following fields are initialized when this object is created and
28625: ** are read-only thereafter:
28626: **
28627: **    unixShm.pFile
28628: **    unixShm.id
28629: **
28630: ** All other fields are read/write.  The unixShm.pFile->mutex must be held
28631: ** while accessing any read/write fields.
28632: */
28633: struct unixShm {
28634:   unixShmNode *pShmNode;     /* The underlying unixShmNode object */
28635:   unixShm *pNext;            /* Next unixShm with the same unixShmNode */
28636:   u8 hasMutex;               /* True if holding the unixShmNode mutex */
28637:   u8 id;                     /* Id of this connection within its unixShmNode */
28638:   u16 sharedMask;            /* Mask of shared locks held */
28639:   u16 exclMask;              /* Mask of exclusive locks held */
28640: };
28641: 
28642: /*
28643: ** Constants used for locking
28644: */
28645: #define UNIX_SHM_BASE   ((22+SQLITE_SHM_NLOCK)*4)         /* first lock byte */
28646: #define UNIX_SHM_DMS    (UNIX_SHM_BASE+SQLITE_SHM_NLOCK)  /* deadman switch */
28647: 
28648: /*
28649: ** Apply posix advisory locks for all bytes from ofst through ofst+n-1.
28650: **
28651: ** Locks block if the mask is exactly UNIX_SHM_C and are non-blocking
28652: ** otherwise.
28653: */
28654: static int unixShmSystemLock(
28655:   unixShmNode *pShmNode, /* Apply locks to this open shared-memory segment */
28656:   int lockType,          /* F_UNLCK, F_RDLCK, or F_WRLCK */
28657:   int ofst,              /* First byte of the locking range */
28658:   int n                  /* Number of bytes to lock */
28659: ){
28660:   struct flock f;       /* The posix advisory locking structure */
28661:   int rc = SQLITE_OK;   /* Result code form fcntl() */
28662: 
28663:   /* Access to the unixShmNode object is serialized by the caller */
28664:   assert( sqlite3_mutex_held(pShmNode->mutex) || pShmNode->nRef==0 );
28665: 
28666:   /* Shared locks never span more than one byte */
28667:   assert( n==1 || lockType!=F_RDLCK );
28668: 
28669:   /* Locks are within range */
28670:   assert( n>=1 && n<SQLITE_SHM_NLOCK );
28671: 
28672:   if( pShmNode->h>=0 ){
28673:     /* Initialize the locking parameters */
28674:     memset(&f, 0, sizeof(f));
28675:     f.l_type = lockType;
28676:     f.l_whence = SEEK_SET;
28677:     f.l_start = ofst;
28678:     f.l_len = n;
28679: 
28680:     rc = osFcntl(pShmNode->h, F_SETLK, &f);
28681:     rc = (rc!=(-1)) ? SQLITE_OK : SQLITE_BUSY;
28682:   }
28683: 
28684:   /* Update the global lock state and do debug tracing */
28685: #ifdef SQLITE_DEBUG
28686:   { u16 mask;
28687:   OSTRACE(("SHM-LOCK "));
28688:   mask = (1<<(ofst+n)) - (1<<ofst);
28689:   if( rc==SQLITE_OK ){
28690:     if( lockType==F_UNLCK ){
28691:       OSTRACE(("unlock %d ok", ofst));
28692:       pShmNode->exclMask &= ~mask;
28693:       pShmNode->sharedMask &= ~mask;
28694:     }else if( lockType==F_RDLCK ){
28695:       OSTRACE(("read-lock %d ok", ofst));
28696:       pShmNode->exclMask &= ~mask;
28697:       pShmNode->sharedMask |= mask;
28698:     }else{
28699:       assert( lockType==F_WRLCK );
28700:       OSTRACE(("write-lock %d ok", ofst));
28701:       pShmNode->exclMask |= mask;
28702:       pShmNode->sharedMask &= ~mask;
28703:     }
28704:   }else{
28705:     if( lockType==F_UNLCK ){
28706:       OSTRACE(("unlock %d failed", ofst));
28707:     }else if( lockType==F_RDLCK ){
28708:       OSTRACE(("read-lock failed"));
28709:     }else{
28710:       assert( lockType==F_WRLCK );
28711:       OSTRACE(("write-lock %d failed", ofst));
28712:     }
28713:   }
28714:   OSTRACE((" - afterwards %03x,%03x\n",
28715:            pShmNode->sharedMask, pShmNode->exclMask));
28716:   }
28717: #endif
28718: 
28719:   return rc;        
28720: }
28721: 
28722: 
28723: /*
28724: ** Purge the unixShmNodeList list of all entries with unixShmNode.nRef==0.
28725: **
28726: ** This is not a VFS shared-memory method; it is a utility function called
28727: ** by VFS shared-memory methods.
28728: */
28729: static void unixShmPurge(unixFile *pFd){
28730:   unixShmNode *p = pFd->pInode->pShmNode;
28731:   assert( unixMutexHeld() );
28732:   if( p && p->nRef==0 ){
28733:     int i;
28734:     assert( p->pInode==pFd->pInode );
28735:     sqlite3_mutex_free(p->mutex);
28736:     for(i=0; i<p->nRegion; i++){
28737:       if( p->h>=0 ){
28738:         munmap(p->apRegion[i], p->szRegion);
28739:       }else{
28740:         sqlite3_free(p->apRegion[i]);
28741:       }
28742:     }
28743:     sqlite3_free(p->apRegion);
28744:     if( p->h>=0 ){
28745:       robust_close(pFd, p->h, __LINE__);
28746:       p->h = -1;
28747:     }
28748:     p->pInode->pShmNode = 0;
28749:     sqlite3_free(p);
28750:   }
28751: }
28752: 
28753: /*
28754: ** Open a shared-memory area associated with open database file pDbFd.  
28755: ** This particular implementation uses mmapped files.
28756: **
28757: ** The file used to implement shared-memory is in the same directory
28758: ** as the open database file and has the same name as the open database
28759: ** file with the "-shm" suffix added.  For example, if the database file
28760: ** is "/home/user1/config.db" then the file that is created and mmapped
28761: ** for shared memory will be called "/home/user1/config.db-shm".  
28762: **
28763: ** Another approach to is to use files in /dev/shm or /dev/tmp or an
28764: ** some other tmpfs mount. But if a file in a different directory
28765: ** from the database file is used, then differing access permissions
28766: ** or a chroot() might cause two different processes on the same
28767: ** database to end up using different files for shared memory - 
28768: ** meaning that their memory would not really be shared - resulting
28769: ** in database corruption.  Nevertheless, this tmpfs file usage
28770: ** can be enabled at compile-time using -DSQLITE_SHM_DIRECTORY="/dev/shm"
28771: ** or the equivalent.  The use of the SQLITE_SHM_DIRECTORY compile-time
28772: ** option results in an incompatible build of SQLite;  builds of SQLite
28773: ** that with differing SQLITE_SHM_DIRECTORY settings attempt to use the
28774: ** same database file at the same time, database corruption will likely
28775: ** result. The SQLITE_SHM_DIRECTORY compile-time option is considered
28776: ** "unsupported" and may go away in a future SQLite release.
28777: **
28778: ** When opening a new shared-memory file, if no other instances of that
28779: ** file are currently open, in this process or in other processes, then
28780: ** the file must be truncated to zero length or have its header cleared.
28781: **
28782: ** If the original database file (pDbFd) is using the "unix-excl" VFS
28783: ** that means that an exclusive lock is held on the database file and
28784: ** that no other processes are able to read or write the database.  In
28785: ** that case, we do not really need shared memory.  No shared memory
28786: ** file is created.  The shared memory will be simulated with heap memory.
28787: */
28788: static int unixOpenSharedMemory(unixFile *pDbFd){
28789:   struct unixShm *p = 0;          /* The connection to be opened */
28790:   struct unixShmNode *pShmNode;   /* The underlying mmapped file */
28791:   int rc;                         /* Result code */
28792:   unixInodeInfo *pInode;          /* The inode of fd */
28793:   char *zShmFilename;             /* Name of the file used for SHM */
28794:   int nShmFilename;               /* Size of the SHM filename in bytes */
28795: 
28796:   /* Allocate space for the new unixShm object. */
28797:   p = sqlite3_malloc( sizeof(*p) );
28798:   if( p==0 ) return SQLITE_NOMEM;
28799:   memset(p, 0, sizeof(*p));
28800:   assert( pDbFd->pShm==0 );
28801: 
28802:   /* Check to see if a unixShmNode object already exists. Reuse an existing
28803:   ** one if present. Create a new one if necessary.
28804:   */
28805:   unixEnterMutex();
28806:   pInode = pDbFd->pInode;
28807:   pShmNode = pInode->pShmNode;
28808:   if( pShmNode==0 ){
28809:     struct stat sStat;                 /* fstat() info for database file */
28810: 
28811:     /* Call fstat() to figure out the permissions on the database file. If
28812:     ** a new *-shm file is created, an attempt will be made to create it
28813:     ** with the same permissions. The actual permissions the file is created
28814:     ** with are subject to the current umask setting.
28815:     */
28816:     if( osFstat(pDbFd->h, &sStat) && pInode->bProcessLock==0 ){
28817:       rc = SQLITE_IOERR_FSTAT;
28818:       goto shm_open_err;
28819:     }
28820: 
28821: #ifdef SQLITE_SHM_DIRECTORY
28822:     nShmFilename = sizeof(SQLITE_SHM_DIRECTORY) + 31;
28823: #else
28824:     nShmFilename = 6 + (int)strlen(pDbFd->zPath);
28825: #endif
28826:     pShmNode = sqlite3_malloc( sizeof(*pShmNode) + nShmFilename );
28827:     if( pShmNode==0 ){
28828:       rc = SQLITE_NOMEM;
28829:       goto shm_open_err;
28830:     }
28831:     memset(pShmNode, 0, sizeof(*pShmNode)+nShmFilename);
28832:     zShmFilename = pShmNode->zFilename = (char*)&pShmNode[1];
28833: #ifdef SQLITE_SHM_DIRECTORY
28834:     sqlite3_snprintf(nShmFilename, zShmFilename, 
28835:                      SQLITE_SHM_DIRECTORY "/sqlite-shm-%x-%x",
28836:                      (u32)sStat.st_ino, (u32)sStat.st_dev);
28837: #else
28838:     sqlite3_snprintf(nShmFilename, zShmFilename, "%s-shm", pDbFd->zPath);
28839:     sqlite3FileSuffix3(pDbFd->zPath, zShmFilename);
28840: #endif
28841:     pShmNode->h = -1;
28842:     pDbFd->pInode->pShmNode = pShmNode;
28843:     pShmNode->pInode = pDbFd->pInode;
28844:     pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
28845:     if( pShmNode->mutex==0 ){
28846:       rc = SQLITE_NOMEM;
28847:       goto shm_open_err;
28848:     }
28849: 
28850:     if( pInode->bProcessLock==0 ){
28851:       int openFlags = O_RDWR | O_CREAT;
28852:       if( sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){
28853:         openFlags = O_RDONLY;
28854:         pShmNode->isReadonly = 1;
28855:       }
28856:       pShmNode->h = robust_open(zShmFilename, openFlags, (sStat.st_mode&0777));
28857:       if( pShmNode->h<0 ){
28858:         if( pShmNode->h<0 ){
28859:           rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zShmFilename);
28860:           goto shm_open_err;
28861:         }
28862:       }
28863:   
28864:       /* Check to see if another process is holding the dead-man switch.
28865:       ** If not, truncate the file to zero length. 
28866:       */
28867:       rc = SQLITE_OK;
28868:       if( unixShmSystemLock(pShmNode, F_WRLCK, UNIX_SHM_DMS, 1)==SQLITE_OK ){
28869:         if( robust_ftruncate(pShmNode->h, 0) ){
28870:           rc = unixLogError(SQLITE_IOERR_SHMOPEN, "ftruncate", zShmFilename);
28871:         }
28872:       }
28873:       if( rc==SQLITE_OK ){
28874:         rc = unixShmSystemLock(pShmNode, F_RDLCK, UNIX_SHM_DMS, 1);
28875:       }
28876:       if( rc ) goto shm_open_err;
28877:     }
28878:   }
28879: 
28880:   /* Make the new connection a child of the unixShmNode */
28881:   p->pShmNode = pShmNode;
28882: #ifdef SQLITE_DEBUG
28883:   p->id = pShmNode->nextShmId++;
28884: #endif
28885:   pShmNode->nRef++;
28886:   pDbFd->pShm = p;
28887:   unixLeaveMutex();
28888: 
28889:   /* The reference count on pShmNode has already been incremented under
28890:   ** the cover of the unixEnterMutex() mutex and the pointer from the
28891:   ** new (struct unixShm) object to the pShmNode has been set. All that is
28892:   ** left to do is to link the new object into the linked list starting
28893:   ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex 
28894:   ** mutex.
28895:   */
28896:   sqlite3_mutex_enter(pShmNode->mutex);
28897:   p->pNext = pShmNode->pFirst;
28898:   pShmNode->pFirst = p;
28899:   sqlite3_mutex_leave(pShmNode->mutex);
28900:   return SQLITE_OK;
28901: 
28902:   /* Jump here on any error */
28903: shm_open_err:
28904:   unixShmPurge(pDbFd);       /* This call frees pShmNode if required */
28905:   sqlite3_free(p);
28906:   unixLeaveMutex();
28907:   return rc;
28908: }
28909: 
28910: /*
28911: ** This function is called to obtain a pointer to region iRegion of the 
28912: ** shared-memory associated with the database file fd. Shared-memory regions 
28913: ** are numbered starting from zero. Each shared-memory region is szRegion 
28914: ** bytes in size.
28915: **
28916: ** If an error occurs, an error code is returned and *pp is set to NULL.
28917: **
28918: ** Otherwise, if the bExtend parameter is 0 and the requested shared-memory
28919: ** region has not been allocated (by any client, including one running in a
28920: ** separate process), then *pp is set to NULL and SQLITE_OK returned. If 
28921: ** bExtend is non-zero and the requested shared-memory region has not yet 
28922: ** been allocated, it is allocated by this function.
28923: **
28924: ** If the shared-memory region has already been allocated or is allocated by
28925: ** this call as described above, then it is mapped into this processes 
28926: ** address space (if it is not already), *pp is set to point to the mapped 
28927: ** memory and SQLITE_OK returned.
28928: */
28929: static int unixShmMap(
28930:   sqlite3_file *fd,               /* Handle open on database file */
28931:   int iRegion,                    /* Region to retrieve */
28932:   int szRegion,                   /* Size of regions */
28933:   int bExtend,                    /* True to extend file if necessary */
28934:   void volatile **pp              /* OUT: Mapped memory */
28935: ){
28936:   unixFile *pDbFd = (unixFile*)fd;
28937:   unixShm *p;
28938:   unixShmNode *pShmNode;
28939:   int rc = SQLITE_OK;
28940: 
28941:   /* If the shared-memory file has not yet been opened, open it now. */
28942:   if( pDbFd->pShm==0 ){
28943:     rc = unixOpenSharedMemory(pDbFd);
28944:     if( rc!=SQLITE_OK ) return rc;
28945:   }
28946: 
28947:   p = pDbFd->pShm;
28948:   pShmNode = p->pShmNode;
28949:   sqlite3_mutex_enter(pShmNode->mutex);
28950:   assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 );
28951:   assert( pShmNode->pInode==pDbFd->pInode );
28952:   assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 );
28953:   assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 );
28954: 
28955:   if( pShmNode->nRegion<=iRegion ){
28956:     char **apNew;                      /* New apRegion[] array */
28957:     int nByte = (iRegion+1)*szRegion;  /* Minimum required file size */
28958:     struct stat sStat;                 /* Used by fstat() */
28959: 
28960:     pShmNode->szRegion = szRegion;
28961: 
28962:     if( pShmNode->h>=0 ){
28963:       /* The requested region is not mapped into this processes address space.
28964:       ** Check to see if it has been allocated (i.e. if the wal-index file is
28965:       ** large enough to contain the requested region).
28966:       */
28967:       if( osFstat(pShmNode->h, &sStat) ){
28968:         rc = SQLITE_IOERR_SHMSIZE;
28969:         goto shmpage_out;
28970:       }
28971:   
28972:       if( sStat.st_size<nByte ){
28973:         /* The requested memory region does not exist. If bExtend is set to
28974:         ** false, exit early. *pp will be set to NULL and SQLITE_OK returned.
28975:         **
28976:         ** Alternatively, if bExtend is true, use ftruncate() to allocate
28977:         ** the requested memory region.
28978:         */
28979:         if( !bExtend ) goto shmpage_out;
28980:         if( robust_ftruncate(pShmNode->h, nByte) ){
28981:           rc = unixLogError(SQLITE_IOERR_SHMSIZE, "ftruncate",
28982:                             pShmNode->zFilename);
28983:           goto shmpage_out;
28984:         }
28985:       }
28986:     }
28987: 
28988:     /* Map the requested memory region into this processes address space. */
28989:     apNew = (char **)sqlite3_realloc(
28990:         pShmNode->apRegion, (iRegion+1)*sizeof(char *)
28991:     );
28992:     if( !apNew ){
28993:       rc = SQLITE_IOERR_NOMEM;
28994:       goto shmpage_out;
28995:     }
28996:     pShmNode->apRegion = apNew;
28997:     while(pShmNode->nRegion<=iRegion){
28998:       void *pMem;
28999:       if( pShmNode->h>=0 ){
29000:         pMem = mmap(0, szRegion,
29001:             pShmNode->isReadonly ? PROT_READ : PROT_READ|PROT_WRITE, 
29002:             MAP_SHARED, pShmNode->h, pShmNode->nRegion*szRegion
29003:         );
29004:         if( pMem==MAP_FAILED ){
29005:           rc = unixLogError(SQLITE_IOERR_SHMMAP, "mmap", pShmNode->zFilename);
29006:           goto shmpage_out;
29007:         }
29008:       }else{
29009:         pMem = sqlite3_malloc(szRegion);
29010:         if( pMem==0 ){
29011:           rc = SQLITE_NOMEM;
29012:           goto shmpage_out;
29013:         }
29014:         memset(pMem, 0, szRegion);
29015:       }
29016:       pShmNode->apRegion[pShmNode->nRegion] = pMem;
29017:       pShmNode->nRegion++;
29018:     }
29019:   }
29020: 
29021: shmpage_out:
29022:   if( pShmNode->nRegion>iRegion ){
29023:     *pp = pShmNode->apRegion[iRegion];
29024:   }else{
29025:     *pp = 0;
29026:   }
29027:   if( pShmNode->isReadonly && rc==SQLITE_OK ) rc = SQLITE_READONLY;
29028:   sqlite3_mutex_leave(pShmNode->mutex);
29029:   return rc;
29030: }
29031: 
29032: /*
29033: ** Change the lock state for a shared-memory segment.
29034: **
29035: ** Note that the relationship between SHAREd and EXCLUSIVE locks is a little
29036: ** different here than in posix.  In xShmLock(), one can go from unlocked
29037: ** to shared and back or from unlocked to exclusive and back.  But one may
29038: ** not go from shared to exclusive or from exclusive to shared.
29039: */
29040: static int unixShmLock(
29041:   sqlite3_file *fd,          /* Database file holding the shared memory */
29042:   int ofst,                  /* First lock to acquire or release */
29043:   int n,                     /* Number of locks to acquire or release */
29044:   int flags                  /* What to do with the lock */
29045: ){
29046:   unixFile *pDbFd = (unixFile*)fd;      /* Connection holding shared memory */
29047:   unixShm *p = pDbFd->pShm;             /* The shared memory being locked */
29048:   unixShm *pX;                          /* For looping over all siblings */
29049:   unixShmNode *pShmNode = p->pShmNode;  /* The underlying file iNode */
29050:   int rc = SQLITE_OK;                   /* Result code */
29051:   u16 mask;                             /* Mask of locks to take or release */
29052: 
29053:   assert( pShmNode==pDbFd->pInode->pShmNode );
29054:   assert( pShmNode->pInode==pDbFd->pInode );
29055:   assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
29056:   assert( n>=1 );
29057:   assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
29058:        || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
29059:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
29060:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
29061:   assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
29062:   assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 );
29063:   assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 );
29064: 
29065:   mask = (1<<(ofst+n)) - (1<<ofst);
29066:   assert( n>1 || mask==(1<<ofst) );
29067:   sqlite3_mutex_enter(pShmNode->mutex);
29068:   if( flags & SQLITE_SHM_UNLOCK ){
29069:     u16 allMask = 0; /* Mask of locks held by siblings */
29070: 
29071:     /* See if any siblings hold this same lock */
29072:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
29073:       if( pX==p ) continue;
29074:       assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
29075:       allMask |= pX->sharedMask;
29076:     }
29077: 
29078:     /* Unlock the system-level locks */
29079:     if( (mask & allMask)==0 ){
29080:       rc = unixShmSystemLock(pShmNode, F_UNLCK, ofst+UNIX_SHM_BASE, n);
29081:     }else{
29082:       rc = SQLITE_OK;
29083:     }
29084: 
29085:     /* Undo the local locks */
29086:     if( rc==SQLITE_OK ){
29087:       p->exclMask &= ~mask;
29088:       p->sharedMask &= ~mask;
29089:     } 
29090:   }else if( flags & SQLITE_SHM_SHARED ){
29091:     u16 allShared = 0;  /* Union of locks held by connections other than "p" */
29092: 
29093:     /* Find out which shared locks are already held by sibling connections.
29094:     ** If any sibling already holds an exclusive lock, go ahead and return
29095:     ** SQLITE_BUSY.
29096:     */
29097:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
29098:       if( (pX->exclMask & mask)!=0 ){
29099:         rc = SQLITE_BUSY;
29100:         break;
29101:       }
29102:       allShared |= pX->sharedMask;
29103:     }
29104: 
29105:     /* Get shared locks at the system level, if necessary */
29106:     if( rc==SQLITE_OK ){
29107:       if( (allShared & mask)==0 ){
29108:         rc = unixShmSystemLock(pShmNode, F_RDLCK, ofst+UNIX_SHM_BASE, n);
29109:       }else{
29110:         rc = SQLITE_OK;
29111:       }
29112:     }
29113: 
29114:     /* Get the local shared locks */
29115:     if( rc==SQLITE_OK ){
29116:       p->sharedMask |= mask;
29117:     }
29118:   }else{
29119:     /* Make sure no sibling connections hold locks that will block this
29120:     ** lock.  If any do, return SQLITE_BUSY right away.
29121:     */
29122:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
29123:       if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
29124:         rc = SQLITE_BUSY;
29125:         break;
29126:       }
29127:     }
29128:   
29129:     /* Get the exclusive locks at the system level.  Then if successful
29130:     ** also mark the local connection as being locked.
29131:     */
29132:     if( rc==SQLITE_OK ){
29133:       rc = unixShmSystemLock(pShmNode, F_WRLCK, ofst+UNIX_SHM_BASE, n);
29134:       if( rc==SQLITE_OK ){
29135:         assert( (p->sharedMask & mask)==0 );
29136:         p->exclMask |= mask;
29137:       }
29138:     }
29139:   }
29140:   sqlite3_mutex_leave(pShmNode->mutex);
29141:   OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x\n",
29142:            p->id, getpid(), p->sharedMask, p->exclMask));
29143:   return rc;
29144: }
29145: 
29146: /*
29147: ** Implement a memory barrier or memory fence on shared memory.  
29148: **
29149: ** All loads and stores begun before the barrier must complete before
29150: ** any load or store begun after the barrier.
29151: */
29152: static void unixShmBarrier(
29153:   sqlite3_file *fd                /* Database file holding the shared memory */
29154: ){
29155:   UNUSED_PARAMETER(fd);
29156:   unixEnterMutex();
29157:   unixLeaveMutex();
29158: }
29159: 
29160: /*
29161: ** Close a connection to shared-memory.  Delete the underlying 
29162: ** storage if deleteFlag is true.
29163: **
29164: ** If there is no shared memory associated with the connection then this
29165: ** routine is a harmless no-op.
29166: */
29167: static int unixShmUnmap(
29168:   sqlite3_file *fd,               /* The underlying database file */
29169:   int deleteFlag                  /* Delete shared-memory if true */
29170: ){
29171:   unixShm *p;                     /* The connection to be closed */
29172:   unixShmNode *pShmNode;          /* The underlying shared-memory file */
29173:   unixShm **pp;                   /* For looping over sibling connections */
29174:   unixFile *pDbFd;                /* The underlying database file */
29175: 
29176:   pDbFd = (unixFile*)fd;
29177:   p = pDbFd->pShm;
29178:   if( p==0 ) return SQLITE_OK;
29179:   pShmNode = p->pShmNode;
29180: 
29181:   assert( pShmNode==pDbFd->pInode->pShmNode );
29182:   assert( pShmNode->pInode==pDbFd->pInode );
29183: 
29184:   /* Remove connection p from the set of connections associated
29185:   ** with pShmNode */
29186:   sqlite3_mutex_enter(pShmNode->mutex);
29187:   for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){}
29188:   *pp = p->pNext;
29189: 
29190:   /* Free the connection p */
29191:   sqlite3_free(p);
29192:   pDbFd->pShm = 0;
29193:   sqlite3_mutex_leave(pShmNode->mutex);
29194: 
29195:   /* If pShmNode->nRef has reached 0, then close the underlying
29196:   ** shared-memory file, too */
29197:   unixEnterMutex();
29198:   assert( pShmNode->nRef>0 );
29199:   pShmNode->nRef--;
29200:   if( pShmNode->nRef==0 ){
29201:     if( deleteFlag && pShmNode->h>=0 ) osUnlink(pShmNode->zFilename);
29202:     unixShmPurge(pDbFd);
29203:   }
29204:   unixLeaveMutex();
29205: 
29206:   return SQLITE_OK;
29207: }
29208: 
29209: 
29210: #else
29211: # define unixShmMap     0
29212: # define unixShmLock    0
29213: # define unixShmBarrier 0
29214: # define unixShmUnmap   0
29215: #endif /* #ifndef SQLITE_OMIT_WAL */
29216: 
29217: /*
29218: ** Here ends the implementation of all sqlite3_file methods.
29219: **
29220: ********************** End sqlite3_file Methods *******************************
29221: ******************************************************************************/
29222: 
29223: /*
29224: ** This division contains definitions of sqlite3_io_methods objects that
29225: ** implement various file locking strategies.  It also contains definitions
29226: ** of "finder" functions.  A finder-function is used to locate the appropriate
29227: ** sqlite3_io_methods object for a particular database file.  The pAppData
29228: ** field of the sqlite3_vfs VFS objects are initialized to be pointers to
29229: ** the correct finder-function for that VFS.
29230: **
29231: ** Most finder functions return a pointer to a fixed sqlite3_io_methods
29232: ** object.  The only interesting finder-function is autolockIoFinder, which
29233: ** looks at the filesystem type and tries to guess the best locking
29234: ** strategy from that.
29235: **
29236: ** For finder-funtion F, two objects are created:
29237: **
29238: **    (1) The real finder-function named "FImpt()".
29239: **
29240: **    (2) A constant pointer to this function named just "F".
29241: **
29242: **
29243: ** A pointer to the F pointer is used as the pAppData value for VFS
29244: ** objects.  We have to do this instead of letting pAppData point
29245: ** directly at the finder-function since C90 rules prevent a void*
29246: ** from be cast into a function pointer.
29247: **
29248: **
29249: ** Each instance of this macro generates two objects:
29250: **
29251: **   *  A constant sqlite3_io_methods object call METHOD that has locking
29252: **      methods CLOSE, LOCK, UNLOCK, CKRESLOCK.
29253: **
29254: **   *  An I/O method finder function called FINDER that returns a pointer
29255: **      to the METHOD object in the previous bullet.
29256: */
29257: #define IOMETHODS(FINDER, METHOD, VERSION, CLOSE, LOCK, UNLOCK, CKLOCK)      \
29258: static const sqlite3_io_methods METHOD = {                                   \
29259:    VERSION,                    /* iVersion */                                \
29260:    CLOSE,                      /* xClose */                                  \
29261:    unixRead,                   /* xRead */                                   \
29262:    unixWrite,                  /* xWrite */                                  \
29263:    unixTruncate,               /* xTruncate */                               \
29264:    unixSync,                   /* xSync */                                   \
29265:    unixFileSize,               /* xFileSize */                               \
29266:    LOCK,                       /* xLock */                                   \
29267:    UNLOCK,                     /* xUnlock */                                 \
29268:    CKLOCK,                     /* xCheckReservedLock */                      \
29269:    unixFileControl,            /* xFileControl */                            \
29270:    unixSectorSize,             /* xSectorSize */                             \
29271:    unixDeviceCharacteristics,  /* xDeviceCapabilities */                     \
29272:    unixShmMap,                 /* xShmMap */                                 \
29273:    unixShmLock,                /* xShmLock */                                \
29274:    unixShmBarrier,             /* xShmBarrier */                             \
29275:    unixShmUnmap                /* xShmUnmap */                               \
29276: };                                                                           \
29277: static const sqlite3_io_methods *FINDER##Impl(const char *z, unixFile *p){   \
29278:   UNUSED_PARAMETER(z); UNUSED_PARAMETER(p);                                  \
29279:   return &METHOD;                                                            \
29280: }                                                                            \
29281: static const sqlite3_io_methods *(*const FINDER)(const char*,unixFile *p)    \
29282:     = FINDER##Impl;
29283: 
29284: /*
29285: ** Here are all of the sqlite3_io_methods objects for each of the
29286: ** locking strategies.  Functions that return pointers to these methods
29287: ** are also created.
29288: */
29289: IOMETHODS(
29290:   posixIoFinder,            /* Finder function name */
29291:   posixIoMethods,           /* sqlite3_io_methods object name */
29292:   2,                        /* shared memory is enabled */
29293:   unixClose,                /* xClose method */
29294:   unixLock,                 /* xLock method */
29295:   unixUnlock,               /* xUnlock method */
29296:   unixCheckReservedLock     /* xCheckReservedLock method */
29297: )
29298: IOMETHODS(
29299:   nolockIoFinder,           /* Finder function name */
29300:   nolockIoMethods,          /* sqlite3_io_methods object name */
29301:   1,                        /* shared memory is disabled */
29302:   nolockClose,              /* xClose method */
29303:   nolockLock,               /* xLock method */
29304:   nolockUnlock,             /* xUnlock method */
29305:   nolockCheckReservedLock   /* xCheckReservedLock method */
29306: )
29307: IOMETHODS(
29308:   dotlockIoFinder,          /* Finder function name */
29309:   dotlockIoMethods,         /* sqlite3_io_methods object name */
29310:   1,                        /* shared memory is disabled */
29311:   dotlockClose,             /* xClose method */
29312:   dotlockLock,              /* xLock method */
29313:   dotlockUnlock,            /* xUnlock method */
29314:   dotlockCheckReservedLock  /* xCheckReservedLock method */
29315: )
29316: 
29317: #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
29318: IOMETHODS(
29319:   flockIoFinder,            /* Finder function name */
29320:   flockIoMethods,           /* sqlite3_io_methods object name */
29321:   1,                        /* shared memory is disabled */
29322:   flockClose,               /* xClose method */
29323:   flockLock,                /* xLock method */
29324:   flockUnlock,              /* xUnlock method */
29325:   flockCheckReservedLock    /* xCheckReservedLock method */
29326: )
29327: #endif
29328: 
29329: #if OS_VXWORKS
29330: IOMETHODS(
29331:   semIoFinder,              /* Finder function name */
29332:   semIoMethods,             /* sqlite3_io_methods object name */
29333:   1,                        /* shared memory is disabled */
29334:   semClose,                 /* xClose method */
29335:   semLock,                  /* xLock method */
29336:   semUnlock,                /* xUnlock method */
29337:   semCheckReservedLock      /* xCheckReservedLock method */
29338: )
29339: #endif
29340: 
29341: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29342: IOMETHODS(
29343:   afpIoFinder,              /* Finder function name */
29344:   afpIoMethods,             /* sqlite3_io_methods object name */
29345:   1,                        /* shared memory is disabled */
29346:   afpClose,                 /* xClose method */
29347:   afpLock,                  /* xLock method */
29348:   afpUnlock,                /* xUnlock method */
29349:   afpCheckReservedLock      /* xCheckReservedLock method */
29350: )
29351: #endif
29352: 
29353: /*
29354: ** The proxy locking method is a "super-method" in the sense that it
29355: ** opens secondary file descriptors for the conch and lock files and
29356: ** it uses proxy, dot-file, AFP, and flock() locking methods on those
29357: ** secondary files.  For this reason, the division that implements
29358: ** proxy locking is located much further down in the file.  But we need
29359: ** to go ahead and define the sqlite3_io_methods and finder function
29360: ** for proxy locking here.  So we forward declare the I/O methods.
29361: */
29362: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29363: static int proxyClose(sqlite3_file*);
29364: static int proxyLock(sqlite3_file*, int);
29365: static int proxyUnlock(sqlite3_file*, int);
29366: static int proxyCheckReservedLock(sqlite3_file*, int*);
29367: IOMETHODS(
29368:   proxyIoFinder,            /* Finder function name */
29369:   proxyIoMethods,           /* sqlite3_io_methods object name */
29370:   1,                        /* shared memory is disabled */
29371:   proxyClose,               /* xClose method */
29372:   proxyLock,                /* xLock method */
29373:   proxyUnlock,              /* xUnlock method */
29374:   proxyCheckReservedLock    /* xCheckReservedLock method */
29375: )
29376: #endif
29377: 
29378: /* nfs lockd on OSX 10.3+ doesn't clear write locks when a read lock is set */
29379: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29380: IOMETHODS(
29381:   nfsIoFinder,               /* Finder function name */
29382:   nfsIoMethods,              /* sqlite3_io_methods object name */
29383:   1,                         /* shared memory is disabled */
29384:   unixClose,                 /* xClose method */
29385:   unixLock,                  /* xLock method */
29386:   nfsUnlock,                 /* xUnlock method */
29387:   unixCheckReservedLock      /* xCheckReservedLock method */
29388: )
29389: #endif
29390: 
29391: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29392: /* 
29393: ** This "finder" function attempts to determine the best locking strategy 
29394: ** for the database file "filePath".  It then returns the sqlite3_io_methods
29395: ** object that implements that strategy.
29396: **
29397: ** This is for MacOSX only.
29398: */
29399: static const sqlite3_io_methods *autolockIoFinderImpl(
29400:   const char *filePath,    /* name of the database file */
29401:   unixFile *pNew           /* open file object for the database file */
29402: ){
29403:   static const struct Mapping {
29404:     const char *zFilesystem;              /* Filesystem type name */
29405:     const sqlite3_io_methods *pMethods;   /* Appropriate locking method */
29406:   } aMap[] = {
29407:     { "hfs",    &posixIoMethods },
29408:     { "ufs",    &posixIoMethods },
29409:     { "afpfs",  &afpIoMethods },
29410:     { "smbfs",  &afpIoMethods },
29411:     { "webdav", &nolockIoMethods },
29412:     { 0, 0 }
29413:   };
29414:   int i;
29415:   struct statfs fsInfo;
29416:   struct flock lockInfo;
29417: 
29418:   if( !filePath ){
29419:     /* If filePath==NULL that means we are dealing with a transient file
29420:     ** that does not need to be locked. */
29421:     return &nolockIoMethods;
29422:   }
29423:   if( statfs(filePath, &fsInfo) != -1 ){
29424:     if( fsInfo.f_flags & MNT_RDONLY ){
29425:       return &nolockIoMethods;
29426:     }
29427:     for(i=0; aMap[i].zFilesystem; i++){
29428:       if( strcmp(fsInfo.f_fstypename, aMap[i].zFilesystem)==0 ){
29429:         return aMap[i].pMethods;
29430:       }
29431:     }
29432:   }
29433: 
29434:   /* Default case. Handles, amongst others, "nfs".
29435:   ** Test byte-range lock using fcntl(). If the call succeeds, 
29436:   ** assume that the file-system supports POSIX style locks. 
29437:   */
29438:   lockInfo.l_len = 1;
29439:   lockInfo.l_start = 0;
29440:   lockInfo.l_whence = SEEK_SET;
29441:   lockInfo.l_type = F_RDLCK;
29442:   if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) {
29443:     if( strcmp(fsInfo.f_fstypename, "nfs")==0 ){
29444:       return &nfsIoMethods;
29445:     } else {
29446:       return &posixIoMethods;
29447:     }
29448:   }else{
29449:     return &dotlockIoMethods;
29450:   }
29451: }
29452: static const sqlite3_io_methods 
29453:   *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl;
29454: 
29455: #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
29456: 
29457: #if OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE
29458: /* 
29459: ** This "finder" function attempts to determine the best locking strategy 
29460: ** for the database file "filePath".  It then returns the sqlite3_io_methods
29461: ** object that implements that strategy.
29462: **
29463: ** This is for VXWorks only.
29464: */
29465: static const sqlite3_io_methods *autolockIoFinderImpl(
29466:   const char *filePath,    /* name of the database file */
29467:   unixFile *pNew           /* the open file object */
29468: ){
29469:   struct flock lockInfo;
29470: 
29471:   if( !filePath ){
29472:     /* If filePath==NULL that means we are dealing with a transient file
29473:     ** that does not need to be locked. */
29474:     return &nolockIoMethods;
29475:   }
29476: 
29477:   /* Test if fcntl() is supported and use POSIX style locks.
29478:   ** Otherwise fall back to the named semaphore method.
29479:   */
29480:   lockInfo.l_len = 1;
29481:   lockInfo.l_start = 0;
29482:   lockInfo.l_whence = SEEK_SET;
29483:   lockInfo.l_type = F_RDLCK;
29484:   if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) {
29485:     return &posixIoMethods;
29486:   }else{
29487:     return &semIoMethods;
29488:   }
29489: }
29490: static const sqlite3_io_methods 
29491:   *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl;
29492: 
29493: #endif /* OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE */
29494: 
29495: /*
29496: ** An abstract type for a pointer to a IO method finder function:
29497: */
29498: typedef const sqlite3_io_methods *(*finder_type)(const char*,unixFile*);
29499: 
29500: 
29501: /****************************************************************************
29502: **************************** sqlite3_vfs methods ****************************
29503: **
29504: ** This division contains the implementation of methods on the
29505: ** sqlite3_vfs object.
29506: */
29507: 
29508: /*
29509: ** Initialize the contents of the unixFile structure pointed to by pId.
29510: */
29511: static int fillInUnixFile(
29512:   sqlite3_vfs *pVfs,      /* Pointer to vfs object */
29513:   int h,                  /* Open file descriptor of file being opened */
29514:   sqlite3_file *pId,      /* Write to the unixFile structure here */
29515:   const char *zFilename,  /* Name of the file being opened */
29516:   int ctrlFlags           /* Zero or more UNIXFILE_* values */
29517: ){
29518:   const sqlite3_io_methods *pLockingStyle;
29519:   unixFile *pNew = (unixFile *)pId;
29520:   int rc = SQLITE_OK;
29521: 
29522:   assert( pNew->pInode==NULL );
29523: 
29524:   /* Usually the path zFilename should not be a relative pathname. The
29525:   ** exception is when opening the proxy "conch" file in builds that
29526:   ** include the special Apple locking styles.
29527:   */
29528: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29529:   assert( zFilename==0 || zFilename[0]=='/' 
29530:     || pVfs->pAppData==(void*)&autolockIoFinder );
29531: #else
29532:   assert( zFilename==0 || zFilename[0]=='/' );
29533: #endif
29534: 
29535:   /* No locking occurs in temporary files */
29536:   assert( zFilename!=0 || (ctrlFlags & UNIXFILE_NOLOCK)!=0 );
29537: 
29538:   OSTRACE(("OPEN    %-3d %s\n", h, zFilename));
29539:   pNew->h = h;
29540:   pNew->pVfs = pVfs;
29541:   pNew->zPath = zFilename;
29542:   pNew->ctrlFlags = (u8)ctrlFlags;
29543:   if( sqlite3_uri_boolean(((ctrlFlags & UNIXFILE_URI) ? zFilename : 0),
29544:                            "psow", SQLITE_POWERSAFE_OVERWRITE) ){
29545:     pNew->ctrlFlags |= UNIXFILE_PSOW;
29546:   }
29547:   if( memcmp(pVfs->zName,"unix-excl",10)==0 ){
29548:     pNew->ctrlFlags |= UNIXFILE_EXCL;
29549:   }
29550: 
29551: #if OS_VXWORKS
29552:   pNew->pId = vxworksFindFileId(zFilename);
29553:   if( pNew->pId==0 ){
29554:     ctrlFlags |= UNIXFILE_NOLOCK;
29555:     rc = SQLITE_NOMEM;
29556:   }
29557: #endif
29558: 
29559:   if( ctrlFlags & UNIXFILE_NOLOCK ){
29560:     pLockingStyle = &nolockIoMethods;
29561:   }else{
29562:     pLockingStyle = (**(finder_type*)pVfs->pAppData)(zFilename, pNew);
29563: #if SQLITE_ENABLE_LOCKING_STYLE
29564:     /* Cache zFilename in the locking context (AFP and dotlock override) for
29565:     ** proxyLock activation is possible (remote proxy is based on db name)
29566:     ** zFilename remains valid until file is closed, to support */
29567:     pNew->lockingContext = (void*)zFilename;
29568: #endif
29569:   }
29570: 
29571:   if( pLockingStyle == &posixIoMethods
29572: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29573:     || pLockingStyle == &nfsIoMethods
29574: #endif
29575:   ){
29576:     unixEnterMutex();
29577:     rc = findInodeInfo(pNew, &pNew->pInode);
29578:     if( rc!=SQLITE_OK ){
29579:       /* If an error occured in findInodeInfo(), close the file descriptor
29580:       ** immediately, before releasing the mutex. findInodeInfo() may fail
29581:       ** in two scenarios:
29582:       **
29583:       **   (a) A call to fstat() failed.
29584:       **   (b) A malloc failed.
29585:       **
29586:       ** Scenario (b) may only occur if the process is holding no other
29587:       ** file descriptors open on the same file. If there were other file
29588:       ** descriptors on this file, then no malloc would be required by
29589:       ** findInodeInfo(). If this is the case, it is quite safe to close
29590:       ** handle h - as it is guaranteed that no posix locks will be released
29591:       ** by doing so.
29592:       **
29593:       ** If scenario (a) caused the error then things are not so safe. The
29594:       ** implicit assumption here is that if fstat() fails, things are in
29595:       ** such bad shape that dropping a lock or two doesn't matter much.
29596:       */
29597:       robust_close(pNew, h, __LINE__);
29598:       h = -1;
29599:     }
29600:     unixLeaveMutex();
29601:   }
29602: 
29603: #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
29604:   else if( pLockingStyle == &afpIoMethods ){
29605:     /* AFP locking uses the file path so it needs to be included in
29606:     ** the afpLockingContext.
29607:     */
29608:     afpLockingContext *pCtx;
29609:     pNew->lockingContext = pCtx = sqlite3_malloc( sizeof(*pCtx) );
29610:     if( pCtx==0 ){
29611:       rc = SQLITE_NOMEM;
29612:     }else{
29613:       /* NB: zFilename exists and remains valid until the file is closed
29614:       ** according to requirement F11141.  So we do not need to make a
29615:       ** copy of the filename. */
29616:       pCtx->dbPath = zFilename;
29617:       pCtx->reserved = 0;
29618:       srandomdev();
29619:       unixEnterMutex();
29620:       rc = findInodeInfo(pNew, &pNew->pInode);
29621:       if( rc!=SQLITE_OK ){
29622:         sqlite3_free(pNew->lockingContext);
29623:         robust_close(pNew, h, __LINE__);
29624:         h = -1;
29625:       }
29626:       unixLeaveMutex();        
29627:     }
29628:   }
29629: #endif
29630: 
29631:   else if( pLockingStyle == &dotlockIoMethods ){
29632:     /* Dotfile locking uses the file path so it needs to be included in
29633:     ** the dotlockLockingContext 
29634:     */
29635:     char *zLockFile;
29636:     int nFilename;
29637:     assert( zFilename!=0 );
29638:     nFilename = (int)strlen(zFilename) + 6;
29639:     zLockFile = (char *)sqlite3_malloc(nFilename);
29640:     if( zLockFile==0 ){
29641:       rc = SQLITE_NOMEM;
29642:     }else{
29643:       sqlite3_snprintf(nFilename, zLockFile, "%s" DOTLOCK_SUFFIX, zFilename);
29644:     }
29645:     pNew->lockingContext = zLockFile;
29646:   }
29647: 
29648: #if OS_VXWORKS
29649:   else if( pLockingStyle == &semIoMethods ){
29650:     /* Named semaphore locking uses the file path so it needs to be
29651:     ** included in the semLockingContext
29652:     */
29653:     unixEnterMutex();
29654:     rc = findInodeInfo(pNew, &pNew->pInode);
29655:     if( (rc==SQLITE_OK) && (pNew->pInode->pSem==NULL) ){
29656:       char *zSemName = pNew->pInode->aSemName;
29657:       int n;
29658:       sqlite3_snprintf(MAX_PATHNAME, zSemName, "/%s.sem",
29659:                        pNew->pId->zCanonicalName);
29660:       for( n=1; zSemName[n]; n++ )
29661:         if( zSemName[n]=='/' ) zSemName[n] = '_';
29662:       pNew->pInode->pSem = sem_open(zSemName, O_CREAT, 0666, 1);
29663:       if( pNew->pInode->pSem == SEM_FAILED ){
29664:         rc = SQLITE_NOMEM;
29665:         pNew->pInode->aSemName[0] = '\0';
29666:       }
29667:     }
29668:     unixLeaveMutex();
29669:   }
29670: #endif
29671:   
29672:   pNew->lastErrno = 0;
29673: #if OS_VXWORKS
29674:   if( rc!=SQLITE_OK ){
29675:     if( h>=0 ) robust_close(pNew, h, __LINE__);
29676:     h = -1;
29677:     osUnlink(zFilename);
29678:     isDelete = 0;
29679:   }
29680:   if( isDelete ) pNew->ctrlFlags |= UNIXFILE_DELETE;
29681: #endif
29682:   if( rc!=SQLITE_OK ){
29683:     if( h>=0 ) robust_close(pNew, h, __LINE__);
29684:   }else{
29685:     pNew->pMethod = pLockingStyle;
29686:     OpenCounter(+1);
29687:   }
29688:   return rc;
29689: }
29690: 
29691: /*
29692: ** Return the name of a directory in which to put temporary files.
29693: ** If no suitable temporary file directory can be found, return NULL.
29694: */
29695: static const char *unixTempFileDir(void){
29696:   static const char *azDirs[] = {
29697:      0,
29698:      0,
29699:      "/var/tmp",
29700:      "/usr/tmp",
29701:      "/tmp",
29702:      0        /* List terminator */
29703:   };
29704:   unsigned int i;
29705:   struct stat buf;
29706:   const char *zDir = 0;
29707: 
29708:   azDirs[0] = sqlite3_temp_directory;
29709:   if( !azDirs[1] ) azDirs[1] = getenv("TMPDIR");
29710:   for(i=0; i<sizeof(azDirs)/sizeof(azDirs[0]); zDir=azDirs[i++]){
29711:     if( zDir==0 ) continue;
29712:     if( osStat(zDir, &buf) ) continue;
29713:     if( !S_ISDIR(buf.st_mode) ) continue;
29714:     if( osAccess(zDir, 07) ) continue;
29715:     break;
29716:   }
29717:   return zDir;
29718: }
29719: 
29720: /*
29721: ** Create a temporary file name in zBuf.  zBuf must be allocated
29722: ** by the calling process and must be big enough to hold at least
29723: ** pVfs->mxPathname bytes.
29724: */
29725: static int unixGetTempname(int nBuf, char *zBuf){
29726:   static const unsigned char zChars[] =
29727:     "abcdefghijklmnopqrstuvwxyz"
29728:     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
29729:     "0123456789";
29730:   unsigned int i, j;
29731:   const char *zDir;
29732: 
29733:   /* It's odd to simulate an io-error here, but really this is just
29734:   ** using the io-error infrastructure to test that SQLite handles this
29735:   ** function failing. 
29736:   */
29737:   SimulateIOError( return SQLITE_IOERR );
29738: 
29739:   zDir = unixTempFileDir();
29740:   if( zDir==0 ) zDir = ".";
29741: 
29742:   /* Check that the output buffer is large enough for the temporary file 
29743:   ** name. If it is not, return SQLITE_ERROR.
29744:   */
29745:   if( (strlen(zDir) + strlen(SQLITE_TEMP_FILE_PREFIX) + 18) >= (size_t)nBuf ){
29746:     return SQLITE_ERROR;
29747:   }
29748: 
29749:   do{
29750:     sqlite3_snprintf(nBuf-18, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX, zDir);
29751:     j = (int)strlen(zBuf);
29752:     sqlite3_randomness(15, &zBuf[j]);
29753:     for(i=0; i<15; i++, j++){
29754:       zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
29755:     }
29756:     zBuf[j] = 0;
29757:     zBuf[j+1] = 0;
29758:   }while( osAccess(zBuf,0)==0 );
29759:   return SQLITE_OK;
29760: }
29761: 
29762: #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
29763: /*
29764: ** Routine to transform a unixFile into a proxy-locking unixFile.
29765: ** Implementation in the proxy-lock division, but used by unixOpen()
29766: ** if SQLITE_PREFER_PROXY_LOCKING is defined.
29767: */
29768: static int proxyTransformUnixFile(unixFile*, const char*);
29769: #endif
29770: 
29771: /*
29772: ** Search for an unused file descriptor that was opened on the database 
29773: ** file (not a journal or master-journal file) identified by pathname
29774: ** zPath with SQLITE_OPEN_XXX flags matching those passed as the second
29775: ** argument to this function.
29776: **
29777: ** Such a file descriptor may exist if a database connection was closed
29778: ** but the associated file descriptor could not be closed because some
29779: ** other file descriptor open on the same file is holding a file-lock.
29780: ** Refer to comments in the unixClose() function and the lengthy comment
29781: ** describing "Posix Advisory Locking" at the start of this file for 
29782: ** further details. Also, ticket #4018.
29783: **
29784: ** If a suitable file descriptor is found, then it is returned. If no
29785: ** such file descriptor is located, -1 is returned.
29786: */
29787: static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
29788:   UnixUnusedFd *pUnused = 0;
29789: 
29790:   /* Do not search for an unused file descriptor on vxworks. Not because
29791:   ** vxworks would not benefit from the change (it might, we're not sure),
29792:   ** but because no way to test it is currently available. It is better 
29793:   ** not to risk breaking vxworks support for the sake of such an obscure 
29794:   ** feature.  */
29795: #if !OS_VXWORKS
29796:   struct stat sStat;                   /* Results of stat() call */
29797: 
29798:   /* A stat() call may fail for various reasons. If this happens, it is
29799:   ** almost certain that an open() call on the same path will also fail.
29800:   ** For this reason, if an error occurs in the stat() call here, it is
29801:   ** ignored and -1 is returned. The caller will try to open a new file
29802:   ** descriptor on the same path, fail, and return an error to SQLite.
29803:   **
29804:   ** Even if a subsequent open() call does succeed, the consequences of
29805:   ** not searching for a resusable file descriptor are not dire.  */
29806:   if( 0==osStat(zPath, &sStat) ){
29807:     unixInodeInfo *pInode;
29808: 
29809:     unixEnterMutex();
29810:     pInode = inodeList;
29811:     while( pInode && (pInode->fileId.dev!=sStat.st_dev
29812:                      || pInode->fileId.ino!=sStat.st_ino) ){
29813:        pInode = pInode->pNext;
29814:     }
29815:     if( pInode ){
29816:       UnixUnusedFd **pp;
29817:       for(pp=&pInode->pUnused; *pp && (*pp)->flags!=flags; pp=&((*pp)->pNext));
29818:       pUnused = *pp;
29819:       if( pUnused ){
29820:         *pp = pUnused->pNext;
29821:       }
29822:     }
29823:     unixLeaveMutex();
29824:   }
29825: #endif    /* if !OS_VXWORKS */
29826:   return pUnused;
29827: }
29828: 
29829: /*
29830: ** This function is called by unixOpen() to determine the unix permissions
29831: ** to create new files with. If no error occurs, then SQLITE_OK is returned
29832: ** and a value suitable for passing as the third argument to open(2) is
29833: ** written to *pMode. If an IO error occurs, an SQLite error code is 
29834: ** returned and the value of *pMode is not modified.
29835: **
29836: ** If the file being opened is a temporary file, it is always created with
29837: ** the octal permissions 0600 (read/writable by owner only). If the file
29838: ** is a database or master journal file, it is created with the permissions 
29839: ** mask SQLITE_DEFAULT_FILE_PERMISSIONS.
29840: **
29841: ** Finally, if the file being opened is a WAL or regular journal file, then 
29842: ** this function queries the file-system for the permissions on the 
29843: ** corresponding database file and sets *pMode to this value. Whenever 
29844: ** possible, WAL and journal files are created using the same permissions 
29845: ** as the associated database file.
29846: **
29847: ** If the SQLITE_ENABLE_8_3_NAMES option is enabled, then the
29848: ** original filename is unavailable.  But 8_3_NAMES is only used for
29849: ** FAT filesystems and permissions do not matter there, so just use
29850: ** the default permissions.
29851: */
29852: static int findCreateFileMode(
29853:   const char *zPath,              /* Path of file (possibly) being created */
29854:   int flags,                      /* Flags passed as 4th argument to xOpen() */
29855:   mode_t *pMode                   /* OUT: Permissions to open file with */
29856: ){
29857:   int rc = SQLITE_OK;             /* Return Code */
29858:   *pMode = SQLITE_DEFAULT_FILE_PERMISSIONS;
29859:   if( flags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL) ){
29860:     char zDb[MAX_PATHNAME+1];     /* Database file path */
29861:     int nDb;                      /* Number of valid bytes in zDb */
29862:     struct stat sStat;            /* Output of stat() on database file */
29863: 
29864:     /* zPath is a path to a WAL or journal file. The following block derives
29865:     ** the path to the associated database file from zPath. This block handles
29866:     ** the following naming conventions:
29867:     **
29868:     **   "<path to db>-journal"
29869:     **   "<path to db>-wal"
29870:     **   "<path to db>-journalNN"
29871:     **   "<path to db>-walNN"
29872:     **
29873:     ** where NN is a decimal number. The NN naming schemes are 
29874:     ** used by the test_multiplex.c module.
29875:     */
29876:     nDb = sqlite3Strlen30(zPath) - 1; 
29877: #ifdef SQLITE_ENABLE_8_3_NAMES
29878:     while( nDb>0 && sqlite3Isalnum(zPath[nDb]) ) nDb--;
29879:     if( nDb==0 || zPath[nDb]!='-' ) return SQLITE_OK;
29880: #else
29881:     while( zPath[nDb]!='-' ){
29882:       assert( nDb>0 );
29883:       assert( zPath[nDb]!='\n' );
29884:       nDb--;
29885:     }
29886: #endif
29887:     memcpy(zDb, zPath, nDb);
29888:     zDb[nDb] = '\0';
29889: 
29890:     if( 0==osStat(zDb, &sStat) ){
29891:       *pMode = sStat.st_mode & 0777;
29892:     }else{
29893:       rc = SQLITE_IOERR_FSTAT;
29894:     }
29895:   }else if( flags & SQLITE_OPEN_DELETEONCLOSE ){
29896:     *pMode = 0600;
29897:   }
29898:   return rc;
29899: }
29900: 
29901: /*
29902: ** Open the file zPath.
29903: ** 
29904: ** Previously, the SQLite OS layer used three functions in place of this
29905: ** one:
29906: **
29907: **     sqlite3OsOpenReadWrite();
29908: **     sqlite3OsOpenReadOnly();
29909: **     sqlite3OsOpenExclusive();
29910: **
29911: ** These calls correspond to the following combinations of flags:
29912: **
29913: **     ReadWrite() ->     (READWRITE | CREATE)
29914: **     ReadOnly()  ->     (READONLY) 
29915: **     OpenExclusive() -> (READWRITE | CREATE | EXCLUSIVE)
29916: **
29917: ** The old OpenExclusive() accepted a boolean argument - "delFlag". If
29918: ** true, the file was configured to be automatically deleted when the
29919: ** file handle closed. To achieve the same effect using this new 
29920: ** interface, add the DELETEONCLOSE flag to those specified above for 
29921: ** OpenExclusive().
29922: */
29923: static int unixOpen(
29924:   sqlite3_vfs *pVfs,           /* The VFS for which this is the xOpen method */
29925:   const char *zPath,           /* Pathname of file to be opened */
29926:   sqlite3_file *pFile,         /* The file descriptor to be filled in */
29927:   int flags,                   /* Input flags to control the opening */
29928:   int *pOutFlags               /* Output flags returned to SQLite core */
29929: ){
29930:   unixFile *p = (unixFile *)pFile;
29931:   int fd = -1;                   /* File descriptor returned by open() */
29932:   int openFlags = 0;             /* Flags to pass to open() */
29933:   int eType = flags&0xFFFFFF00;  /* Type of file to open */
29934:   int noLock;                    /* True to omit locking primitives */
29935:   int rc = SQLITE_OK;            /* Function Return Code */
29936:   int ctrlFlags = 0;             /* UNIXFILE_* flags */
29937: 
29938:   int isExclusive  = (flags & SQLITE_OPEN_EXCLUSIVE);
29939:   int isDelete     = (flags & SQLITE_OPEN_DELETEONCLOSE);
29940:   int isCreate     = (flags & SQLITE_OPEN_CREATE);
29941:   int isReadonly   = (flags & SQLITE_OPEN_READONLY);
29942:   int isReadWrite  = (flags & SQLITE_OPEN_READWRITE);
29943: #if SQLITE_ENABLE_LOCKING_STYLE
29944:   int isAutoProxy  = (flags & SQLITE_OPEN_AUTOPROXY);
29945: #endif
29946: #if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
29947:   struct statfs fsInfo;
29948: #endif
29949: 
29950:   /* If creating a master or main-file journal, this function will open
29951:   ** a file-descriptor on the directory too. The first time unixSync()
29952:   ** is called the directory file descriptor will be fsync()ed and close()d.
29953:   */
29954:   int syncDir = (isCreate && (
29955:         eType==SQLITE_OPEN_MASTER_JOURNAL 
29956:      || eType==SQLITE_OPEN_MAIN_JOURNAL 
29957:      || eType==SQLITE_OPEN_WAL
29958:   ));
29959: 
29960:   /* If argument zPath is a NULL pointer, this function is required to open
29961:   ** a temporary file. Use this buffer to store the file name in.
29962:   */
29963:   char zTmpname[MAX_PATHNAME+2];
29964:   const char *zName = zPath;
29965: 
29966:   /* Check the following statements are true: 
29967:   **
29968:   **   (a) Exactly one of the READWRITE and READONLY flags must be set, and 
29969:   **   (b) if CREATE is set, then READWRITE must also be set, and
29970:   **   (c) if EXCLUSIVE is set, then CREATE must also be set.
29971:   **   (d) if DELETEONCLOSE is set, then CREATE must also be set.
29972:   */
29973:   assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
29974:   assert(isCreate==0 || isReadWrite);
29975:   assert(isExclusive==0 || isCreate);
29976:   assert(isDelete==0 || isCreate);
29977: 
29978:   /* The main DB, main journal, WAL file and master journal are never 
29979:   ** automatically deleted. Nor are they ever temporary files.  */
29980:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
29981:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
29982:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
29983:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
29984: 
29985:   /* Assert that the upper layer has set one of the "file-type" flags. */
29986:   assert( eType==SQLITE_OPEN_MAIN_DB      || eType==SQLITE_OPEN_TEMP_DB 
29987:        || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL 
29988:        || eType==SQLITE_OPEN_SUBJOURNAL   || eType==SQLITE_OPEN_MASTER_JOURNAL 
29989:        || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
29990:   );
29991: 
29992:   memset(p, 0, sizeof(unixFile));
29993: 
29994:   if( eType==SQLITE_OPEN_MAIN_DB ){
29995:     UnixUnusedFd *pUnused;
29996:     pUnused = findReusableFd(zName, flags);
29997:     if( pUnused ){
29998:       fd = pUnused->fd;
29999:     }else{
30000:       pUnused = sqlite3_malloc(sizeof(*pUnused));
30001:       if( !pUnused ){
30002:         return SQLITE_NOMEM;
30003:       }
30004:     }
30005:     p->pUnused = pUnused;
30006: 
30007:     /* Database filenames are double-zero terminated if they are not
30008:     ** URIs with parameters.  Hence, they can always be passed into
30009:     ** sqlite3_uri_parameter(). */
30010:     assert( (flags & SQLITE_OPEN_URI) || zName[strlen(zName)+1]==0 );
30011: 
30012:   }else if( !zName ){
30013:     /* If zName is NULL, the upper layer is requesting a temp file. */
30014:     assert(isDelete && !syncDir);
30015:     rc = unixGetTempname(MAX_PATHNAME+2, zTmpname);
30016:     if( rc!=SQLITE_OK ){
30017:       return rc;
30018:     }
30019:     zName = zTmpname;
30020: 
30021:     /* Generated temporary filenames are always double-zero terminated
30022:     ** for use by sqlite3_uri_parameter(). */
30023:     assert( zName[strlen(zName)+1]==0 );
30024:   }
30025: 
30026:   /* Determine the value of the flags parameter passed to POSIX function
30027:   ** open(). These must be calculated even if open() is not called, as
30028:   ** they may be stored as part of the file handle and used by the 
30029:   ** 'conch file' locking functions later on.  */
30030:   if( isReadonly )  openFlags |= O_RDONLY;
30031:   if( isReadWrite ) openFlags |= O_RDWR;
30032:   if( isCreate )    openFlags |= O_CREAT;
30033:   if( isExclusive ) openFlags |= (O_EXCL|O_NOFOLLOW);
30034:   openFlags |= (O_LARGEFILE|O_BINARY);
30035: 
30036:   if( fd<0 ){
30037:     mode_t openMode;              /* Permissions to create file with */
30038:     rc = findCreateFileMode(zName, flags, &openMode);
30039:     if( rc!=SQLITE_OK ){
30040:       assert( !p->pUnused );
30041:       assert( eType==SQLITE_OPEN_WAL || eType==SQLITE_OPEN_MAIN_JOURNAL );
30042:       return rc;
30043:     }
30044:     fd = robust_open(zName, openFlags, openMode);
30045:     OSTRACE(("OPENX   %-3d %s 0%o\n", fd, zName, openFlags));
30046:     if( fd<0 && errno!=EISDIR && isReadWrite && !isExclusive ){
30047:       /* Failed to open the file for read/write access. Try read-only. */
30048:       flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
30049:       openFlags &= ~(O_RDWR|O_CREAT);
30050:       flags |= SQLITE_OPEN_READONLY;
30051:       openFlags |= O_RDONLY;
30052:       isReadonly = 1;
30053:       fd = robust_open(zName, openFlags, openMode);
30054:     }
30055:     if( fd<0 ){
30056:       rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName);
30057:       goto open_finished;
30058:     }
30059:   }
30060:   assert( fd>=0 );
30061:   if( pOutFlags ){
30062:     *pOutFlags = flags;
30063:   }
30064: 
30065:   if( p->pUnused ){
30066:     p->pUnused->fd = fd;
30067:     p->pUnused->flags = flags;
30068:   }
30069: 
30070:   if( isDelete ){
30071: #if OS_VXWORKS
30072:     zPath = zName;
30073: #else
30074:     osUnlink(zName);
30075: #endif
30076:   }
30077: #if SQLITE_ENABLE_LOCKING_STYLE
30078:   else{
30079:     p->openFlags = openFlags;
30080:   }
30081: #endif
30082: 
30083: #ifdef FD_CLOEXEC
30084:   osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
30085: #endif
30086: 
30087:   noLock = eType!=SQLITE_OPEN_MAIN_DB;
30088: 
30089:   
30090: #if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
30091:   if( fstatfs(fd, &fsInfo) == -1 ){
30092:     ((unixFile*)pFile)->lastErrno = errno;
30093:     robust_close(p, fd, __LINE__);
30094:     return SQLITE_IOERR_ACCESS;
30095:   }
30096:   if (0 == strncmp("msdos", fsInfo.f_fstypename, 5)) {
30097:     ((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS;
30098:   }
30099: #endif
30100: 
30101:   /* Set up appropriate ctrlFlags */
30102:   if( isDelete )                ctrlFlags |= UNIXFILE_DELETE;
30103:   if( isReadonly )              ctrlFlags |= UNIXFILE_RDONLY;
30104:   if( noLock )                  ctrlFlags |= UNIXFILE_NOLOCK;
30105:   if( syncDir )                 ctrlFlags |= UNIXFILE_DIRSYNC;
30106:   if( flags & SQLITE_OPEN_URI ) ctrlFlags |= UNIXFILE_URI;
30107: 
30108: #if SQLITE_ENABLE_LOCKING_STYLE
30109: #if SQLITE_PREFER_PROXY_LOCKING
30110:   isAutoProxy = 1;
30111: #endif
30112:   if( isAutoProxy && (zPath!=NULL) && (!noLock) && pVfs->xOpen ){
30113:     char *envforce = getenv("SQLITE_FORCE_PROXY_LOCKING");
30114:     int useProxy = 0;
30115: 
30116:     /* SQLITE_FORCE_PROXY_LOCKING==1 means force always use proxy, 0 means 
30117:     ** never use proxy, NULL means use proxy for non-local files only.  */
30118:     if( envforce!=NULL ){
30119:       useProxy = atoi(envforce)>0;
30120:     }else{
30121:       if( statfs(zPath, &fsInfo) == -1 ){
30122:         /* In theory, the close(fd) call is sub-optimal. If the file opened
30123:         ** with fd is a database file, and there are other connections open
30124:         ** on that file that are currently holding advisory locks on it,
30125:         ** then the call to close() will cancel those locks. In practice,
30126:         ** we're assuming that statfs() doesn't fail very often. At least
30127:         ** not while other file descriptors opened by the same process on
30128:         ** the same file are working.  */
30129:         p->lastErrno = errno;
30130:         robust_close(p, fd, __LINE__);
30131:         rc = SQLITE_IOERR_ACCESS;
30132:         goto open_finished;
30133:       }
30134:       useProxy = !(fsInfo.f_flags&MNT_LOCAL);
30135:     }
30136:     if( useProxy ){
30137:       rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags);
30138:       if( rc==SQLITE_OK ){
30139:         rc = proxyTransformUnixFile((unixFile*)pFile, ":auto:");
30140:         if( rc!=SQLITE_OK ){
30141:           /* Use unixClose to clean up the resources added in fillInUnixFile 
30142:           ** and clear all the structure's references.  Specifically, 
30143:           ** pFile->pMethods will be NULL so sqlite3OsClose will be a no-op 
30144:           */
30145:           unixClose(pFile);
30146:           return rc;
30147:         }
30148:       }
30149:       goto open_finished;
30150:     }
30151:   }
30152: #endif
30153:   
30154:   rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags);
30155: 
30156: open_finished:
30157:   if( rc!=SQLITE_OK ){
30158:     sqlite3_free(p->pUnused);
30159:   }
30160:   return rc;
30161: }
30162: 
30163: 
30164: /*
30165: ** Delete the file at zPath. If the dirSync argument is true, fsync()
30166: ** the directory after deleting the file.
30167: */
30168: static int unixDelete(
30169:   sqlite3_vfs *NotUsed,     /* VFS containing this as the xDelete method */
30170:   const char *zPath,        /* Name of file to be deleted */
30171:   int dirSync               /* If true, fsync() directory after deleting file */
30172: ){
30173:   int rc = SQLITE_OK;
30174:   UNUSED_PARAMETER(NotUsed);
30175:   SimulateIOError(return SQLITE_IOERR_DELETE);
30176:   if( osUnlink(zPath)==(-1) && errno!=ENOENT ){
30177:     return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
30178:   }
30179: #ifndef SQLITE_DISABLE_DIRSYNC
30180:   if( (dirSync & 1)!=0 ){
30181:     int fd;
30182:     rc = osOpenDirectory(zPath, &fd);
30183:     if( rc==SQLITE_OK ){
30184: #if OS_VXWORKS
30185:       if( fsync(fd)==-1 )
30186: #else
30187:       if( fsync(fd) )
30188: #endif
30189:       {
30190:         rc = unixLogError(SQLITE_IOERR_DIR_FSYNC, "fsync", zPath);
30191:       }
30192:       robust_close(0, fd, __LINE__);
30193:     }else if( rc==SQLITE_CANTOPEN ){
30194:       rc = SQLITE_OK;
30195:     }
30196:   }
30197: #endif
30198:   return rc;
30199: }
30200: 
30201: /*
30202: ** Test the existance of or access permissions of file zPath. The
30203: ** test performed depends on the value of flags:
30204: **
30205: **     SQLITE_ACCESS_EXISTS: Return 1 if the file exists
30206: **     SQLITE_ACCESS_READWRITE: Return 1 if the file is read and writable.
30207: **     SQLITE_ACCESS_READONLY: Return 1 if the file is readable.
30208: **
30209: ** Otherwise return 0.
30210: */
30211: static int unixAccess(
30212:   sqlite3_vfs *NotUsed,   /* The VFS containing this xAccess method */
30213:   const char *zPath,      /* Path of the file to examine */
30214:   int flags,              /* What do we want to learn about the zPath file? */
30215:   int *pResOut            /* Write result boolean here */
30216: ){
30217:   int amode = 0;
30218:   UNUSED_PARAMETER(NotUsed);
30219:   SimulateIOError( return SQLITE_IOERR_ACCESS; );
30220:   switch( flags ){
30221:     case SQLITE_ACCESS_EXISTS:
30222:       amode = F_OK;
30223:       break;
30224:     case SQLITE_ACCESS_READWRITE:
30225:       amode = W_OK|R_OK;
30226:       break;
30227:     case SQLITE_ACCESS_READ:
30228:       amode = R_OK;
30229:       break;
30230: 
30231:     default:
30232:       assert(!"Invalid flags argument");
30233:   }
30234:   *pResOut = (osAccess(zPath, amode)==0);
30235:   if( flags==SQLITE_ACCESS_EXISTS && *pResOut ){
30236:     struct stat buf;
30237:     if( 0==osStat(zPath, &buf) && buf.st_size==0 ){
30238:       *pResOut = 0;
30239:     }
30240:   }
30241:   return SQLITE_OK;
30242: }
30243: 
30244: 
30245: /*
30246: ** Turn a relative pathname into a full pathname. The relative path
30247: ** is stored as a nul-terminated string in the buffer pointed to by
30248: ** zPath. 
30249: **
30250: ** zOut points to a buffer of at least sqlite3_vfs.mxPathname bytes 
30251: ** (in this case, MAX_PATHNAME bytes). The full-path is written to
30252: ** this buffer before returning.
30253: */
30254: static int unixFullPathname(
30255:   sqlite3_vfs *pVfs,            /* Pointer to vfs object */
30256:   const char *zPath,            /* Possibly relative input path */
30257:   int nOut,                     /* Size of output buffer in bytes */
30258:   char *zOut                    /* Output buffer */
30259: ){
30260: 
30261:   /* It's odd to simulate an io-error here, but really this is just
30262:   ** using the io-error infrastructure to test that SQLite handles this
30263:   ** function failing. This function could fail if, for example, the
30264:   ** current working directory has been unlinked.
30265:   */
30266:   SimulateIOError( return SQLITE_ERROR );
30267: 
30268:   assert( pVfs->mxPathname==MAX_PATHNAME );
30269:   UNUSED_PARAMETER(pVfs);
30270: 
30271:   zOut[nOut-1] = '\0';
30272:   if( zPath[0]=='/' ){
30273:     sqlite3_snprintf(nOut, zOut, "%s", zPath);
30274:   }else{
30275:     int nCwd;
30276:     if( osGetcwd(zOut, nOut-1)==0 ){
30277:       return unixLogError(SQLITE_CANTOPEN_BKPT, "getcwd", zPath);
30278:     }
30279:     nCwd = (int)strlen(zOut);
30280:     sqlite3_snprintf(nOut-nCwd, &zOut[nCwd], "/%s", zPath);
30281:   }
30282:   return SQLITE_OK;
30283: }
30284: 
30285: 
30286: #ifndef SQLITE_OMIT_LOAD_EXTENSION
30287: /*
30288: ** Interfaces for opening a shared library, finding entry points
30289: ** within the shared library, and closing the shared library.
30290: */
30291: #include <dlfcn.h>
30292: static void *unixDlOpen(sqlite3_vfs *NotUsed, const char *zFilename){
30293:   UNUSED_PARAMETER(NotUsed);
30294:   return dlopen(zFilename, RTLD_NOW | RTLD_GLOBAL);
30295: }
30296: 
30297: /*
30298: ** SQLite calls this function immediately after a call to unixDlSym() or
30299: ** unixDlOpen() fails (returns a null pointer). If a more detailed error
30300: ** message is available, it is written to zBufOut. If no error message
30301: ** is available, zBufOut is left unmodified and SQLite uses a default
30302: ** error message.
30303: */
30304: static void unixDlError(sqlite3_vfs *NotUsed, int nBuf, char *zBufOut){
30305:   const char *zErr;
30306:   UNUSED_PARAMETER(NotUsed);
30307:   unixEnterMutex();
30308:   zErr = dlerror();
30309:   if( zErr ){
30310:     sqlite3_snprintf(nBuf, zBufOut, "%s", zErr);
30311:   }
30312:   unixLeaveMutex();
30313: }
30314: static void (*unixDlSym(sqlite3_vfs *NotUsed, void *p, const char*zSym))(void){
30315:   /* 
30316:   ** GCC with -pedantic-errors says that C90 does not allow a void* to be
30317:   ** cast into a pointer to a function.  And yet the library dlsym() routine
30318:   ** returns a void* which is really a pointer to a function.  So how do we
30319:   ** use dlsym() with -pedantic-errors?
30320:   **
30321:   ** Variable x below is defined to be a pointer to a function taking
30322:   ** parameters void* and const char* and returning a pointer to a function.
30323:   ** We initialize x by assigning it a pointer to the dlsym() function.
30324:   ** (That assignment requires a cast.)  Then we call the function that
30325:   ** x points to.  
30326:   **
30327:   ** This work-around is unlikely to work correctly on any system where
30328:   ** you really cannot cast a function pointer into void*.  But then, on the
30329:   ** other hand, dlsym() will not work on such a system either, so we have
30330:   ** not really lost anything.
30331:   */
30332:   void (*(*x)(void*,const char*))(void);
30333:   UNUSED_PARAMETER(NotUsed);
30334:   x = (void(*(*)(void*,const char*))(void))dlsym;
30335:   return (*x)(p, zSym);
30336: }
30337: static void unixDlClose(sqlite3_vfs *NotUsed, void *pHandle){
30338:   UNUSED_PARAMETER(NotUsed);
30339:   dlclose(pHandle);
30340: }
30341: #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
30342:   #define unixDlOpen  0
30343:   #define unixDlError 0
30344:   #define unixDlSym   0
30345:   #define unixDlClose 0
30346: #endif
30347: 
30348: /*
30349: ** Write nBuf bytes of random data to the supplied buffer zBuf.
30350: */
30351: static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){
30352:   UNUSED_PARAMETER(NotUsed);
30353:   assert((size_t)nBuf>=(sizeof(time_t)+sizeof(int)));
30354: 
30355:   /* We have to initialize zBuf to prevent valgrind from reporting
30356:   ** errors.  The reports issued by valgrind are incorrect - we would
30357:   ** prefer that the randomness be increased by making use of the
30358:   ** uninitialized space in zBuf - but valgrind errors tend to worry
30359:   ** some users.  Rather than argue, it seems easier just to initialize
30360:   ** the whole array and silence valgrind, even if that means less randomness
30361:   ** in the random seed.
30362:   **
30363:   ** When testing, initializing zBuf[] to zero is all we do.  That means
30364:   ** that we always use the same random number sequence.  This makes the
30365:   ** tests repeatable.
30366:   */
30367:   memset(zBuf, 0, nBuf);
30368: #if !defined(SQLITE_TEST)
30369:   {
30370:     int pid, fd;
30371:     fd = robust_open("/dev/urandom", O_RDONLY, 0);
30372:     if( fd<0 ){
30373:       time_t t;
30374:       time(&t);
30375:       memcpy(zBuf, &t, sizeof(t));
30376:       pid = getpid();
30377:       memcpy(&zBuf[sizeof(t)], &pid, sizeof(pid));
30378:       assert( sizeof(t)+sizeof(pid)<=(size_t)nBuf );
30379:       nBuf = sizeof(t) + sizeof(pid);
30380:     }else{
30381:       do{ nBuf = osRead(fd, zBuf, nBuf); }while( nBuf<0 && errno==EINTR );
30382:       robust_close(0, fd, __LINE__);
30383:     }
30384:   }
30385: #endif
30386:   return nBuf;
30387: }
30388: 
30389: 
30390: /*
30391: ** Sleep for a little while.  Return the amount of time slept.
30392: ** The argument is the number of microseconds we want to sleep.
30393: ** The return value is the number of microseconds of sleep actually
30394: ** requested from the underlying operating system, a number which
30395: ** might be greater than or equal to the argument, but not less
30396: ** than the argument.
30397: */
30398: static int unixSleep(sqlite3_vfs *NotUsed, int microseconds){
30399: #if OS_VXWORKS
30400:   struct timespec sp;
30401: 
30402:   sp.tv_sec = microseconds / 1000000;
30403:   sp.tv_nsec = (microseconds % 1000000) * 1000;
30404:   nanosleep(&sp, NULL);
30405:   UNUSED_PARAMETER(NotUsed);
30406:   return microseconds;
30407: #elif defined(HAVE_USLEEP) && HAVE_USLEEP
30408:   usleep(microseconds);
30409:   UNUSED_PARAMETER(NotUsed);
30410:   return microseconds;
30411: #else
30412:   int seconds = (microseconds+999999)/1000000;
30413:   sleep(seconds);
30414:   UNUSED_PARAMETER(NotUsed);
30415:   return seconds*1000000;
30416: #endif
30417: }
30418: 
30419: /*
30420: ** The following variable, if set to a non-zero value, is interpreted as
30421: ** the number of seconds since 1970 and is used to set the result of
30422: ** sqlite3OsCurrentTime() during testing.
30423: */
30424: #ifdef SQLITE_TEST
30425: SQLITE_API int sqlite3_current_time = 0;  /* Fake system time in seconds since 1970. */
30426: #endif
30427: 
30428: /*
30429: ** Find the current time (in Universal Coordinated Time).  Write into *piNow
30430: ** the current time and date as a Julian Day number times 86_400_000.  In
30431: ** other words, write into *piNow the number of milliseconds since the Julian
30432: ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
30433: ** proleptic Gregorian calendar.
30434: **
30435: ** On success, return SQLITE_OK.  Return SQLITE_ERROR if the time and date 
30436: ** cannot be found.
30437: */
30438: static int unixCurrentTimeInt64(sqlite3_vfs *NotUsed, sqlite3_int64 *piNow){
30439:   static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
30440:   int rc = SQLITE_OK;
30441: #if defined(NO_GETTOD)
30442:   time_t t;
30443:   time(&t);
30444:   *piNow = ((sqlite3_int64)t)*1000 + unixEpoch;
30445: #elif OS_VXWORKS
30446:   struct timespec sNow;
30447:   clock_gettime(CLOCK_REALTIME, &sNow);
30448:   *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_nsec/1000000;
30449: #else
30450:   struct timeval sNow;
30451:   if( gettimeofday(&sNow, 0)==0 ){
30452:     *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_usec/1000;
30453:   }else{
30454:     rc = SQLITE_ERROR;
30455:   }
30456: #endif
30457: 
30458: #ifdef SQLITE_TEST
30459:   if( sqlite3_current_time ){
30460:     *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
30461:   }
30462: #endif
30463:   UNUSED_PARAMETER(NotUsed);
30464:   return rc;
30465: }
30466: 
30467: /*
30468: ** Find the current time (in Universal Coordinated Time).  Write the
30469: ** current time and date as a Julian Day number into *prNow and
30470: ** return 0.  Return 1 if the time and date cannot be found.
30471: */
30472: static int unixCurrentTime(sqlite3_vfs *NotUsed, double *prNow){
30473:   sqlite3_int64 i = 0;
30474:   int rc;
30475:   UNUSED_PARAMETER(NotUsed);
30476:   rc = unixCurrentTimeInt64(0, &i);
30477:   *prNow = i/86400000.0;
30478:   return rc;
30479: }
30480: 
30481: /*
30482: ** We added the xGetLastError() method with the intention of providing
30483: ** better low-level error messages when operating-system problems come up
30484: ** during SQLite operation.  But so far, none of that has been implemented
30485: ** in the core.  So this routine is never called.  For now, it is merely
30486: ** a place-holder.
30487: */
30488: static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){
30489:   UNUSED_PARAMETER(NotUsed);
30490:   UNUSED_PARAMETER(NotUsed2);
30491:   UNUSED_PARAMETER(NotUsed3);
30492:   return 0;
30493: }
30494: 
30495: 
30496: /*
30497: ************************ End of sqlite3_vfs methods ***************************
30498: ******************************************************************************/
30499: 
30500: /******************************************************************************
30501: ************************** Begin Proxy Locking ********************************
30502: **
30503: ** Proxy locking is a "uber-locking-method" in this sense:  It uses the
30504: ** other locking methods on secondary lock files.  Proxy locking is a
30505: ** meta-layer over top of the primitive locking implemented above.  For
30506: ** this reason, the division that implements of proxy locking is deferred
30507: ** until late in the file (here) after all of the other I/O methods have
30508: ** been defined - so that the primitive locking methods are available
30509: ** as services to help with the implementation of proxy locking.
30510: **
30511: ****
30512: **
30513: ** The default locking schemes in SQLite use byte-range locks on the
30514: ** database file to coordinate safe, concurrent access by multiple readers
30515: ** and writers [http://sqlite.org/lockingv3.html].  The five file locking
30516: ** states (UNLOCKED, PENDING, SHARED, RESERVED, EXCLUSIVE) are implemented
30517: ** as POSIX read & write locks over fixed set of locations (via fsctl),
30518: ** on AFP and SMB only exclusive byte-range locks are available via fsctl
30519: ** with _IOWR('z', 23, struct ByteRangeLockPB2) to track the same 5 states.
30520: ** To simulate a F_RDLCK on the shared range, on AFP a randomly selected
30521: ** address in the shared range is taken for a SHARED lock, the entire
30522: ** shared range is taken for an EXCLUSIVE lock):
30523: **
30524: **      PENDING_BYTE        0x40000000		   	
30525: **      RESERVED_BYTE       0x40000001
30526: **      SHARED_RANGE        0x40000002 -> 0x40000200
30527: **
30528: ** This works well on the local file system, but shows a nearly 100x
30529: ** slowdown in read performance on AFP because the AFP client disables
30530: ** the read cache when byte-range locks are present.  Enabling the read
30531: ** cache exposes a cache coherency problem that is present on all OS X
30532: ** supported network file systems.  NFS and AFP both observe the
30533: ** close-to-open semantics for ensuring cache coherency
30534: ** [http://nfs.sourceforge.net/#faq_a8], which does not effectively
30535: ** address the requirements for concurrent database access by multiple
30536: ** readers and writers
30537: ** [http://www.nabble.com/SQLite-on-NFS-cache-coherency-td15655701.html].
30538: **
30539: ** To address the performance and cache coherency issues, proxy file locking
30540: ** changes the way database access is controlled by limiting access to a
30541: ** single host at a time and moving file locks off of the database file
30542: ** and onto a proxy file on the local file system.  
30543: **
30544: **
30545: ** Using proxy locks
30546: ** -----------------
30547: **
30548: ** C APIs
30549: **
30550: **  sqlite3_file_control(db, dbname, SQLITE_SET_LOCKPROXYFILE,
30551: **                       <proxy_path> | ":auto:");
30552: **  sqlite3_file_control(db, dbname, SQLITE_GET_LOCKPROXYFILE, &<proxy_path>);
30553: **
30554: **
30555: ** SQL pragmas
30556: **
30557: **  PRAGMA [database.]lock_proxy_file=<proxy_path> | :auto:
30558: **  PRAGMA [database.]lock_proxy_file
30559: **
30560: ** Specifying ":auto:" means that if there is a conch file with a matching
30561: ** host ID in it, the proxy path in the conch file will be used, otherwise
30562: ** a proxy path based on the user's temp dir
30563: ** (via confstr(_CS_DARWIN_USER_TEMP_DIR,...)) will be used and the
30564: ** actual proxy file name is generated from the name and path of the
30565: ** database file.  For example:
30566: **
30567: **       For database path "/Users/me/foo.db" 
30568: **       The lock path will be "<tmpdir>/sqliteplocks/_Users_me_foo.db:auto:")
30569: **
30570: ** Once a lock proxy is configured for a database connection, it can not
30571: ** be removed, however it may be switched to a different proxy path via
30572: ** the above APIs (assuming the conch file is not being held by another
30573: ** connection or process). 
30574: **
30575: **
30576: ** How proxy locking works
30577: ** -----------------------
30578: **
30579: ** Proxy file locking relies primarily on two new supporting files: 
30580: **
30581: **   *  conch file to limit access to the database file to a single host
30582: **      at a time
30583: **
30584: **   *  proxy file to act as a proxy for the advisory locks normally
30585: **      taken on the database
30586: **
30587: ** The conch file - to use a proxy file, sqlite must first "hold the conch"
30588: ** by taking an sqlite-style shared lock on the conch file, reading the
30589: ** contents and comparing the host's unique host ID (see below) and lock
30590: ** proxy path against the values stored in the conch.  The conch file is
30591: ** stored in the same directory as the database file and the file name
30592: ** is patterned after the database file name as ".<databasename>-conch".
30593: ** If the conch file does not exist, or it's contents do not match the
30594: ** host ID and/or proxy path, then the lock is escalated to an exclusive
30595: ** lock and the conch file contents is updated with the host ID and proxy
30596: ** path and the lock is downgraded to a shared lock again.  If the conch
30597: ** is held by another process (with a shared lock), the exclusive lock
30598: ** will fail and SQLITE_BUSY is returned.
30599: **
30600: ** The proxy file - a single-byte file used for all advisory file locks
30601: ** normally taken on the database file.   This allows for safe sharing
30602: ** of the database file for multiple readers and writers on the same
30603: ** host (the conch ensures that they all use the same local lock file).
30604: **
30605: ** Requesting the lock proxy does not immediately take the conch, it is
30606: ** only taken when the first request to lock database file is made.  
30607: ** This matches the semantics of the traditional locking behavior, where
30608: ** opening a connection to a database file does not take a lock on it.
30609: ** The shared lock and an open file descriptor are maintained until 
30610: ** the connection to the database is closed. 
30611: **
30612: ** The proxy file and the lock file are never deleted so they only need
30613: ** to be created the first time they are used.
30614: **
30615: ** Configuration options
30616: ** ---------------------
30617: **
30618: **  SQLITE_PREFER_PROXY_LOCKING
30619: **
30620: **       Database files accessed on non-local file systems are
30621: **       automatically configured for proxy locking, lock files are
30622: **       named automatically using the same logic as
30623: **       PRAGMA lock_proxy_file=":auto:"
30624: **    
30625: **  SQLITE_PROXY_DEBUG
30626: **
30627: **       Enables the logging of error messages during host id file
30628: **       retrieval and creation
30629: **
30630: **  LOCKPROXYDIR
30631: **
30632: **       Overrides the default directory used for lock proxy files that
30633: **       are named automatically via the ":auto:" setting
30634: **
30635: **  SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
30636: **
30637: **       Permissions to use when creating a directory for storing the
30638: **       lock proxy files, only used when LOCKPROXYDIR is not set.
30639: **    
30640: **    
30641: ** As mentioned above, when compiled with SQLITE_PREFER_PROXY_LOCKING,
30642: ** setting the environment variable SQLITE_FORCE_PROXY_LOCKING to 1 will
30643: ** force proxy locking to be used for every database file opened, and 0
30644: ** will force automatic proxy locking to be disabled for all database
30645: ** files (explicity calling the SQLITE_SET_LOCKPROXYFILE pragma or
30646: ** sqlite_file_control API is not affected by SQLITE_FORCE_PROXY_LOCKING).
30647: */
30648: 
30649: /*
30650: ** Proxy locking is only available on MacOSX 
30651: */
30652: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
30653: 
30654: /*
30655: ** The proxyLockingContext has the path and file structures for the remote 
30656: ** and local proxy files in it
30657: */
30658: typedef struct proxyLockingContext proxyLockingContext;
30659: struct proxyLockingContext {
30660:   unixFile *conchFile;         /* Open conch file */
30661:   char *conchFilePath;         /* Name of the conch file */
30662:   unixFile *lockProxy;         /* Open proxy lock file */
30663:   char *lockProxyPath;         /* Name of the proxy lock file */
30664:   char *dbPath;                /* Name of the open file */
30665:   int conchHeld;               /* 1 if the conch is held, -1 if lockless */
30666:   void *oldLockingContext;     /* Original lockingcontext to restore on close */
30667:   sqlite3_io_methods const *pOldMethod;     /* Original I/O methods for close */
30668: };
30669: 
30670: /* 
30671: ** The proxy lock file path for the database at dbPath is written into lPath, 
30672: ** which must point to valid, writable memory large enough for a maxLen length
30673: ** file path. 
30674: */
30675: static int proxyGetLockPath(const char *dbPath, char *lPath, size_t maxLen){
30676:   int len;
30677:   int dbLen;
30678:   int i;
30679: 
30680: #ifdef LOCKPROXYDIR
30681:   len = strlcpy(lPath, LOCKPROXYDIR, maxLen);
30682: #else
30683: # ifdef _CS_DARWIN_USER_TEMP_DIR
30684:   {
30685:     if( !confstr(_CS_DARWIN_USER_TEMP_DIR, lPath, maxLen) ){
30686:       OSTRACE(("GETLOCKPATH  failed %s errno=%d pid=%d\n",
30687:                lPath, errno, getpid()));
30688:       return SQLITE_IOERR_LOCK;
30689:     }
30690:     len = strlcat(lPath, "sqliteplocks", maxLen);    
30691:   }
30692: # else
30693:   len = strlcpy(lPath, "/tmp/", maxLen);
30694: # endif
30695: #endif
30696: 
30697:   if( lPath[len-1]!='/' ){
30698:     len = strlcat(lPath, "/", maxLen);
30699:   }
30700:   
30701:   /* transform the db path to a unique cache name */
30702:   dbLen = (int)strlen(dbPath);
30703:   for( i=0; i<dbLen && (i+len+7)<(int)maxLen; i++){
30704:     char c = dbPath[i];
30705:     lPath[i+len] = (c=='/')?'_':c;
30706:   }
30707:   lPath[i+len]='\0';
30708:   strlcat(lPath, ":auto:", maxLen);
30709:   OSTRACE(("GETLOCKPATH  proxy lock path=%s pid=%d\n", lPath, getpid()));
30710:   return SQLITE_OK;
30711: }
30712: 
30713: /* 
30714:  ** Creates the lock file and any missing directories in lockPath
30715:  */
30716: static int proxyCreateLockPath(const char *lockPath){
30717:   int i, len;
30718:   char buf[MAXPATHLEN];
30719:   int start = 0;
30720:   
30721:   assert(lockPath!=NULL);
30722:   /* try to create all the intermediate directories */
30723:   len = (int)strlen(lockPath);
30724:   buf[0] = lockPath[0];
30725:   for( i=1; i<len; i++ ){
30726:     if( lockPath[i] == '/' && (i - start > 0) ){
30727:       /* only mkdir if leaf dir != "." or "/" or ".." */
30728:       if( i-start>2 || (i-start==1 && buf[start] != '.' && buf[start] != '/') 
30729:          || (i-start==2 && buf[start] != '.' && buf[start+1] != '.') ){
30730:         buf[i]='\0';
30731:         if( osMkdir(buf, SQLITE_DEFAULT_PROXYDIR_PERMISSIONS) ){
30732:           int err=errno;
30733:           if( err!=EEXIST ) {
30734:             OSTRACE(("CREATELOCKPATH  FAILED creating %s, "
30735:                      "'%s' proxy lock path=%s pid=%d\n",
30736:                      buf, strerror(err), lockPath, getpid()));
30737:             return err;
30738:           }
30739:         }
30740:       }
30741:       start=i+1;
30742:     }
30743:     buf[i] = lockPath[i];
30744:   }
30745:   OSTRACE(("CREATELOCKPATH  proxy lock path=%s pid=%d\n", lockPath, getpid()));
30746:   return 0;
30747: }
30748: 
30749: /*
30750: ** Create a new VFS file descriptor (stored in memory obtained from
30751: ** sqlite3_malloc) and open the file named "path" in the file descriptor.
30752: **
30753: ** The caller is responsible not only for closing the file descriptor
30754: ** but also for freeing the memory associated with the file descriptor.
30755: */
30756: static int proxyCreateUnixFile(
30757:     const char *path,        /* path for the new unixFile */
30758:     unixFile **ppFile,       /* unixFile created and returned by ref */
30759:     int islockfile           /* if non zero missing dirs will be created */
30760: ) {
30761:   int fd = -1;
30762:   unixFile *pNew;
30763:   int rc = SQLITE_OK;
30764:   int openFlags = O_RDWR | O_CREAT;
30765:   sqlite3_vfs dummyVfs;
30766:   int terrno = 0;
30767:   UnixUnusedFd *pUnused = NULL;
30768: 
30769:   /* 1. first try to open/create the file
30770:   ** 2. if that fails, and this is a lock file (not-conch), try creating
30771:   ** the parent directories and then try again.
30772:   ** 3. if that fails, try to open the file read-only
30773:   ** otherwise return BUSY (if lock file) or CANTOPEN for the conch file
30774:   */
30775:   pUnused = findReusableFd(path, openFlags);
30776:   if( pUnused ){
30777:     fd = pUnused->fd;
30778:   }else{
30779:     pUnused = sqlite3_malloc(sizeof(*pUnused));
30780:     if( !pUnused ){
30781:       return SQLITE_NOMEM;
30782:     }
30783:   }
30784:   if( fd<0 ){
30785:     fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
30786:     terrno = errno;
30787:     if( fd<0 && errno==ENOENT && islockfile ){
30788:       if( proxyCreateLockPath(path) == SQLITE_OK ){
30789:         fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
30790:       }
30791:     }
30792:   }
30793:   if( fd<0 ){
30794:     openFlags = O_RDONLY;
30795:     fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
30796:     terrno = errno;
30797:   }
30798:   if( fd<0 ){
30799:     if( islockfile ){
30800:       return SQLITE_BUSY;
30801:     }
30802:     switch (terrno) {
30803:       case EACCES:
30804:         return SQLITE_PERM;
30805:       case EIO: 
30806:         return SQLITE_IOERR_LOCK; /* even though it is the conch */
30807:       default:
30808:         return SQLITE_CANTOPEN_BKPT;
30809:     }
30810:   }
30811:   
30812:   pNew = (unixFile *)sqlite3_malloc(sizeof(*pNew));
30813:   if( pNew==NULL ){
30814:     rc = SQLITE_NOMEM;
30815:     goto end_create_proxy;
30816:   }
30817:   memset(pNew, 0, sizeof(unixFile));
30818:   pNew->openFlags = openFlags;
30819:   memset(&dummyVfs, 0, sizeof(dummyVfs));
30820:   dummyVfs.pAppData = (void*)&autolockIoFinder;
30821:   dummyVfs.zName = "dummy";
30822:   pUnused->fd = fd;
30823:   pUnused->flags = openFlags;
30824:   pNew->pUnused = pUnused;
30825:   
30826:   rc = fillInUnixFile(&dummyVfs, fd, (sqlite3_file*)pNew, path, 0);
30827:   if( rc==SQLITE_OK ){
30828:     *ppFile = pNew;
30829:     return SQLITE_OK;
30830:   }
30831: end_create_proxy:    
30832:   robust_close(pNew, fd, __LINE__);
30833:   sqlite3_free(pNew);
30834:   sqlite3_free(pUnused);
30835:   return rc;
30836: }
30837: 
30838: #ifdef SQLITE_TEST
30839: /* simulate multiple hosts by creating unique hostid file paths */
30840: SQLITE_API int sqlite3_hostid_num = 0;
30841: #endif
30842: 
30843: #define PROXY_HOSTIDLEN    16  /* conch file host id length */
30844: 
30845: /* Not always defined in the headers as it ought to be */
30846: extern int gethostuuid(uuid_t id, const struct timespec *wait);
30847: 
30848: /* get the host ID via gethostuuid(), pHostID must point to PROXY_HOSTIDLEN 
30849: ** bytes of writable memory.
30850: */
30851: static int proxyGetHostID(unsigned char *pHostID, int *pError){
30852:   assert(PROXY_HOSTIDLEN == sizeof(uuid_t));
30853:   memset(pHostID, 0, PROXY_HOSTIDLEN);
30854: #if defined(__MAX_OS_X_VERSION_MIN_REQUIRED)\
30855:                && __MAC_OS_X_VERSION_MIN_REQUIRED<1050
30856:   {
30857:     static const struct timespec timeout = {1, 0}; /* 1 sec timeout */
30858:     if( gethostuuid(pHostID, &timeout) ){
30859:       int err = errno;
30860:       if( pError ){
30861:         *pError = err;
30862:       }
30863:       return SQLITE_IOERR;
30864:     }
30865:   }
30866: #else
30867:   UNUSED_PARAMETER(pError);
30868: #endif
30869: #ifdef SQLITE_TEST
30870:   /* simulate multiple hosts by creating unique hostid file paths */
30871:   if( sqlite3_hostid_num != 0){
30872:     pHostID[0] = (char)(pHostID[0] + (char)(sqlite3_hostid_num & 0xFF));
30873:   }
30874: #endif
30875:   
30876:   return SQLITE_OK;
30877: }
30878: 
30879: /* The conch file contains the header, host id and lock file path
30880:  */
30881: #define PROXY_CONCHVERSION 2   /* 1-byte header, 16-byte host id, path */
30882: #define PROXY_HEADERLEN    1   /* conch file header length */
30883: #define PROXY_PATHINDEX    (PROXY_HEADERLEN+PROXY_HOSTIDLEN)
30884: #define PROXY_MAXCONCHLEN  (PROXY_HEADERLEN+PROXY_HOSTIDLEN+MAXPATHLEN)
30885: 
30886: /* 
30887: ** Takes an open conch file, copies the contents to a new path and then moves 
30888: ** it back.  The newly created file's file descriptor is assigned to the
30889: ** conch file structure and finally the original conch file descriptor is 
30890: ** closed.  Returns zero if successful.
30891: */
30892: static int proxyBreakConchLock(unixFile *pFile, uuid_t myHostID){
30893:   proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; 
30894:   unixFile *conchFile = pCtx->conchFile;
30895:   char tPath[MAXPATHLEN];
30896:   char buf[PROXY_MAXCONCHLEN];
30897:   char *cPath = pCtx->conchFilePath;
30898:   size_t readLen = 0;
30899:   size_t pathLen = 0;
30900:   char errmsg[64] = "";
30901:   int fd = -1;
30902:   int rc = -1;
30903:   UNUSED_PARAMETER(myHostID);
30904: 
30905:   /* create a new path by replace the trailing '-conch' with '-break' */
30906:   pathLen = strlcpy(tPath, cPath, MAXPATHLEN);
30907:   if( pathLen>MAXPATHLEN || pathLen<6 || 
30908:      (strlcpy(&tPath[pathLen-5], "break", 6) != 5) ){
30909:     sqlite3_snprintf(sizeof(errmsg),errmsg,"path error (len %d)",(int)pathLen);
30910:     goto end_breaklock;
30911:   }
30912:   /* read the conch content */
30913:   readLen = osPread(conchFile->h, buf, PROXY_MAXCONCHLEN, 0);
30914:   if( readLen<PROXY_PATHINDEX ){
30915:     sqlite3_snprintf(sizeof(errmsg),errmsg,"read error (len %d)",(int)readLen);
30916:     goto end_breaklock;
30917:   }
30918:   /* write it out to the temporary break file */
30919:   fd = robust_open(tPath, (O_RDWR|O_CREAT|O_EXCL),
30920:                    SQLITE_DEFAULT_FILE_PERMISSIONS);
30921:   if( fd<0 ){
30922:     sqlite3_snprintf(sizeof(errmsg), errmsg, "create failed (%d)", errno);
30923:     goto end_breaklock;
30924:   }
30925:   if( osPwrite(fd, buf, readLen, 0) != (ssize_t)readLen ){
30926:     sqlite3_snprintf(sizeof(errmsg), errmsg, "write failed (%d)", errno);
30927:     goto end_breaklock;
30928:   }
30929:   if( rename(tPath, cPath) ){
30930:     sqlite3_snprintf(sizeof(errmsg), errmsg, "rename failed (%d)", errno);
30931:     goto end_breaklock;
30932:   }
30933:   rc = 0;
30934:   fprintf(stderr, "broke stale lock on %s\n", cPath);
30935:   robust_close(pFile, conchFile->h, __LINE__);
30936:   conchFile->h = fd;
30937:   conchFile->openFlags = O_RDWR | O_CREAT;
30938: 
30939: end_breaklock:
30940:   if( rc ){
30941:     if( fd>=0 ){
30942:       osUnlink(tPath);
30943:       robust_close(pFile, fd, __LINE__);
30944:     }
30945:     fprintf(stderr, "failed to break stale lock on %s, %s\n", cPath, errmsg);
30946:   }
30947:   return rc;
30948: }
30949: 
30950: /* Take the requested lock on the conch file and break a stale lock if the 
30951: ** host id matches.
30952: */
30953: static int proxyConchLock(unixFile *pFile, uuid_t myHostID, int lockType){
30954:   proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; 
30955:   unixFile *conchFile = pCtx->conchFile;
30956:   int rc = SQLITE_OK;
30957:   int nTries = 0;
30958:   struct timespec conchModTime;
30959:   
30960:   memset(&conchModTime, 0, sizeof(conchModTime));
30961:   do {
30962:     rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType);
30963:     nTries ++;
30964:     if( rc==SQLITE_BUSY ){
30965:       /* If the lock failed (busy):
30966:        * 1st try: get the mod time of the conch, wait 0.5s and try again. 
30967:        * 2nd try: fail if the mod time changed or host id is different, wait 
30968:        *           10 sec and try again
30969:        * 3rd try: break the lock unless the mod time has changed.
30970:        */
30971:       struct stat buf;
30972:       if( osFstat(conchFile->h, &buf) ){
30973:         pFile->lastErrno = errno;
30974:         return SQLITE_IOERR_LOCK;
30975:       }
30976:       
30977:       if( nTries==1 ){
30978:         conchModTime = buf.st_mtimespec;
30979:         usleep(500000); /* wait 0.5 sec and try the lock again*/
30980:         continue;  
30981:       }
30982: 
30983:       assert( nTries>1 );
30984:       if( conchModTime.tv_sec != buf.st_mtimespec.tv_sec || 
30985:          conchModTime.tv_nsec != buf.st_mtimespec.tv_nsec ){
30986:         return SQLITE_BUSY;
30987:       }
30988:       
30989:       if( nTries==2 ){  
30990:         char tBuf[PROXY_MAXCONCHLEN];
30991:         int len = osPread(conchFile->h, tBuf, PROXY_MAXCONCHLEN, 0);
30992:         if( len<0 ){
30993:           pFile->lastErrno = errno;
30994:           return SQLITE_IOERR_LOCK;
30995:         }
30996:         if( len>PROXY_PATHINDEX && tBuf[0]==(char)PROXY_CONCHVERSION){
30997:           /* don't break the lock if the host id doesn't match */
30998:           if( 0!=memcmp(&tBuf[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN) ){
30999:             return SQLITE_BUSY;
31000:           }
31001:         }else{
31002:           /* don't break the lock on short read or a version mismatch */
31003:           return SQLITE_BUSY;
31004:         }
31005:         usleep(10000000); /* wait 10 sec and try the lock again */
31006:         continue; 
31007:       }
31008:       
31009:       assert( nTries==3 );
31010:       if( 0==proxyBreakConchLock(pFile, myHostID) ){
31011:         rc = SQLITE_OK;
31012:         if( lockType==EXCLUSIVE_LOCK ){
31013:           rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, SHARED_LOCK);          
31014:         }
31015:         if( !rc ){
31016:           rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType);
31017:         }
31018:       }
31019:     }
31020:   } while( rc==SQLITE_BUSY && nTries<3 );
31021:   
31022:   return rc;
31023: }
31024: 
31025: /* Takes the conch by taking a shared lock and read the contents conch, if 
31026: ** lockPath is non-NULL, the host ID and lock file path must match.  A NULL 
31027: ** lockPath means that the lockPath in the conch file will be used if the 
31028: ** host IDs match, or a new lock path will be generated automatically 
31029: ** and written to the conch file.
31030: */
31031: static int proxyTakeConch(unixFile *pFile){
31032:   proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; 
31033:   
31034:   if( pCtx->conchHeld!=0 ){
31035:     return SQLITE_OK;
31036:   }else{
31037:     unixFile *conchFile = pCtx->conchFile;
31038:     uuid_t myHostID;
31039:     int pError = 0;
31040:     char readBuf[PROXY_MAXCONCHLEN];
31041:     char lockPath[MAXPATHLEN];
31042:     char *tempLockPath = NULL;
31043:     int rc = SQLITE_OK;
31044:     int createConch = 0;
31045:     int hostIdMatch = 0;
31046:     int readLen = 0;
31047:     int tryOldLockPath = 0;
31048:     int forceNewLockPath = 0;
31049:     
31050:     OSTRACE(("TAKECONCH  %d for %s pid=%d\n", conchFile->h,
31051:              (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), getpid()));
31052: 
31053:     rc = proxyGetHostID(myHostID, &pError);
31054:     if( (rc&0xff)==SQLITE_IOERR ){
31055:       pFile->lastErrno = pError;
31056:       goto end_takeconch;
31057:     }
31058:     rc = proxyConchLock(pFile, myHostID, SHARED_LOCK);
31059:     if( rc!=SQLITE_OK ){
31060:       goto end_takeconch;
31061:     }
31062:     /* read the existing conch file */
31063:     readLen = seekAndRead((unixFile*)conchFile, 0, readBuf, PROXY_MAXCONCHLEN);
31064:     if( readLen<0 ){
31065:       /* I/O error: lastErrno set by seekAndRead */
31066:       pFile->lastErrno = conchFile->lastErrno;
31067:       rc = SQLITE_IOERR_READ;
31068:       goto end_takeconch;
31069:     }else if( readLen<=(PROXY_HEADERLEN+PROXY_HOSTIDLEN) || 
31070:              readBuf[0]!=(char)PROXY_CONCHVERSION ){
31071:       /* a short read or version format mismatch means we need to create a new 
31072:       ** conch file. 
31073:       */
31074:       createConch = 1;
31075:     }
31076:     /* if the host id matches and the lock path already exists in the conch
31077:     ** we'll try to use the path there, if we can't open that path, we'll 
31078:     ** retry with a new auto-generated path 
31079:     */
31080:     do { /* in case we need to try again for an :auto: named lock file */
31081: 
31082:       if( !createConch && !forceNewLockPath ){
31083:         hostIdMatch = !memcmp(&readBuf[PROXY_HEADERLEN], myHostID, 
31084:                                   PROXY_HOSTIDLEN);
31085:         /* if the conch has data compare the contents */
31086:         if( !pCtx->lockProxyPath ){
31087:           /* for auto-named local lock file, just check the host ID and we'll
31088:            ** use the local lock file path that's already in there
31089:            */
31090:           if( hostIdMatch ){
31091:             size_t pathLen = (readLen - PROXY_PATHINDEX);
31092:             
31093:             if( pathLen>=MAXPATHLEN ){
31094:               pathLen=MAXPATHLEN-1;
31095:             }
31096:             memcpy(lockPath, &readBuf[PROXY_PATHINDEX], pathLen);
31097:             lockPath[pathLen] = 0;
31098:             tempLockPath = lockPath;
31099:             tryOldLockPath = 1;
31100:             /* create a copy of the lock path if the conch is taken */
31101:             goto end_takeconch;
31102:           }
31103:         }else if( hostIdMatch
31104:                && !strncmp(pCtx->lockProxyPath, &readBuf[PROXY_PATHINDEX],
31105:                            readLen-PROXY_PATHINDEX)
31106:         ){
31107:           /* conch host and lock path match */
31108:           goto end_takeconch; 
31109:         }
31110:       }
31111:       
31112:       /* if the conch isn't writable and doesn't match, we can't take it */
31113:       if( (conchFile->openFlags&O_RDWR) == 0 ){
31114:         rc = SQLITE_BUSY;
31115:         goto end_takeconch;
31116:       }
31117:       
31118:       /* either the conch didn't match or we need to create a new one */
31119:       if( !pCtx->lockProxyPath ){
31120:         proxyGetLockPath(pCtx->dbPath, lockPath, MAXPATHLEN);
31121:         tempLockPath = lockPath;
31122:         /* create a copy of the lock path _only_ if the conch is taken */
31123:       }
31124:       
31125:       /* update conch with host and path (this will fail if other process
31126:       ** has a shared lock already), if the host id matches, use the big
31127:       ** stick.
31128:       */
31129:       futimes(conchFile->h, NULL);
31130:       if( hostIdMatch && !createConch ){
31131:         if( conchFile->pInode && conchFile->pInode->nShared>1 ){
31132:           /* We are trying for an exclusive lock but another thread in this
31133:            ** same process is still holding a shared lock. */
31134:           rc = SQLITE_BUSY;
31135:         } else {          
31136:           rc = proxyConchLock(pFile, myHostID, EXCLUSIVE_LOCK);
31137:         }
31138:       }else{
31139:         rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, EXCLUSIVE_LOCK);
31140:       }
31141:       if( rc==SQLITE_OK ){
31142:         char writeBuffer[PROXY_MAXCONCHLEN];
31143:         int writeSize = 0;
31144:         
31145:         writeBuffer[0] = (char)PROXY_CONCHVERSION;
31146:         memcpy(&writeBuffer[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN);
31147:         if( pCtx->lockProxyPath!=NULL ){
31148:           strlcpy(&writeBuffer[PROXY_PATHINDEX], pCtx->lockProxyPath, MAXPATHLEN);
31149:         }else{
31150:           strlcpy(&writeBuffer[PROXY_PATHINDEX], tempLockPath, MAXPATHLEN);
31151:         }
31152:         writeSize = PROXY_PATHINDEX + strlen(&writeBuffer[PROXY_PATHINDEX]);
31153:         robust_ftruncate(conchFile->h, writeSize);
31154:         rc = unixWrite((sqlite3_file *)conchFile, writeBuffer, writeSize, 0);
31155:         fsync(conchFile->h);
31156:         /* If we created a new conch file (not just updated the contents of a 
31157:          ** valid conch file), try to match the permissions of the database 
31158:          */
31159:         if( rc==SQLITE_OK && createConch ){
31160:           struct stat buf;
31161:           int err = osFstat(pFile->h, &buf);
31162:           if( err==0 ){
31163:             mode_t cmode = buf.st_mode&(S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP |
31164:                                         S_IROTH|S_IWOTH);
31165:             /* try to match the database file R/W permissions, ignore failure */
31166: #ifndef SQLITE_PROXY_DEBUG
31167:             osFchmod(conchFile->h, cmode);
31168: #else
31169:             do{
31170:               rc = osFchmod(conchFile->h, cmode);
31171:             }while( rc==(-1) && errno==EINTR );
31172:             if( rc!=0 ){
31173:               int code = errno;
31174:               fprintf(stderr, "fchmod %o FAILED with %d %s\n",
31175:                       cmode, code, strerror(code));
31176:             } else {
31177:               fprintf(stderr, "fchmod %o SUCCEDED\n",cmode);
31178:             }
31179:           }else{
31180:             int code = errno;
31181:             fprintf(stderr, "STAT FAILED[%d] with %d %s\n", 
31182:                     err, code, strerror(code));
31183: #endif
31184:           }
31185:         }
31186:       }
31187:       conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, SHARED_LOCK);
31188:       
31189:     end_takeconch:
31190:       OSTRACE(("TRANSPROXY: CLOSE  %d\n", pFile->h));
31191:       if( rc==SQLITE_OK && pFile->openFlags ){
31192:         int fd;
31193:         if( pFile->h>=0 ){
31194:           robust_close(pFile, pFile->h, __LINE__);
31195:         }
31196:         pFile->h = -1;
31197:         fd = robust_open(pCtx->dbPath, pFile->openFlags,
31198:                       SQLITE_DEFAULT_FILE_PERMISSIONS);
31199:         OSTRACE(("TRANSPROXY: OPEN  %d\n", fd));
31200:         if( fd>=0 ){
31201:           pFile->h = fd;
31202:         }else{
31203:           rc=SQLITE_CANTOPEN_BKPT; /* SQLITE_BUSY? proxyTakeConch called
31204:            during locking */
31205:         }
31206:       }
31207:       if( rc==SQLITE_OK && !pCtx->lockProxy ){
31208:         char *path = tempLockPath ? tempLockPath : pCtx->lockProxyPath;
31209:         rc = proxyCreateUnixFile(path, &pCtx->lockProxy, 1);
31210:         if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM && tryOldLockPath ){
31211:           /* we couldn't create the proxy lock file with the old lock file path
31212:            ** so try again via auto-naming 
31213:            */
31214:           forceNewLockPath = 1;
31215:           tryOldLockPath = 0;
31216:           continue; /* go back to the do {} while start point, try again */
31217:         }
31218:       }
31219:       if( rc==SQLITE_OK ){
31220:         /* Need to make a copy of path if we extracted the value
31221:          ** from the conch file or the path was allocated on the stack
31222:          */
31223:         if( tempLockPath ){
31224:           pCtx->lockProxyPath = sqlite3DbStrDup(0, tempLockPath);
31225:           if( !pCtx->lockProxyPath ){
31226:             rc = SQLITE_NOMEM;
31227:           }
31228:         }
31229:       }
31230:       if( rc==SQLITE_OK ){
31231:         pCtx->conchHeld = 1;
31232:         
31233:         if( pCtx->lockProxy->pMethod == &afpIoMethods ){
31234:           afpLockingContext *afpCtx;
31235:           afpCtx = (afpLockingContext *)pCtx->lockProxy->lockingContext;
31236:           afpCtx->dbPath = pCtx->lockProxyPath;
31237:         }
31238:       } else {
31239:         conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK);
31240:       }
31241:       OSTRACE(("TAKECONCH  %d %s\n", conchFile->h,
31242:                rc==SQLITE_OK?"ok":"failed"));
31243:       return rc;
31244:     } while (1); /* in case we need to retry the :auto: lock file - 
31245:                  ** we should never get here except via the 'continue' call. */
31246:   }
31247: }
31248: 
31249: /*
31250: ** If pFile holds a lock on a conch file, then release that lock.
31251: */
31252: static int proxyReleaseConch(unixFile *pFile){
31253:   int rc = SQLITE_OK;         /* Subroutine return code */
31254:   proxyLockingContext *pCtx;  /* The locking context for the proxy lock */
31255:   unixFile *conchFile;        /* Name of the conch file */
31256: 
31257:   pCtx = (proxyLockingContext *)pFile->lockingContext;
31258:   conchFile = pCtx->conchFile;
31259:   OSTRACE(("RELEASECONCH  %d for %s pid=%d\n", conchFile->h,
31260:            (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), 
31261:            getpid()));
31262:   if( pCtx->conchHeld>0 ){
31263:     rc = conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK);
31264:   }
31265:   pCtx->conchHeld = 0;
31266:   OSTRACE(("RELEASECONCH  %d %s\n", conchFile->h,
31267:            (rc==SQLITE_OK ? "ok" : "failed")));
31268:   return rc;
31269: }
31270: 
31271: /*
31272: ** Given the name of a database file, compute the name of its conch file.
31273: ** Store the conch filename in memory obtained from sqlite3_malloc().
31274: ** Make *pConchPath point to the new name.  Return SQLITE_OK on success
31275: ** or SQLITE_NOMEM if unable to obtain memory.
31276: **
31277: ** The caller is responsible for ensuring that the allocated memory
31278: ** space is eventually freed.
31279: **
31280: ** *pConchPath is set to NULL if a memory allocation error occurs.
31281: */
31282: static int proxyCreateConchPathname(char *dbPath, char **pConchPath){
31283:   int i;                        /* Loop counter */
31284:   int len = (int)strlen(dbPath); /* Length of database filename - dbPath */
31285:   char *conchPath;              /* buffer in which to construct conch name */
31286: 
31287:   /* Allocate space for the conch filename and initialize the name to
31288:   ** the name of the original database file. */  
31289:   *pConchPath = conchPath = (char *)sqlite3_malloc(len + 8);
31290:   if( conchPath==0 ){
31291:     return SQLITE_NOMEM;
31292:   }
31293:   memcpy(conchPath, dbPath, len+1);
31294:   
31295:   /* now insert a "." before the last / character */
31296:   for( i=(len-1); i>=0; i-- ){
31297:     if( conchPath[i]=='/' ){
31298:       i++;
31299:       break;
31300:     }
31301:   }
31302:   conchPath[i]='.';
31303:   while ( i<len ){
31304:     conchPath[i+1]=dbPath[i];
31305:     i++;
31306:   }
31307: 
31308:   /* append the "-conch" suffix to the file */
31309:   memcpy(&conchPath[i+1], "-conch", 7);
31310:   assert( (int)strlen(conchPath) == len+7 );
31311: 
31312:   return SQLITE_OK;
31313: }
31314: 
31315: 
31316: /* Takes a fully configured proxy locking-style unix file and switches
31317: ** the local lock file path 
31318: */
31319: static int switchLockProxyPath(unixFile *pFile, const char *path) {
31320:   proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext;
31321:   char *oldPath = pCtx->lockProxyPath;
31322:   int rc = SQLITE_OK;
31323: 
31324:   if( pFile->eFileLock!=NO_LOCK ){
31325:     return SQLITE_BUSY;
31326:   }  
31327: 
31328:   /* nothing to do if the path is NULL, :auto: or matches the existing path */
31329:   if( !path || path[0]=='\0' || !strcmp(path, ":auto:") ||
31330:     (oldPath && !strncmp(oldPath, path, MAXPATHLEN)) ){
31331:     return SQLITE_OK;
31332:   }else{
31333:     unixFile *lockProxy = pCtx->lockProxy;
31334:     pCtx->lockProxy=NULL;
31335:     pCtx->conchHeld = 0;
31336:     if( lockProxy!=NULL ){
31337:       rc=lockProxy->pMethod->xClose((sqlite3_file *)lockProxy);
31338:       if( rc ) return rc;
31339:       sqlite3_free(lockProxy);
31340:     }
31341:     sqlite3_free(oldPath);
31342:     pCtx->lockProxyPath = sqlite3DbStrDup(0, path);
31343:   }
31344:   
31345:   return rc;
31346: }
31347: 
31348: /*
31349: ** pFile is a file that has been opened by a prior xOpen call.  dbPath
31350: ** is a string buffer at least MAXPATHLEN+1 characters in size.
31351: **
31352: ** This routine find the filename associated with pFile and writes it
31353: ** int dbPath.
31354: */
31355: static int proxyGetDbPathForUnixFile(unixFile *pFile, char *dbPath){
31356: #if defined(__APPLE__)
31357:   if( pFile->pMethod == &afpIoMethods ){
31358:     /* afp style keeps a reference to the db path in the filePath field 
31359:     ** of the struct */
31360:     assert( (int)strlen((char*)pFile->lockingContext)<=MAXPATHLEN );
31361:     strlcpy(dbPath, ((afpLockingContext *)pFile->lockingContext)->dbPath, MAXPATHLEN);
31362:   } else
31363: #endif
31364:   if( pFile->pMethod == &dotlockIoMethods ){
31365:     /* dot lock style uses the locking context to store the dot lock
31366:     ** file path */
31367:     int len = strlen((char *)pFile->lockingContext) - strlen(DOTLOCK_SUFFIX);
31368:     memcpy(dbPath, (char *)pFile->lockingContext, len + 1);
31369:   }else{
31370:     /* all other styles use the locking context to store the db file path */
31371:     assert( strlen((char*)pFile->lockingContext)<=MAXPATHLEN );
31372:     strlcpy(dbPath, (char *)pFile->lockingContext, MAXPATHLEN);
31373:   }
31374:   return SQLITE_OK;
31375: }
31376: 
31377: /*
31378: ** Takes an already filled in unix file and alters it so all file locking 
31379: ** will be performed on the local proxy lock file.  The following fields
31380: ** are preserved in the locking context so that they can be restored and 
31381: ** the unix structure properly cleaned up at close time:
31382: **  ->lockingContext
31383: **  ->pMethod
31384: */
31385: static int proxyTransformUnixFile(unixFile *pFile, const char *path) {
31386:   proxyLockingContext *pCtx;
31387:   char dbPath[MAXPATHLEN+1];       /* Name of the database file */
31388:   char *lockPath=NULL;
31389:   int rc = SQLITE_OK;
31390:   
31391:   if( pFile->eFileLock!=NO_LOCK ){
31392:     return SQLITE_BUSY;
31393:   }
31394:   proxyGetDbPathForUnixFile(pFile, dbPath);
31395:   if( !path || path[0]=='\0' || !strcmp(path, ":auto:") ){
31396:     lockPath=NULL;
31397:   }else{
31398:     lockPath=(char *)path;
31399:   }
31400:   
31401:   OSTRACE(("TRANSPROXY  %d for %s pid=%d\n", pFile->h,
31402:            (lockPath ? lockPath : ":auto:"), getpid()));
31403: 
31404:   pCtx = sqlite3_malloc( sizeof(*pCtx) );
31405:   if( pCtx==0 ){
31406:     return SQLITE_NOMEM;
31407:   }
31408:   memset(pCtx, 0, sizeof(*pCtx));
31409: 
31410:   rc = proxyCreateConchPathname(dbPath, &pCtx->conchFilePath);
31411:   if( rc==SQLITE_OK ){
31412:     rc = proxyCreateUnixFile(pCtx->conchFilePath, &pCtx->conchFile, 0);
31413:     if( rc==SQLITE_CANTOPEN && ((pFile->openFlags&O_RDWR) == 0) ){
31414:       /* if (a) the open flags are not O_RDWR, (b) the conch isn't there, and
31415:       ** (c) the file system is read-only, then enable no-locking access.
31416:       ** Ugh, since O_RDONLY==0x0000 we test for !O_RDWR since unixOpen asserts
31417:       ** that openFlags will have only one of O_RDONLY or O_RDWR.
31418:       */
31419:       struct statfs fsInfo;
31420:       struct stat conchInfo;
31421:       int goLockless = 0;
31422: 
31423:       if( osStat(pCtx->conchFilePath, &conchInfo) == -1 ) {
31424:         int err = errno;
31425:         if( (err==ENOENT) && (statfs(dbPath, &fsInfo) != -1) ){
31426:           goLockless = (fsInfo.f_flags&MNT_RDONLY) == MNT_RDONLY;
31427:         }
31428:       }
31429:       if( goLockless ){
31430:         pCtx->conchHeld = -1; /* read only FS/ lockless */
31431:         rc = SQLITE_OK;
31432:       }
31433:     }
31434:   }  
31435:   if( rc==SQLITE_OK && lockPath ){
31436:     pCtx->lockProxyPath = sqlite3DbStrDup(0, lockPath);
31437:   }
31438: 
31439:   if( rc==SQLITE_OK ){
31440:     pCtx->dbPath = sqlite3DbStrDup(0, dbPath);
31441:     if( pCtx->dbPath==NULL ){
31442:       rc = SQLITE_NOMEM;
31443:     }
31444:   }
31445:   if( rc==SQLITE_OK ){
31446:     /* all memory is allocated, proxys are created and assigned, 
31447:     ** switch the locking context and pMethod then return.
31448:     */
31449:     pCtx->oldLockingContext = pFile->lockingContext;
31450:     pFile->lockingContext = pCtx;
31451:     pCtx->pOldMethod = pFile->pMethod;
31452:     pFile->pMethod = &proxyIoMethods;
31453:   }else{
31454:     if( pCtx->conchFile ){ 
31455:       pCtx->conchFile->pMethod->xClose((sqlite3_file *)pCtx->conchFile);
31456:       sqlite3_free(pCtx->conchFile);
31457:     }
31458:     sqlite3DbFree(0, pCtx->lockProxyPath);
31459:     sqlite3_free(pCtx->conchFilePath); 
31460:     sqlite3_free(pCtx);
31461:   }
31462:   OSTRACE(("TRANSPROXY  %d %s\n", pFile->h,
31463:            (rc==SQLITE_OK ? "ok" : "failed")));
31464:   return rc;
31465: }
31466: 
31467: 
31468: /*
31469: ** This routine handles sqlite3_file_control() calls that are specific
31470: ** to proxy locking.
31471: */
31472: static int proxyFileControl(sqlite3_file *id, int op, void *pArg){
31473:   switch( op ){
31474:     case SQLITE_GET_LOCKPROXYFILE: {
31475:       unixFile *pFile = (unixFile*)id;
31476:       if( pFile->pMethod == &proxyIoMethods ){
31477:         proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext;
31478:         proxyTakeConch(pFile);
31479:         if( pCtx->lockProxyPath ){
31480:           *(const char **)pArg = pCtx->lockProxyPath;
31481:         }else{
31482:           *(const char **)pArg = ":auto: (not held)";
31483:         }
31484:       } else {
31485:         *(const char **)pArg = NULL;
31486:       }
31487:       return SQLITE_OK;
31488:     }
31489:     case SQLITE_SET_LOCKPROXYFILE: {
31490:       unixFile *pFile = (unixFile*)id;
31491:       int rc = SQLITE_OK;
31492:       int isProxyStyle = (pFile->pMethod == &proxyIoMethods);
31493:       if( pArg==NULL || (const char *)pArg==0 ){
31494:         if( isProxyStyle ){
31495:           /* turn off proxy locking - not supported */
31496:           rc = SQLITE_ERROR /*SQLITE_PROTOCOL? SQLITE_MISUSE?*/;
31497:         }else{
31498:           /* turn off proxy locking - already off - NOOP */
31499:           rc = SQLITE_OK;
31500:         }
31501:       }else{
31502:         const char *proxyPath = (const char *)pArg;
31503:         if( isProxyStyle ){
31504:           proxyLockingContext *pCtx = 
31505:             (proxyLockingContext*)pFile->lockingContext;
31506:           if( !strcmp(pArg, ":auto:") 
31507:            || (pCtx->lockProxyPath &&
31508:                !strncmp(pCtx->lockProxyPath, proxyPath, MAXPATHLEN))
31509:           ){
31510:             rc = SQLITE_OK;
31511:           }else{
31512:             rc = switchLockProxyPath(pFile, proxyPath);
31513:           }
31514:         }else{
31515:           /* turn on proxy file locking */
31516:           rc = proxyTransformUnixFile(pFile, proxyPath);
31517:         }
31518:       }
31519:       return rc;
31520:     }
31521:     default: {
31522:       assert( 0 );  /* The call assures that only valid opcodes are sent */
31523:     }
31524:   }
31525:   /*NOTREACHED*/
31526:   return SQLITE_ERROR;
31527: }
31528: 
31529: /*
31530: ** Within this division (the proxying locking implementation) the procedures
31531: ** above this point are all utilities.  The lock-related methods of the
31532: ** proxy-locking sqlite3_io_method object follow.
31533: */
31534: 
31535: 
31536: /*
31537: ** This routine checks if there is a RESERVED lock held on the specified
31538: ** file by this or any other process. If such a lock is held, set *pResOut
31539: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
31540: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
31541: */
31542: static int proxyCheckReservedLock(sqlite3_file *id, int *pResOut) {
31543:   unixFile *pFile = (unixFile*)id;
31544:   int rc = proxyTakeConch(pFile);
31545:   if( rc==SQLITE_OK ){
31546:     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
31547:     if( pCtx->conchHeld>0 ){
31548:       unixFile *proxy = pCtx->lockProxy;
31549:       return proxy->pMethod->xCheckReservedLock((sqlite3_file*)proxy, pResOut);
31550:     }else{ /* conchHeld < 0 is lockless */
31551:       pResOut=0;
31552:     }
31553:   }
31554:   return rc;
31555: }
31556: 
31557: /*
31558: ** Lock the file with the lock specified by parameter eFileLock - one
31559: ** of the following:
31560: **
31561: **     (1) SHARED_LOCK
31562: **     (2) RESERVED_LOCK
31563: **     (3) PENDING_LOCK
31564: **     (4) EXCLUSIVE_LOCK
31565: **
31566: ** Sometimes when requesting one lock state, additional lock states
31567: ** are inserted in between.  The locking might fail on one of the later
31568: ** transitions leaving the lock state different from what it started but
31569: ** still short of its goal.  The following chart shows the allowed
31570: ** transitions and the inserted intermediate states:
31571: **
31572: **    UNLOCKED -> SHARED
31573: **    SHARED -> RESERVED
31574: **    SHARED -> (PENDING) -> EXCLUSIVE
31575: **    RESERVED -> (PENDING) -> EXCLUSIVE
31576: **    PENDING -> EXCLUSIVE
31577: **
31578: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
31579: ** routine to lower a locking level.
31580: */
31581: static int proxyLock(sqlite3_file *id, int eFileLock) {
31582:   unixFile *pFile = (unixFile*)id;
31583:   int rc = proxyTakeConch(pFile);
31584:   if( rc==SQLITE_OK ){
31585:     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
31586:     if( pCtx->conchHeld>0 ){
31587:       unixFile *proxy = pCtx->lockProxy;
31588:       rc = proxy->pMethod->xLock((sqlite3_file*)proxy, eFileLock);
31589:       pFile->eFileLock = proxy->eFileLock;
31590:     }else{
31591:       /* conchHeld < 0 is lockless */
31592:     }
31593:   }
31594:   return rc;
31595: }
31596: 
31597: 
31598: /*
31599: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
31600: ** must be either NO_LOCK or SHARED_LOCK.
31601: **
31602: ** If the locking level of the file descriptor is already at or below
31603: ** the requested locking level, this routine is a no-op.
31604: */
31605: static int proxyUnlock(sqlite3_file *id, int eFileLock) {
31606:   unixFile *pFile = (unixFile*)id;
31607:   int rc = proxyTakeConch(pFile);
31608:   if( rc==SQLITE_OK ){
31609:     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
31610:     if( pCtx->conchHeld>0 ){
31611:       unixFile *proxy = pCtx->lockProxy;
31612:       rc = proxy->pMethod->xUnlock((sqlite3_file*)proxy, eFileLock);
31613:       pFile->eFileLock = proxy->eFileLock;
31614:     }else{
31615:       /* conchHeld < 0 is lockless */
31616:     }
31617:   }
31618:   return rc;
31619: }
31620: 
31621: /*
31622: ** Close a file that uses proxy locks.
31623: */
31624: static int proxyClose(sqlite3_file *id) {
31625:   if( id ){
31626:     unixFile *pFile = (unixFile*)id;
31627:     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
31628:     unixFile *lockProxy = pCtx->lockProxy;
31629:     unixFile *conchFile = pCtx->conchFile;
31630:     int rc = SQLITE_OK;
31631:     
31632:     if( lockProxy ){
31633:       rc = lockProxy->pMethod->xUnlock((sqlite3_file*)lockProxy, NO_LOCK);
31634:       if( rc ) return rc;
31635:       rc = lockProxy->pMethod->xClose((sqlite3_file*)lockProxy);
31636:       if( rc ) return rc;
31637:       sqlite3_free(lockProxy);
31638:       pCtx->lockProxy = 0;
31639:     }
31640:     if( conchFile ){
31641:       if( pCtx->conchHeld ){
31642:         rc = proxyReleaseConch(pFile);
31643:         if( rc ) return rc;
31644:       }
31645:       rc = conchFile->pMethod->xClose((sqlite3_file*)conchFile);
31646:       if( rc ) return rc;
31647:       sqlite3_free(conchFile);
31648:     }
31649:     sqlite3DbFree(0, pCtx->lockProxyPath);
31650:     sqlite3_free(pCtx->conchFilePath);
31651:     sqlite3DbFree(0, pCtx->dbPath);
31652:     /* restore the original locking context and pMethod then close it */
31653:     pFile->lockingContext = pCtx->oldLockingContext;
31654:     pFile->pMethod = pCtx->pOldMethod;
31655:     sqlite3_free(pCtx);
31656:     return pFile->pMethod->xClose(id);
31657:   }
31658:   return SQLITE_OK;
31659: }
31660: 
31661: 
31662: 
31663: #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
31664: /*
31665: ** The proxy locking style is intended for use with AFP filesystems.
31666: ** And since AFP is only supported on MacOSX, the proxy locking is also
31667: ** restricted to MacOSX.
31668: ** 
31669: **
31670: ******************* End of the proxy lock implementation **********************
31671: ******************************************************************************/
31672: 
31673: /*
31674: ** Initialize the operating system interface.
31675: **
31676: ** This routine registers all VFS implementations for unix-like operating
31677: ** systems.  This routine, and the sqlite3_os_end() routine that follows,
31678: ** should be the only routines in this file that are visible from other
31679: ** files.
31680: **
31681: ** This routine is called once during SQLite initialization and by a
31682: ** single thread.  The memory allocation and mutex subsystems have not
31683: ** necessarily been initialized when this routine is called, and so they
31684: ** should not be used.
31685: */
31686: SQLITE_API int sqlite3_os_init(void){ 
31687:   /* 
31688:   ** The following macro defines an initializer for an sqlite3_vfs object.
31689:   ** The name of the VFS is NAME.  The pAppData is a pointer to a pointer
31690:   ** to the "finder" function.  (pAppData is a pointer to a pointer because
31691:   ** silly C90 rules prohibit a void* from being cast to a function pointer
31692:   ** and so we have to go through the intermediate pointer to avoid problems
31693:   ** when compiling with -pedantic-errors on GCC.)
31694:   **
31695:   ** The FINDER parameter to this macro is the name of the pointer to the
31696:   ** finder-function.  The finder-function returns a pointer to the
31697:   ** sqlite_io_methods object that implements the desired locking
31698:   ** behaviors.  See the division above that contains the IOMETHODS
31699:   ** macro for addition information on finder-functions.
31700:   **
31701:   ** Most finders simply return a pointer to a fixed sqlite3_io_methods
31702:   ** object.  But the "autolockIoFinder" available on MacOSX does a little
31703:   ** more than that; it looks at the filesystem type that hosts the 
31704:   ** database file and tries to choose an locking method appropriate for
31705:   ** that filesystem time.
31706:   */
31707:   #define UNIXVFS(VFSNAME, FINDER) {                        \
31708:     3,                    /* iVersion */                    \
31709:     sizeof(unixFile),     /* szOsFile */                    \
31710:     MAX_PATHNAME,         /* mxPathname */                  \
31711:     0,                    /* pNext */                       \
31712:     VFSNAME,              /* zName */                       \
31713:     (void*)&FINDER,       /* pAppData */                    \
31714:     unixOpen,             /* xOpen */                       \
31715:     unixDelete,           /* xDelete */                     \
31716:     unixAccess,           /* xAccess */                     \
31717:     unixFullPathname,     /* xFullPathname */               \
31718:     unixDlOpen,           /* xDlOpen */                     \
31719:     unixDlError,          /* xDlError */                    \
31720:     unixDlSym,            /* xDlSym */                      \
31721:     unixDlClose,          /* xDlClose */                    \
31722:     unixRandomness,       /* xRandomness */                 \
31723:     unixSleep,            /* xSleep */                      \
31724:     unixCurrentTime,      /* xCurrentTime */                \
31725:     unixGetLastError,     /* xGetLastError */               \
31726:     unixCurrentTimeInt64, /* xCurrentTimeInt64 */           \
31727:     unixSetSystemCall,    /* xSetSystemCall */              \
31728:     unixGetSystemCall,    /* xGetSystemCall */              \
31729:     unixNextSystemCall,   /* xNextSystemCall */             \
31730:   }
31731: 
31732:   /*
31733:   ** All default VFSes for unix are contained in the following array.
31734:   **
31735:   ** Note that the sqlite3_vfs.pNext field of the VFS object is modified
31736:   ** by the SQLite core when the VFS is registered.  So the following
31737:   ** array cannot be const.
31738:   */
31739:   static sqlite3_vfs aVfs[] = {
31740: #if SQLITE_ENABLE_LOCKING_STYLE && (OS_VXWORKS || defined(__APPLE__))
31741:     UNIXVFS("unix",          autolockIoFinder ),
31742: #else
31743:     UNIXVFS("unix",          posixIoFinder ),
31744: #endif
31745:     UNIXVFS("unix-none",     nolockIoFinder ),
31746:     UNIXVFS("unix-dotfile",  dotlockIoFinder ),
31747:     UNIXVFS("unix-excl",     posixIoFinder ),
31748: #if OS_VXWORKS
31749:     UNIXVFS("unix-namedsem", semIoFinder ),
31750: #endif
31751: #if SQLITE_ENABLE_LOCKING_STYLE
31752:     UNIXVFS("unix-posix",    posixIoFinder ),
31753: #if !OS_VXWORKS
31754:     UNIXVFS("unix-flock",    flockIoFinder ),
31755: #endif
31756: #endif
31757: #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
31758:     UNIXVFS("unix-afp",      afpIoFinder ),
31759:     UNIXVFS("unix-nfs",      nfsIoFinder ),
31760:     UNIXVFS("unix-proxy",    proxyIoFinder ),
31761: #endif
31762:   };
31763:   unsigned int i;          /* Loop counter */
31764: 
31765:   /* Double-check that the aSyscall[] array has been constructed
31766:   ** correctly.  See ticket [bb3a86e890c8e96ab] */
31767:   assert( ArraySize(aSyscall)==20 );
31768: 
31769:   /* Register all VFSes defined in the aVfs[] array */
31770:   for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
31771:     sqlite3_vfs_register(&aVfs[i], i==0);
31772:   }
31773:   return SQLITE_OK; 
31774: }
31775: 
31776: /*
31777: ** Shutdown the operating system interface.
31778: **
31779: ** Some operating systems might need to do some cleanup in this routine,
31780: ** to release dynamically allocated objects.  But not on unix.
31781: ** This routine is a no-op for unix.
31782: */
31783: SQLITE_API int sqlite3_os_end(void){ 
31784:   return SQLITE_OK; 
31785: }
31786:  
31787: #endif /* SQLITE_OS_UNIX */
31788: 
31789: /************** End of os_unix.c *********************************************/
31790: /************** Begin file os_win.c ******************************************/
31791: /*
31792: ** 2004 May 22
31793: **
31794: ** The author disclaims copyright to this source code.  In place of
31795: ** a legal notice, here is a blessing:
31796: **
31797: **    May you do good and not evil.
31798: **    May you find forgiveness for yourself and forgive others.
31799: **    May you share freely, never taking more than you give.
31800: **
31801: ******************************************************************************
31802: **
31803: ** This file contains code that is specific to Windows.
31804: */
31805: #if SQLITE_OS_WIN               /* This file is used for Windows only */
31806: 
31807: #ifdef __CYGWIN__
31808: # include <sys/cygwin.h>
31809: #endif
31810: 
31811: /*
31812: ** Include code that is common to all os_*.c files
31813: */
31814: /************** Include os_common.h in the middle of os_win.c ****************/
31815: /************** Begin file os_common.h ***************************************/
31816: /*
31817: ** 2004 May 22
31818: **
31819: ** The author disclaims copyright to this source code.  In place of
31820: ** a legal notice, here is a blessing:
31821: **
31822: **    May you do good and not evil.
31823: **    May you find forgiveness for yourself and forgive others.
31824: **    May you share freely, never taking more than you give.
31825: **
31826: ******************************************************************************
31827: **
31828: ** This file contains macros and a little bit of code that is common to
31829: ** all of the platform-specific files (os_*.c) and is #included into those
31830: ** files.
31831: **
31832: ** This file should be #included by the os_*.c files only.  It is not a
31833: ** general purpose header file.
31834: */
31835: #ifndef _OS_COMMON_H_
31836: #define _OS_COMMON_H_
31837: 
31838: /*
31839: ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
31840: ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
31841: ** switch.  The following code should catch this problem at compile-time.
31842: */
31843: #ifdef MEMORY_DEBUG
31844: # error "The MEMORY_DEBUG macro is obsolete.  Use SQLITE_DEBUG instead."
31845: #endif
31846: 
31847: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
31848: # ifndef SQLITE_DEBUG_OS_TRACE
31849: #   define SQLITE_DEBUG_OS_TRACE 0
31850: # endif
31851:   int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
31852: # define OSTRACE(X)          if( sqlite3OSTrace ) sqlite3DebugPrintf X
31853: #else
31854: # define OSTRACE(X)
31855: #endif
31856: 
31857: /*
31858: ** Macros for performance tracing.  Normally turned off.  Only works
31859: ** on i486 hardware.
31860: */
31861: #ifdef SQLITE_PERFORMANCE_TRACE
31862: 
31863: /* 
31864: ** hwtime.h contains inline assembler code for implementing 
31865: ** high-performance timing routines.
31866: */
31867: /************** Include hwtime.h in the middle of os_common.h ****************/
31868: /************** Begin file hwtime.h ******************************************/
31869: /*
31870: ** 2008 May 27
31871: **
31872: ** The author disclaims copyright to this source code.  In place of
31873: ** a legal notice, here is a blessing:
31874: **
31875: **    May you do good and not evil.
31876: **    May you find forgiveness for yourself and forgive others.
31877: **    May you share freely, never taking more than you give.
31878: **
31879: ******************************************************************************
31880: **
31881: ** This file contains inline asm code for retrieving "high-performance"
31882: ** counters for x86 class CPUs.
31883: */
31884: #ifndef _HWTIME_H_
31885: #define _HWTIME_H_
31886: 
31887: /*
31888: ** The following routine only works on pentium-class (or newer) processors.
31889: ** It uses the RDTSC opcode to read the cycle count value out of the
31890: ** processor and returns that value.  This can be used for high-res
31891: ** profiling.
31892: */
31893: #if (defined(__GNUC__) || defined(_MSC_VER)) && \
31894:       (defined(i386) || defined(__i386__) || defined(_M_IX86))
31895: 
31896:   #if defined(__GNUC__)
31897: 
31898:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
31899:      unsigned int lo, hi;
31900:      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
31901:      return (sqlite_uint64)hi << 32 | lo;
31902:   }
31903: 
31904:   #elif defined(_MSC_VER)
31905: 
31906:   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
31907:      __asm {
31908:         rdtsc
31909:         ret       ; return value at EDX:EAX
31910:      }
31911:   }
31912: 
31913:   #endif
31914: 
31915: #elif (defined(__GNUC__) && defined(__x86_64__))
31916: 
31917:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
31918:       unsigned long val;
31919:       __asm__ __volatile__ ("rdtsc" : "=A" (val));
31920:       return val;
31921:   }
31922:  
31923: #elif (defined(__GNUC__) && defined(__ppc__))
31924: 
31925:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
31926:       unsigned long long retval;
31927:       unsigned long junk;
31928:       __asm__ __volatile__ ("\n\
31929:           1:      mftbu   %1\n\
31930:                   mftb    %L0\n\
31931:                   mftbu   %0\n\
31932:                   cmpw    %0,%1\n\
31933:                   bne     1b"
31934:                   : "=r" (retval), "=r" (junk));
31935:       return retval;
31936:   }
31937: 
31938: #else
31939: 
31940:   #error Need implementation of sqlite3Hwtime() for your platform.
31941: 
31942:   /*
31943:   ** To compile without implementing sqlite3Hwtime() for your platform,
31944:   ** you can remove the above #error and use the following
31945:   ** stub function.  You will lose timing support for many
31946:   ** of the debugging and testing utilities, but it should at
31947:   ** least compile and run.
31948:   */
31949: SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
31950: 
31951: #endif
31952: 
31953: #endif /* !defined(_HWTIME_H_) */
31954: 
31955: /************** End of hwtime.h **********************************************/
31956: /************** Continuing where we left off in os_common.h ******************/
31957: 
31958: static sqlite_uint64 g_start;
31959: static sqlite_uint64 g_elapsed;
31960: #define TIMER_START       g_start=sqlite3Hwtime()
31961: #define TIMER_END         g_elapsed=sqlite3Hwtime()-g_start
31962: #define TIMER_ELAPSED     g_elapsed
31963: #else
31964: #define TIMER_START
31965: #define TIMER_END
31966: #define TIMER_ELAPSED     ((sqlite_uint64)0)
31967: #endif
31968: 
31969: /*
31970: ** If we compile with the SQLITE_TEST macro set, then the following block
31971: ** of code will give us the ability to simulate a disk I/O error.  This
31972: ** is used for testing the I/O recovery logic.
31973: */
31974: #ifdef SQLITE_TEST
31975: SQLITE_API int sqlite3_io_error_hit = 0;            /* Total number of I/O Errors */
31976: SQLITE_API int sqlite3_io_error_hardhit = 0;        /* Number of non-benign errors */
31977: SQLITE_API int sqlite3_io_error_pending = 0;        /* Count down to first I/O error */
31978: SQLITE_API int sqlite3_io_error_persist = 0;        /* True if I/O errors persist */
31979: SQLITE_API int sqlite3_io_error_benign = 0;         /* True if errors are benign */
31980: SQLITE_API int sqlite3_diskfull_pending = 0;
31981: SQLITE_API int sqlite3_diskfull = 0;
31982: #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
31983: #define SimulateIOError(CODE)  \
31984:   if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
31985:        || sqlite3_io_error_pending-- == 1 )  \
31986:               { local_ioerr(); CODE; }
31987: static void local_ioerr(){
31988:   IOTRACE(("IOERR\n"));
31989:   sqlite3_io_error_hit++;
31990:   if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
31991: }
31992: #define SimulateDiskfullError(CODE) \
31993:    if( sqlite3_diskfull_pending ){ \
31994:      if( sqlite3_diskfull_pending == 1 ){ \
31995:        local_ioerr(); \
31996:        sqlite3_diskfull = 1; \
31997:        sqlite3_io_error_hit = 1; \
31998:        CODE; \
31999:      }else{ \
32000:        sqlite3_diskfull_pending--; \
32001:      } \
32002:    }
32003: #else
32004: #define SimulateIOErrorBenign(X)
32005: #define SimulateIOError(A)
32006: #define SimulateDiskfullError(A)
32007: #endif
32008: 
32009: /*
32010: ** When testing, keep a count of the number of open files.
32011: */
32012: #ifdef SQLITE_TEST
32013: SQLITE_API int sqlite3_open_file_count = 0;
32014: #define OpenCounter(X)  sqlite3_open_file_count+=(X)
32015: #else
32016: #define OpenCounter(X)
32017: #endif
32018: 
32019: #endif /* !defined(_OS_COMMON_H_) */
32020: 
32021: /************** End of os_common.h *******************************************/
32022: /************** Continuing where we left off in os_win.c *********************/
32023: 
32024: /*
32025: ** Some Microsoft compilers lack this definition.
32026: */
32027: #ifndef INVALID_FILE_ATTRIBUTES
32028: # define INVALID_FILE_ATTRIBUTES ((DWORD)-1) 
32029: #endif
32030: 
32031: /* Forward references */
32032: typedef struct winShm winShm;           /* A connection to shared-memory */
32033: typedef struct winShmNode winShmNode;   /* A region of shared-memory */
32034: 
32035: /*
32036: ** WinCE lacks native support for file locking so we have to fake it
32037: ** with some code of our own.
32038: */
32039: #if SQLITE_OS_WINCE
32040: typedef struct winceLock {
32041:   int nReaders;       /* Number of reader locks obtained */
32042:   BOOL bPending;      /* Indicates a pending lock has been obtained */
32043:   BOOL bReserved;     /* Indicates a reserved lock has been obtained */
32044:   BOOL bExclusive;    /* Indicates an exclusive lock has been obtained */
32045: } winceLock;
32046: #endif
32047: 
32048: /*
32049: ** The winFile structure is a subclass of sqlite3_file* specific to the win32
32050: ** portability layer.
32051: */
32052: typedef struct winFile winFile;
32053: struct winFile {
32054:   const sqlite3_io_methods *pMethod; /*** Must be first ***/
32055:   sqlite3_vfs *pVfs;      /* The VFS used to open this file */
32056:   HANDLE h;               /* Handle for accessing the file */
32057:   u8 locktype;            /* Type of lock currently held on this file */
32058:   short sharedLockByte;   /* Randomly chosen byte used as a shared lock */
32059:   u8 ctrlFlags;           /* Flags.  See WINFILE_* below */
32060:   DWORD lastErrno;        /* The Windows errno from the last I/O error */
32061:   winShm *pShm;           /* Instance of shared memory on this file */
32062:   const char *zPath;      /* Full pathname of this file */
32063:   int szChunk;            /* Chunk size configured by FCNTL_CHUNK_SIZE */
32064: #if SQLITE_OS_WINCE
32065:   LPWSTR zDeleteOnClose;  /* Name of file to delete when closing */
32066:   HANDLE hMutex;          /* Mutex used to control access to shared lock */  
32067:   HANDLE hShared;         /* Shared memory segment used for locking */
32068:   winceLock local;        /* Locks obtained by this instance of winFile */
32069:   winceLock *shared;      /* Global shared lock memory for the file  */
32070: #endif
32071: };
32072: 
32073: /*
32074: ** Allowed values for winFile.ctrlFlags
32075: */
32076: #define WINFILE_PERSIST_WAL     0x04   /* Persistent WAL mode */
32077: #define WINFILE_PSOW            0x10   /* SQLITE_IOCAP_POWERSAFE_OVERWRITE */
32078: 
32079: /*
32080:  * If compiled with SQLITE_WIN32_MALLOC on Windows, we will use the
32081:  * various Win32 API heap functions instead of our own.
32082:  */
32083: #ifdef SQLITE_WIN32_MALLOC
32084: /*
32085:  * The initial size of the Win32-specific heap.  This value may be zero.
32086:  */
32087: #ifndef SQLITE_WIN32_HEAP_INIT_SIZE
32088: #  define SQLITE_WIN32_HEAP_INIT_SIZE ((SQLITE_DEFAULT_CACHE_SIZE) * \
32089:                                        (SQLITE_DEFAULT_PAGE_SIZE) + 4194304)
32090: #endif
32091: 
32092: /*
32093:  * The maximum size of the Win32-specific heap.  This value may be zero.
32094:  */
32095: #ifndef SQLITE_WIN32_HEAP_MAX_SIZE
32096: #  define SQLITE_WIN32_HEAP_MAX_SIZE  (0)
32097: #endif
32098: 
32099: /*
32100:  * The extra flags to use in calls to the Win32 heap APIs.  This value may be
32101:  * zero for the default behavior.
32102:  */
32103: #ifndef SQLITE_WIN32_HEAP_FLAGS
32104: #  define SQLITE_WIN32_HEAP_FLAGS     (0)
32105: #endif
32106: 
32107: /*
32108: ** The winMemData structure stores information required by the Win32-specific
32109: ** sqlite3_mem_methods implementation.
32110: */
32111: typedef struct winMemData winMemData;
32112: struct winMemData {
32113: #ifndef NDEBUG
32114:   u32 magic;    /* Magic number to detect structure corruption. */
32115: #endif
32116:   HANDLE hHeap; /* The handle to our heap. */
32117:   BOOL bOwned;  /* Do we own the heap (i.e. destroy it on shutdown)? */
32118: };
32119: 
32120: #ifndef NDEBUG
32121: #define WINMEM_MAGIC     0x42b2830b
32122: #endif
32123: 
32124: static struct winMemData win_mem_data = {
32125: #ifndef NDEBUG
32126:   WINMEM_MAGIC,
32127: #endif
32128:   NULL, FALSE
32129: };
32130: 
32131: #ifndef NDEBUG
32132: #define winMemAssertMagic() assert( win_mem_data.magic==WINMEM_MAGIC )
32133: #else
32134: #define winMemAssertMagic()
32135: #endif
32136: 
32137: #define winMemGetHeap() win_mem_data.hHeap
32138: 
32139: static void *winMemMalloc(int nBytes);
32140: static void winMemFree(void *pPrior);
32141: static void *winMemRealloc(void *pPrior, int nBytes);
32142: static int winMemSize(void *p);
32143: static int winMemRoundup(int n);
32144: static int winMemInit(void *pAppData);
32145: static void winMemShutdown(void *pAppData);
32146: 
32147: SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void);
32148: #endif /* SQLITE_WIN32_MALLOC */
32149: 
32150: /*
32151: ** The following variable is (normally) set once and never changes
32152: ** thereafter.  It records whether the operating system is Win9x
32153: ** or WinNT.
32154: **
32155: ** 0:   Operating system unknown.
32156: ** 1:   Operating system is Win9x.
32157: ** 2:   Operating system is WinNT.
32158: **
32159: ** In order to facilitate testing on a WinNT system, the test fixture
32160: ** can manually set this value to 1 to emulate Win98 behavior.
32161: */
32162: #ifdef SQLITE_TEST
32163: SQLITE_API int sqlite3_os_type = 0;
32164: #else
32165: static int sqlite3_os_type = 0;
32166: #endif
32167: 
32168: /*
32169: ** Many system calls are accessed through pointer-to-functions so that
32170: ** they may be overridden at runtime to facilitate fault injection during
32171: ** testing and sandboxing.  The following array holds the names and pointers
32172: ** to all overrideable system calls.
32173: */
32174: #if !SQLITE_OS_WINCE
32175: #  define SQLITE_WIN32_HAS_ANSI
32176: #endif
32177: 
32178: #if SQLITE_OS_WINCE || SQLITE_OS_WINNT
32179: #  define SQLITE_WIN32_HAS_WIDE
32180: #endif
32181: 
32182: #ifndef SYSCALL
32183: #  define SYSCALL sqlite3_syscall_ptr
32184: #endif
32185: 
32186: #if SQLITE_OS_WINCE
32187: /*
32188: ** These macros are necessary because Windows CE does not natively support the
32189: ** Win32 APIs LockFile, UnlockFile, and LockFileEx.
32190:  */
32191: 
32192: #  define LockFile(a,b,c,d,e)       winceLockFile(&a, b, c, d, e)
32193: #  define UnlockFile(a,b,c,d,e)     winceUnlockFile(&a, b, c, d, e)
32194: #  define LockFileEx(a,b,c,d,e,f)   winceLockFileEx(&a, b, c, d, e, f)
32195: 
32196: /*
32197: ** These are the special syscall hacks for Windows CE.  The locking related
32198: ** defines here refer to the macros defined just above.
32199:  */
32200: 
32201: #  define osAreFileApisANSI()       1
32202: #  define osLockFile                LockFile
32203: #  define osUnlockFile              UnlockFile
32204: #  define osLockFileEx              LockFileEx
32205: #endif
32206: 
32207: static struct win_syscall {
32208:   const char *zName;            /* Name of the sytem call */
32209:   sqlite3_syscall_ptr pCurrent; /* Current value of the system call */
32210:   sqlite3_syscall_ptr pDefault; /* Default value */
32211: } aSyscall[] = {
32212: #if !SQLITE_OS_WINCE
32213:   { "AreFileApisANSI",         (SYSCALL)AreFileApisANSI,         0 },
32214: 
32215: #define osAreFileApisANSI ((BOOL(WINAPI*)(VOID))aSyscall[0].pCurrent)
32216: #else
32217:   { "AreFileApisANSI",         (SYSCALL)0,                       0 },
32218: #endif
32219: 
32220: #if SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE)
32221:   { "CharLowerW",              (SYSCALL)CharLowerW,              0 },
32222: #else
32223:   { "CharLowerW",              (SYSCALL)0,                       0 },
32224: #endif
32225: 
32226: #define osCharLowerW ((LPWSTR(WINAPI*)(LPWSTR))aSyscall[1].pCurrent)
32227: 
32228: #if SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE)
32229:   { "CharUpperW",              (SYSCALL)CharUpperW,              0 },
32230: #else
32231:   { "CharUpperW",              (SYSCALL)0,                       0 },
32232: #endif
32233: 
32234: #define osCharUpperW ((LPWSTR(WINAPI*)(LPWSTR))aSyscall[2].pCurrent)
32235: 
32236:   { "CloseHandle",             (SYSCALL)CloseHandle,             0 },
32237: 
32238: #define osCloseHandle ((BOOL(WINAPI*)(HANDLE))aSyscall[3].pCurrent)
32239: 
32240: #if defined(SQLITE_WIN32_HAS_ANSI)
32241:   { "CreateFileA",             (SYSCALL)CreateFileA,             0 },
32242: #else
32243:   { "CreateFileA",             (SYSCALL)0,                       0 },
32244: #endif
32245: 
32246: #define osCreateFileA ((HANDLE(WINAPI*)(LPCSTR,DWORD,DWORD, \
32247:         LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[4].pCurrent)
32248: 
32249: #if defined(SQLITE_WIN32_HAS_WIDE)
32250:   { "CreateFileW",             (SYSCALL)CreateFileW,             0 },
32251: #else
32252:   { "CreateFileW",             (SYSCALL)0,                       0 },
32253: #endif
32254: 
32255: #define osCreateFileW ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD, \
32256:         LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[5].pCurrent)
32257: 
32258:   { "CreateFileMapping",       (SYSCALL)CreateFileMapping,       0 },
32259: 
32260: #define osCreateFileMapping ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \
32261:         DWORD,DWORD,DWORD,LPCTSTR))aSyscall[6].pCurrent)
32262: 
32263: #if defined(SQLITE_WIN32_HAS_WIDE)
32264:   { "CreateFileMappingW",      (SYSCALL)CreateFileMappingW,      0 },
32265: #else
32266:   { "CreateFileMappingW",      (SYSCALL)0,                       0 },
32267: #endif
32268: 
32269: #define osCreateFileMappingW ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \
32270:         DWORD,DWORD,DWORD,LPCWSTR))aSyscall[7].pCurrent)
32271: 
32272: #if defined(SQLITE_WIN32_HAS_WIDE)
32273:   { "CreateMutexW",            (SYSCALL)CreateMutexW,            0 },
32274: #else
32275:   { "CreateMutexW",            (SYSCALL)0,                       0 },
32276: #endif
32277: 
32278: #define osCreateMutexW ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES,BOOL, \
32279:         LPCWSTR))aSyscall[8].pCurrent)
32280: 
32281: #if defined(SQLITE_WIN32_HAS_ANSI)
32282:   { "DeleteFileA",             (SYSCALL)DeleteFileA,             0 },
32283: #else
32284:   { "DeleteFileA",             (SYSCALL)0,                       0 },
32285: #endif
32286: 
32287: #define osDeleteFileA ((BOOL(WINAPI*)(LPCSTR))aSyscall[9].pCurrent)
32288: 
32289: #if defined(SQLITE_WIN32_HAS_WIDE)
32290:   { "DeleteFileW",             (SYSCALL)DeleteFileW,             0 },
32291: #else
32292:   { "DeleteFileW",             (SYSCALL)0,                       0 },
32293: #endif
32294: 
32295: #define osDeleteFileW ((BOOL(WINAPI*)(LPCWSTR))aSyscall[10].pCurrent)
32296: 
32297: #if SQLITE_OS_WINCE
32298:   { "FileTimeToLocalFileTime", (SYSCALL)FileTimeToLocalFileTime, 0 },
32299: #else
32300:   { "FileTimeToLocalFileTime", (SYSCALL)0,                       0 },
32301: #endif
32302: 
32303: #define osFileTimeToLocalFileTime ((BOOL(WINAPI*)(CONST FILETIME*, \
32304:         LPFILETIME))aSyscall[11].pCurrent)
32305: 
32306: #if SQLITE_OS_WINCE
32307:   { "FileTimeToSystemTime",    (SYSCALL)FileTimeToSystemTime,    0 },
32308: #else
32309:   { "FileTimeToSystemTime",    (SYSCALL)0,                       0 },
32310: #endif
32311: 
32312: #define osFileTimeToSystemTime ((BOOL(WINAPI*)(CONST FILETIME*, \
32313:         LPSYSTEMTIME))aSyscall[12].pCurrent)
32314: 
32315:   { "FlushFileBuffers",        (SYSCALL)FlushFileBuffers,        0 },
32316: 
32317: #define osFlushFileBuffers ((BOOL(WINAPI*)(HANDLE))aSyscall[13].pCurrent)
32318: 
32319: #if defined(SQLITE_WIN32_HAS_ANSI)
32320:   { "FormatMessageA",          (SYSCALL)FormatMessageA,          0 },
32321: #else
32322:   { "FormatMessageA",          (SYSCALL)0,                       0 },
32323: #endif
32324: 
32325: #define osFormatMessageA ((DWORD(WINAPI*)(DWORD,LPCVOID,DWORD,DWORD,LPSTR, \
32326:         DWORD,va_list*))aSyscall[14].pCurrent)
32327: 
32328: #if defined(SQLITE_WIN32_HAS_WIDE)
32329:   { "FormatMessageW",          (SYSCALL)FormatMessageW,          0 },
32330: #else
32331:   { "FormatMessageW",          (SYSCALL)0,                       0 },
32332: #endif
32333: 
32334: #define osFormatMessageW ((DWORD(WINAPI*)(DWORD,LPCVOID,DWORD,DWORD,LPWSTR, \
32335:         DWORD,va_list*))aSyscall[15].pCurrent)
32336: 
32337:   { "FreeLibrary",             (SYSCALL)FreeLibrary,             0 },
32338: 
32339: #define osFreeLibrary ((BOOL(WINAPI*)(HMODULE))aSyscall[16].pCurrent)
32340: 
32341:   { "GetCurrentProcessId",     (SYSCALL)GetCurrentProcessId,     0 },
32342: 
32343: #define osGetCurrentProcessId ((DWORD(WINAPI*)(VOID))aSyscall[17].pCurrent)
32344: 
32345: #if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_ANSI)
32346:   { "GetDiskFreeSpaceA",       (SYSCALL)GetDiskFreeSpaceA,       0 },
32347: #else
32348:   { "GetDiskFreeSpaceA",       (SYSCALL)0,                       0 },
32349: #endif
32350: 
32351: #define osGetDiskFreeSpaceA ((BOOL(WINAPI*)(LPCSTR,LPDWORD,LPDWORD,LPDWORD, \
32352:         LPDWORD))aSyscall[18].pCurrent)
32353: 
32354: #if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE)
32355:   { "GetDiskFreeSpaceW",       (SYSCALL)GetDiskFreeSpaceW,       0 },
32356: #else
32357:   { "GetDiskFreeSpaceW",       (SYSCALL)0,                       0 },
32358: #endif
32359: 
32360: #define osGetDiskFreeSpaceW ((BOOL(WINAPI*)(LPCWSTR,LPDWORD,LPDWORD,LPDWORD, \
32361:         LPDWORD))aSyscall[19].pCurrent)
32362: 
32363: #if defined(SQLITE_WIN32_HAS_ANSI)
32364:   { "GetFileAttributesA",      (SYSCALL)GetFileAttributesA,      0 },
32365: #else
32366:   { "GetFileAttributesA",      (SYSCALL)0,                       0 },
32367: #endif
32368: 
32369: #define osGetFileAttributesA ((DWORD(WINAPI*)(LPCSTR))aSyscall[20].pCurrent)
32370: 
32371: #if defined(SQLITE_WIN32_HAS_WIDE)
32372:   { "GetFileAttributesW",      (SYSCALL)GetFileAttributesW,      0 },
32373: #else
32374:   { "GetFileAttributesW",      (SYSCALL)0,                       0 },
32375: #endif
32376: 
32377: #define osGetFileAttributesW ((DWORD(WINAPI*)(LPCWSTR))aSyscall[21].pCurrent)
32378: 
32379: #if defined(SQLITE_WIN32_HAS_WIDE)
32380:   { "GetFileAttributesExW",    (SYSCALL)GetFileAttributesExW,    0 },
32381: #else
32382:   { "GetFileAttributesExW",    (SYSCALL)0,                       0 },
32383: #endif
32384: 
32385: #define osGetFileAttributesExW ((BOOL(WINAPI*)(LPCWSTR,GET_FILEEX_INFO_LEVELS, \
32386:         LPVOID))aSyscall[22].pCurrent)
32387: 
32388:   { "GetFileSize",             (SYSCALL)GetFileSize,             0 },
32389: 
32390: #define osGetFileSize ((DWORD(WINAPI*)(HANDLE,LPDWORD))aSyscall[23].pCurrent)
32391: 
32392: #if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_ANSI)
32393:   { "GetFullPathNameA",        (SYSCALL)GetFullPathNameA,        0 },
32394: #else
32395:   { "GetFullPathNameA",        (SYSCALL)0,                       0 },
32396: #endif
32397: 
32398: #define osGetFullPathNameA ((DWORD(WINAPI*)(LPCSTR,DWORD,LPSTR, \
32399:         LPSTR*))aSyscall[24].pCurrent)
32400: 
32401: #if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE)
32402:   { "GetFullPathNameW",        (SYSCALL)GetFullPathNameW,        0 },
32403: #else
32404:   { "GetFullPathNameW",        (SYSCALL)0,                       0 },
32405: #endif
32406: 
32407: #define osGetFullPathNameW ((DWORD(WINAPI*)(LPCWSTR,DWORD,LPWSTR, \
32408:         LPWSTR*))aSyscall[25].pCurrent)
32409: 
32410:   { "GetLastError",            (SYSCALL)GetLastError,            0 },
32411: 
32412: #define osGetLastError ((DWORD(WINAPI*)(VOID))aSyscall[26].pCurrent)
32413: 
32414: #if SQLITE_OS_WINCE
32415:   /* The GetProcAddressA() routine is only available on Windows CE. */
32416:   { "GetProcAddressA",         (SYSCALL)GetProcAddressA,         0 },
32417: #else
32418:   /* All other Windows platforms expect GetProcAddress() to take
32419:   ** an ANSI string regardless of the _UNICODE setting */
32420:   { "GetProcAddressA",         (SYSCALL)GetProcAddress,          0 },
32421: #endif
32422: 
32423: #define osGetProcAddressA ((FARPROC(WINAPI*)(HMODULE, \
32424:         LPCSTR))aSyscall[27].pCurrent)
32425: 
32426:   { "GetSystemInfo",           (SYSCALL)GetSystemInfo,           0 },
32427: 
32428: #define osGetSystemInfo ((VOID(WINAPI*)(LPSYSTEM_INFO))aSyscall[28].pCurrent)
32429: 
32430:   { "GetSystemTime",           (SYSCALL)GetSystemTime,           0 },
32431: 
32432: #define osGetSystemTime ((VOID(WINAPI*)(LPSYSTEMTIME))aSyscall[29].pCurrent)
32433: 
32434: #if !SQLITE_OS_WINCE
32435:   { "GetSystemTimeAsFileTime", (SYSCALL)GetSystemTimeAsFileTime, 0 },
32436: #else
32437:   { "GetSystemTimeAsFileTime", (SYSCALL)0,                       0 },
32438: #endif
32439: 
32440: #define osGetSystemTimeAsFileTime ((VOID(WINAPI*)( \
32441:         LPFILETIME))aSyscall[30].pCurrent)
32442: 
32443: #if defined(SQLITE_WIN32_HAS_ANSI)
32444:   { "GetTempPathA",            (SYSCALL)GetTempPathA,            0 },
32445: #else
32446:   { "GetTempPathA",            (SYSCALL)0,                       0 },
32447: #endif
32448: 
32449: #define osGetTempPathA ((DWORD(WINAPI*)(DWORD,LPSTR))aSyscall[31].pCurrent)
32450: 
32451: #if defined(SQLITE_WIN32_HAS_WIDE)
32452:   { "GetTempPathW",            (SYSCALL)GetTempPathW,            0 },
32453: #else
32454:   { "GetTempPathW",            (SYSCALL)0,                       0 },
32455: #endif
32456: 
32457: #define osGetTempPathW ((DWORD(WINAPI*)(DWORD,LPWSTR))aSyscall[32].pCurrent)
32458: 
32459:   { "GetTickCount",            (SYSCALL)GetTickCount,            0 },
32460: 
32461: #define osGetTickCount ((DWORD(WINAPI*)(VOID))aSyscall[33].pCurrent)
32462: 
32463: #if defined(SQLITE_WIN32_HAS_ANSI)
32464:   { "GetVersionExA",           (SYSCALL)GetVersionExA,           0 },
32465: #else
32466:   { "GetVersionExA",           (SYSCALL)0,                       0 },
32467: #endif
32468: 
32469: #define osGetVersionExA ((BOOL(WINAPI*)( \
32470:         LPOSVERSIONINFOA))aSyscall[34].pCurrent)
32471: 
32472:   { "HeapAlloc",               (SYSCALL)HeapAlloc,               0 },
32473: 
32474: #define osHeapAlloc ((LPVOID(WINAPI*)(HANDLE,DWORD, \
32475:         SIZE_T))aSyscall[35].pCurrent)
32476: 
32477:   { "HeapCreate",              (SYSCALL)HeapCreate,              0 },
32478: 
32479: #define osHeapCreate ((HANDLE(WINAPI*)(DWORD,SIZE_T, \
32480:         SIZE_T))aSyscall[36].pCurrent)
32481: 
32482:   { "HeapDestroy",             (SYSCALL)HeapDestroy,             0 },
32483: 
32484: #define osHeapDestroy ((BOOL(WINAPI*)(HANDLE))aSyscall[37].pCurrent)
32485: 
32486:   { "HeapFree",                (SYSCALL)HeapFree,                0 },
32487: 
32488: #define osHeapFree ((BOOL(WINAPI*)(HANDLE,DWORD,LPVOID))aSyscall[38].pCurrent)
32489: 
32490:   { "HeapReAlloc",             (SYSCALL)HeapReAlloc,             0 },
32491: 
32492: #define osHeapReAlloc ((LPVOID(WINAPI*)(HANDLE,DWORD,LPVOID, \
32493:         SIZE_T))aSyscall[39].pCurrent)
32494: 
32495:   { "HeapSize",                (SYSCALL)HeapSize,                0 },
32496: 
32497: #define osHeapSize ((SIZE_T(WINAPI*)(HANDLE,DWORD, \
32498:         LPCVOID))aSyscall[40].pCurrent)
32499: 
32500:   { "HeapValidate",            (SYSCALL)HeapValidate,            0 },
32501: 
32502: #define osHeapValidate ((BOOL(WINAPI*)(HANDLE,DWORD, \
32503:         LPCVOID))aSyscall[41].pCurrent)
32504: 
32505: #if defined(SQLITE_WIN32_HAS_ANSI)
32506:   { "LoadLibraryA",            (SYSCALL)LoadLibraryA,            0 },
32507: #else
32508:   { "LoadLibraryA",            (SYSCALL)0,                       0 },
32509: #endif
32510: 
32511: #define osLoadLibraryA ((HMODULE(WINAPI*)(LPCSTR))aSyscall[42].pCurrent)
32512: 
32513: #if defined(SQLITE_WIN32_HAS_WIDE)
32514:   { "LoadLibraryW",            (SYSCALL)LoadLibraryW,            0 },
32515: #else
32516:   { "LoadLibraryW",            (SYSCALL)0,                       0 },
32517: #endif
32518: 
32519: #define osLoadLibraryW ((HMODULE(WINAPI*)(LPCWSTR))aSyscall[43].pCurrent)
32520: 
32521:   { "LocalFree",               (SYSCALL)LocalFree,               0 },
32522: 
32523: #define osLocalFree ((HLOCAL(WINAPI*)(HLOCAL))aSyscall[44].pCurrent)
32524: 
32525: #if !SQLITE_OS_WINCE
32526:   { "LockFile",                (SYSCALL)LockFile,                0 },
32527: 
32528: #define osLockFile ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
32529:         DWORD))aSyscall[45].pCurrent)
32530: #else
32531:   { "LockFile",                (SYSCALL)0,                       0 },
32532: #endif
32533: 
32534: #if !SQLITE_OS_WINCE
32535:   { "LockFileEx",              (SYSCALL)LockFileEx,              0 },
32536: 
32537: #define osLockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,DWORD, \
32538:         LPOVERLAPPED))aSyscall[46].pCurrent)
32539: #else
32540:   { "LockFileEx",              (SYSCALL)0,                       0 },
32541: #endif
32542: 
32543:   { "MapViewOfFile",           (SYSCALL)MapViewOfFile,           0 },
32544: 
32545: #define osMapViewOfFile ((LPVOID(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
32546:         SIZE_T))aSyscall[47].pCurrent)
32547: 
32548:   { "MultiByteToWideChar",     (SYSCALL)MultiByteToWideChar,     0 },
32549: 
32550: #define osMultiByteToWideChar ((int(WINAPI*)(UINT,DWORD,LPCSTR,int,LPWSTR, \
32551:         int))aSyscall[48].pCurrent)
32552: 
32553:   { "QueryPerformanceCounter", (SYSCALL)QueryPerformanceCounter, 0 },
32554: 
32555: #define osQueryPerformanceCounter ((BOOL(WINAPI*)( \
32556:         LARGE_INTEGER*))aSyscall[49].pCurrent)
32557: 
32558:   { "ReadFile",                (SYSCALL)ReadFile,                0 },
32559: 
32560: #define osReadFile ((BOOL(WINAPI*)(HANDLE,LPVOID,DWORD,LPDWORD, \
32561:         LPOVERLAPPED))aSyscall[50].pCurrent)
32562: 
32563:   { "SetEndOfFile",            (SYSCALL)SetEndOfFile,            0 },
32564: 
32565: #define osSetEndOfFile ((BOOL(WINAPI*)(HANDLE))aSyscall[51].pCurrent)
32566: 
32567:   { "SetFilePointer",          (SYSCALL)SetFilePointer,          0 },
32568: 
32569: #define osSetFilePointer ((DWORD(WINAPI*)(HANDLE,LONG,PLONG, \
32570:         DWORD))aSyscall[52].pCurrent)
32571: 
32572:   { "Sleep",                   (SYSCALL)Sleep,                   0 },
32573: 
32574: #define osSleep ((VOID(WINAPI*)(DWORD))aSyscall[53].pCurrent)
32575: 
32576:   { "SystemTimeToFileTime",    (SYSCALL)SystemTimeToFileTime,    0 },
32577: 
32578: #define osSystemTimeToFileTime ((BOOL(WINAPI*)(CONST SYSTEMTIME*, \
32579:         LPFILETIME))aSyscall[54].pCurrent)
32580: 
32581: #if !SQLITE_OS_WINCE
32582:   { "UnlockFile",              (SYSCALL)UnlockFile,              0 },
32583: 
32584: #define osUnlockFile ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
32585:         DWORD))aSyscall[55].pCurrent)
32586: #else
32587:   { "UnlockFile",              (SYSCALL)0,                       0 },
32588: #endif
32589: 
32590: #if !SQLITE_OS_WINCE
32591:   { "UnlockFileEx",            (SYSCALL)UnlockFileEx,            0 },
32592: 
32593: #define osUnlockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
32594:         LPOVERLAPPED))aSyscall[56].pCurrent)
32595: #else
32596:   { "UnlockFileEx",            (SYSCALL)0,                       0 },
32597: #endif
32598: 
32599:   { "UnmapViewOfFile",         (SYSCALL)UnmapViewOfFile,         0 },
32600: 
32601: #define osUnmapViewOfFile ((BOOL(WINAPI*)(LPCVOID))aSyscall[57].pCurrent)
32602: 
32603:   { "WideCharToMultiByte",     (SYSCALL)WideCharToMultiByte,     0 },
32604: 
32605: #define osWideCharToMultiByte ((int(WINAPI*)(UINT,DWORD,LPCWSTR,int,LPSTR,int, \
32606:         LPCSTR,LPBOOL))aSyscall[58].pCurrent)
32607: 
32608:   { "WriteFile",               (SYSCALL)WriteFile,               0 },
32609: 
32610: #define osWriteFile ((BOOL(WINAPI*)(HANDLE,LPCVOID,DWORD,LPDWORD, \
32611:         LPOVERLAPPED))aSyscall[59].pCurrent)
32612: 
32613: }; /* End of the overrideable system calls */
32614: 
32615: /*
32616: ** This is the xSetSystemCall() method of sqlite3_vfs for all of the
32617: ** "win32" VFSes.  Return SQLITE_OK opon successfully updating the
32618: ** system call pointer, or SQLITE_NOTFOUND if there is no configurable
32619: ** system call named zName.
32620: */
32621: static int winSetSystemCall(
32622:   sqlite3_vfs *pNotUsed,        /* The VFS pointer.  Not used */
32623:   const char *zName,            /* Name of system call to override */
32624:   sqlite3_syscall_ptr pNewFunc  /* Pointer to new system call value */
32625: ){
32626:   unsigned int i;
32627:   int rc = SQLITE_NOTFOUND;
32628: 
32629:   UNUSED_PARAMETER(pNotUsed);
32630:   if( zName==0 ){
32631:     /* If no zName is given, restore all system calls to their default
32632:     ** settings and return NULL
32633:     */
32634:     rc = SQLITE_OK;
32635:     for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
32636:       if( aSyscall[i].pDefault ){
32637:         aSyscall[i].pCurrent = aSyscall[i].pDefault;
32638:       }
32639:     }
32640:   }else{
32641:     /* If zName is specified, operate on only the one system call
32642:     ** specified.
32643:     */
32644:     for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
32645:       if( strcmp(zName, aSyscall[i].zName)==0 ){
32646:         if( aSyscall[i].pDefault==0 ){
32647:           aSyscall[i].pDefault = aSyscall[i].pCurrent;
32648:         }
32649:         rc = SQLITE_OK;
32650:         if( pNewFunc==0 ) pNewFunc = aSyscall[i].pDefault;
32651:         aSyscall[i].pCurrent = pNewFunc;
32652:         break;
32653:       }
32654:     }
32655:   }
32656:   return rc;
32657: }
32658: 
32659: /*
32660: ** Return the value of a system call.  Return NULL if zName is not a
32661: ** recognized system call name.  NULL is also returned if the system call
32662: ** is currently undefined.
32663: */
32664: static sqlite3_syscall_ptr winGetSystemCall(
32665:   sqlite3_vfs *pNotUsed,
32666:   const char *zName
32667: ){
32668:   unsigned int i;
32669: 
32670:   UNUSED_PARAMETER(pNotUsed);
32671:   for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
32672:     if( strcmp(zName, aSyscall[i].zName)==0 ) return aSyscall[i].pCurrent;
32673:   }
32674:   return 0;
32675: }
32676: 
32677: /*
32678: ** Return the name of the first system call after zName.  If zName==NULL
32679: ** then return the name of the first system call.  Return NULL if zName
32680: ** is the last system call or if zName is not the name of a valid
32681: ** system call.
32682: */
32683: static const char *winNextSystemCall(sqlite3_vfs *p, const char *zName){
32684:   int i = -1;
32685: 
32686:   UNUSED_PARAMETER(p);
32687:   if( zName ){
32688:     for(i=0; i<ArraySize(aSyscall)-1; i++){
32689:       if( strcmp(zName, aSyscall[i].zName)==0 ) break;
32690:     }
32691:   }
32692:   for(i++; i<ArraySize(aSyscall); i++){
32693:     if( aSyscall[i].pCurrent!=0 ) return aSyscall[i].zName;
32694:   }
32695:   return 0;
32696: }
32697: 
32698: /*
32699: ** Return true (non-zero) if we are running under WinNT, Win2K, WinXP,
32700: ** or WinCE.  Return false (zero) for Win95, Win98, or WinME.
32701: **
32702: ** Here is an interesting observation:  Win95, Win98, and WinME lack
32703: ** the LockFileEx() API.  But we can still statically link against that
32704: ** API as long as we don't call it when running Win95/98/ME.  A call to
32705: ** this routine is used to determine if the host is Win95/98/ME or
32706: ** WinNT/2K/XP so that we will know whether or not we can safely call
32707: ** the LockFileEx() API.
32708: */
32709: #if SQLITE_OS_WINCE
32710: # define isNT()  (1)
32711: #else
32712:   static int isNT(void){
32713:     if( sqlite3_os_type==0 ){
32714:       OSVERSIONINFOA sInfo;
32715:       sInfo.dwOSVersionInfoSize = sizeof(sInfo);
32716:       osGetVersionExA(&sInfo);
32717:       sqlite3_os_type = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
32718:     }
32719:     return sqlite3_os_type==2;
32720:   }
32721: #endif /* SQLITE_OS_WINCE */
32722: 
32723: #ifdef SQLITE_WIN32_MALLOC
32724: /*
32725: ** Allocate nBytes of memory.
32726: */
32727: static void *winMemMalloc(int nBytes){
32728:   HANDLE hHeap;
32729:   void *p;
32730: 
32731:   winMemAssertMagic();
32732:   hHeap = winMemGetHeap();
32733:   assert( hHeap!=0 );
32734:   assert( hHeap!=INVALID_HANDLE_VALUE );
32735: #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32736:   assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
32737: #endif
32738:   assert( nBytes>=0 );
32739:   p = osHeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes);
32740:   if( !p ){
32741:     sqlite3_log(SQLITE_NOMEM, "failed to HeapAlloc %u bytes (%d), heap=%p",
32742:                 nBytes, osGetLastError(), (void*)hHeap);
32743:   }
32744:   return p;
32745: }
32746: 
32747: /*
32748: ** Free memory.
32749: */
32750: static void winMemFree(void *pPrior){
32751:   HANDLE hHeap;
32752: 
32753:   winMemAssertMagic();
32754:   hHeap = winMemGetHeap();
32755:   assert( hHeap!=0 );
32756:   assert( hHeap!=INVALID_HANDLE_VALUE );
32757: #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32758:   assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) );
32759: #endif
32760:   if( !pPrior ) return; /* Passing NULL to HeapFree is undefined. */
32761:   if( !osHeapFree(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ){
32762:     sqlite3_log(SQLITE_NOMEM, "failed to HeapFree block %p (%d), heap=%p",
32763:                 pPrior, osGetLastError(), (void*)hHeap);
32764:   }
32765: }
32766: 
32767: /*
32768: ** Change the size of an existing memory allocation
32769: */
32770: static void *winMemRealloc(void *pPrior, int nBytes){
32771:   HANDLE hHeap;
32772:   void *p;
32773: 
32774:   winMemAssertMagic();
32775:   hHeap = winMemGetHeap();
32776:   assert( hHeap!=0 );
32777:   assert( hHeap!=INVALID_HANDLE_VALUE );
32778: #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32779:   assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) );
32780: #endif
32781:   assert( nBytes>=0 );
32782:   if( !pPrior ){
32783:     p = osHeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes);
32784:   }else{
32785:     p = osHeapReAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior, (SIZE_T)nBytes);
32786:   }
32787:   if( !p ){
32788:     sqlite3_log(SQLITE_NOMEM, "failed to %s %u bytes (%d), heap=%p",
32789:                 pPrior ? "HeapReAlloc" : "HeapAlloc", nBytes, osGetLastError(),
32790:                 (void*)hHeap);
32791:   }
32792:   return p;
32793: }
32794: 
32795: /*
32796: ** Return the size of an outstanding allocation, in bytes.
32797: */
32798: static int winMemSize(void *p){
32799:   HANDLE hHeap;
32800:   SIZE_T n;
32801: 
32802:   winMemAssertMagic();
32803:   hHeap = winMemGetHeap();
32804:   assert( hHeap!=0 );
32805:   assert( hHeap!=INVALID_HANDLE_VALUE );
32806: #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32807:   assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
32808: #endif
32809:   if( !p ) return 0;
32810:   n = osHeapSize(hHeap, SQLITE_WIN32_HEAP_FLAGS, p);
32811:   if( n==(SIZE_T)-1 ){
32812:     sqlite3_log(SQLITE_NOMEM, "failed to HeapSize block %p (%d), heap=%p",
32813:                 p, osGetLastError(), (void*)hHeap);
32814:     return 0;
32815:   }
32816:   return (int)n;
32817: }
32818: 
32819: /*
32820: ** Round up a request size to the next valid allocation size.
32821: */
32822: static int winMemRoundup(int n){
32823:   return n;
32824: }
32825: 
32826: /*
32827: ** Initialize this module.
32828: */
32829: static int winMemInit(void *pAppData){
32830:   winMemData *pWinMemData = (winMemData *)pAppData;
32831: 
32832:   if( !pWinMemData ) return SQLITE_ERROR;
32833:   assert( pWinMemData->magic==WINMEM_MAGIC );
32834:   if( !pWinMemData->hHeap ){
32835:     pWinMemData->hHeap = osHeapCreate(SQLITE_WIN32_HEAP_FLAGS,
32836:                                       SQLITE_WIN32_HEAP_INIT_SIZE,
32837:                                       SQLITE_WIN32_HEAP_MAX_SIZE);
32838:     if( !pWinMemData->hHeap ){
32839:       sqlite3_log(SQLITE_NOMEM,
32840:           "failed to HeapCreate (%d), flags=%u, initSize=%u, maxSize=%u",
32841:           osGetLastError(), SQLITE_WIN32_HEAP_FLAGS,
32842:           SQLITE_WIN32_HEAP_INIT_SIZE, SQLITE_WIN32_HEAP_MAX_SIZE);
32843:       return SQLITE_NOMEM;
32844:     }
32845:     pWinMemData->bOwned = TRUE;
32846:   }
32847:   assert( pWinMemData->hHeap!=0 );
32848:   assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE );
32849: #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32850:   assert( osHeapValidate(pWinMemData->hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
32851: #endif
32852:   return SQLITE_OK;
32853: }
32854: 
32855: /*
32856: ** Deinitialize this module.
32857: */
32858: static void winMemShutdown(void *pAppData){
32859:   winMemData *pWinMemData = (winMemData *)pAppData;
32860: 
32861:   if( !pWinMemData ) return;
32862:   if( pWinMemData->hHeap ){
32863:     assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE );
32864: #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32865:     assert( osHeapValidate(pWinMemData->hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
32866: #endif
32867:     if( pWinMemData->bOwned ){
32868:       if( !osHeapDestroy(pWinMemData->hHeap) ){
32869:         sqlite3_log(SQLITE_NOMEM, "failed to HeapDestroy (%d), heap=%p",
32870:                     osGetLastError(), (void*)pWinMemData->hHeap);
32871:       }
32872:       pWinMemData->bOwned = FALSE;
32873:     }
32874:     pWinMemData->hHeap = NULL;
32875:   }
32876: }
32877: 
32878: /*
32879: ** Populate the low-level memory allocation function pointers in
32880: ** sqlite3GlobalConfig.m with pointers to the routines in this file. The
32881: ** arguments specify the block of memory to manage.
32882: **
32883: ** This routine is only called by sqlite3_config(), and therefore
32884: ** is not required to be threadsafe (it is not).
32885: */
32886: SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void){
32887:   static const sqlite3_mem_methods winMemMethods = {
32888:     winMemMalloc,
32889:     winMemFree,
32890:     winMemRealloc,
32891:     winMemSize,
32892:     winMemRoundup,
32893:     winMemInit,
32894:     winMemShutdown,
32895:     &win_mem_data
32896:   };
32897:   return &winMemMethods;
32898: }
32899: 
32900: SQLITE_PRIVATE void sqlite3MemSetDefault(void){
32901:   sqlite3_config(SQLITE_CONFIG_MALLOC, sqlite3MemGetWin32());
32902: }
32903: #endif /* SQLITE_WIN32_MALLOC */
32904: 
32905: /*
32906: ** Convert a UTF-8 string to Microsoft Unicode (UTF-16?). 
32907: **
32908: ** Space to hold the returned string is obtained from malloc.
32909: */
32910: static LPWSTR utf8ToUnicode(const char *zFilename){
32911:   int nChar;
32912:   LPWSTR zWideFilename;
32913: 
32914:   nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0);
32915:   if( nChar==0 ){
32916:     return 0;
32917:   }
32918:   zWideFilename = sqlite3_malloc( nChar*sizeof(zWideFilename[0]) );
32919:   if( zWideFilename==0 ){
32920:     return 0;
32921:   }
32922:   nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename,
32923:                                 nChar);
32924:   if( nChar==0 ){
32925:     sqlite3_free(zWideFilename);
32926:     zWideFilename = 0;
32927:   }
32928:   return zWideFilename;
32929: }
32930: 
32931: /*
32932: ** Convert Microsoft Unicode to UTF-8.  Space to hold the returned string is
32933: ** obtained from sqlite3_malloc().
32934: */
32935: static char *unicodeToUtf8(LPCWSTR zWideFilename){
32936:   int nByte;
32937:   char *zFilename;
32938: 
32939:   nByte = osWideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, 0, 0, 0, 0);
32940:   if( nByte == 0 ){
32941:     return 0;
32942:   }
32943:   zFilename = sqlite3_malloc( nByte );
32944:   if( zFilename==0 ){
32945:     return 0;
32946:   }
32947:   nByte = osWideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, zFilename, nByte,
32948:                                 0, 0);
32949:   if( nByte == 0 ){
32950:     sqlite3_free(zFilename);
32951:     zFilename = 0;
32952:   }
32953:   return zFilename;
32954: }
32955: 
32956: /*
32957: ** Convert an ANSI string to Microsoft Unicode, based on the
32958: ** current codepage settings for file apis.
32959: ** 
32960: ** Space to hold the returned string is obtained
32961: ** from sqlite3_malloc.
32962: */
32963: static LPWSTR mbcsToUnicode(const char *zFilename){
32964:   int nByte;
32965:   LPWSTR zMbcsFilename;
32966:   int codepage = osAreFileApisANSI() ? CP_ACP : CP_OEMCP;
32967: 
32968:   nByte = osMultiByteToWideChar(codepage, 0, zFilename, -1, NULL,
32969:                                 0)*sizeof(WCHAR);
32970:   if( nByte==0 ){
32971:     return 0;
32972:   }
32973:   zMbcsFilename = sqlite3_malloc( nByte*sizeof(zMbcsFilename[0]) );
32974:   if( zMbcsFilename==0 ){
32975:     return 0;
32976:   }
32977:   nByte = osMultiByteToWideChar(codepage, 0, zFilename, -1, zMbcsFilename,
32978:                                 nByte);
32979:   if( nByte==0 ){
32980:     sqlite3_free(zMbcsFilename);
32981:     zMbcsFilename = 0;
32982:   }
32983:   return zMbcsFilename;
32984: }
32985: 
32986: /*
32987: ** Convert Microsoft Unicode to multi-byte character string, based on the
32988: ** user's ANSI codepage.
32989: **
32990: ** Space to hold the returned string is obtained from
32991: ** sqlite3_malloc().
32992: */
32993: static char *unicodeToMbcs(LPCWSTR zWideFilename){
32994:   int nByte;
32995:   char *zFilename;
32996:   int codepage = osAreFileApisANSI() ? CP_ACP : CP_OEMCP;
32997: 
32998:   nByte = osWideCharToMultiByte(codepage, 0, zWideFilename, -1, 0, 0, 0, 0);
32999:   if( nByte == 0 ){
33000:     return 0;
33001:   }
33002:   zFilename = sqlite3_malloc( nByte );
33003:   if( zFilename==0 ){
33004:     return 0;
33005:   }
33006:   nByte = osWideCharToMultiByte(codepage, 0, zWideFilename, -1, zFilename,
33007:                                 nByte, 0, 0);
33008:   if( nByte == 0 ){
33009:     sqlite3_free(zFilename);
33010:     zFilename = 0;
33011:   }
33012:   return zFilename;
33013: }
33014: 
33015: /*
33016: ** Convert multibyte character string to UTF-8.  Space to hold the
33017: ** returned string is obtained from sqlite3_malloc().
33018: */
33019: SQLITE_API char *sqlite3_win32_mbcs_to_utf8(const char *zFilename){
33020:   char *zFilenameUtf8;
33021:   LPWSTR zTmpWide;
33022: 
33023:   zTmpWide = mbcsToUnicode(zFilename);
33024:   if( zTmpWide==0 ){
33025:     return 0;
33026:   }
33027:   zFilenameUtf8 = unicodeToUtf8(zTmpWide);
33028:   sqlite3_free(zTmpWide);
33029:   return zFilenameUtf8;
33030: }
33031: 
33032: /*
33033: ** Convert UTF-8 to multibyte character string.  Space to hold the 
33034: ** returned string is obtained from sqlite3_malloc().
33035: */
33036: SQLITE_API char *sqlite3_win32_utf8_to_mbcs(const char *zFilename){
33037:   char *zFilenameMbcs;
33038:   LPWSTR zTmpWide;
33039: 
33040:   zTmpWide = utf8ToUnicode(zFilename);
33041:   if( zTmpWide==0 ){
33042:     return 0;
33043:   }
33044:   zFilenameMbcs = unicodeToMbcs(zTmpWide);
33045:   sqlite3_free(zTmpWide);
33046:   return zFilenameMbcs;
33047: }
33048: 
33049: 
33050: /*
33051: ** The return value of getLastErrorMsg
33052: ** is zero if the error message fits in the buffer, or non-zero
33053: ** otherwise (if the message was truncated).
33054: */
33055: static int getLastErrorMsg(DWORD lastErrno, int nBuf, char *zBuf){
33056:   /* FormatMessage returns 0 on failure.  Otherwise it
33057:   ** returns the number of TCHARs written to the output
33058:   ** buffer, excluding the terminating null char.
33059:   */
33060:   DWORD dwLen = 0;
33061:   char *zOut = 0;
33062: 
33063:   if( isNT() ){
33064:     LPWSTR zTempWide = NULL;
33065:     dwLen = osFormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
33066:                              FORMAT_MESSAGE_FROM_SYSTEM |
33067:                              FORMAT_MESSAGE_IGNORE_INSERTS,
33068:                              NULL,
33069:                              lastErrno,
33070:                              0,
33071:                              (LPWSTR) &zTempWide,
33072:                              0,
33073:                              0);
33074:     if( dwLen > 0 ){
33075:       /* allocate a buffer and convert to UTF8 */
33076:       sqlite3BeginBenignMalloc();
33077:       zOut = unicodeToUtf8(zTempWide);
33078:       sqlite3EndBenignMalloc();
33079:       /* free the system buffer allocated by FormatMessage */
33080:       osLocalFree(zTempWide);
33081:     }
33082: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33083: ** Since the ANSI version of these Windows API do not exist for WINCE,
33084: ** it's important to not reference them for WINCE builds.
33085: */
33086: #if SQLITE_OS_WINCE==0
33087:   }else{
33088:     char *zTemp = NULL;
33089:     dwLen = osFormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
33090:                              FORMAT_MESSAGE_FROM_SYSTEM |
33091:                              FORMAT_MESSAGE_IGNORE_INSERTS,
33092:                              NULL,
33093:                              lastErrno,
33094:                              0,
33095:                              (LPSTR) &zTemp,
33096:                              0,
33097:                              0);
33098:     if( dwLen > 0 ){
33099:       /* allocate a buffer and convert to UTF8 */
33100:       sqlite3BeginBenignMalloc();
33101:       zOut = sqlite3_win32_mbcs_to_utf8(zTemp);
33102:       sqlite3EndBenignMalloc();
33103:       /* free the system buffer allocated by FormatMessage */
33104:       osLocalFree(zTemp);
33105:     }
33106: #endif
33107:   }
33108:   if( 0 == dwLen ){
33109:     sqlite3_snprintf(nBuf, zBuf, "OsError 0x%x (%u)", lastErrno, lastErrno);
33110:   }else{
33111:     /* copy a maximum of nBuf chars to output buffer */
33112:     sqlite3_snprintf(nBuf, zBuf, "%s", zOut);
33113:     /* free the UTF8 buffer */
33114:     sqlite3_free(zOut);
33115:   }
33116:   return 0;
33117: }
33118: 
33119: /*
33120: **
33121: ** This function - winLogErrorAtLine() - is only ever called via the macro
33122: ** winLogError().
33123: **
33124: ** This routine is invoked after an error occurs in an OS function.
33125: ** It logs a message using sqlite3_log() containing the current value of
33126: ** error code and, if possible, the human-readable equivalent from 
33127: ** FormatMessage.
33128: **
33129: ** The first argument passed to the macro should be the error code that
33130: ** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN). 
33131: ** The two subsequent arguments should be the name of the OS function that
33132: ** failed and the the associated file-system path, if any.
33133: */
33134: #define winLogError(a,b,c,d)   winLogErrorAtLine(a,b,c,d,__LINE__)
33135: static int winLogErrorAtLine(
33136:   int errcode,                    /* SQLite error code */
33137:   DWORD lastErrno,                /* Win32 last error */
33138:   const char *zFunc,              /* Name of OS function that failed */
33139:   const char *zPath,              /* File path associated with error */
33140:   int iLine                       /* Source line number where error occurred */
33141: ){
33142:   char zMsg[500];                 /* Human readable error text */
33143:   int i;                          /* Loop counter */
33144: 
33145:   zMsg[0] = 0;
33146:   getLastErrorMsg(lastErrno, sizeof(zMsg), zMsg);
33147:   assert( errcode!=SQLITE_OK );
33148:   if( zPath==0 ) zPath = "";
33149:   for(i=0; zMsg[i] && zMsg[i]!='\r' && zMsg[i]!='\n'; i++){}
33150:   zMsg[i] = 0;
33151:   sqlite3_log(errcode,
33152:       "os_win.c:%d: (%d) %s(%s) - %s",
33153:       iLine, lastErrno, zFunc, zPath, zMsg
33154:   );
33155: 
33156:   return errcode;
33157: }
33158: 
33159: /*
33160: ** The number of times that a ReadFile(), WriteFile(), and DeleteFile()
33161: ** will be retried following a locking error - probably caused by 
33162: ** antivirus software.  Also the initial delay before the first retry.
33163: ** The delay increases linearly with each retry.
33164: */
33165: #ifndef SQLITE_WIN32_IOERR_RETRY
33166: # define SQLITE_WIN32_IOERR_RETRY 10
33167: #endif
33168: #ifndef SQLITE_WIN32_IOERR_RETRY_DELAY
33169: # define SQLITE_WIN32_IOERR_RETRY_DELAY 25
33170: #endif
33171: static int win32IoerrRetry = SQLITE_WIN32_IOERR_RETRY;
33172: static int win32IoerrRetryDelay = SQLITE_WIN32_IOERR_RETRY_DELAY;
33173: 
33174: /*
33175: ** If a ReadFile() or WriteFile() error occurs, invoke this routine
33176: ** to see if it should be retried.  Return TRUE to retry.  Return FALSE
33177: ** to give up with an error.
33178: */
33179: static int retryIoerr(int *pnRetry, DWORD *pError){
33180:   DWORD e = osGetLastError();
33181:   if( *pnRetry>=win32IoerrRetry ){
33182:     if( pError ){
33183:       *pError = e;
33184:     }
33185:     return 0;
33186:   }
33187:   if( e==ERROR_ACCESS_DENIED ||
33188:       e==ERROR_LOCK_VIOLATION ||
33189:       e==ERROR_SHARING_VIOLATION ){
33190:     osSleep(win32IoerrRetryDelay*(1+*pnRetry));
33191:     ++*pnRetry;
33192:     return 1;
33193:   }
33194:   if( pError ){
33195:     *pError = e;
33196:   }
33197:   return 0;
33198: }
33199: 
33200: /*
33201: ** Log a I/O error retry episode.
33202: */
33203: static void logIoerr(int nRetry){
33204:   if( nRetry ){
33205:     sqlite3_log(SQLITE_IOERR, 
33206:       "delayed %dms for lock/sharing conflict",
33207:       win32IoerrRetryDelay*nRetry*(nRetry+1)/2
33208:     );
33209:   }
33210: }
33211: 
33212: #if SQLITE_OS_WINCE
33213: /*************************************************************************
33214: ** This section contains code for WinCE only.
33215: */
33216: /*
33217: ** Windows CE does not have a localtime() function.  So create a
33218: ** substitute.
33219: */
33220: /* #include <time.h> */
33221: struct tm *__cdecl localtime(const time_t *t)
33222: {
33223:   static struct tm y;
33224:   FILETIME uTm, lTm;
33225:   SYSTEMTIME pTm;
33226:   sqlite3_int64 t64;
33227:   t64 = *t;
33228:   t64 = (t64 + 11644473600)*10000000;
33229:   uTm.dwLowDateTime = (DWORD)(t64 & 0xFFFFFFFF);
33230:   uTm.dwHighDateTime= (DWORD)(t64 >> 32);
33231:   osFileTimeToLocalFileTime(&uTm,&lTm);
33232:   osFileTimeToSystemTime(&lTm,&pTm);
33233:   y.tm_year = pTm.wYear - 1900;
33234:   y.tm_mon = pTm.wMonth - 1;
33235:   y.tm_wday = pTm.wDayOfWeek;
33236:   y.tm_mday = pTm.wDay;
33237:   y.tm_hour = pTm.wHour;
33238:   y.tm_min = pTm.wMinute;
33239:   y.tm_sec = pTm.wSecond;
33240:   return &y;
33241: }
33242: 
33243: #define HANDLE_TO_WINFILE(a) (winFile*)&((char*)a)[-(int)offsetof(winFile,h)]
33244: 
33245: /*
33246: ** Acquire a lock on the handle h
33247: */
33248: static void winceMutexAcquire(HANDLE h){
33249:    DWORD dwErr;
33250:    do {
33251:      dwErr = WaitForSingleObject(h, INFINITE);
33252:    } while (dwErr != WAIT_OBJECT_0 && dwErr != WAIT_ABANDONED);
33253: }
33254: /*
33255: ** Release a lock acquired by winceMutexAcquire()
33256: */
33257: #define winceMutexRelease(h) ReleaseMutex(h)
33258: 
33259: /*
33260: ** Create the mutex and shared memory used for locking in the file
33261: ** descriptor pFile
33262: */
33263: static BOOL winceCreateLock(const char *zFilename, winFile *pFile){
33264:   LPWSTR zTok;
33265:   LPWSTR zName;
33266:   BOOL bInit = TRUE;
33267: 
33268:   zName = utf8ToUnicode(zFilename);
33269:   if( zName==0 ){
33270:     /* out of memory */
33271:     return FALSE;
33272:   }
33273: 
33274:   /* Initialize the local lockdata */
33275:   memset(&pFile->local, 0, sizeof(pFile->local));
33276: 
33277:   /* Replace the backslashes from the filename and lowercase it
33278:   ** to derive a mutex name. */
33279:   zTok = osCharLowerW(zName);
33280:   for (;*zTok;zTok++){
33281:     if (*zTok == '\\') *zTok = '_';
33282:   }
33283: 
33284:   /* Create/open the named mutex */
33285:   pFile->hMutex = osCreateMutexW(NULL, FALSE, zName);
33286:   if (!pFile->hMutex){
33287:     pFile->lastErrno = osGetLastError();
33288:     winLogError(SQLITE_ERROR, pFile->lastErrno, "winceCreateLock1", zFilename);
33289:     sqlite3_free(zName);
33290:     return FALSE;
33291:   }
33292: 
33293:   /* Acquire the mutex before continuing */
33294:   winceMutexAcquire(pFile->hMutex);
33295:   
33296:   /* Since the names of named mutexes, semaphores, file mappings etc are 
33297:   ** case-sensitive, take advantage of that by uppercasing the mutex name
33298:   ** and using that as the shared filemapping name.
33299:   */
33300:   osCharUpperW(zName);
33301:   pFile->hShared = osCreateFileMappingW(INVALID_HANDLE_VALUE, NULL,
33302:                                         PAGE_READWRITE, 0, sizeof(winceLock),
33303:                                         zName);  
33304: 
33305:   /* Set a flag that indicates we're the first to create the memory so it 
33306:   ** must be zero-initialized */
33307:   if (osGetLastError() == ERROR_ALREADY_EXISTS){
33308:     bInit = FALSE;
33309:   }
33310: 
33311:   sqlite3_free(zName);
33312: 
33313:   /* If we succeeded in making the shared memory handle, map it. */
33314:   if (pFile->hShared){
33315:     pFile->shared = (winceLock*)osMapViewOfFile(pFile->hShared, 
33316:              FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, sizeof(winceLock));
33317:     /* If mapping failed, close the shared memory handle and erase it */
33318:     if (!pFile->shared){
33319:       pFile->lastErrno = osGetLastError();
33320:       winLogError(SQLITE_ERROR, pFile->lastErrno,
33321:                "winceCreateLock2", zFilename);
33322:       osCloseHandle(pFile->hShared);
33323:       pFile->hShared = NULL;
33324:     }
33325:   }
33326: 
33327:   /* If shared memory could not be created, then close the mutex and fail */
33328:   if (pFile->hShared == NULL){
33329:     winceMutexRelease(pFile->hMutex);
33330:     osCloseHandle(pFile->hMutex);
33331:     pFile->hMutex = NULL;
33332:     return FALSE;
33333:   }
33334:   
33335:   /* Initialize the shared memory if we're supposed to */
33336:   if (bInit) {
33337:     memset(pFile->shared, 0, sizeof(winceLock));
33338:   }
33339: 
33340:   winceMutexRelease(pFile->hMutex);
33341:   return TRUE;
33342: }
33343: 
33344: /*
33345: ** Destroy the part of winFile that deals with wince locks
33346: */
33347: static void winceDestroyLock(winFile *pFile){
33348:   if (pFile->hMutex){
33349:     /* Acquire the mutex */
33350:     winceMutexAcquire(pFile->hMutex);
33351: 
33352:     /* The following blocks should probably assert in debug mode, but they
33353:        are to cleanup in case any locks remained open */
33354:     if (pFile->local.nReaders){
33355:       pFile->shared->nReaders --;
33356:     }
33357:     if (pFile->local.bReserved){
33358:       pFile->shared->bReserved = FALSE;
33359:     }
33360:     if (pFile->local.bPending){
33361:       pFile->shared->bPending = FALSE;
33362:     }
33363:     if (pFile->local.bExclusive){
33364:       pFile->shared->bExclusive = FALSE;
33365:     }
33366: 
33367:     /* De-reference and close our copy of the shared memory handle */
33368:     osUnmapViewOfFile(pFile->shared);
33369:     osCloseHandle(pFile->hShared);
33370: 
33371:     /* Done with the mutex */
33372:     winceMutexRelease(pFile->hMutex);    
33373:     osCloseHandle(pFile->hMutex);
33374:     pFile->hMutex = NULL;
33375:   }
33376: }
33377: 
33378: /* 
33379: ** An implementation of the LockFile() API of Windows for CE
33380: */
33381: static BOOL winceLockFile(
33382:   HANDLE *phFile,
33383:   DWORD dwFileOffsetLow,
33384:   DWORD dwFileOffsetHigh,
33385:   DWORD nNumberOfBytesToLockLow,
33386:   DWORD nNumberOfBytesToLockHigh
33387: ){
33388:   winFile *pFile = HANDLE_TO_WINFILE(phFile);
33389:   BOOL bReturn = FALSE;
33390: 
33391:   UNUSED_PARAMETER(dwFileOffsetHigh);
33392:   UNUSED_PARAMETER(nNumberOfBytesToLockHigh);
33393: 
33394:   if (!pFile->hMutex) return TRUE;
33395:   winceMutexAcquire(pFile->hMutex);
33396: 
33397:   /* Wanting an exclusive lock? */
33398:   if (dwFileOffsetLow == (DWORD)SHARED_FIRST
33399:        && nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){
33400:     if (pFile->shared->nReaders == 0 && pFile->shared->bExclusive == 0){
33401:        pFile->shared->bExclusive = TRUE;
33402:        pFile->local.bExclusive = TRUE;
33403:        bReturn = TRUE;
33404:     }
33405:   }
33406: 
33407:   /* Want a read-only lock? */
33408:   else if (dwFileOffsetLow == (DWORD)SHARED_FIRST &&
33409:            nNumberOfBytesToLockLow == 1){
33410:     if (pFile->shared->bExclusive == 0){
33411:       pFile->local.nReaders ++;
33412:       if (pFile->local.nReaders == 1){
33413:         pFile->shared->nReaders ++;
33414:       }
33415:       bReturn = TRUE;
33416:     }
33417:   }
33418: 
33419:   /* Want a pending lock? */
33420:   else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToLockLow == 1){
33421:     /* If no pending lock has been acquired, then acquire it */
33422:     if (pFile->shared->bPending == 0) {
33423:       pFile->shared->bPending = TRUE;
33424:       pFile->local.bPending = TRUE;
33425:       bReturn = TRUE;
33426:     }
33427:   }
33428: 
33429:   /* Want a reserved lock? */
33430:   else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToLockLow == 1){
33431:     if (pFile->shared->bReserved == 0) {
33432:       pFile->shared->bReserved = TRUE;
33433:       pFile->local.bReserved = TRUE;
33434:       bReturn = TRUE;
33435:     }
33436:   }
33437: 
33438:   winceMutexRelease(pFile->hMutex);
33439:   return bReturn;
33440: }
33441: 
33442: /*
33443: ** An implementation of the UnlockFile API of Windows for CE
33444: */
33445: static BOOL winceUnlockFile(
33446:   HANDLE *phFile,
33447:   DWORD dwFileOffsetLow,
33448:   DWORD dwFileOffsetHigh,
33449:   DWORD nNumberOfBytesToUnlockLow,
33450:   DWORD nNumberOfBytesToUnlockHigh
33451: ){
33452:   winFile *pFile = HANDLE_TO_WINFILE(phFile);
33453:   BOOL bReturn = FALSE;
33454: 
33455:   UNUSED_PARAMETER(dwFileOffsetHigh);
33456:   UNUSED_PARAMETER(nNumberOfBytesToUnlockHigh);
33457: 
33458:   if (!pFile->hMutex) return TRUE;
33459:   winceMutexAcquire(pFile->hMutex);
33460: 
33461:   /* Releasing a reader lock or an exclusive lock */
33462:   if (dwFileOffsetLow == (DWORD)SHARED_FIRST){
33463:     /* Did we have an exclusive lock? */
33464:     if (pFile->local.bExclusive){
33465:       assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE);
33466:       pFile->local.bExclusive = FALSE;
33467:       pFile->shared->bExclusive = FALSE;
33468:       bReturn = TRUE;
33469:     }
33470: 
33471:     /* Did we just have a reader lock? */
33472:     else if (pFile->local.nReaders){
33473:       assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE || nNumberOfBytesToUnlockLow == 1);
33474:       pFile->local.nReaders --;
33475:       if (pFile->local.nReaders == 0)
33476:       {
33477:         pFile->shared->nReaders --;
33478:       }
33479:       bReturn = TRUE;
33480:     }
33481:   }
33482: 
33483:   /* Releasing a pending lock */
33484:   else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToUnlockLow == 1){
33485:     if (pFile->local.bPending){
33486:       pFile->local.bPending = FALSE;
33487:       pFile->shared->bPending = FALSE;
33488:       bReturn = TRUE;
33489:     }
33490:   }
33491:   /* Releasing a reserved lock */
33492:   else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToUnlockLow == 1){
33493:     if (pFile->local.bReserved) {
33494:       pFile->local.bReserved = FALSE;
33495:       pFile->shared->bReserved = FALSE;
33496:       bReturn = TRUE;
33497:     }
33498:   }
33499: 
33500:   winceMutexRelease(pFile->hMutex);
33501:   return bReturn;
33502: }
33503: 
33504: /*
33505: ** An implementation of the LockFileEx() API of Windows for CE
33506: */
33507: static BOOL winceLockFileEx(
33508:   HANDLE *phFile,
33509:   DWORD dwFlags,
33510:   DWORD dwReserved,
33511:   DWORD nNumberOfBytesToLockLow,
33512:   DWORD nNumberOfBytesToLockHigh,
33513:   LPOVERLAPPED lpOverlapped
33514: ){
33515:   UNUSED_PARAMETER(dwReserved);
33516:   UNUSED_PARAMETER(nNumberOfBytesToLockHigh);
33517: 
33518:   /* If the caller wants a shared read lock, forward this call
33519:   ** to winceLockFile */
33520:   if (lpOverlapped->Offset == (DWORD)SHARED_FIRST &&
33521:       dwFlags == 1 &&
33522:       nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){
33523:     return winceLockFile(phFile, SHARED_FIRST, 0, 1, 0);
33524:   }
33525:   return FALSE;
33526: }
33527: /*
33528: ** End of the special code for wince
33529: *****************************************************************************/
33530: #endif /* SQLITE_OS_WINCE */
33531: 
33532: /*****************************************************************************
33533: ** The next group of routines implement the I/O methods specified
33534: ** by the sqlite3_io_methods object.
33535: ******************************************************************************/
33536: 
33537: /*
33538: ** Some Microsoft compilers lack this definition.
33539: */
33540: #ifndef INVALID_SET_FILE_POINTER
33541: # define INVALID_SET_FILE_POINTER ((DWORD)-1)
33542: #endif
33543: 
33544: /*
33545: ** Move the current position of the file handle passed as the first 
33546: ** argument to offset iOffset within the file. If successful, return 0. 
33547: ** Otherwise, set pFile->lastErrno and return non-zero.
33548: */
33549: static int seekWinFile(winFile *pFile, sqlite3_int64 iOffset){
33550:   LONG upperBits;                 /* Most sig. 32 bits of new offset */
33551:   LONG lowerBits;                 /* Least sig. 32 bits of new offset */
33552:   DWORD dwRet;                    /* Value returned by SetFilePointer() */
33553:   DWORD lastErrno;                /* Value returned by GetLastError() */
33554: 
33555:   upperBits = (LONG)((iOffset>>32) & 0x7fffffff);
33556:   lowerBits = (LONG)(iOffset & 0xffffffff);
33557: 
33558:   /* API oddity: If successful, SetFilePointer() returns a dword 
33559:   ** containing the lower 32-bits of the new file-offset. Or, if it fails,
33560:   ** it returns INVALID_SET_FILE_POINTER. However according to MSDN, 
33561:   ** INVALID_SET_FILE_POINTER may also be a valid new offset. So to determine 
33562:   ** whether an error has actually occured, it is also necessary to call 
33563:   ** GetLastError().
33564:   */
33565:   dwRet = osSetFilePointer(pFile->h, lowerBits, &upperBits, FILE_BEGIN);
33566: 
33567:   if( (dwRet==INVALID_SET_FILE_POINTER
33568:       && ((lastErrno = osGetLastError())!=NO_ERROR)) ){
33569:     pFile->lastErrno = lastErrno;
33570:     winLogError(SQLITE_IOERR_SEEK, pFile->lastErrno,
33571:              "seekWinFile", pFile->zPath);
33572:     return 1;
33573:   }
33574: 
33575:   return 0;
33576: }
33577: 
33578: /*
33579: ** Close a file.
33580: **
33581: ** It is reported that an attempt to close a handle might sometimes
33582: ** fail.  This is a very unreasonable result, but Windows is notorious
33583: ** for being unreasonable so I do not doubt that it might happen.  If
33584: ** the close fails, we pause for 100 milliseconds and try again.  As
33585: ** many as MX_CLOSE_ATTEMPT attempts to close the handle are made before
33586: ** giving up and returning an error.
33587: */
33588: #define MX_CLOSE_ATTEMPT 3
33589: static int winClose(sqlite3_file *id){
33590:   int rc, cnt = 0;
33591:   winFile *pFile = (winFile*)id;
33592: 
33593:   assert( id!=0 );
33594:   assert( pFile->pShm==0 );
33595:   OSTRACE(("CLOSE %d\n", pFile->h));
33596:   do{
33597:     rc = osCloseHandle(pFile->h);
33598:     /* SimulateIOError( rc=0; cnt=MX_CLOSE_ATTEMPT; ); */
33599:   }while( rc==0 && ++cnt < MX_CLOSE_ATTEMPT && (osSleep(100), 1) );
33600: #if SQLITE_OS_WINCE
33601: #define WINCE_DELETION_ATTEMPTS 3
33602:   winceDestroyLock(pFile);
33603:   if( pFile->zDeleteOnClose ){
33604:     int cnt = 0;
33605:     while(
33606:            osDeleteFileW(pFile->zDeleteOnClose)==0
33607:         && osGetFileAttributesW(pFile->zDeleteOnClose)!=0xffffffff 
33608:         && cnt++ < WINCE_DELETION_ATTEMPTS
33609:     ){
33610:        osSleep(100);  /* Wait a little before trying again */
33611:     }
33612:     sqlite3_free(pFile->zDeleteOnClose);
33613:   }
33614: #endif
33615:   OSTRACE(("CLOSE %d %s\n", pFile->h, rc ? "ok" : "failed"));
33616:   OpenCounter(-1);
33617:   return rc ? SQLITE_OK
33618:             : winLogError(SQLITE_IOERR_CLOSE, osGetLastError(),
33619:                           "winClose", pFile->zPath);
33620: }
33621: 
33622: /*
33623: ** Read data from a file into a buffer.  Return SQLITE_OK if all
33624: ** bytes were read successfully and SQLITE_IOERR if anything goes
33625: ** wrong.
33626: */
33627: static int winRead(
33628:   sqlite3_file *id,          /* File to read from */
33629:   void *pBuf,                /* Write content into this buffer */
33630:   int amt,                   /* Number of bytes to read */
33631:   sqlite3_int64 offset       /* Begin reading at this offset */
33632: ){
33633:   winFile *pFile = (winFile*)id;  /* file handle */
33634:   DWORD nRead;                    /* Number of bytes actually read from file */
33635:   int nRetry = 0;                 /* Number of retrys */
33636: 
33637:   assert( id!=0 );
33638:   SimulateIOError(return SQLITE_IOERR_READ);
33639:   OSTRACE(("READ %d lock=%d\n", pFile->h, pFile->locktype));
33640: 
33641:   if( seekWinFile(pFile, offset) ){
33642:     return SQLITE_FULL;
33643:   }
33644:   while( !osReadFile(pFile->h, pBuf, amt, &nRead, 0) ){
33645:     DWORD lastErrno;
33646:     if( retryIoerr(&nRetry, &lastErrno) ) continue;
33647:     pFile->lastErrno = lastErrno;
33648:     return winLogError(SQLITE_IOERR_READ, pFile->lastErrno,
33649:              "winRead", pFile->zPath);
33650:   }
33651:   logIoerr(nRetry);
33652:   if( nRead<(DWORD)amt ){
33653:     /* Unread parts of the buffer must be zero-filled */
33654:     memset(&((char*)pBuf)[nRead], 0, amt-nRead);
33655:     return SQLITE_IOERR_SHORT_READ;
33656:   }
33657: 
33658:   return SQLITE_OK;
33659: }
33660: 
33661: /*
33662: ** Write data from a buffer into a file.  Return SQLITE_OK on success
33663: ** or some other error code on failure.
33664: */
33665: static int winWrite(
33666:   sqlite3_file *id,               /* File to write into */
33667:   const void *pBuf,               /* The bytes to be written */
33668:   int amt,                        /* Number of bytes to write */
33669:   sqlite3_int64 offset            /* Offset into the file to begin writing at */
33670: ){
33671:   int rc;                         /* True if error has occured, else false */
33672:   winFile *pFile = (winFile*)id;  /* File handle */
33673:   int nRetry = 0;                 /* Number of retries */
33674: 
33675:   assert( amt>0 );
33676:   assert( pFile );
33677:   SimulateIOError(return SQLITE_IOERR_WRITE);
33678:   SimulateDiskfullError(return SQLITE_FULL);
33679: 
33680:   OSTRACE(("WRITE %d lock=%d\n", pFile->h, pFile->locktype));
33681: 
33682:   rc = seekWinFile(pFile, offset);
33683:   if( rc==0 ){
33684:     u8 *aRem = (u8 *)pBuf;        /* Data yet to be written */
33685:     int nRem = amt;               /* Number of bytes yet to be written */
33686:     DWORD nWrite;                 /* Bytes written by each WriteFile() call */
33687:     DWORD lastErrno = NO_ERROR;   /* Value returned by GetLastError() */
33688: 
33689:     while( nRem>0 ){
33690:       if( !osWriteFile(pFile->h, aRem, nRem, &nWrite, 0) ){
33691:         if( retryIoerr(&nRetry, &lastErrno) ) continue;
33692:         break;
33693:       }
33694:       if( nWrite<=0 ) break;
33695:       aRem += nWrite;
33696:       nRem -= nWrite;
33697:     }
33698:     if( nRem>0 ){
33699:       pFile->lastErrno = lastErrno;
33700:       rc = 1;
33701:     }
33702:   }
33703: 
33704:   if( rc ){
33705:     if(   ( pFile->lastErrno==ERROR_HANDLE_DISK_FULL )
33706:        || ( pFile->lastErrno==ERROR_DISK_FULL )){
33707:       return SQLITE_FULL;
33708:     }
33709:     return winLogError(SQLITE_IOERR_WRITE, pFile->lastErrno,
33710:              "winWrite", pFile->zPath);
33711:   }else{
33712:     logIoerr(nRetry);
33713:   }
33714:   return SQLITE_OK;
33715: }
33716: 
33717: /*
33718: ** Truncate an open file to a specified size
33719: */
33720: static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){
33721:   winFile *pFile = (winFile*)id;  /* File handle object */
33722:   int rc = SQLITE_OK;             /* Return code for this function */
33723: 
33724:   assert( pFile );
33725: 
33726:   OSTRACE(("TRUNCATE %d %lld\n", pFile->h, nByte));
33727:   SimulateIOError(return SQLITE_IOERR_TRUNCATE);
33728: 
33729:   /* If the user has configured a chunk-size for this file, truncate the
33730:   ** file so that it consists of an integer number of chunks (i.e. the
33731:   ** actual file size after the operation may be larger than the requested
33732:   ** size).
33733:   */
33734:   if( pFile->szChunk>0 ){
33735:     nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
33736:   }
33737: 
33738:   /* SetEndOfFile() returns non-zero when successful, or zero when it fails. */
33739:   if( seekWinFile(pFile, nByte) ){
33740:     rc = winLogError(SQLITE_IOERR_TRUNCATE, pFile->lastErrno,
33741:              "winTruncate1", pFile->zPath);
33742:   }else if( 0==osSetEndOfFile(pFile->h) ){
33743:     pFile->lastErrno = osGetLastError();
33744:     rc = winLogError(SQLITE_IOERR_TRUNCATE, pFile->lastErrno,
33745:              "winTruncate2", pFile->zPath);
33746:   }
33747: 
33748:   OSTRACE(("TRUNCATE %d %lld %s\n", pFile->h, nByte, rc ? "failed" : "ok"));
33749:   return rc;
33750: }
33751: 
33752: #ifdef SQLITE_TEST
33753: /*
33754: ** Count the number of fullsyncs and normal syncs.  This is used to test
33755: ** that syncs and fullsyncs are occuring at the right times.
33756: */
33757: SQLITE_API int sqlite3_sync_count = 0;
33758: SQLITE_API int sqlite3_fullsync_count = 0;
33759: #endif
33760: 
33761: /*
33762: ** Make sure all writes to a particular file are committed to disk.
33763: */
33764: static int winSync(sqlite3_file *id, int flags){
33765: #ifndef SQLITE_NO_SYNC
33766:   /*
33767:   ** Used only when SQLITE_NO_SYNC is not defined.
33768:    */
33769:   BOOL rc;
33770: #endif
33771: #if !defined(NDEBUG) || !defined(SQLITE_NO_SYNC) || \
33772:     (defined(SQLITE_TEST) && defined(SQLITE_DEBUG))
33773:   /*
33774:   ** Used when SQLITE_NO_SYNC is not defined and by the assert() and/or
33775:   ** OSTRACE() macros.
33776:    */
33777:   winFile *pFile = (winFile*)id;
33778: #else
33779:   UNUSED_PARAMETER(id);
33780: #endif
33781: 
33782:   assert( pFile );
33783:   /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */
33784:   assert((flags&0x0F)==SQLITE_SYNC_NORMAL
33785:       || (flags&0x0F)==SQLITE_SYNC_FULL
33786:   );
33787: 
33788:   OSTRACE(("SYNC %d lock=%d\n", pFile->h, pFile->locktype));
33789: 
33790:   /* Unix cannot, but some systems may return SQLITE_FULL from here. This
33791:   ** line is to test that doing so does not cause any problems.
33792:   */
33793:   SimulateDiskfullError( return SQLITE_FULL );
33794: 
33795: #ifndef SQLITE_TEST
33796:   UNUSED_PARAMETER(flags);
33797: #else
33798:   if( (flags&0x0F)==SQLITE_SYNC_FULL ){
33799:     sqlite3_fullsync_count++;
33800:   }
33801:   sqlite3_sync_count++;
33802: #endif
33803: 
33804:   /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
33805:   ** no-op
33806:   */
33807: #ifdef SQLITE_NO_SYNC
33808:   return SQLITE_OK;
33809: #else
33810:   rc = osFlushFileBuffers(pFile->h);
33811:   SimulateIOError( rc=FALSE );
33812:   if( rc ){
33813:     return SQLITE_OK;
33814:   }else{
33815:     pFile->lastErrno = osGetLastError();
33816:     return winLogError(SQLITE_IOERR_FSYNC, pFile->lastErrno,
33817:              "winSync", pFile->zPath);
33818:   }
33819: #endif
33820: }
33821: 
33822: /*
33823: ** Determine the current size of a file in bytes
33824: */
33825: static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){
33826:   DWORD upperBits;
33827:   DWORD lowerBits;
33828:   winFile *pFile = (winFile*)id;
33829:   DWORD lastErrno;
33830: 
33831:   assert( id!=0 );
33832:   SimulateIOError(return SQLITE_IOERR_FSTAT);
33833:   lowerBits = osGetFileSize(pFile->h, &upperBits);
33834:   if(   (lowerBits == INVALID_FILE_SIZE)
33835:      && ((lastErrno = osGetLastError())!=NO_ERROR) )
33836:   {
33837:     pFile->lastErrno = lastErrno;
33838:     return winLogError(SQLITE_IOERR_FSTAT, pFile->lastErrno,
33839:              "winFileSize", pFile->zPath);
33840:   }
33841:   *pSize = (((sqlite3_int64)upperBits)<<32) + lowerBits;
33842:   return SQLITE_OK;
33843: }
33844: 
33845: /*
33846: ** LOCKFILE_FAIL_IMMEDIATELY is undefined on some Windows systems.
33847: */
33848: #ifndef LOCKFILE_FAIL_IMMEDIATELY
33849: # define LOCKFILE_FAIL_IMMEDIATELY 1
33850: #endif
33851: 
33852: /*
33853: ** Acquire a reader lock.
33854: ** Different API routines are called depending on whether or not this
33855: ** is Win9x or WinNT.
33856: */
33857: static int getReadLock(winFile *pFile){
33858:   int res;
33859:   if( isNT() ){
33860:     OVERLAPPED ovlp;
33861:     ovlp.Offset = SHARED_FIRST;
33862:     ovlp.OffsetHigh = 0;
33863:     ovlp.hEvent = 0;
33864:     res = osLockFileEx(pFile->h, LOCKFILE_FAIL_IMMEDIATELY,
33865:                        0, SHARED_SIZE, 0, &ovlp);
33866: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33867: */
33868: #if SQLITE_OS_WINCE==0
33869:   }else{
33870:     int lk;
33871:     sqlite3_randomness(sizeof(lk), &lk);
33872:     pFile->sharedLockByte = (short)((lk & 0x7fffffff)%(SHARED_SIZE - 1));
33873:     res = osLockFile(pFile->h, SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0);
33874: #endif
33875:   }
33876:   if( res == 0 ){
33877:     pFile->lastErrno = osGetLastError();
33878:     /* No need to log a failure to lock */
33879:   }
33880:   return res;
33881: }
33882: 
33883: /*
33884: ** Undo a readlock
33885: */
33886: static int unlockReadLock(winFile *pFile){
33887:   int res;
33888:   DWORD lastErrno;
33889:   if( isNT() ){
33890:     res = osUnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
33891: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33892: */
33893: #if SQLITE_OS_WINCE==0
33894:   }else{
33895:     res = osUnlockFile(pFile->h, SHARED_FIRST + pFile->sharedLockByte, 0, 1, 0);
33896: #endif
33897:   }
33898:   if( res==0 && ((lastErrno = osGetLastError())!=ERROR_NOT_LOCKED) ){
33899:     pFile->lastErrno = lastErrno;
33900:     winLogError(SQLITE_IOERR_UNLOCK, pFile->lastErrno,
33901:              "unlockReadLock", pFile->zPath);
33902:   }
33903:   return res;
33904: }
33905: 
33906: /*
33907: ** Lock the file with the lock specified by parameter locktype - one
33908: ** of the following:
33909: **
33910: **     (1) SHARED_LOCK
33911: **     (2) RESERVED_LOCK
33912: **     (3) PENDING_LOCK
33913: **     (4) EXCLUSIVE_LOCK
33914: **
33915: ** Sometimes when requesting one lock state, additional lock states
33916: ** are inserted in between.  The locking might fail on one of the later
33917: ** transitions leaving the lock state different from what it started but
33918: ** still short of its goal.  The following chart shows the allowed
33919: ** transitions and the inserted intermediate states:
33920: **
33921: **    UNLOCKED -> SHARED
33922: **    SHARED -> RESERVED
33923: **    SHARED -> (PENDING) -> EXCLUSIVE
33924: **    RESERVED -> (PENDING) -> EXCLUSIVE
33925: **    PENDING -> EXCLUSIVE
33926: **
33927: ** This routine will only increase a lock.  The winUnlock() routine
33928: ** erases all locks at once and returns us immediately to locking level 0.
33929: ** It is not possible to lower the locking level one step at a time.  You
33930: ** must go straight to locking level 0.
33931: */
33932: static int winLock(sqlite3_file *id, int locktype){
33933:   int rc = SQLITE_OK;    /* Return code from subroutines */
33934:   int res = 1;           /* Result of a Windows lock call */
33935:   int newLocktype;       /* Set pFile->locktype to this value before exiting */
33936:   int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */
33937:   winFile *pFile = (winFile*)id;
33938:   DWORD lastErrno = NO_ERROR;
33939: 
33940:   assert( id!=0 );
33941:   OSTRACE(("LOCK %d %d was %d(%d)\n",
33942:            pFile->h, locktype, pFile->locktype, pFile->sharedLockByte));
33943: 
33944:   /* If there is already a lock of this type or more restrictive on the
33945:   ** OsFile, do nothing. Don't use the end_lock: exit path, as
33946:   ** sqlite3OsEnterMutex() hasn't been called yet.
33947:   */
33948:   if( pFile->locktype>=locktype ){
33949:     return SQLITE_OK;
33950:   }
33951: 
33952:   /* Make sure the locking sequence is correct
33953:   */
33954:   assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK );
33955:   assert( locktype!=PENDING_LOCK );
33956:   assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK );
33957: 
33958:   /* Lock the PENDING_LOCK byte if we need to acquire a PENDING lock or
33959:   ** a SHARED lock.  If we are acquiring a SHARED lock, the acquisition of
33960:   ** the PENDING_LOCK byte is temporary.
33961:   */
33962:   newLocktype = pFile->locktype;
33963:   if(   (pFile->locktype==NO_LOCK)
33964:      || (   (locktype==EXCLUSIVE_LOCK)
33965:          && (pFile->locktype==RESERVED_LOCK))
33966:   ){
33967:     int cnt = 3;
33968:     while( cnt-->0 && (res = osLockFile(pFile->h, PENDING_BYTE, 0, 1, 0))==0 ){
33969:       /* Try 3 times to get the pending lock.  This is needed to work
33970:       ** around problems caused by indexing and/or anti-virus software on
33971:       ** Windows systems.
33972:       ** If you are using this code as a model for alternative VFSes, do not
33973:       ** copy this retry logic.  It is a hack intended for Windows only.
33974:       */
33975:       OSTRACE(("could not get a PENDING lock. cnt=%d\n", cnt));
33976:       if( cnt ) osSleep(1);
33977:     }
33978:     gotPendingLock = res;
33979:     if( !res ){
33980:       lastErrno = osGetLastError();
33981:     }
33982:   }
33983: 
33984:   /* Acquire a shared lock
33985:   */
33986:   if( locktype==SHARED_LOCK && res ){
33987:     assert( pFile->locktype==NO_LOCK );
33988:     res = getReadLock(pFile);
33989:     if( res ){
33990:       newLocktype = SHARED_LOCK;
33991:     }else{
33992:       lastErrno = osGetLastError();
33993:     }
33994:   }
33995: 
33996:   /* Acquire a RESERVED lock
33997:   */
33998:   if( locktype==RESERVED_LOCK && res ){
33999:     assert( pFile->locktype==SHARED_LOCK );
34000:     res = osLockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
34001:     if( res ){
34002:       newLocktype = RESERVED_LOCK;
34003:     }else{
34004:       lastErrno = osGetLastError();
34005:     }
34006:   }
34007: 
34008:   /* Acquire a PENDING lock
34009:   */
34010:   if( locktype==EXCLUSIVE_LOCK && res ){
34011:     newLocktype = PENDING_LOCK;
34012:     gotPendingLock = 0;
34013:   }
34014: 
34015:   /* Acquire an EXCLUSIVE lock
34016:   */
34017:   if( locktype==EXCLUSIVE_LOCK && res ){
34018:     assert( pFile->locktype>=SHARED_LOCK );
34019:     res = unlockReadLock(pFile);
34020:     OSTRACE(("unreadlock = %d\n", res));
34021:     res = osLockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
34022:     if( res ){
34023:       newLocktype = EXCLUSIVE_LOCK;
34024:     }else{
34025:       lastErrno = osGetLastError();
34026:       OSTRACE(("error-code = %d\n", lastErrno));
34027:       getReadLock(pFile);
34028:     }
34029:   }
34030: 
34031:   /* If we are holding a PENDING lock that ought to be released, then
34032:   ** release it now.
34033:   */
34034:   if( gotPendingLock && locktype==SHARED_LOCK ){
34035:     osUnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0);
34036:   }
34037: 
34038:   /* Update the state of the lock has held in the file descriptor then
34039:   ** return the appropriate result code.
34040:   */
34041:   if( res ){
34042:     rc = SQLITE_OK;
34043:   }else{
34044:     OSTRACE(("LOCK FAILED %d trying for %d but got %d\n", pFile->h,
34045:            locktype, newLocktype));
34046:     pFile->lastErrno = lastErrno;
34047:     rc = SQLITE_BUSY;
34048:   }
34049:   pFile->locktype = (u8)newLocktype;
34050:   return rc;
34051: }
34052: 
34053: /*
34054: ** This routine checks if there is a RESERVED lock held on the specified
34055: ** file by this or any other process. If such a lock is held, return
34056: ** non-zero, otherwise zero.
34057: */
34058: static int winCheckReservedLock(sqlite3_file *id, int *pResOut){
34059:   int rc;
34060:   winFile *pFile = (winFile*)id;
34061: 
34062:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
34063: 
34064:   assert( id!=0 );
34065:   if( pFile->locktype>=RESERVED_LOCK ){
34066:     rc = 1;
34067:     OSTRACE(("TEST WR-LOCK %d %d (local)\n", pFile->h, rc));
34068:   }else{
34069:     rc = osLockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
34070:     if( rc ){
34071:       osUnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
34072:     }
34073:     rc = !rc;
34074:     OSTRACE(("TEST WR-LOCK %d %d (remote)\n", pFile->h, rc));
34075:   }
34076:   *pResOut = rc;
34077:   return SQLITE_OK;
34078: }
34079: 
34080: /*
34081: ** Lower the locking level on file descriptor id to locktype.  locktype
34082: ** must be either NO_LOCK or SHARED_LOCK.
34083: **
34084: ** If the locking level of the file descriptor is already at or below
34085: ** the requested locking level, this routine is a no-op.
34086: **
34087: ** It is not possible for this routine to fail if the second argument
34088: ** is NO_LOCK.  If the second argument is SHARED_LOCK then this routine
34089: ** might return SQLITE_IOERR;
34090: */
34091: static int winUnlock(sqlite3_file *id, int locktype){
34092:   int type;
34093:   winFile *pFile = (winFile*)id;
34094:   int rc = SQLITE_OK;
34095:   assert( pFile!=0 );
34096:   assert( locktype<=SHARED_LOCK );
34097:   OSTRACE(("UNLOCK %d to %d was %d(%d)\n", pFile->h, locktype,
34098:           pFile->locktype, pFile->sharedLockByte));
34099:   type = pFile->locktype;
34100:   if( type>=EXCLUSIVE_LOCK ){
34101:     osUnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
34102:     if( locktype==SHARED_LOCK && !getReadLock(pFile) ){
34103:       /* This should never happen.  We should always be able to
34104:       ** reacquire the read lock */
34105:       rc = winLogError(SQLITE_IOERR_UNLOCK, osGetLastError(),
34106:                "winUnlock", pFile->zPath);
34107:     }
34108:   }
34109:   if( type>=RESERVED_LOCK ){
34110:     osUnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
34111:   }
34112:   if( locktype==NO_LOCK && type>=SHARED_LOCK ){
34113:     unlockReadLock(pFile);
34114:   }
34115:   if( type>=PENDING_LOCK ){
34116:     osUnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0);
34117:   }
34118:   pFile->locktype = (u8)locktype;
34119:   return rc;
34120: }
34121: 
34122: /*
34123: ** If *pArg is inititially negative then this is a query.  Set *pArg to
34124: ** 1 or 0 depending on whether or not bit mask of pFile->ctrlFlags is set.
34125: **
34126: ** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags.
34127: */
34128: static void winModeBit(winFile *pFile, unsigned char mask, int *pArg){
34129:   if( *pArg<0 ){
34130:     *pArg = (pFile->ctrlFlags & mask)!=0;
34131:   }else if( (*pArg)==0 ){
34132:     pFile->ctrlFlags &= ~mask;
34133:   }else{
34134:     pFile->ctrlFlags |= mask;
34135:   }
34136: }
34137: 
34138: /*
34139: ** Control and query of the open file handle.
34140: */
34141: static int winFileControl(sqlite3_file *id, int op, void *pArg){
34142:   winFile *pFile = (winFile*)id;
34143:   switch( op ){
34144:     case SQLITE_FCNTL_LOCKSTATE: {
34145:       *(int*)pArg = pFile->locktype;
34146:       return SQLITE_OK;
34147:     }
34148:     case SQLITE_LAST_ERRNO: {
34149:       *(int*)pArg = (int)pFile->lastErrno;
34150:       return SQLITE_OK;
34151:     }
34152:     case SQLITE_FCNTL_CHUNK_SIZE: {
34153:       pFile->szChunk = *(int *)pArg;
34154:       return SQLITE_OK;
34155:     }
34156:     case SQLITE_FCNTL_SIZE_HINT: {
34157:       if( pFile->szChunk>0 ){
34158:         sqlite3_int64 oldSz;
34159:         int rc = winFileSize(id, &oldSz);
34160:         if( rc==SQLITE_OK ){
34161:           sqlite3_int64 newSz = *(sqlite3_int64*)pArg;
34162:           if( newSz>oldSz ){
34163:             SimulateIOErrorBenign(1);
34164:             rc = winTruncate(id, newSz);
34165:             SimulateIOErrorBenign(0);
34166:           }
34167:         }
34168:         return rc;
34169:       }
34170:       return SQLITE_OK;
34171:     }
34172:     case SQLITE_FCNTL_PERSIST_WAL: {
34173:       winModeBit(pFile, WINFILE_PERSIST_WAL, (int*)pArg);
34174:       return SQLITE_OK;
34175:     }
34176:     case SQLITE_FCNTL_POWERSAFE_OVERWRITE: {
34177:       winModeBit(pFile, WINFILE_PSOW, (int*)pArg);
34178:       return SQLITE_OK;
34179:     }
34180:     case SQLITE_FCNTL_VFSNAME: {
34181:       *(char**)pArg = sqlite3_mprintf("win32");
34182:       return SQLITE_OK;
34183:     }
34184:     case SQLITE_FCNTL_WIN32_AV_RETRY: {
34185:       int *a = (int*)pArg;
34186:       if( a[0]>0 ){
34187:         win32IoerrRetry = a[0];
34188:       }else{
34189:         a[0] = win32IoerrRetry;
34190:       }
34191:       if( a[1]>0 ){
34192:         win32IoerrRetryDelay = a[1];
34193:       }else{
34194:         a[1] = win32IoerrRetryDelay;
34195:       }
34196:       return SQLITE_OK;
34197:     }
34198:   }
34199:   return SQLITE_NOTFOUND;
34200: }
34201: 
34202: /*
34203: ** Return the sector size in bytes of the underlying block device for
34204: ** the specified file. This is almost always 512 bytes, but may be
34205: ** larger for some devices.
34206: **
34207: ** SQLite code assumes this function cannot fail. It also assumes that
34208: ** if two files are created in the same file-system directory (i.e.
34209: ** a database and its journal file) that the sector size will be the
34210: ** same for both.
34211: */
34212: static int winSectorSize(sqlite3_file *id){
34213:   (void)id;
34214:   return SQLITE_DEFAULT_SECTOR_SIZE;
34215: }
34216: 
34217: /*
34218: ** Return a vector of device characteristics.
34219: */
34220: static int winDeviceCharacteristics(sqlite3_file *id){
34221:   winFile *p = (winFile*)id;
34222:   return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN |
34223:          ((p->ctrlFlags & WINFILE_PSOW)?SQLITE_IOCAP_POWERSAFE_OVERWRITE:0);
34224: }
34225: 
34226: #ifndef SQLITE_OMIT_WAL
34227: 
34228: /* 
34229: ** Windows will only let you create file view mappings
34230: ** on allocation size granularity boundaries.
34231: ** During sqlite3_os_init() we do a GetSystemInfo()
34232: ** to get the granularity size.
34233: */
34234: SYSTEM_INFO winSysInfo;
34235: 
34236: /*
34237: ** Helper functions to obtain and relinquish the global mutex. The
34238: ** global mutex is used to protect the winLockInfo objects used by 
34239: ** this file, all of which may be shared by multiple threads.
34240: **
34241: ** Function winShmMutexHeld() is used to assert() that the global mutex 
34242: ** is held when required. This function is only used as part of assert() 
34243: ** statements. e.g.
34244: **
34245: **   winShmEnterMutex()
34246: **     assert( winShmMutexHeld() );
34247: **   winShmLeaveMutex()
34248: */
34249: static void winShmEnterMutex(void){
34250:   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
34251: }
34252: static void winShmLeaveMutex(void){
34253:   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
34254: }
34255: #ifdef SQLITE_DEBUG
34256: static int winShmMutexHeld(void) {
34257:   return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
34258: }
34259: #endif
34260: 
34261: /*
34262: ** Object used to represent a single file opened and mmapped to provide
34263: ** shared memory.  When multiple threads all reference the same
34264: ** log-summary, each thread has its own winFile object, but they all
34265: ** point to a single instance of this object.  In other words, each
34266: ** log-summary is opened only once per process.
34267: **
34268: ** winShmMutexHeld() must be true when creating or destroying
34269: ** this object or while reading or writing the following fields:
34270: **
34271: **      nRef
34272: **      pNext 
34273: **
34274: ** The following fields are read-only after the object is created:
34275: ** 
34276: **      fid
34277: **      zFilename
34278: **
34279: ** Either winShmNode.mutex must be held or winShmNode.nRef==0 and
34280: ** winShmMutexHeld() is true when reading or writing any other field
34281: ** in this structure.
34282: **
34283: */
34284: struct winShmNode {
34285:   sqlite3_mutex *mutex;      /* Mutex to access this object */
34286:   char *zFilename;           /* Name of the file */
34287:   winFile hFile;             /* File handle from winOpen */
34288: 
34289:   int szRegion;              /* Size of shared-memory regions */
34290:   int nRegion;               /* Size of array apRegion */
34291:   struct ShmRegion {
34292:     HANDLE hMap;             /* File handle from CreateFileMapping */
34293:     void *pMap;
34294:   } *aRegion;
34295:   DWORD lastErrno;           /* The Windows errno from the last I/O error */
34296: 
34297:   int nRef;                  /* Number of winShm objects pointing to this */
34298:   winShm *pFirst;            /* All winShm objects pointing to this */
34299:   winShmNode *pNext;         /* Next in list of all winShmNode objects */
34300: #ifdef SQLITE_DEBUG
34301:   u8 nextShmId;              /* Next available winShm.id value */
34302: #endif
34303: };
34304: 
34305: /*
34306: ** A global array of all winShmNode objects.
34307: **
34308: ** The winShmMutexHeld() must be true while reading or writing this list.
34309: */
34310: static winShmNode *winShmNodeList = 0;
34311: 
34312: /*
34313: ** Structure used internally by this VFS to record the state of an
34314: ** open shared memory connection.
34315: **
34316: ** The following fields are initialized when this object is created and
34317: ** are read-only thereafter:
34318: **
34319: **    winShm.pShmNode
34320: **    winShm.id
34321: **
34322: ** All other fields are read/write.  The winShm.pShmNode->mutex must be held
34323: ** while accessing any read/write fields.
34324: */
34325: struct winShm {
34326:   winShmNode *pShmNode;      /* The underlying winShmNode object */
34327:   winShm *pNext;             /* Next winShm with the same winShmNode */
34328:   u8 hasMutex;               /* True if holding the winShmNode mutex */
34329:   u16 sharedMask;            /* Mask of shared locks held */
34330:   u16 exclMask;              /* Mask of exclusive locks held */
34331: #ifdef SQLITE_DEBUG
34332:   u8 id;                     /* Id of this connection with its winShmNode */
34333: #endif
34334: };
34335: 
34336: /*
34337: ** Constants used for locking
34338: */
34339: #define WIN_SHM_BASE   ((22+SQLITE_SHM_NLOCK)*4)        /* first lock byte */
34340: #define WIN_SHM_DMS    (WIN_SHM_BASE+SQLITE_SHM_NLOCK)  /* deadman switch */
34341: 
34342: /*
34343: ** Apply advisory locks for all n bytes beginning at ofst.
34344: */
34345: #define _SHM_UNLCK  1
34346: #define _SHM_RDLCK  2
34347: #define _SHM_WRLCK  3
34348: static int winShmSystemLock(
34349:   winShmNode *pFile,    /* Apply locks to this open shared-memory segment */
34350:   int lockType,         /* _SHM_UNLCK, _SHM_RDLCK, or _SHM_WRLCK */
34351:   int ofst,             /* Offset to first byte to be locked/unlocked */
34352:   int nByte             /* Number of bytes to lock or unlock */
34353: ){
34354:   OVERLAPPED ovlp;
34355:   DWORD dwFlags;
34356:   int rc = 0;           /* Result code form Lock/UnlockFileEx() */
34357: 
34358:   /* Access to the winShmNode object is serialized by the caller */
34359:   assert( sqlite3_mutex_held(pFile->mutex) || pFile->nRef==0 );
34360: 
34361:   /* Initialize the locking parameters */
34362:   dwFlags = LOCKFILE_FAIL_IMMEDIATELY;
34363:   if( lockType == _SHM_WRLCK ) dwFlags |= LOCKFILE_EXCLUSIVE_LOCK;
34364: 
34365:   memset(&ovlp, 0, sizeof(OVERLAPPED));
34366:   ovlp.Offset = ofst;
34367: 
34368:   /* Release/Acquire the system-level lock */
34369:   if( lockType==_SHM_UNLCK ){
34370:     rc = osUnlockFileEx(pFile->hFile.h, 0, nByte, 0, &ovlp);
34371:   }else{
34372:     rc = osLockFileEx(pFile->hFile.h, dwFlags, 0, nByte, 0, &ovlp);
34373:   }
34374:   
34375:   if( rc!= 0 ){
34376:     rc = SQLITE_OK;
34377:   }else{
34378:     pFile->lastErrno =  osGetLastError();
34379:     rc = SQLITE_BUSY;
34380:   }
34381: 
34382:   OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n", 
34383:            pFile->hFile.h,
34384:            rc==SQLITE_OK ? "ok" : "failed",
34385:            lockType==_SHM_UNLCK ? "UnlockFileEx" : "LockFileEx",
34386:            pFile->lastErrno));
34387: 
34388:   return rc;
34389: }
34390: 
34391: /* Forward references to VFS methods */
34392: static int winOpen(sqlite3_vfs*,const char*,sqlite3_file*,int,int*);
34393: static int winDelete(sqlite3_vfs *,const char*,int);
34394: 
34395: /*
34396: ** Purge the winShmNodeList list of all entries with winShmNode.nRef==0.
34397: **
34398: ** This is not a VFS shared-memory method; it is a utility function called
34399: ** by VFS shared-memory methods.
34400: */
34401: static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){
34402:   winShmNode **pp;
34403:   winShmNode *p;
34404:   BOOL bRc;
34405:   assert( winShmMutexHeld() );
34406:   pp = &winShmNodeList;
34407:   while( (p = *pp)!=0 ){
34408:     if( p->nRef==0 ){
34409:       int i;
34410:       if( p->mutex ) sqlite3_mutex_free(p->mutex);
34411:       for(i=0; i<p->nRegion; i++){
34412:         bRc = osUnmapViewOfFile(p->aRegion[i].pMap);
34413:         OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n",
34414:                  (int)osGetCurrentProcessId(), i,
34415:                  bRc ? "ok" : "failed"));
34416:         bRc = osCloseHandle(p->aRegion[i].hMap);
34417:         OSTRACE(("SHM-PURGE pid-%d close region=%d %s\n",
34418:                  (int)osGetCurrentProcessId(), i,
34419:                  bRc ? "ok" : "failed"));
34420:       }
34421:       if( p->hFile.h != INVALID_HANDLE_VALUE ){
34422:         SimulateIOErrorBenign(1);
34423:         winClose((sqlite3_file *)&p->hFile);
34424:         SimulateIOErrorBenign(0);
34425:       }
34426:       if( deleteFlag ){
34427:         SimulateIOErrorBenign(1);
34428:         sqlite3BeginBenignMalloc();
34429:         winDelete(pVfs, p->zFilename, 0);
34430:         sqlite3EndBenignMalloc();
34431:         SimulateIOErrorBenign(0);
34432:       }
34433:       *pp = p->pNext;
34434:       sqlite3_free(p->aRegion);
34435:       sqlite3_free(p);
34436:     }else{
34437:       pp = &p->pNext;
34438:     }
34439:   }
34440: }
34441: 
34442: /*
34443: ** Open the shared-memory area associated with database file pDbFd.
34444: **
34445: ** When opening a new shared-memory file, if no other instances of that
34446: ** file are currently open, in this process or in other processes, then
34447: ** the file must be truncated to zero length or have its header cleared.
34448: */
34449: static int winOpenSharedMemory(winFile *pDbFd){
34450:   struct winShm *p;                  /* The connection to be opened */
34451:   struct winShmNode *pShmNode = 0;   /* The underlying mmapped file */
34452:   int rc;                            /* Result code */
34453:   struct winShmNode *pNew;           /* Newly allocated winShmNode */
34454:   int nName;                         /* Size of zName in bytes */
34455: 
34456:   assert( pDbFd->pShm==0 );    /* Not previously opened */
34457: 
34458:   /* Allocate space for the new sqlite3_shm object.  Also speculatively
34459:   ** allocate space for a new winShmNode and filename.
34460:   */
34461:   p = sqlite3_malloc( sizeof(*p) );
34462:   if( p==0 ) return SQLITE_IOERR_NOMEM;
34463:   memset(p, 0, sizeof(*p));
34464:   nName = sqlite3Strlen30(pDbFd->zPath);
34465:   pNew = sqlite3_malloc( sizeof(*pShmNode) + nName + 17 );
34466:   if( pNew==0 ){
34467:     sqlite3_free(p);
34468:     return SQLITE_IOERR_NOMEM;
34469:   }
34470:   memset(pNew, 0, sizeof(*pNew) + nName + 17);
34471:   pNew->zFilename = (char*)&pNew[1];
34472:   sqlite3_snprintf(nName+15, pNew->zFilename, "%s-shm", pDbFd->zPath);
34473:   sqlite3FileSuffix3(pDbFd->zPath, pNew->zFilename); 
34474: 
34475:   /* Look to see if there is an existing winShmNode that can be used.
34476:   ** If no matching winShmNode currently exists, create a new one.
34477:   */
34478:   winShmEnterMutex();
34479:   for(pShmNode = winShmNodeList; pShmNode; pShmNode=pShmNode->pNext){
34480:     /* TBD need to come up with better match here.  Perhaps
34481:     ** use FILE_ID_BOTH_DIR_INFO Structure.
34482:     */
34483:     if( sqlite3StrICmp(pShmNode->zFilename, pNew->zFilename)==0 ) break;
34484:   }
34485:   if( pShmNode ){
34486:     sqlite3_free(pNew);
34487:   }else{
34488:     pShmNode = pNew;
34489:     pNew = 0;
34490:     ((winFile*)(&pShmNode->hFile))->h = INVALID_HANDLE_VALUE;
34491:     pShmNode->pNext = winShmNodeList;
34492:     winShmNodeList = pShmNode;
34493: 
34494:     pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
34495:     if( pShmNode->mutex==0 ){
34496:       rc = SQLITE_IOERR_NOMEM;
34497:       goto shm_open_err;
34498:     }
34499: 
34500:     rc = winOpen(pDbFd->pVfs,
34501:                  pShmNode->zFilename,             /* Name of the file (UTF-8) */
34502:                  (sqlite3_file*)&pShmNode->hFile,  /* File handle here */
34503:                  SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, /* Mode flags */
34504:                  0);
34505:     if( SQLITE_OK!=rc ){
34506:       goto shm_open_err;
34507:     }
34508: 
34509:     /* Check to see if another process is holding the dead-man switch.
34510:     ** If not, truncate the file to zero length. 
34511:     */
34512:     if( winShmSystemLock(pShmNode, _SHM_WRLCK, WIN_SHM_DMS, 1)==SQLITE_OK ){
34513:       rc = winTruncate((sqlite3_file *)&pShmNode->hFile, 0);
34514:       if( rc!=SQLITE_OK ){
34515:         rc = winLogError(SQLITE_IOERR_SHMOPEN, osGetLastError(),
34516:                  "winOpenShm", pDbFd->zPath);
34517:       }
34518:     }
34519:     if( rc==SQLITE_OK ){
34520:       winShmSystemLock(pShmNode, _SHM_UNLCK, WIN_SHM_DMS, 1);
34521:       rc = winShmSystemLock(pShmNode, _SHM_RDLCK, WIN_SHM_DMS, 1);
34522:     }
34523:     if( rc ) goto shm_open_err;
34524:   }
34525: 
34526:   /* Make the new connection a child of the winShmNode */
34527:   p->pShmNode = pShmNode;
34528: #ifdef SQLITE_DEBUG
34529:   p->id = pShmNode->nextShmId++;
34530: #endif
34531:   pShmNode->nRef++;
34532:   pDbFd->pShm = p;
34533:   winShmLeaveMutex();
34534: 
34535:   /* The reference count on pShmNode has already been incremented under
34536:   ** the cover of the winShmEnterMutex() mutex and the pointer from the
34537:   ** new (struct winShm) object to the pShmNode has been set. All that is
34538:   ** left to do is to link the new object into the linked list starting
34539:   ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex 
34540:   ** mutex.
34541:   */
34542:   sqlite3_mutex_enter(pShmNode->mutex);
34543:   p->pNext = pShmNode->pFirst;
34544:   pShmNode->pFirst = p;
34545:   sqlite3_mutex_leave(pShmNode->mutex);
34546:   return SQLITE_OK;
34547: 
34548:   /* Jump here on any error */
34549: shm_open_err:
34550:   winShmSystemLock(pShmNode, _SHM_UNLCK, WIN_SHM_DMS, 1);
34551:   winShmPurge(pDbFd->pVfs, 0);      /* This call frees pShmNode if required */
34552:   sqlite3_free(p);
34553:   sqlite3_free(pNew);
34554:   winShmLeaveMutex();
34555:   return rc;
34556: }
34557: 
34558: /*
34559: ** Close a connection to shared-memory.  Delete the underlying 
34560: ** storage if deleteFlag is true.
34561: */
34562: static int winShmUnmap(
34563:   sqlite3_file *fd,          /* Database holding shared memory */
34564:   int deleteFlag             /* Delete after closing if true */
34565: ){
34566:   winFile *pDbFd;       /* Database holding shared-memory */
34567:   winShm *p;            /* The connection to be closed */
34568:   winShmNode *pShmNode; /* The underlying shared-memory file */
34569:   winShm **pp;          /* For looping over sibling connections */
34570: 
34571:   pDbFd = (winFile*)fd;
34572:   p = pDbFd->pShm;
34573:   if( p==0 ) return SQLITE_OK;
34574:   pShmNode = p->pShmNode;
34575: 
34576:   /* Remove connection p from the set of connections associated
34577:   ** with pShmNode */
34578:   sqlite3_mutex_enter(pShmNode->mutex);
34579:   for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){}
34580:   *pp = p->pNext;
34581: 
34582:   /* Free the connection p */
34583:   sqlite3_free(p);
34584:   pDbFd->pShm = 0;
34585:   sqlite3_mutex_leave(pShmNode->mutex);
34586: 
34587:   /* If pShmNode->nRef has reached 0, then close the underlying
34588:   ** shared-memory file, too */
34589:   winShmEnterMutex();
34590:   assert( pShmNode->nRef>0 );
34591:   pShmNode->nRef--;
34592:   if( pShmNode->nRef==0 ){
34593:     winShmPurge(pDbFd->pVfs, deleteFlag);
34594:   }
34595:   winShmLeaveMutex();
34596: 
34597:   return SQLITE_OK;
34598: }
34599: 
34600: /*
34601: ** Change the lock state for a shared-memory segment.
34602: */
34603: static int winShmLock(
34604:   sqlite3_file *fd,          /* Database file holding the shared memory */
34605:   int ofst,                  /* First lock to acquire or release */
34606:   int n,                     /* Number of locks to acquire or release */
34607:   int flags                  /* What to do with the lock */
34608: ){
34609:   winFile *pDbFd = (winFile*)fd;        /* Connection holding shared memory */
34610:   winShm *p = pDbFd->pShm;              /* The shared memory being locked */
34611:   winShm *pX;                           /* For looping over all siblings */
34612:   winShmNode *pShmNode = p->pShmNode;
34613:   int rc = SQLITE_OK;                   /* Result code */
34614:   u16 mask;                             /* Mask of locks to take or release */
34615: 
34616:   assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
34617:   assert( n>=1 );
34618:   assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
34619:        || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
34620:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
34621:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
34622:   assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
34623: 
34624:   mask = (u16)((1U<<(ofst+n)) - (1U<<ofst));
34625:   assert( n>1 || mask==(1<<ofst) );
34626:   sqlite3_mutex_enter(pShmNode->mutex);
34627:   if( flags & SQLITE_SHM_UNLOCK ){
34628:     u16 allMask = 0; /* Mask of locks held by siblings */
34629: 
34630:     /* See if any siblings hold this same lock */
34631:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
34632:       if( pX==p ) continue;
34633:       assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
34634:       allMask |= pX->sharedMask;
34635:     }
34636: 
34637:     /* Unlock the system-level locks */
34638:     if( (mask & allMask)==0 ){
34639:       rc = winShmSystemLock(pShmNode, _SHM_UNLCK, ofst+WIN_SHM_BASE, n);
34640:     }else{
34641:       rc = SQLITE_OK;
34642:     }
34643: 
34644:     /* Undo the local locks */
34645:     if( rc==SQLITE_OK ){
34646:       p->exclMask &= ~mask;
34647:       p->sharedMask &= ~mask;
34648:     } 
34649:   }else if( flags & SQLITE_SHM_SHARED ){
34650:     u16 allShared = 0;  /* Union of locks held by connections other than "p" */
34651: 
34652:     /* Find out which shared locks are already held by sibling connections.
34653:     ** If any sibling already holds an exclusive lock, go ahead and return
34654:     ** SQLITE_BUSY.
34655:     */
34656:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
34657:       if( (pX->exclMask & mask)!=0 ){
34658:         rc = SQLITE_BUSY;
34659:         break;
34660:       }
34661:       allShared |= pX->sharedMask;
34662:     }
34663: 
34664:     /* Get shared locks at the system level, if necessary */
34665:     if( rc==SQLITE_OK ){
34666:       if( (allShared & mask)==0 ){
34667:         rc = winShmSystemLock(pShmNode, _SHM_RDLCK, ofst+WIN_SHM_BASE, n);
34668:       }else{
34669:         rc = SQLITE_OK;
34670:       }
34671:     }
34672: 
34673:     /* Get the local shared locks */
34674:     if( rc==SQLITE_OK ){
34675:       p->sharedMask |= mask;
34676:     }
34677:   }else{
34678:     /* Make sure no sibling connections hold locks that will block this
34679:     ** lock.  If any do, return SQLITE_BUSY right away.
34680:     */
34681:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
34682:       if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
34683:         rc = SQLITE_BUSY;
34684:         break;
34685:       }
34686:     }
34687:   
34688:     /* Get the exclusive locks at the system level.  Then if successful
34689:     ** also mark the local connection as being locked.
34690:     */
34691:     if( rc==SQLITE_OK ){
34692:       rc = winShmSystemLock(pShmNode, _SHM_WRLCK, ofst+WIN_SHM_BASE, n);
34693:       if( rc==SQLITE_OK ){
34694:         assert( (p->sharedMask & mask)==0 );
34695:         p->exclMask |= mask;
34696:       }
34697:     }
34698:   }
34699:   sqlite3_mutex_leave(pShmNode->mutex);
34700:   OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n",
34701:            p->id, (int)osGetCurrentProcessId(), p->sharedMask, p->exclMask,
34702:            rc ? "failed" : "ok"));
34703:   return rc;
34704: }
34705: 
34706: /*
34707: ** Implement a memory barrier or memory fence on shared memory.  
34708: **
34709: ** All loads and stores begun before the barrier must complete before
34710: ** any load or store begun after the barrier.
34711: */
34712: static void winShmBarrier(
34713:   sqlite3_file *fd          /* Database holding the shared memory */
34714: ){
34715:   UNUSED_PARAMETER(fd);
34716:   /* MemoryBarrier(); // does not work -- do not know why not */
34717:   winShmEnterMutex();
34718:   winShmLeaveMutex();
34719: }
34720: 
34721: /*
34722: ** This function is called to obtain a pointer to region iRegion of the 
34723: ** shared-memory associated with the database file fd. Shared-memory regions 
34724: ** are numbered starting from zero. Each shared-memory region is szRegion 
34725: ** bytes in size.
34726: **
34727: ** If an error occurs, an error code is returned and *pp is set to NULL.
34728: **
34729: ** Otherwise, if the isWrite parameter is 0 and the requested shared-memory
34730: ** region has not been allocated (by any client, including one running in a
34731: ** separate process), then *pp is set to NULL and SQLITE_OK returned. If 
34732: ** isWrite is non-zero and the requested shared-memory region has not yet 
34733: ** been allocated, it is allocated by this function.
34734: **
34735: ** If the shared-memory region has already been allocated or is allocated by
34736: ** this call as described above, then it is mapped into this processes 
34737: ** address space (if it is not already), *pp is set to point to the mapped 
34738: ** memory and SQLITE_OK returned.
34739: */
34740: static int winShmMap(
34741:   sqlite3_file *fd,               /* Handle open on database file */
34742:   int iRegion,                    /* Region to retrieve */
34743:   int szRegion,                   /* Size of regions */
34744:   int isWrite,                    /* True to extend file if necessary */
34745:   void volatile **pp              /* OUT: Mapped memory */
34746: ){
34747:   winFile *pDbFd = (winFile*)fd;
34748:   winShm *p = pDbFd->pShm;
34749:   winShmNode *pShmNode;
34750:   int rc = SQLITE_OK;
34751: 
34752:   if( !p ){
34753:     rc = winOpenSharedMemory(pDbFd);
34754:     if( rc!=SQLITE_OK ) return rc;
34755:     p = pDbFd->pShm;
34756:   }
34757:   pShmNode = p->pShmNode;
34758: 
34759:   sqlite3_mutex_enter(pShmNode->mutex);
34760:   assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 );
34761: 
34762:   if( pShmNode->nRegion<=iRegion ){
34763:     struct ShmRegion *apNew;           /* New aRegion[] array */
34764:     int nByte = (iRegion+1)*szRegion;  /* Minimum required file size */
34765:     sqlite3_int64 sz;                  /* Current size of wal-index file */
34766: 
34767:     pShmNode->szRegion = szRegion;
34768: 
34769:     /* The requested region is not mapped into this processes address space.
34770:     ** Check to see if it has been allocated (i.e. if the wal-index file is
34771:     ** large enough to contain the requested region).
34772:     */
34773:     rc = winFileSize((sqlite3_file *)&pShmNode->hFile, &sz);
34774:     if( rc!=SQLITE_OK ){
34775:       rc = winLogError(SQLITE_IOERR_SHMSIZE, osGetLastError(),
34776:                "winShmMap1", pDbFd->zPath);
34777:       goto shmpage_out;
34778:     }
34779: 
34780:     if( sz<nByte ){
34781:       /* The requested memory region does not exist. If isWrite is set to
34782:       ** zero, exit early. *pp will be set to NULL and SQLITE_OK returned.
34783:       **
34784:       ** Alternatively, if isWrite is non-zero, use ftruncate() to allocate
34785:       ** the requested memory region.
34786:       */
34787:       if( !isWrite ) goto shmpage_out;
34788:       rc = winTruncate((sqlite3_file *)&pShmNode->hFile, nByte);
34789:       if( rc!=SQLITE_OK ){
34790:         rc = winLogError(SQLITE_IOERR_SHMSIZE, osGetLastError(),
34791:                  "winShmMap2", pDbFd->zPath);
34792:         goto shmpage_out;
34793:       }
34794:     }
34795: 
34796:     /* Map the requested memory region into this processes address space. */
34797:     apNew = (struct ShmRegion *)sqlite3_realloc(
34798:         pShmNode->aRegion, (iRegion+1)*sizeof(apNew[0])
34799:     );
34800:     if( !apNew ){
34801:       rc = SQLITE_IOERR_NOMEM;
34802:       goto shmpage_out;
34803:     }
34804:     pShmNode->aRegion = apNew;
34805: 
34806:     while( pShmNode->nRegion<=iRegion ){
34807:       HANDLE hMap;                /* file-mapping handle */
34808:       void *pMap = 0;             /* Mapped memory region */
34809:      
34810:       hMap = osCreateFileMapping(pShmNode->hFile.h, 
34811:           NULL, PAGE_READWRITE, 0, nByte, NULL
34812:       );
34813:       OSTRACE(("SHM-MAP pid-%d create region=%d nbyte=%d %s\n",
34814:                (int)osGetCurrentProcessId(), pShmNode->nRegion, nByte,
34815:                hMap ? "ok" : "failed"));
34816:       if( hMap ){
34817:         int iOffset = pShmNode->nRegion*szRegion;
34818:         int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
34819:         pMap = osMapViewOfFile(hMap, FILE_MAP_WRITE | FILE_MAP_READ,
34820:             0, iOffset - iOffsetShift, szRegion + iOffsetShift
34821:         );
34822:         OSTRACE(("SHM-MAP pid-%d map region=%d offset=%d size=%d %s\n",
34823:                  (int)osGetCurrentProcessId(), pShmNode->nRegion, iOffset,
34824:                  szRegion, pMap ? "ok" : "failed"));
34825:       }
34826:       if( !pMap ){
34827:         pShmNode->lastErrno = osGetLastError();
34828:         rc = winLogError(SQLITE_IOERR_SHMMAP, pShmNode->lastErrno,
34829:                  "winShmMap3", pDbFd->zPath);
34830:         if( hMap ) osCloseHandle(hMap);
34831:         goto shmpage_out;
34832:       }
34833: 
34834:       pShmNode->aRegion[pShmNode->nRegion].pMap = pMap;
34835:       pShmNode->aRegion[pShmNode->nRegion].hMap = hMap;
34836:       pShmNode->nRegion++;
34837:     }
34838:   }
34839: 
34840: shmpage_out:
34841:   if( pShmNode->nRegion>iRegion ){
34842:     int iOffset = iRegion*szRegion;
34843:     int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
34844:     char *p = (char *)pShmNode->aRegion[iRegion].pMap;
34845:     *pp = (void *)&p[iOffsetShift];
34846:   }else{
34847:     *pp = 0;
34848:   }
34849:   sqlite3_mutex_leave(pShmNode->mutex);
34850:   return rc;
34851: }
34852: 
34853: #else
34854: # define winShmMap     0
34855: # define winShmLock    0
34856: # define winShmBarrier 0
34857: # define winShmUnmap   0
34858: #endif /* #ifndef SQLITE_OMIT_WAL */
34859: 
34860: /*
34861: ** Here ends the implementation of all sqlite3_file methods.
34862: **
34863: ********************** End sqlite3_file Methods *******************************
34864: ******************************************************************************/
34865: 
34866: /*
34867: ** This vector defines all the methods that can operate on an
34868: ** sqlite3_file for win32.
34869: */
34870: static const sqlite3_io_methods winIoMethod = {
34871:   2,                              /* iVersion */
34872:   winClose,                       /* xClose */
34873:   winRead,                        /* xRead */
34874:   winWrite,                       /* xWrite */
34875:   winTruncate,                    /* xTruncate */
34876:   winSync,                        /* xSync */
34877:   winFileSize,                    /* xFileSize */
34878:   winLock,                        /* xLock */
34879:   winUnlock,                      /* xUnlock */
34880:   winCheckReservedLock,           /* xCheckReservedLock */
34881:   winFileControl,                 /* xFileControl */
34882:   winSectorSize,                  /* xSectorSize */
34883:   winDeviceCharacteristics,       /* xDeviceCharacteristics */
34884:   winShmMap,                      /* xShmMap */
34885:   winShmLock,                     /* xShmLock */
34886:   winShmBarrier,                  /* xShmBarrier */
34887:   winShmUnmap                     /* xShmUnmap */
34888: };
34889: 
34890: /****************************************************************************
34891: **************************** sqlite3_vfs methods ****************************
34892: **
34893: ** This division contains the implementation of methods on the
34894: ** sqlite3_vfs object.
34895: */
34896: 
34897: /*
34898: ** Convert a UTF-8 filename into whatever form the underlying
34899: ** operating system wants filenames in.  Space to hold the result
34900: ** is obtained from malloc and must be freed by the calling
34901: ** function.
34902: */
34903: static void *convertUtf8Filename(const char *zFilename){
34904:   void *zConverted = 0;
34905:   if( isNT() ){
34906:     zConverted = utf8ToUnicode(zFilename);
34907: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
34908: */
34909: #if SQLITE_OS_WINCE==0
34910:   }else{
34911:     zConverted = sqlite3_win32_utf8_to_mbcs(zFilename);
34912: #endif
34913:   }
34914:   /* caller will handle out of memory */
34915:   return zConverted;
34916: }
34917: 
34918: /*
34919: ** Create a temporary file name in zBuf.  zBuf must be big enough to
34920: ** hold at pVfs->mxPathname characters.
34921: */
34922: static int getTempname(int nBuf, char *zBuf){
34923:   static char zChars[] =
34924:     "abcdefghijklmnopqrstuvwxyz"
34925:     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
34926:     "0123456789";
34927:   size_t i, j;
34928:   char zTempPath[MAX_PATH+2];
34929: 
34930:   /* It's odd to simulate an io-error here, but really this is just
34931:   ** using the io-error infrastructure to test that SQLite handles this
34932:   ** function failing. 
34933:   */
34934:   SimulateIOError( return SQLITE_IOERR );
34935: 
34936:   if( sqlite3_temp_directory ){
34937:     sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", sqlite3_temp_directory);
34938:   }else if( isNT() ){
34939:     char *zMulti;
34940:     WCHAR zWidePath[MAX_PATH];
34941:     osGetTempPathW(MAX_PATH-30, zWidePath);
34942:     zMulti = unicodeToUtf8(zWidePath);
34943:     if( zMulti ){
34944:       sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zMulti);
34945:       sqlite3_free(zMulti);
34946:     }else{
34947:       return SQLITE_IOERR_NOMEM;
34948:     }
34949: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
34950: ** Since the ANSI version of these Windows API do not exist for WINCE,
34951: ** it's important to not reference them for WINCE builds.
34952: */
34953: #if SQLITE_OS_WINCE==0
34954:   }else{
34955:     char *zUtf8;
34956:     char zMbcsPath[MAX_PATH];
34957:     osGetTempPathA(MAX_PATH-30, zMbcsPath);
34958:     zUtf8 = sqlite3_win32_mbcs_to_utf8(zMbcsPath);
34959:     if( zUtf8 ){
34960:       sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zUtf8);
34961:       sqlite3_free(zUtf8);
34962:     }else{
34963:       return SQLITE_IOERR_NOMEM;
34964:     }
34965: #endif
34966:   }
34967: 
34968:   /* Check that the output buffer is large enough for the temporary file 
34969:   ** name. If it is not, return SQLITE_ERROR.
34970:   */
34971:   if( (sqlite3Strlen30(zTempPath) + sqlite3Strlen30(SQLITE_TEMP_FILE_PREFIX) + 18) >= nBuf ){
34972:     return SQLITE_ERROR;
34973:   }
34974: 
34975:   for(i=sqlite3Strlen30(zTempPath); i>0 && zTempPath[i-1]=='\\'; i--){}
34976:   zTempPath[i] = 0;
34977: 
34978:   sqlite3_snprintf(nBuf-18, zBuf,
34979:                    "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath);
34980:   j = sqlite3Strlen30(zBuf);
34981:   sqlite3_randomness(15, &zBuf[j]);
34982:   for(i=0; i<15; i++, j++){
34983:     zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
34984:   }
34985:   zBuf[j] = 0;
34986:   zBuf[j+1] = 0;
34987: 
34988:   OSTRACE(("TEMP FILENAME: %s\n", zBuf));
34989:   return SQLITE_OK; 
34990: }
34991: 
34992: /*
34993: ** Open a file.
34994: */
34995: static int winOpen(
34996:   sqlite3_vfs *pVfs,        /* Not used */
34997:   const char *zName,        /* Name of the file (UTF-8) */
34998:   sqlite3_file *id,         /* Write the SQLite file handle here */
34999:   int flags,                /* Open mode flags */
35000:   int *pOutFlags            /* Status return flags */
35001: ){
35002:   HANDLE h;
35003:   DWORD lastErrno;
35004:   DWORD dwDesiredAccess;
35005:   DWORD dwShareMode;
35006:   DWORD dwCreationDisposition;
35007:   DWORD dwFlagsAndAttributes = 0;
35008: #if SQLITE_OS_WINCE
35009:   int isTemp = 0;
35010: #endif
35011:   winFile *pFile = (winFile*)id;
35012:   void *zConverted;              /* Filename in OS encoding */
35013:   const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */
35014:   int cnt = 0;
35015: 
35016:   /* If argument zPath is a NULL pointer, this function is required to open
35017:   ** a temporary file. Use this buffer to store the file name in.
35018:   */
35019:   char zTmpname[MAX_PATH+2];     /* Buffer used to create temp filename */
35020: 
35021:   int rc = SQLITE_OK;            /* Function Return Code */
35022: #if !defined(NDEBUG) || SQLITE_OS_WINCE
35023:   int eType = flags&0xFFFFFF00;  /* Type of file to open */
35024: #endif
35025: 
35026:   int isExclusive  = (flags & SQLITE_OPEN_EXCLUSIVE);
35027:   int isDelete     = (flags & SQLITE_OPEN_DELETEONCLOSE);
35028:   int isCreate     = (flags & SQLITE_OPEN_CREATE);
35029: #ifndef NDEBUG
35030:   int isReadonly   = (flags & SQLITE_OPEN_READONLY);
35031: #endif
35032:   int isReadWrite  = (flags & SQLITE_OPEN_READWRITE);
35033: 
35034: #ifndef NDEBUG
35035:   int isOpenJournal = (isCreate && (
35036:         eType==SQLITE_OPEN_MASTER_JOURNAL 
35037:      || eType==SQLITE_OPEN_MAIN_JOURNAL 
35038:      || eType==SQLITE_OPEN_WAL
35039:   ));
35040: #endif
35041: 
35042:   /* Check the following statements are true: 
35043:   **
35044:   **   (a) Exactly one of the READWRITE and READONLY flags must be set, and 
35045:   **   (b) if CREATE is set, then READWRITE must also be set, and
35046:   **   (c) if EXCLUSIVE is set, then CREATE must also be set.
35047:   **   (d) if DELETEONCLOSE is set, then CREATE must also be set.
35048:   */
35049:   assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
35050:   assert(isCreate==0 || isReadWrite);
35051:   assert(isExclusive==0 || isCreate);
35052:   assert(isDelete==0 || isCreate);
35053: 
35054:   /* The main DB, main journal, WAL file and master journal are never 
35055:   ** automatically deleted. Nor are they ever temporary files.  */
35056:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
35057:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
35058:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
35059:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
35060: 
35061:   /* Assert that the upper layer has set one of the "file-type" flags. */
35062:   assert( eType==SQLITE_OPEN_MAIN_DB      || eType==SQLITE_OPEN_TEMP_DB 
35063:        || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL 
35064:        || eType==SQLITE_OPEN_SUBJOURNAL   || eType==SQLITE_OPEN_MASTER_JOURNAL 
35065:        || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
35066:   );
35067: 
35068:   assert( id!=0 );
35069:   UNUSED_PARAMETER(pVfs);
35070: 
35071:   pFile->h = INVALID_HANDLE_VALUE;
35072: 
35073:   /* If the second argument to this function is NULL, generate a 
35074:   ** temporary file name to use 
35075:   */
35076:   if( !zUtf8Name ){
35077:     assert(isDelete && !isOpenJournal);
35078:     rc = getTempname(MAX_PATH+2, zTmpname);
35079:     if( rc!=SQLITE_OK ){
35080:       return rc;
35081:     }
35082:     zUtf8Name = zTmpname;
35083:   }
35084: 
35085:   /* Database filenames are double-zero terminated if they are not
35086:   ** URIs with parameters.  Hence, they can always be passed into
35087:   ** sqlite3_uri_parameter().
35088:   */
35089:   assert( (eType!=SQLITE_OPEN_MAIN_DB) || (flags & SQLITE_OPEN_URI) ||
35090:         zUtf8Name[strlen(zUtf8Name)+1]==0 );
35091: 
35092:   /* Convert the filename to the system encoding. */
35093:   zConverted = convertUtf8Filename(zUtf8Name);
35094:   if( zConverted==0 ){
35095:     return SQLITE_IOERR_NOMEM;
35096:   }
35097: 
35098:   if( isReadWrite ){
35099:     dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
35100:   }else{
35101:     dwDesiredAccess = GENERIC_READ;
35102:   }
35103: 
35104:   /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is 
35105:   ** created. SQLite doesn't use it to indicate "exclusive access" 
35106:   ** as it is usually understood.
35107:   */
35108:   if( isExclusive ){
35109:     /* Creates a new file, only if it does not already exist. */
35110:     /* If the file exists, it fails. */
35111:     dwCreationDisposition = CREATE_NEW;
35112:   }else if( isCreate ){
35113:     /* Open existing file, or create if it doesn't exist */
35114:     dwCreationDisposition = OPEN_ALWAYS;
35115:   }else{
35116:     /* Opens a file, only if it exists. */
35117:     dwCreationDisposition = OPEN_EXISTING;
35118:   }
35119: 
35120:   dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
35121: 
35122:   if( isDelete ){
35123: #if SQLITE_OS_WINCE
35124:     dwFlagsAndAttributes = FILE_ATTRIBUTE_HIDDEN;
35125:     isTemp = 1;
35126: #else
35127:     dwFlagsAndAttributes = FILE_ATTRIBUTE_TEMPORARY
35128:                                | FILE_ATTRIBUTE_HIDDEN
35129:                                | FILE_FLAG_DELETE_ON_CLOSE;
35130: #endif
35131:   }else{
35132:     dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL;
35133:   }
35134:   /* Reports from the internet are that performance is always
35135:   ** better if FILE_FLAG_RANDOM_ACCESS is used.  Ticket #2699. */
35136: #if SQLITE_OS_WINCE
35137:   dwFlagsAndAttributes |= FILE_FLAG_RANDOM_ACCESS;
35138: #endif
35139: 
35140:   if( isNT() ){
35141:     while( (h = osCreateFileW((LPCWSTR)zConverted,
35142:                               dwDesiredAccess,
35143:                               dwShareMode, NULL,
35144:                               dwCreationDisposition,
35145:                               dwFlagsAndAttributes,
35146:                               NULL))==INVALID_HANDLE_VALUE &&
35147:                               retryIoerr(&cnt, &lastErrno) ){}
35148: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
35149: ** Since the ANSI version of these Windows API do not exist for WINCE,
35150: ** it's important to not reference them for WINCE builds.
35151: */
35152: #if SQLITE_OS_WINCE==0
35153:   }else{
35154:     while( (h = osCreateFileA((LPCSTR)zConverted,
35155:                               dwDesiredAccess,
35156:                               dwShareMode, NULL,
35157:                               dwCreationDisposition,
35158:                               dwFlagsAndAttributes,
35159:                               NULL))==INVALID_HANDLE_VALUE &&
35160:                               retryIoerr(&cnt, &lastErrno) ){}
35161: #endif
35162:   }
35163: 
35164:   logIoerr(cnt);
35165: 
35166:   OSTRACE(("OPEN %d %s 0x%lx %s\n", 
35167:            h, zName, dwDesiredAccess, 
35168:            h==INVALID_HANDLE_VALUE ? "failed" : "ok"));
35169: 
35170:   if( h==INVALID_HANDLE_VALUE ){
35171:     pFile->lastErrno = lastErrno;
35172:     winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name);
35173:     sqlite3_free(zConverted);
35174:     if( isReadWrite && !isExclusive ){
35175:       return winOpen(pVfs, zName, id, 
35176:              ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)), pOutFlags);
35177:     }else{
35178:       return SQLITE_CANTOPEN_BKPT;
35179:     }
35180:   }
35181: 
35182:   if( pOutFlags ){
35183:     if( isReadWrite ){
35184:       *pOutFlags = SQLITE_OPEN_READWRITE;
35185:     }else{
35186:       *pOutFlags = SQLITE_OPEN_READONLY;
35187:     }
35188:   }
35189: 
35190:   memset(pFile, 0, sizeof(*pFile));
35191:   pFile->pMethod = &winIoMethod;
35192:   pFile->h = h;
35193:   pFile->lastErrno = NO_ERROR;
35194:   pFile->pVfs = pVfs;
35195:   pFile->pShm = 0;
35196:   pFile->zPath = zName;
35197:   if( sqlite3_uri_boolean(zName, "psow", SQLITE_POWERSAFE_OVERWRITE) ){
35198:     pFile->ctrlFlags |= WINFILE_PSOW;
35199:   }
35200: 
35201: #if SQLITE_OS_WINCE
35202:   if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB
35203:        && !winceCreateLock(zName, pFile)
35204:   ){
35205:     osCloseHandle(h);
35206:     sqlite3_free(zConverted);
35207:     return SQLITE_CANTOPEN_BKPT;
35208:   }
35209:   if( isTemp ){
35210:     pFile->zDeleteOnClose = zConverted;
35211:   }else
35212: #endif
35213:   {
35214:     sqlite3_free(zConverted);
35215:   }
35216: 
35217:   OpenCounter(+1);
35218:   return rc;
35219: }
35220: 
35221: /*
35222: ** Delete the named file.
35223: **
35224: ** Note that Windows does not allow a file to be deleted if some other
35225: ** process has it open.  Sometimes a virus scanner or indexing program
35226: ** will open a journal file shortly after it is created in order to do
35227: ** whatever it does.  While this other process is holding the
35228: ** file open, we will be unable to delete it.  To work around this
35229: ** problem, we delay 100 milliseconds and try to delete again.  Up
35230: ** to MX_DELETION_ATTEMPTs deletion attempts are run before giving
35231: ** up and returning an error.
35232: */
35233: static int winDelete(
35234:   sqlite3_vfs *pVfs,          /* Not used on win32 */
35235:   const char *zFilename,      /* Name of file to delete */
35236:   int syncDir                 /* Not used on win32 */
35237: ){
35238:   int cnt = 0;
35239:   int rc;
35240:   DWORD lastErrno;
35241:   void *zConverted;
35242:   UNUSED_PARAMETER(pVfs);
35243:   UNUSED_PARAMETER(syncDir);
35244: 
35245:   SimulateIOError(return SQLITE_IOERR_DELETE);
35246:   zConverted = convertUtf8Filename(zFilename);
35247:   if( zConverted==0 ){
35248:     return SQLITE_IOERR_NOMEM;
35249:   }
35250:   if( isNT() ){
35251:     rc = 1;
35252:     while( osGetFileAttributesW(zConverted)!=INVALID_FILE_ATTRIBUTES &&
35253:          (rc = osDeleteFileW(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){}
35254:     rc = rc ? SQLITE_OK : SQLITE_ERROR;
35255: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
35256: ** Since the ANSI version of these Windows API do not exist for WINCE,
35257: ** it's important to not reference them for WINCE builds.
35258: */
35259: #if SQLITE_OS_WINCE==0
35260:   }else{
35261:     rc = 1;
35262:     while( osGetFileAttributesA(zConverted)!=INVALID_FILE_ATTRIBUTES &&
35263:          (rc = osDeleteFileA(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){}
35264:     rc = rc ? SQLITE_OK : SQLITE_ERROR;
35265: #endif
35266:   }
35267:   if( rc ){
35268:     rc = winLogError(SQLITE_IOERR_DELETE, lastErrno,
35269:              "winDelete", zFilename);
35270:   }else{
35271:     logIoerr(cnt);
35272:   }
35273:   sqlite3_free(zConverted);
35274:   OSTRACE(("DELETE \"%s\" %s\n", zFilename, (rc ? "failed" : "ok" )));
35275:   return rc;
35276: }
35277: 
35278: /*
35279: ** Check the existance and status of a file.
35280: */
35281: static int winAccess(
35282:   sqlite3_vfs *pVfs,         /* Not used on win32 */
35283:   const char *zFilename,     /* Name of file to check */
35284:   int flags,                 /* Type of test to make on this file */
35285:   int *pResOut               /* OUT: Result */
35286: ){
35287:   DWORD attr;
35288:   int rc = 0;
35289:   DWORD lastErrno;
35290:   void *zConverted;
35291:   UNUSED_PARAMETER(pVfs);
35292: 
35293:   SimulateIOError( return SQLITE_IOERR_ACCESS; );
35294:   zConverted = convertUtf8Filename(zFilename);
35295:   if( zConverted==0 ){
35296:     return SQLITE_IOERR_NOMEM;
35297:   }
35298:   if( isNT() ){
35299:     int cnt = 0;
35300:     WIN32_FILE_ATTRIBUTE_DATA sAttrData;
35301:     memset(&sAttrData, 0, sizeof(sAttrData));
35302:     while( !(rc = osGetFileAttributesExW((LPCWSTR)zConverted,
35303:                              GetFileExInfoStandard, 
35304:                              &sAttrData)) && retryIoerr(&cnt, &lastErrno) ){}
35305:     if( rc ){
35306:       /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
35307:       ** as if it does not exist.
35308:       */
35309:       if(    flags==SQLITE_ACCESS_EXISTS
35310:           && sAttrData.nFileSizeHigh==0 
35311:           && sAttrData.nFileSizeLow==0 ){
35312:         attr = INVALID_FILE_ATTRIBUTES;
35313:       }else{
35314:         attr = sAttrData.dwFileAttributes;
35315:       }
35316:     }else{
35317:       logIoerr(cnt);
35318:       if( lastErrno!=ERROR_FILE_NOT_FOUND ){
35319:         winLogError(SQLITE_IOERR_ACCESS, lastErrno, "winAccess", zFilename);
35320:         sqlite3_free(zConverted);
35321:         return SQLITE_IOERR_ACCESS;
35322:       }else{
35323:         attr = INVALID_FILE_ATTRIBUTES;
35324:       }
35325:     }
35326: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
35327: ** Since the ANSI version of these Windows API do not exist for WINCE,
35328: ** it's important to not reference them for WINCE builds.
35329: */
35330: #if SQLITE_OS_WINCE==0
35331:   }else{
35332:     attr = osGetFileAttributesA((char*)zConverted);
35333: #endif
35334:   }
35335:   sqlite3_free(zConverted);
35336:   switch( flags ){
35337:     case SQLITE_ACCESS_READ:
35338:     case SQLITE_ACCESS_EXISTS:
35339:       rc = attr!=INVALID_FILE_ATTRIBUTES;
35340:       break;
35341:     case SQLITE_ACCESS_READWRITE:
35342:       rc = attr!=INVALID_FILE_ATTRIBUTES &&
35343:              (attr & FILE_ATTRIBUTE_READONLY)==0;
35344:       break;
35345:     default:
35346:       assert(!"Invalid flags argument");
35347:   }
35348:   *pResOut = rc;
35349:   return SQLITE_OK;
35350: }
35351: 
35352: 
35353: /*
35354: ** Turn a relative pathname into a full pathname.  Write the full
35355: ** pathname into zOut[].  zOut[] will be at least pVfs->mxPathname
35356: ** bytes in size.
35357: */
35358: static int winFullPathname(
35359:   sqlite3_vfs *pVfs,            /* Pointer to vfs object */
35360:   const char *zRelative,        /* Possibly relative input path */
35361:   int nFull,                    /* Size of output buffer in bytes */
35362:   char *zFull                   /* Output buffer */
35363: ){
35364:   
35365: #if defined(__CYGWIN__)
35366:   SimulateIOError( return SQLITE_ERROR );
35367:   UNUSED_PARAMETER(nFull);
35368:   cygwin_conv_to_full_win32_path(zRelative, zFull);
35369:   return SQLITE_OK;
35370: #endif
35371: 
35372: #if SQLITE_OS_WINCE
35373:   SimulateIOError( return SQLITE_ERROR );
35374:   UNUSED_PARAMETER(nFull);
35375:   /* WinCE has no concept of a relative pathname, or so I am told. */
35376:   sqlite3_snprintf(pVfs->mxPathname, zFull, "%s", zRelative);
35377:   return SQLITE_OK;
35378: #endif
35379: 
35380: #if !SQLITE_OS_WINCE && !defined(__CYGWIN__)
35381:   int nByte;
35382:   void *zConverted;
35383:   char *zOut;
35384: 
35385:   /* If this path name begins with "/X:", where "X" is any alphabetic
35386:   ** character, discard the initial "/" from the pathname.
35387:   */
35388:   if( zRelative[0]=='/' && sqlite3Isalpha(zRelative[1]) && zRelative[2]==':' ){
35389:     zRelative++;
35390:   }
35391: 
35392:   /* It's odd to simulate an io-error here, but really this is just
35393:   ** using the io-error infrastructure to test that SQLite handles this
35394:   ** function failing. This function could fail if, for example, the
35395:   ** current working directory has been unlinked.
35396:   */
35397:   SimulateIOError( return SQLITE_ERROR );
35398:   UNUSED_PARAMETER(nFull);
35399:   zConverted = convertUtf8Filename(zRelative);
35400:   if( zConverted==0 ){
35401:     return SQLITE_IOERR_NOMEM;
35402:   }
35403:   if( isNT() ){
35404:     LPWSTR zTemp;
35405:     nByte = osGetFullPathNameW((LPCWSTR)zConverted, 0, 0, 0) + 3;
35406:     zTemp = sqlite3_malloc( nByte*sizeof(zTemp[0]) );
35407:     if( zTemp==0 ){
35408:       sqlite3_free(zConverted);
35409:       return SQLITE_IOERR_NOMEM;
35410:     }
35411:     osGetFullPathNameW((LPCWSTR)zConverted, nByte, zTemp, 0);
35412:     sqlite3_free(zConverted);
35413:     zOut = unicodeToUtf8(zTemp);
35414:     sqlite3_free(zTemp);
35415: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
35416: ** Since the ANSI version of these Windows API do not exist for WINCE,
35417: ** it's important to not reference them for WINCE builds.
35418: */
35419: #if SQLITE_OS_WINCE==0
35420:   }else{
35421:     char *zTemp;
35422:     nByte = osGetFullPathNameA((char*)zConverted, 0, 0, 0) + 3;
35423:     zTemp = sqlite3_malloc( nByte*sizeof(zTemp[0]) );
35424:     if( zTemp==0 ){
35425:       sqlite3_free(zConverted);
35426:       return SQLITE_IOERR_NOMEM;
35427:     }
35428:     osGetFullPathNameA((char*)zConverted, nByte, zTemp, 0);
35429:     sqlite3_free(zConverted);
35430:     zOut = sqlite3_win32_mbcs_to_utf8(zTemp);
35431:     sqlite3_free(zTemp);
35432: #endif
35433:   }
35434:   if( zOut ){
35435:     sqlite3_snprintf(pVfs->mxPathname, zFull, "%s", zOut);
35436:     sqlite3_free(zOut);
35437:     return SQLITE_OK;
35438:   }else{
35439:     return SQLITE_IOERR_NOMEM;
35440:   }
35441: #endif
35442: }
35443: 
35444: #ifndef SQLITE_OMIT_LOAD_EXTENSION
35445: /*
35446: ** Interfaces for opening a shared library, finding entry points
35447: ** within the shared library, and closing the shared library.
35448: */
35449: /*
35450: ** Interfaces for opening a shared library, finding entry points
35451: ** within the shared library, and closing the shared library.
35452: */
35453: static void *winDlOpen(sqlite3_vfs *pVfs, const char *zFilename){
35454:   HANDLE h;
35455:   void *zConverted = convertUtf8Filename(zFilename);
35456:   UNUSED_PARAMETER(pVfs);
35457:   if( zConverted==0 ){
35458:     return 0;
35459:   }
35460:   if( isNT() ){
35461:     h = osLoadLibraryW((LPCWSTR)zConverted);
35462: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
35463: ** Since the ANSI version of these Windows API do not exist for WINCE,
35464: ** it's important to not reference them for WINCE builds.
35465: */
35466: #if SQLITE_OS_WINCE==0
35467:   }else{
35468:     h = osLoadLibraryA((char*)zConverted);
35469: #endif
35470:   }
35471:   sqlite3_free(zConverted);
35472:   return (void*)h;
35473: }
35474: static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
35475:   UNUSED_PARAMETER(pVfs);
35476:   getLastErrorMsg(osGetLastError(), nBuf, zBufOut);
35477: }
35478: static void (*winDlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){
35479:   UNUSED_PARAMETER(pVfs);
35480:   return (void(*)(void))osGetProcAddressA((HANDLE)pHandle, zSymbol);
35481: }
35482: static void winDlClose(sqlite3_vfs *pVfs, void *pHandle){
35483:   UNUSED_PARAMETER(pVfs);
35484:   osFreeLibrary((HANDLE)pHandle);
35485: }
35486: #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
35487:   #define winDlOpen  0
35488:   #define winDlError 0
35489:   #define winDlSym   0
35490:   #define winDlClose 0
35491: #endif
35492: 
35493: 
35494: /*
35495: ** Write up to nBuf bytes of randomness into zBuf.
35496: */
35497: static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
35498:   int n = 0;
35499:   UNUSED_PARAMETER(pVfs);
35500: #if defined(SQLITE_TEST)
35501:   n = nBuf;
35502:   memset(zBuf, 0, nBuf);
35503: #else
35504:   if( sizeof(SYSTEMTIME)<=nBuf-n ){
35505:     SYSTEMTIME x;
35506:     osGetSystemTime(&x);
35507:     memcpy(&zBuf[n], &x, sizeof(x));
35508:     n += sizeof(x);
35509:   }
35510:   if( sizeof(DWORD)<=nBuf-n ){
35511:     DWORD pid = osGetCurrentProcessId();
35512:     memcpy(&zBuf[n], &pid, sizeof(pid));
35513:     n += sizeof(pid);
35514:   }
35515:   if( sizeof(DWORD)<=nBuf-n ){
35516:     DWORD cnt = osGetTickCount();
35517:     memcpy(&zBuf[n], &cnt, sizeof(cnt));
35518:     n += sizeof(cnt);
35519:   }
35520:   if( sizeof(LARGE_INTEGER)<=nBuf-n ){
35521:     LARGE_INTEGER i;
35522:     osQueryPerformanceCounter(&i);
35523:     memcpy(&zBuf[n], &i, sizeof(i));
35524:     n += sizeof(i);
35525:   }
35526: #endif
35527:   return n;
35528: }
35529: 
35530: 
35531: /*
35532: ** Sleep for a little while.  Return the amount of time slept.
35533: */
35534: static int winSleep(sqlite3_vfs *pVfs, int microsec){
35535:   osSleep((microsec+999)/1000);
35536:   UNUSED_PARAMETER(pVfs);
35537:   return ((microsec+999)/1000)*1000;
35538: }
35539: 
35540: /*
35541: ** The following variable, if set to a non-zero value, is interpreted as
35542: ** the number of seconds since 1970 and is used to set the result of
35543: ** sqlite3OsCurrentTime() during testing.
35544: */
35545: #ifdef SQLITE_TEST
35546: SQLITE_API int sqlite3_current_time = 0;  /* Fake system time in seconds since 1970. */
35547: #endif
35548: 
35549: /*
35550: ** Find the current time (in Universal Coordinated Time).  Write into *piNow
35551: ** the current time and date as a Julian Day number times 86_400_000.  In
35552: ** other words, write into *piNow the number of milliseconds since the Julian
35553: ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
35554: ** proleptic Gregorian calendar.
35555: **
35556: ** On success, return SQLITE_OK.  Return SQLITE_ERROR if the time and date 
35557: ** cannot be found.
35558: */
35559: static int winCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){
35560:   /* FILETIME structure is a 64-bit value representing the number of 
35561:      100-nanosecond intervals since January 1, 1601 (= JD 2305813.5). 
35562:   */
35563:   FILETIME ft;
35564:   static const sqlite3_int64 winFiletimeEpoch = 23058135*(sqlite3_int64)8640000;
35565: #ifdef SQLITE_TEST
35566:   static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
35567: #endif
35568:   /* 2^32 - to avoid use of LL and warnings in gcc */
35569:   static const sqlite3_int64 max32BitValue = 
35570:       (sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 + (sqlite3_int64)294967296;
35571: 
35572: #if SQLITE_OS_WINCE
35573:   SYSTEMTIME time;
35574:   osGetSystemTime(&time);
35575:   /* if SystemTimeToFileTime() fails, it returns zero. */
35576:   if (!osSystemTimeToFileTime(&time,&ft)){
35577:     return SQLITE_ERROR;
35578:   }
35579: #else
35580:   osGetSystemTimeAsFileTime( &ft );
35581: #endif
35582: 
35583:   *piNow = winFiletimeEpoch +
35584:             ((((sqlite3_int64)ft.dwHighDateTime)*max32BitValue) + 
35585:                (sqlite3_int64)ft.dwLowDateTime)/(sqlite3_int64)10000;
35586: 
35587: #ifdef SQLITE_TEST
35588:   if( sqlite3_current_time ){
35589:     *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
35590:   }
35591: #endif
35592:   UNUSED_PARAMETER(pVfs);
35593:   return SQLITE_OK;
35594: }
35595: 
35596: /*
35597: ** Find the current time (in Universal Coordinated Time).  Write the
35598: ** current time and date as a Julian Day number into *prNow and
35599: ** return 0.  Return 1 if the time and date cannot be found.
35600: */
35601: static int winCurrentTime(sqlite3_vfs *pVfs, double *prNow){
35602:   int rc;
35603:   sqlite3_int64 i;
35604:   rc = winCurrentTimeInt64(pVfs, &i);
35605:   if( !rc ){
35606:     *prNow = i/86400000.0;
35607:   }
35608:   return rc;
35609: }
35610: 
35611: /*
35612: ** The idea is that this function works like a combination of
35613: ** GetLastError() and FormatMessage() on Windows (or errno and
35614: ** strerror_r() on Unix). After an error is returned by an OS
35615: ** function, SQLite calls this function with zBuf pointing to
35616: ** a buffer of nBuf bytes. The OS layer should populate the
35617: ** buffer with a nul-terminated UTF-8 encoded error message
35618: ** describing the last IO error to have occurred within the calling
35619: ** thread.
35620: **
35621: ** If the error message is too large for the supplied buffer,
35622: ** it should be truncated. The return value of xGetLastError
35623: ** is zero if the error message fits in the buffer, or non-zero
35624: ** otherwise (if the message was truncated). If non-zero is returned,
35625: ** then it is not necessary to include the nul-terminator character
35626: ** in the output buffer.
35627: **
35628: ** Not supplying an error message will have no adverse effect
35629: ** on SQLite. It is fine to have an implementation that never
35630: ** returns an error message:
35631: **
35632: **   int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
35633: **     assert(zBuf[0]=='\0');
35634: **     return 0;
35635: **   }
35636: **
35637: ** However if an error message is supplied, it will be incorporated
35638: ** by sqlite into the error message available to the user using
35639: ** sqlite3_errmsg(), possibly making IO errors easier to debug.
35640: */
35641: static int winGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
35642:   UNUSED_PARAMETER(pVfs);
35643:   return getLastErrorMsg(osGetLastError(), nBuf, zBuf);
35644: }
35645: 
35646: /*
35647: ** Initialize and deinitialize the operating system interface.
35648: */
35649: SQLITE_API int sqlite3_os_init(void){
35650:   static sqlite3_vfs winVfs = {
35651:     3,                   /* iVersion */
35652:     sizeof(winFile),     /* szOsFile */
35653:     MAX_PATH,            /* mxPathname */
35654:     0,                   /* pNext */
35655:     "win32",             /* zName */
35656:     0,                   /* pAppData */
35657:     winOpen,             /* xOpen */
35658:     winDelete,           /* xDelete */
35659:     winAccess,           /* xAccess */
35660:     winFullPathname,     /* xFullPathname */
35661:     winDlOpen,           /* xDlOpen */
35662:     winDlError,          /* xDlError */
35663:     winDlSym,            /* xDlSym */
35664:     winDlClose,          /* xDlClose */
35665:     winRandomness,       /* xRandomness */
35666:     winSleep,            /* xSleep */
35667:     winCurrentTime,      /* xCurrentTime */
35668:     winGetLastError,     /* xGetLastError */
35669:     winCurrentTimeInt64, /* xCurrentTimeInt64 */
35670:     winSetSystemCall,    /* xSetSystemCall */
35671:     winGetSystemCall,    /* xGetSystemCall */
35672:     winNextSystemCall,   /* xNextSystemCall */
35673:   };
35674: 
35675:   /* Double-check that the aSyscall[] array has been constructed
35676:   ** correctly.  See ticket [bb3a86e890c8e96ab] */
35677:   assert( ArraySize(aSyscall)==60 );
35678: 
35679: #ifndef SQLITE_OMIT_WAL
35680:   /* get memory map allocation granularity */
35681:   memset(&winSysInfo, 0, sizeof(SYSTEM_INFO));
35682:   osGetSystemInfo(&winSysInfo);
35683:   assert(winSysInfo.dwAllocationGranularity > 0);
35684: #endif
35685: 
35686:   sqlite3_vfs_register(&winVfs, 1);
35687:   return SQLITE_OK; 
35688: }
35689: 
35690: SQLITE_API int sqlite3_os_end(void){ 
35691:   return SQLITE_OK;
35692: }
35693: 
35694: #endif /* SQLITE_OS_WIN */
35695: 
35696: /************** End of os_win.c **********************************************/
35697: /************** Begin file bitvec.c ******************************************/
35698: /*
35699: ** 2008 February 16
35700: **
35701: ** The author disclaims copyright to this source code.  In place of
35702: ** a legal notice, here is a blessing:
35703: **
35704: **    May you do good and not evil.
35705: **    May you find forgiveness for yourself and forgive others.
35706: **    May you share freely, never taking more than you give.
35707: **
35708: *************************************************************************
35709: ** This file implements an object that represents a fixed-length
35710: ** bitmap.  Bits are numbered starting with 1.
35711: **
35712: ** A bitmap is used to record which pages of a database file have been
35713: ** journalled during a transaction, or which pages have the "dont-write"
35714: ** property.  Usually only a few pages are meet either condition.
35715: ** So the bitmap is usually sparse and has low cardinality.
35716: ** But sometimes (for example when during a DROP of a large table) most
35717: ** or all of the pages in a database can get journalled.  In those cases, 
35718: ** the bitmap becomes dense with high cardinality.  The algorithm needs 
35719: ** to handle both cases well.
35720: **
35721: ** The size of the bitmap is fixed when the object is created.
35722: **
35723: ** All bits are clear when the bitmap is created.  Individual bits
35724: ** may be set or cleared one at a time.
35725: **
35726: ** Test operations are about 100 times more common that set operations.
35727: ** Clear operations are exceedingly rare.  There are usually between
35728: ** 5 and 500 set operations per Bitvec object, though the number of sets can
35729: ** sometimes grow into tens of thousands or larger.  The size of the
35730: ** Bitvec object is the number of pages in the database file at the
35731: ** start of a transaction, and is thus usually less than a few thousand,
35732: ** but can be as large as 2 billion for a really big database.
35733: */
35734: 
35735: /* Size of the Bitvec structure in bytes. */
35736: #define BITVEC_SZ        512
35737: 
35738: /* Round the union size down to the nearest pointer boundary, since that's how 
35739: ** it will be aligned within the Bitvec struct. */
35740: #define BITVEC_USIZE     (((BITVEC_SZ-(3*sizeof(u32)))/sizeof(Bitvec*))*sizeof(Bitvec*))
35741: 
35742: /* Type of the array "element" for the bitmap representation. 
35743: ** Should be a power of 2, and ideally, evenly divide into BITVEC_USIZE. 
35744: ** Setting this to the "natural word" size of your CPU may improve
35745: ** performance. */
35746: #define BITVEC_TELEM     u8
35747: /* Size, in bits, of the bitmap element. */
35748: #define BITVEC_SZELEM    8
35749: /* Number of elements in a bitmap array. */
35750: #define BITVEC_NELEM     (BITVEC_USIZE/sizeof(BITVEC_TELEM))
35751: /* Number of bits in the bitmap array. */
35752: #define BITVEC_NBIT      (BITVEC_NELEM*BITVEC_SZELEM)
35753: 
35754: /* Number of u32 values in hash table. */
35755: #define BITVEC_NINT      (BITVEC_USIZE/sizeof(u32))
35756: /* Maximum number of entries in hash table before 
35757: ** sub-dividing and re-hashing. */
35758: #define BITVEC_MXHASH    (BITVEC_NINT/2)
35759: /* Hashing function for the aHash representation.
35760: ** Empirical testing showed that the *37 multiplier 
35761: ** (an arbitrary prime)in the hash function provided 
35762: ** no fewer collisions than the no-op *1. */
35763: #define BITVEC_HASH(X)   (((X)*1)%BITVEC_NINT)
35764: 
35765: #define BITVEC_NPTR      (BITVEC_USIZE/sizeof(Bitvec *))
35766: 
35767: 
35768: /*
35769: ** A bitmap is an instance of the following structure.
35770: **
35771: ** This bitmap records the existance of zero or more bits
35772: ** with values between 1 and iSize, inclusive.
35773: **
35774: ** There are three possible representations of the bitmap.
35775: ** If iSize<=BITVEC_NBIT, then Bitvec.u.aBitmap[] is a straight
35776: ** bitmap.  The least significant bit is bit 1.
35777: **
35778: ** If iSize>BITVEC_NBIT and iDivisor==0 then Bitvec.u.aHash[] is
35779: ** a hash table that will hold up to BITVEC_MXHASH distinct values.
35780: **
35781: ** Otherwise, the value i is redirected into one of BITVEC_NPTR
35782: ** sub-bitmaps pointed to by Bitvec.u.apSub[].  Each subbitmap
35783: ** handles up to iDivisor separate values of i.  apSub[0] holds
35784: ** values between 1 and iDivisor.  apSub[1] holds values between
35785: ** iDivisor+1 and 2*iDivisor.  apSub[N] holds values between
35786: ** N*iDivisor+1 and (N+1)*iDivisor.  Each subbitmap is normalized
35787: ** to hold deal with values between 1 and iDivisor.
35788: */
35789: struct Bitvec {
35790:   u32 iSize;      /* Maximum bit index.  Max iSize is 4,294,967,296. */
35791:   u32 nSet;       /* Number of bits that are set - only valid for aHash
35792:                   ** element.  Max is BITVEC_NINT.  For BITVEC_SZ of 512,
35793:                   ** this would be 125. */
35794:   u32 iDivisor;   /* Number of bits handled by each apSub[] entry. */
35795:                   /* Should >=0 for apSub element. */
35796:                   /* Max iDivisor is max(u32) / BITVEC_NPTR + 1.  */
35797:                   /* For a BITVEC_SZ of 512, this would be 34,359,739. */
35798:   union {
35799:     BITVEC_TELEM aBitmap[BITVEC_NELEM];    /* Bitmap representation */
35800:     u32 aHash[BITVEC_NINT];      /* Hash table representation */
35801:     Bitvec *apSub[BITVEC_NPTR];  /* Recursive representation */
35802:   } u;
35803: };
35804: 
35805: /*
35806: ** Create a new bitmap object able to handle bits between 0 and iSize,
35807: ** inclusive.  Return a pointer to the new object.  Return NULL if 
35808: ** malloc fails.
35809: */
35810: SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32 iSize){
35811:   Bitvec *p;
35812:   assert( sizeof(*p)==BITVEC_SZ );
35813:   p = sqlite3MallocZero( sizeof(*p) );
35814:   if( p ){
35815:     p->iSize = iSize;
35816:   }
35817:   return p;
35818: }
35819: 
35820: /*
35821: ** Check to see if the i-th bit is set.  Return true or false.
35822: ** If p is NULL (if the bitmap has not been created) or if
35823: ** i is out of range, then return false.
35824: */
35825: SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec *p, u32 i){
35826:   if( p==0 ) return 0;
35827:   if( i>p->iSize || i==0 ) return 0;
35828:   i--;
35829:   while( p->iDivisor ){
35830:     u32 bin = i/p->iDivisor;
35831:     i = i%p->iDivisor;
35832:     p = p->u.apSub[bin];
35833:     if (!p) {
35834:       return 0;
35835:     }
35836:   }
35837:   if( p->iSize<=BITVEC_NBIT ){
35838:     return (p->u.aBitmap[i/BITVEC_SZELEM] & (1<<(i&(BITVEC_SZELEM-1))))!=0;
35839:   } else{
35840:     u32 h = BITVEC_HASH(i++);
35841:     while( p->u.aHash[h] ){
35842:       if( p->u.aHash[h]==i ) return 1;
35843:       h = (h+1) % BITVEC_NINT;
35844:     }
35845:     return 0;
35846:   }
35847: }
35848: 
35849: /*
35850: ** Set the i-th bit.  Return 0 on success and an error code if
35851: ** anything goes wrong.
35852: **
35853: ** This routine might cause sub-bitmaps to be allocated.  Failing
35854: ** to get the memory needed to hold the sub-bitmap is the only
35855: ** that can go wrong with an insert, assuming p and i are valid.
35856: **
35857: ** The calling function must ensure that p is a valid Bitvec object
35858: ** and that the value for "i" is within range of the Bitvec object.
35859: ** Otherwise the behavior is undefined.
35860: */
35861: SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec *p, u32 i){
35862:   u32 h;
35863:   if( p==0 ) return SQLITE_OK;
35864:   assert( i>0 );
35865:   assert( i<=p->iSize );
35866:   i--;
35867:   while((p->iSize > BITVEC_NBIT) && p->iDivisor) {
35868:     u32 bin = i/p->iDivisor;
35869:     i = i%p->iDivisor;
35870:     if( p->u.apSub[bin]==0 ){
35871:       p->u.apSub[bin] = sqlite3BitvecCreate( p->iDivisor );
35872:       if( p->u.apSub[bin]==0 ) return SQLITE_NOMEM;
35873:     }
35874:     p = p->u.apSub[bin];
35875:   }
35876:   if( p->iSize<=BITVEC_NBIT ){
35877:     p->u.aBitmap[i/BITVEC_SZELEM] |= 1 << (i&(BITVEC_SZELEM-1));
35878:     return SQLITE_OK;
35879:   }
35880:   h = BITVEC_HASH(i++);
35881:   /* if there wasn't a hash collision, and this doesn't */
35882:   /* completely fill the hash, then just add it without */
35883:   /* worring about sub-dividing and re-hashing. */
35884:   if( !p->u.aHash[h] ){
35885:     if (p->nSet<(BITVEC_NINT-1)) {
35886:       goto bitvec_set_end;
35887:     } else {
35888:       goto bitvec_set_rehash;
35889:     }
35890:   }
35891:   /* there was a collision, check to see if it's already */
35892:   /* in hash, if not, try to find a spot for it */
35893:   do {
35894:     if( p->u.aHash[h]==i ) return SQLITE_OK;
35895:     h++;
35896:     if( h>=BITVEC_NINT ) h = 0;
35897:   } while( p->u.aHash[h] );
35898:   /* we didn't find it in the hash.  h points to the first */
35899:   /* available free spot. check to see if this is going to */
35900:   /* make our hash too "full".  */
35901: bitvec_set_rehash:
35902:   if( p->nSet>=BITVEC_MXHASH ){
35903:     unsigned int j;
35904:     int rc;
35905:     u32 *aiValues = sqlite3StackAllocRaw(0, sizeof(p->u.aHash));
35906:     if( aiValues==0 ){
35907:       return SQLITE_NOMEM;
35908:     }else{
35909:       memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash));
35910:       memset(p->u.apSub, 0, sizeof(p->u.apSub));
35911:       p->iDivisor = (p->iSize + BITVEC_NPTR - 1)/BITVEC_NPTR;
35912:       rc = sqlite3BitvecSet(p, i);
35913:       for(j=0; j<BITVEC_NINT; j++){
35914:         if( aiValues[j] ) rc |= sqlite3BitvecSet(p, aiValues[j]);
35915:       }
35916:       sqlite3StackFree(0, aiValues);
35917:       return rc;
35918:     }
35919:   }
35920: bitvec_set_end:
35921:   p->nSet++;
35922:   p->u.aHash[h] = i;
35923:   return SQLITE_OK;
35924: }
35925: 
35926: /*
35927: ** Clear the i-th bit.
35928: **
35929: ** pBuf must be a pointer to at least BITVEC_SZ bytes of temporary storage
35930: ** that BitvecClear can use to rebuilt its hash table.
35931: */
35932: SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec *p, u32 i, void *pBuf){
35933:   if( p==0 ) return;
35934:   assert( i>0 );
35935:   i--;
35936:   while( p->iDivisor ){
35937:     u32 bin = i/p->iDivisor;
35938:     i = i%p->iDivisor;
35939:     p = p->u.apSub[bin];
35940:     if (!p) {
35941:       return;
35942:     }
35943:   }
35944:   if( p->iSize<=BITVEC_NBIT ){
35945:     p->u.aBitmap[i/BITVEC_SZELEM] &= ~(1 << (i&(BITVEC_SZELEM-1)));
35946:   }else{
35947:     unsigned int j;
35948:     u32 *aiValues = pBuf;
35949:     memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash));
35950:     memset(p->u.aHash, 0, sizeof(p->u.aHash));
35951:     p->nSet = 0;
35952:     for(j=0; j<BITVEC_NINT; j++){
35953:       if( aiValues[j] && aiValues[j]!=(i+1) ){
35954:         u32 h = BITVEC_HASH(aiValues[j]-1);
35955:         p->nSet++;
35956:         while( p->u.aHash[h] ){
35957:           h++;
35958:           if( h>=BITVEC_NINT ) h = 0;
35959:         }
35960:         p->u.aHash[h] = aiValues[j];
35961:       }
35962:     }
35963:   }
35964: }
35965: 
35966: /*
35967: ** Destroy a bitmap object.  Reclaim all memory used.
35968: */
35969: SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec *p){
35970:   if( p==0 ) return;
35971:   if( p->iDivisor ){
35972:     unsigned int i;
35973:     for(i=0; i<BITVEC_NPTR; i++){
35974:       sqlite3BitvecDestroy(p->u.apSub[i]);
35975:     }
35976:   }
35977:   sqlite3_free(p);
35978: }
35979: 
35980: /*
35981: ** Return the value of the iSize parameter specified when Bitvec *p
35982: ** was created.
35983: */
35984: SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){
35985:   return p->iSize;
35986: }
35987: 
35988: #ifndef SQLITE_OMIT_BUILTIN_TEST
35989: /*
35990: ** Let V[] be an array of unsigned characters sufficient to hold
35991: ** up to N bits.  Let I be an integer between 0 and N.  0<=I<N.
35992: ** Then the following macros can be used to set, clear, or test
35993: ** individual bits within V.
35994: */
35995: #define SETBIT(V,I)      V[I>>3] |= (1<<(I&7))
35996: #define CLEARBIT(V,I)    V[I>>3] &= ~(1<<(I&7))
35997: #define TESTBIT(V,I)     (V[I>>3]&(1<<(I&7)))!=0
35998: 
35999: /*
36000: ** This routine runs an extensive test of the Bitvec code.
36001: **
36002: ** The input is an array of integers that acts as a program
36003: ** to test the Bitvec.  The integers are opcodes followed
36004: ** by 0, 1, or 3 operands, depending on the opcode.  Another
36005: ** opcode follows immediately after the last operand.
36006: **
36007: ** There are 6 opcodes numbered from 0 through 5.  0 is the
36008: ** "halt" opcode and causes the test to end.
36009: **
36010: **    0          Halt and return the number of errors
36011: **    1 N S X    Set N bits beginning with S and incrementing by X
36012: **    2 N S X    Clear N bits beginning with S and incrementing by X
36013: **    3 N        Set N randomly chosen bits
36014: **    4 N        Clear N randomly chosen bits
36015: **    5 N S X    Set N bits from S increment X in array only, not in bitvec
36016: **
36017: ** The opcodes 1 through 4 perform set and clear operations are performed
36018: ** on both a Bitvec object and on a linear array of bits obtained from malloc.
36019: ** Opcode 5 works on the linear array only, not on the Bitvec.
36020: ** Opcode 5 is used to deliberately induce a fault in order to
36021: ** confirm that error detection works.
36022: **
36023: ** At the conclusion of the test the linear array is compared
36024: ** against the Bitvec object.  If there are any differences,
36025: ** an error is returned.  If they are the same, zero is returned.
36026: **
36027: ** If a memory allocation error occurs, return -1.
36028: */
36029: SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){
36030:   Bitvec *pBitvec = 0;
36031:   unsigned char *pV = 0;
36032:   int rc = -1;
36033:   int i, nx, pc, op;
36034:   void *pTmpSpace;
36035: 
36036:   /* Allocate the Bitvec to be tested and a linear array of
36037:   ** bits to act as the reference */
36038:   pBitvec = sqlite3BitvecCreate( sz );
36039:   pV = sqlite3_malloc( (sz+7)/8 + 1 );
36040:   pTmpSpace = sqlite3_malloc(BITVEC_SZ);
36041:   if( pBitvec==0 || pV==0 || pTmpSpace==0  ) goto bitvec_end;
36042:   memset(pV, 0, (sz+7)/8 + 1);
36043: 
36044:   /* NULL pBitvec tests */
36045:   sqlite3BitvecSet(0, 1);
36046:   sqlite3BitvecClear(0, 1, pTmpSpace);
36047: 
36048:   /* Run the program */
36049:   pc = 0;
36050:   while( (op = aOp[pc])!=0 ){
36051:     switch( op ){
36052:       case 1:
36053:       case 2:
36054:       case 5: {
36055:         nx = 4;
36056:         i = aOp[pc+2] - 1;
36057:         aOp[pc+2] += aOp[pc+3];
36058:         break;
36059:       }
36060:       case 3:
36061:       case 4: 
36062:       default: {
36063:         nx = 2;
36064:         sqlite3_randomness(sizeof(i), &i);
36065:         break;
36066:       }
36067:     }
36068:     if( (--aOp[pc+1]) > 0 ) nx = 0;
36069:     pc += nx;
36070:     i = (i & 0x7fffffff)%sz;
36071:     if( (op & 1)!=0 ){
36072:       SETBIT(pV, (i+1));
36073:       if( op!=5 ){
36074:         if( sqlite3BitvecSet(pBitvec, i+1) ) goto bitvec_end;
36075:       }
36076:     }else{
36077:       CLEARBIT(pV, (i+1));
36078:       sqlite3BitvecClear(pBitvec, i+1, pTmpSpace);
36079:     }
36080:   }
36081: 
36082:   /* Test to make sure the linear array exactly matches the
36083:   ** Bitvec object.  Start with the assumption that they do
36084:   ** match (rc==0).  Change rc to non-zero if a discrepancy
36085:   ** is found.
36086:   */
36087:   rc = sqlite3BitvecTest(0,0) + sqlite3BitvecTest(pBitvec, sz+1)
36088:           + sqlite3BitvecTest(pBitvec, 0)
36089:           + (sqlite3BitvecSize(pBitvec) - sz);
36090:   for(i=1; i<=sz; i++){
36091:     if(  (TESTBIT(pV,i))!=sqlite3BitvecTest(pBitvec,i) ){
36092:       rc = i;
36093:       break;
36094:     }
36095:   }
36096: 
36097:   /* Free allocated structure */
36098: bitvec_end:
36099:   sqlite3_free(pTmpSpace);
36100:   sqlite3_free(pV);
36101:   sqlite3BitvecDestroy(pBitvec);
36102:   return rc;
36103: }
36104: #endif /* SQLITE_OMIT_BUILTIN_TEST */
36105: 
36106: /************** End of bitvec.c **********************************************/
36107: /************** Begin file pcache.c ******************************************/
36108: /*
36109: ** 2008 August 05
36110: **
36111: ** The author disclaims copyright to this source code.  In place of
36112: ** a legal notice, here is a blessing:
36113: **
36114: **    May you do good and not evil.
36115: **    May you find forgiveness for yourself and forgive others.
36116: **    May you share freely, never taking more than you give.
36117: **
36118: *************************************************************************
36119: ** This file implements that page cache.
36120: */
36121: 
36122: /*
36123: ** A complete page cache is an instance of this structure.
36124: */
36125: struct PCache {
36126:   PgHdr *pDirty, *pDirtyTail;         /* List of dirty pages in LRU order */
36127:   PgHdr *pSynced;                     /* Last synced page in dirty page list */
36128:   int nRef;                           /* Number of referenced pages */
36129:   int szCache;                        /* Configured cache size */
36130:   int szPage;                         /* Size of every page in this cache */
36131:   int szExtra;                        /* Size of extra space for each page */
36132:   int bPurgeable;                     /* True if pages are on backing store */
36133:   int (*xStress)(void*,PgHdr*);       /* Call to try make a page clean */
36134:   void *pStress;                      /* Argument to xStress */
36135:   sqlite3_pcache *pCache;             /* Pluggable cache module */
36136:   PgHdr *pPage1;                      /* Reference to page 1 */
36137: };
36138: 
36139: /*
36140: ** Some of the assert() macros in this code are too expensive to run
36141: ** even during normal debugging.  Use them only rarely on long-running
36142: ** tests.  Enable the expensive asserts using the
36143: ** -DSQLITE_ENABLE_EXPENSIVE_ASSERT=1 compile-time option.
36144: */
36145: #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
36146: # define expensive_assert(X)  assert(X)
36147: #else
36148: # define expensive_assert(X)
36149: #endif
36150: 
36151: /********************************** Linked List Management ********************/
36152: 
36153: #if !defined(NDEBUG) && defined(SQLITE_ENABLE_EXPENSIVE_ASSERT)
36154: /*
36155: ** Check that the pCache->pSynced variable is set correctly. If it
36156: ** is not, either fail an assert or return zero. Otherwise, return
36157: ** non-zero. This is only used in debugging builds, as follows:
36158: **
36159: **   expensive_assert( pcacheCheckSynced(pCache) );
36160: */
36161: static int pcacheCheckSynced(PCache *pCache){
36162:   PgHdr *p;
36163:   for(p=pCache->pDirtyTail; p!=pCache->pSynced; p=p->pDirtyPrev){
36164:     assert( p->nRef || (p->flags&PGHDR_NEED_SYNC) );
36165:   }
36166:   return (p==0 || p->nRef || (p->flags&PGHDR_NEED_SYNC)==0);
36167: }
36168: #endif /* !NDEBUG && SQLITE_ENABLE_EXPENSIVE_ASSERT */
36169: 
36170: /*
36171: ** Remove page pPage from the list of dirty pages.
36172: */
36173: static void pcacheRemoveFromDirtyList(PgHdr *pPage){
36174:   PCache *p = pPage->pCache;
36175: 
36176:   assert( pPage->pDirtyNext || pPage==p->pDirtyTail );
36177:   assert( pPage->pDirtyPrev || pPage==p->pDirty );
36178: 
36179:   /* Update the PCache1.pSynced variable if necessary. */
36180:   if( p->pSynced==pPage ){
36181:     PgHdr *pSynced = pPage->pDirtyPrev;
36182:     while( pSynced && (pSynced->flags&PGHDR_NEED_SYNC) ){
36183:       pSynced = pSynced->pDirtyPrev;
36184:     }
36185:     p->pSynced = pSynced;
36186:   }
36187: 
36188:   if( pPage->pDirtyNext ){
36189:     pPage->pDirtyNext->pDirtyPrev = pPage->pDirtyPrev;
36190:   }else{
36191:     assert( pPage==p->pDirtyTail );
36192:     p->pDirtyTail = pPage->pDirtyPrev;
36193:   }
36194:   if( pPage->pDirtyPrev ){
36195:     pPage->pDirtyPrev->pDirtyNext = pPage->pDirtyNext;
36196:   }else{
36197:     assert( pPage==p->pDirty );
36198:     p->pDirty = pPage->pDirtyNext;
36199:   }
36200:   pPage->pDirtyNext = 0;
36201:   pPage->pDirtyPrev = 0;
36202: 
36203:   expensive_assert( pcacheCheckSynced(p) );
36204: }
36205: 
36206: /*
36207: ** Add page pPage to the head of the dirty list (PCache1.pDirty is set to
36208: ** pPage).
36209: */
36210: static void pcacheAddToDirtyList(PgHdr *pPage){
36211:   PCache *p = pPage->pCache;
36212: 
36213:   assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage );
36214: 
36215:   pPage->pDirtyNext = p->pDirty;
36216:   if( pPage->pDirtyNext ){
36217:     assert( pPage->pDirtyNext->pDirtyPrev==0 );
36218:     pPage->pDirtyNext->pDirtyPrev = pPage;
36219:   }
36220:   p->pDirty = pPage;
36221:   if( !p->pDirtyTail ){
36222:     p->pDirtyTail = pPage;
36223:   }
36224:   if( !p->pSynced && 0==(pPage->flags&PGHDR_NEED_SYNC) ){
36225:     p->pSynced = pPage;
36226:   }
36227:   expensive_assert( pcacheCheckSynced(p) );
36228: }
36229: 
36230: /*
36231: ** Wrapper around the pluggable caches xUnpin method. If the cache is
36232: ** being used for an in-memory database, this function is a no-op.
36233: */
36234: static void pcacheUnpin(PgHdr *p){
36235:   PCache *pCache = p->pCache;
36236:   if( pCache->bPurgeable ){
36237:     if( p->pgno==1 ){
36238:       pCache->pPage1 = 0;
36239:     }
36240:     sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, p->pPage, 0);
36241:   }
36242: }
36243: 
36244: /*************************************************** General Interfaces ******
36245: **
36246: ** Initialize and shutdown the page cache subsystem. Neither of these 
36247: ** functions are threadsafe.
36248: */
36249: SQLITE_PRIVATE int sqlite3PcacheInitialize(void){
36250:   if( sqlite3GlobalConfig.pcache2.xInit==0 ){
36251:     /* IMPLEMENTATION-OF: R-26801-64137 If the xInit() method is NULL, then the
36252:     ** built-in default page cache is used instead of the application defined
36253:     ** page cache. */
36254:     sqlite3PCacheSetDefault();
36255:   }
36256:   return sqlite3GlobalConfig.pcache2.xInit(sqlite3GlobalConfig.pcache2.pArg);
36257: }
36258: SQLITE_PRIVATE void sqlite3PcacheShutdown(void){
36259:   if( sqlite3GlobalConfig.pcache2.xShutdown ){
36260:     /* IMPLEMENTATION-OF: R-26000-56589 The xShutdown() method may be NULL. */
36261:     sqlite3GlobalConfig.pcache2.xShutdown(sqlite3GlobalConfig.pcache2.pArg);
36262:   }
36263: }
36264: 
36265: /*
36266: ** Return the size in bytes of a PCache object.
36267: */
36268: SQLITE_PRIVATE int sqlite3PcacheSize(void){ return sizeof(PCache); }
36269: 
36270: /*
36271: ** Create a new PCache object. Storage space to hold the object
36272: ** has already been allocated and is passed in as the p pointer. 
36273: ** The caller discovers how much space needs to be allocated by 
36274: ** calling sqlite3PcacheSize().
36275: */
36276: SQLITE_PRIVATE void sqlite3PcacheOpen(
36277:   int szPage,                  /* Size of every page */
36278:   int szExtra,                 /* Extra space associated with each page */
36279:   int bPurgeable,              /* True if pages are on backing store */
36280:   int (*xStress)(void*,PgHdr*),/* Call to try to make pages clean */
36281:   void *pStress,               /* Argument to xStress */
36282:   PCache *p                    /* Preallocated space for the PCache */
36283: ){
36284:   memset(p, 0, sizeof(PCache));
36285:   p->szPage = szPage;
36286:   p->szExtra = szExtra;
36287:   p->bPurgeable = bPurgeable;
36288:   p->xStress = xStress;
36289:   p->pStress = pStress;
36290:   p->szCache = 100;
36291: }
36292: 
36293: /*
36294: ** Change the page size for PCache object. The caller must ensure that there
36295: ** are no outstanding page references when this function is called.
36296: */
36297: SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *pCache, int szPage){
36298:   assert( pCache->nRef==0 && pCache->pDirty==0 );
36299:   if( pCache->pCache ){
36300:     sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache);
36301:     pCache->pCache = 0;
36302:     pCache->pPage1 = 0;
36303:   }
36304:   pCache->szPage = szPage;
36305: }
36306: 
36307: /*
36308: ** Compute the number of pages of cache requested.
36309: */
36310: static int numberOfCachePages(PCache *p){
36311:   if( p->szCache>=0 ){
36312:     return p->szCache;
36313:   }else{
36314:     return (int)((-1024*(i64)p->szCache)/(p->szPage+p->szExtra));
36315:   }
36316: }
36317: 
36318: /*
36319: ** Try to obtain a page from the cache.
36320: */
36321: SQLITE_PRIVATE int sqlite3PcacheFetch(
36322:   PCache *pCache,       /* Obtain the page from this cache */
36323:   Pgno pgno,            /* Page number to obtain */
36324:   int createFlag,       /* If true, create page if it does not exist already */
36325:   PgHdr **ppPage        /* Write the page here */
36326: ){
36327:   sqlite3_pcache_page *pPage = 0;
36328:   PgHdr *pPgHdr = 0;
36329:   int eCreate;
36330: 
36331:   assert( pCache!=0 );
36332:   assert( createFlag==1 || createFlag==0 );
36333:   assert( pgno>0 );
36334: 
36335:   /* If the pluggable cache (sqlite3_pcache*) has not been allocated,
36336:   ** allocate it now.
36337:   */
36338:   if( !pCache->pCache && createFlag ){
36339:     sqlite3_pcache *p;
36340:     p = sqlite3GlobalConfig.pcache2.xCreate(
36341:         pCache->szPage, pCache->szExtra + sizeof(PgHdr), pCache->bPurgeable
36342:     );
36343:     if( !p ){
36344:       return SQLITE_NOMEM;
36345:     }
36346:     sqlite3GlobalConfig.pcache2.xCachesize(p, numberOfCachePages(pCache));
36347:     pCache->pCache = p;
36348:   }
36349: 
36350:   eCreate = createFlag * (1 + (!pCache->bPurgeable || !pCache->pDirty));
36351:   if( pCache->pCache ){
36352:     pPage = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate);
36353:   }
36354: 
36355:   if( !pPage && eCreate==1 ){
36356:     PgHdr *pPg;
36357: 
36358:     /* Find a dirty page to write-out and recycle. First try to find a 
36359:     ** page that does not require a journal-sync (one with PGHDR_NEED_SYNC
36360:     ** cleared), but if that is not possible settle for any other 
36361:     ** unreferenced dirty page.
36362:     */
36363:     expensive_assert( pcacheCheckSynced(pCache) );
36364:     for(pPg=pCache->pSynced; 
36365:         pPg && (pPg->nRef || (pPg->flags&PGHDR_NEED_SYNC)); 
36366:         pPg=pPg->pDirtyPrev
36367:     );
36368:     pCache->pSynced = pPg;
36369:     if( !pPg ){
36370:       for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pDirtyPrev);
36371:     }
36372:     if( pPg ){
36373:       int rc;
36374: #ifdef SQLITE_LOG_CACHE_SPILL
36375:       sqlite3_log(SQLITE_FULL, 
36376:                   "spill page %d making room for %d - cache used: %d/%d",
36377:                   pPg->pgno, pgno,
36378:                   sqlite3GlobalConfig.pcache.xPagecount(pCache->pCache),
36379:                   numberOfCachePages(pCache));
36380: #endif
36381:       rc = pCache->xStress(pCache->pStress, pPg);
36382:       if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){
36383:         return rc;
36384:       }
36385:     }
36386: 
36387:     pPage = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, 2);
36388:   }
36389: 
36390:   if( pPage ){
36391:     pPgHdr = (PgHdr *)pPage->pExtra;
36392: 
36393:     if( !pPgHdr->pPage ){
36394:       memset(pPgHdr, 0, sizeof(PgHdr));
36395:       pPgHdr->pPage = pPage;
36396:       pPgHdr->pData = pPage->pBuf;
36397:       pPgHdr->pExtra = (void *)&pPgHdr[1];
36398:       memset(pPgHdr->pExtra, 0, pCache->szExtra);
36399:       pPgHdr->pCache = pCache;
36400:       pPgHdr->pgno = pgno;
36401:     }
36402:     assert( pPgHdr->pCache==pCache );
36403:     assert( pPgHdr->pgno==pgno );
36404:     assert( pPgHdr->pData==pPage->pBuf );
36405:     assert( pPgHdr->pExtra==(void *)&pPgHdr[1] );
36406: 
36407:     if( 0==pPgHdr->nRef ){
36408:       pCache->nRef++;
36409:     }
36410:     pPgHdr->nRef++;
36411:     if( pgno==1 ){
36412:       pCache->pPage1 = pPgHdr;
36413:     }
36414:   }
36415:   *ppPage = pPgHdr;
36416:   return (pPgHdr==0 && eCreate) ? SQLITE_NOMEM : SQLITE_OK;
36417: }
36418: 
36419: /*
36420: ** Decrement the reference count on a page. If the page is clean and the
36421: ** reference count drops to 0, then it is made elible for recycling.
36422: */
36423: SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr *p){
36424:   assert( p->nRef>0 );
36425:   p->nRef--;
36426:   if( p->nRef==0 ){
36427:     PCache *pCache = p->pCache;
36428:     pCache->nRef--;
36429:     if( (p->flags&PGHDR_DIRTY)==0 ){
36430:       pcacheUnpin(p);
36431:     }else{
36432:       /* Move the page to the head of the dirty list. */
36433:       pcacheRemoveFromDirtyList(p);
36434:       pcacheAddToDirtyList(p);
36435:     }
36436:   }
36437: }
36438: 
36439: /*
36440: ** Increase the reference count of a supplied page by 1.
36441: */
36442: SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr *p){
36443:   assert(p->nRef>0);
36444:   p->nRef++;
36445: }
36446: 
36447: /*
36448: ** Drop a page from the cache. There must be exactly one reference to the
36449: ** page. This function deletes that reference, so after it returns the
36450: ** page pointed to by p is invalid.
36451: */
36452: SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr *p){
36453:   PCache *pCache;
36454:   assert( p->nRef==1 );
36455:   if( p->flags&PGHDR_DIRTY ){
36456:     pcacheRemoveFromDirtyList(p);
36457:   }
36458:   pCache = p->pCache;
36459:   pCache->nRef--;
36460:   if( p->pgno==1 ){
36461:     pCache->pPage1 = 0;
36462:   }
36463:   sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, p->pPage, 1);
36464: }
36465: 
36466: /*
36467: ** Make sure the page is marked as dirty. If it isn't dirty already,
36468: ** make it so.
36469: */
36470: SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){
36471:   p->flags &= ~PGHDR_DONT_WRITE;
36472:   assert( p->nRef>0 );
36473:   if( 0==(p->flags & PGHDR_DIRTY) ){
36474:     p->flags |= PGHDR_DIRTY;
36475:     pcacheAddToDirtyList( p);
36476:   }
36477: }
36478: 
36479: /*
36480: ** Make sure the page is marked as clean. If it isn't clean already,
36481: ** make it so.
36482: */
36483: SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){
36484:   if( (p->flags & PGHDR_DIRTY) ){
36485:     pcacheRemoveFromDirtyList(p);
36486:     p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC);
36487:     if( p->nRef==0 ){
36488:       pcacheUnpin(p);
36489:     }
36490:   }
36491: }
36492: 
36493: /*
36494: ** Make every page in the cache clean.
36495: */
36496: SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache *pCache){
36497:   PgHdr *p;
36498:   while( (p = pCache->pDirty)!=0 ){
36499:     sqlite3PcacheMakeClean(p);
36500:   }
36501: }
36502: 
36503: /*
36504: ** Clear the PGHDR_NEED_SYNC flag from all dirty pages.
36505: */
36506: SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *pCache){
36507:   PgHdr *p;
36508:   for(p=pCache->pDirty; p; p=p->pDirtyNext){
36509:     p->flags &= ~PGHDR_NEED_SYNC;
36510:   }
36511:   pCache->pSynced = pCache->pDirtyTail;
36512: }
36513: 
36514: /*
36515: ** Change the page number of page p to newPgno. 
36516: */
36517: SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){
36518:   PCache *pCache = p->pCache;
36519:   assert( p->nRef>0 );
36520:   assert( newPgno>0 );
36521:   sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno);
36522:   p->pgno = newPgno;
36523:   if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){
36524:     pcacheRemoveFromDirtyList(p);
36525:     pcacheAddToDirtyList(p);
36526:   }
36527: }
36528: 
36529: /*
36530: ** Drop every cache entry whose page number is greater than "pgno". The
36531: ** caller must ensure that there are no outstanding references to any pages
36532: ** other than page 1 with a page number greater than pgno.
36533: **
36534: ** If there is a reference to page 1 and the pgno parameter passed to this
36535: ** function is 0, then the data area associated with page 1 is zeroed, but
36536: ** the page object is not dropped.
36537: */
36538: SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache *pCache, Pgno pgno){
36539:   if( pCache->pCache ){
36540:     PgHdr *p;
36541:     PgHdr *pNext;
36542:     for(p=pCache->pDirty; p; p=pNext){
36543:       pNext = p->pDirtyNext;
36544:       /* This routine never gets call with a positive pgno except right
36545:       ** after sqlite3PcacheCleanAll().  So if there are dirty pages,
36546:       ** it must be that pgno==0.
36547:       */
36548:       assert( p->pgno>0 );
36549:       if( ALWAYS(p->pgno>pgno) ){
36550:         assert( p->flags&PGHDR_DIRTY );
36551:         sqlite3PcacheMakeClean(p);
36552:       }
36553:     }
36554:     if( pgno==0 && pCache->pPage1 ){
36555:       memset(pCache->pPage1->pData, 0, pCache->szPage);
36556:       pgno = 1;
36557:     }
36558:     sqlite3GlobalConfig.pcache2.xTruncate(pCache->pCache, pgno+1);
36559:   }
36560: }
36561: 
36562: /*
36563: ** Close a cache.
36564: */
36565: SQLITE_PRIVATE void sqlite3PcacheClose(PCache *pCache){
36566:   if( pCache->pCache ){
36567:     sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache);
36568:   }
36569: }
36570: 
36571: /* 
36572: ** Discard the contents of the cache.
36573: */
36574: SQLITE_PRIVATE void sqlite3PcacheClear(PCache *pCache){
36575:   sqlite3PcacheTruncate(pCache, 0);
36576: }
36577: 
36578: /*
36579: ** Merge two lists of pages connected by pDirty and in pgno order.
36580: ** Do not both fixing the pDirtyPrev pointers.
36581: */
36582: static PgHdr *pcacheMergeDirtyList(PgHdr *pA, PgHdr *pB){
36583:   PgHdr result, *pTail;
36584:   pTail = &result;
36585:   while( pA && pB ){
36586:     if( pA->pgno<pB->pgno ){
36587:       pTail->pDirty = pA;
36588:       pTail = pA;
36589:       pA = pA->pDirty;
36590:     }else{
36591:       pTail->pDirty = pB;
36592:       pTail = pB;
36593:       pB = pB->pDirty;
36594:     }
36595:   }
36596:   if( pA ){
36597:     pTail->pDirty = pA;
36598:   }else if( pB ){
36599:     pTail->pDirty = pB;
36600:   }else{
36601:     pTail->pDirty = 0;
36602:   }
36603:   return result.pDirty;
36604: }
36605: 
36606: /*
36607: ** Sort the list of pages in accending order by pgno.  Pages are
36608: ** connected by pDirty pointers.  The pDirtyPrev pointers are
36609: ** corrupted by this sort.
36610: **
36611: ** Since there cannot be more than 2^31 distinct pages in a database,
36612: ** there cannot be more than 31 buckets required by the merge sorter.
36613: ** One extra bucket is added to catch overflow in case something
36614: ** ever changes to make the previous sentence incorrect.
36615: */
36616: #define N_SORT_BUCKET  32
36617: static PgHdr *pcacheSortDirtyList(PgHdr *pIn){
36618:   PgHdr *a[N_SORT_BUCKET], *p;
36619:   int i;
36620:   memset(a, 0, sizeof(a));
36621:   while( pIn ){
36622:     p = pIn;
36623:     pIn = p->pDirty;
36624:     p->pDirty = 0;
36625:     for(i=0; ALWAYS(i<N_SORT_BUCKET-1); i++){
36626:       if( a[i]==0 ){
36627:         a[i] = p;
36628:         break;
36629:       }else{
36630:         p = pcacheMergeDirtyList(a[i], p);
36631:         a[i] = 0;
36632:       }
36633:     }
36634:     if( NEVER(i==N_SORT_BUCKET-1) ){
36635:       /* To get here, there need to be 2^(N_SORT_BUCKET) elements in
36636:       ** the input list.  But that is impossible.
36637:       */
36638:       a[i] = pcacheMergeDirtyList(a[i], p);
36639:     }
36640:   }
36641:   p = a[0];
36642:   for(i=1; i<N_SORT_BUCKET; i++){
36643:     p = pcacheMergeDirtyList(p, a[i]);
36644:   }
36645:   return p;
36646: }
36647: 
36648: /*
36649: ** Return a list of all dirty pages in the cache, sorted by page number.
36650: */
36651: SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache *pCache){
36652:   PgHdr *p;
36653:   for(p=pCache->pDirty; p; p=p->pDirtyNext){
36654:     p->pDirty = p->pDirtyNext;
36655:   }
36656:   return pcacheSortDirtyList(pCache->pDirty);
36657: }
36658: 
36659: /* 
36660: ** Return the total number of referenced pages held by the cache.
36661: */
36662: SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache *pCache){
36663:   return pCache->nRef;
36664: }
36665: 
36666: /*
36667: ** Return the number of references to the page supplied as an argument.
36668: */
36669: SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr *p){
36670:   return p->nRef;
36671: }
36672: 
36673: /* 
36674: ** Return the total number of pages in the cache.
36675: */
36676: SQLITE_PRIVATE int sqlite3PcachePagecount(PCache *pCache){
36677:   int nPage = 0;
36678:   if( pCache->pCache ){
36679:     nPage = sqlite3GlobalConfig.pcache2.xPagecount(pCache->pCache);
36680:   }
36681:   return nPage;
36682: }
36683: 
36684: #ifdef SQLITE_TEST
36685: /*
36686: ** Get the suggested cache-size value.
36687: */
36688: SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *pCache){
36689:   return numberOfCachePages(pCache);
36690: }
36691: #endif
36692: 
36693: /*
36694: ** Set the suggested cache-size value.
36695: */
36696: SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *pCache, int mxPage){
36697:   pCache->szCache = mxPage;
36698:   if( pCache->pCache ){
36699:     sqlite3GlobalConfig.pcache2.xCachesize(pCache->pCache,
36700:                                            numberOfCachePages(pCache));
36701:   }
36702: }
36703: 
36704: /*
36705: ** Free up as much memory as possible from the page cache.
36706: */
36707: SQLITE_PRIVATE void sqlite3PcacheShrink(PCache *pCache){
36708:   if( pCache->pCache ){
36709:     sqlite3GlobalConfig.pcache2.xShrink(pCache->pCache);
36710:   }
36711: }
36712: 
36713: #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
36714: /*
36715: ** For all dirty pages currently in the cache, invoke the specified
36716: ** callback. This is only used if the SQLITE_CHECK_PAGES macro is
36717: ** defined.
36718: */
36719: SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *)){
36720:   PgHdr *pDirty;
36721:   for(pDirty=pCache->pDirty; pDirty; pDirty=pDirty->pDirtyNext){
36722:     xIter(pDirty);
36723:   }
36724: }
36725: #endif
36726: 
36727: /************** End of pcache.c **********************************************/
36728: /************** Begin file pcache1.c *****************************************/
36729: /*
36730: ** 2008 November 05
36731: **
36732: ** The author disclaims copyright to this source code.  In place of
36733: ** a legal notice, here is a blessing:
36734: **
36735: **    May you do good and not evil.
36736: **    May you find forgiveness for yourself and forgive others.
36737: **    May you share freely, never taking more than you give.
36738: **
36739: *************************************************************************
36740: **
36741: ** This file implements the default page cache implementation (the
36742: ** sqlite3_pcache interface). It also contains part of the implementation
36743: ** of the SQLITE_CONFIG_PAGECACHE and sqlite3_release_memory() features.
36744: ** If the default page cache implementation is overriden, then neither of
36745: ** these two features are available.
36746: */
36747: 
36748: 
36749: typedef struct PCache1 PCache1;
36750: typedef struct PgHdr1 PgHdr1;
36751: typedef struct PgFreeslot PgFreeslot;
36752: typedef struct PGroup PGroup;
36753: 
36754: /* Each page cache (or PCache) belongs to a PGroup.  A PGroup is a set 
36755: ** of one or more PCaches that are able to recycle each others unpinned
36756: ** pages when they are under memory pressure.  A PGroup is an instance of
36757: ** the following object.
36758: **
36759: ** This page cache implementation works in one of two modes:
36760: **
36761: **   (1)  Every PCache is the sole member of its own PGroup.  There is
36762: **        one PGroup per PCache.
36763: **
36764: **   (2)  There is a single global PGroup that all PCaches are a member
36765: **        of.
36766: **
36767: ** Mode 1 uses more memory (since PCache instances are not able to rob
36768: ** unused pages from other PCaches) but it also operates without a mutex,
36769: ** and is therefore often faster.  Mode 2 requires a mutex in order to be
36770: ** threadsafe, but recycles pages more efficiently.
36771: **
36772: ** For mode (1), PGroup.mutex is NULL.  For mode (2) there is only a single
36773: ** PGroup which is the pcache1.grp global variable and its mutex is
36774: ** SQLITE_MUTEX_STATIC_LRU.
36775: */
36776: struct PGroup {
36777:   sqlite3_mutex *mutex;          /* MUTEX_STATIC_LRU or NULL */
36778:   unsigned int nMaxPage;         /* Sum of nMax for purgeable caches */
36779:   unsigned int nMinPage;         /* Sum of nMin for purgeable caches */
36780:   unsigned int mxPinned;         /* nMaxpage + 10 - nMinPage */
36781:   unsigned int nCurrentPage;     /* Number of purgeable pages allocated */
36782:   PgHdr1 *pLruHead, *pLruTail;   /* LRU list of unpinned pages */
36783: };
36784: 
36785: /* Each page cache is an instance of the following object.  Every
36786: ** open database file (including each in-memory database and each
36787: ** temporary or transient database) has a single page cache which
36788: ** is an instance of this object.
36789: **
36790: ** Pointers to structures of this type are cast and returned as 
36791: ** opaque sqlite3_pcache* handles.
36792: */
36793: struct PCache1 {
36794:   /* Cache configuration parameters. Page size (szPage) and the purgeable
36795:   ** flag (bPurgeable) are set when the cache is created. nMax may be 
36796:   ** modified at any time by a call to the pcache1Cachesize() method.
36797:   ** The PGroup mutex must be held when accessing nMax.
36798:   */
36799:   PGroup *pGroup;                     /* PGroup this cache belongs to */
36800:   int szPage;                         /* Size of allocated pages in bytes */
36801:   int szExtra;                        /* Size of extra space in bytes */
36802:   int bPurgeable;                     /* True if cache is purgeable */
36803:   unsigned int nMin;                  /* Minimum number of pages reserved */
36804:   unsigned int nMax;                  /* Configured "cache_size" value */
36805:   unsigned int n90pct;                /* nMax*9/10 */
36806: 
36807:   /* Hash table of all pages. The following variables may only be accessed
36808:   ** when the accessor is holding the PGroup mutex.
36809:   */
36810:   unsigned int nRecyclable;           /* Number of pages in the LRU list */
36811:   unsigned int nPage;                 /* Total number of pages in apHash */
36812:   unsigned int nHash;                 /* Number of slots in apHash[] */
36813:   PgHdr1 **apHash;                    /* Hash table for fast lookup by key */
36814: 
36815:   unsigned int iMaxKey;               /* Largest key seen since xTruncate() */
36816: };
36817: 
36818: /*
36819: ** Each cache entry is represented by an instance of the following 
36820: ** structure. Unless SQLITE_PCACHE_SEPARATE_HEADER is defined, a buffer of
36821: ** PgHdr1.pCache->szPage bytes is allocated directly before this structure 
36822: ** in memory.
36823: */
36824: struct PgHdr1 {
36825:   sqlite3_pcache_page page;
36826:   unsigned int iKey;             /* Key value (page number) */
36827:   PgHdr1 *pNext;                 /* Next in hash table chain */
36828:   PCache1 *pCache;               /* Cache that currently owns this page */
36829:   PgHdr1 *pLruNext;              /* Next in LRU list of unpinned pages */
36830:   PgHdr1 *pLruPrev;              /* Previous in LRU list of unpinned pages */
36831: };
36832: 
36833: /*
36834: ** Free slots in the allocator used to divide up the buffer provided using
36835: ** the SQLITE_CONFIG_PAGECACHE mechanism.
36836: */
36837: struct PgFreeslot {
36838:   PgFreeslot *pNext;  /* Next free slot */
36839: };
36840: 
36841: /*
36842: ** Global data used by this cache.
36843: */
36844: static SQLITE_WSD struct PCacheGlobal {
36845:   PGroup grp;                    /* The global PGroup for mode (2) */
36846: 
36847:   /* Variables related to SQLITE_CONFIG_PAGECACHE settings.  The
36848:   ** szSlot, nSlot, pStart, pEnd, nReserve, and isInit values are all
36849:   ** fixed at sqlite3_initialize() time and do not require mutex protection.
36850:   ** The nFreeSlot and pFree values do require mutex protection.
36851:   */
36852:   int isInit;                    /* True if initialized */
36853:   int szSlot;                    /* Size of each free slot */
36854:   int nSlot;                     /* The number of pcache slots */
36855:   int nReserve;                  /* Try to keep nFreeSlot above this */
36856:   void *pStart, *pEnd;           /* Bounds of pagecache malloc range */
36857:   /* Above requires no mutex.  Use mutex below for variable that follow. */
36858:   sqlite3_mutex *mutex;          /* Mutex for accessing the following: */
36859:   int nFreeSlot;                 /* Number of unused pcache slots */
36860:   PgFreeslot *pFree;             /* Free page blocks */
36861:   /* The following value requires a mutex to change.  We skip the mutex on
36862:   ** reading because (1) most platforms read a 32-bit integer atomically and
36863:   ** (2) even if an incorrect value is read, no great harm is done since this
36864:   ** is really just an optimization. */
36865:   int bUnderPressure;            /* True if low on PAGECACHE memory */
36866: } pcache1_g;
36867: 
36868: /*
36869: ** All code in this file should access the global structure above via the
36870: ** alias "pcache1". This ensures that the WSD emulation is used when
36871: ** compiling for systems that do not support real WSD.
36872: */
36873: #define pcache1 (GLOBAL(struct PCacheGlobal, pcache1_g))
36874: 
36875: /*
36876: ** Macros to enter and leave the PCache LRU mutex.
36877: */
36878: #define pcache1EnterMutex(X) sqlite3_mutex_enter((X)->mutex)
36879: #define pcache1LeaveMutex(X) sqlite3_mutex_leave((X)->mutex)
36880: 
36881: /******************************************************************************/
36882: /******** Page Allocation/SQLITE_CONFIG_PCACHE Related Functions **************/
36883: 
36884: /*
36885: ** This function is called during initialization if a static buffer is 
36886: ** supplied to use for the page-cache by passing the SQLITE_CONFIG_PAGECACHE
36887: ** verb to sqlite3_config(). Parameter pBuf points to an allocation large
36888: ** enough to contain 'n' buffers of 'sz' bytes each.
36889: **
36890: ** This routine is called from sqlite3_initialize() and so it is guaranteed
36891: ** to be serialized already.  There is no need for further mutexing.
36892: */
36893: SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, int sz, int n){
36894:   if( pcache1.isInit ){
36895:     PgFreeslot *p;
36896:     sz = ROUNDDOWN8(sz);
36897:     pcache1.szSlot = sz;
36898:     pcache1.nSlot = pcache1.nFreeSlot = n;
36899:     pcache1.nReserve = n>90 ? 10 : (n/10 + 1);
36900:     pcache1.pStart = pBuf;
36901:     pcache1.pFree = 0;
36902:     pcache1.bUnderPressure = 0;
36903:     while( n-- ){
36904:       p = (PgFreeslot*)pBuf;
36905:       p->pNext = pcache1.pFree;
36906:       pcache1.pFree = p;
36907:       pBuf = (void*)&((char*)pBuf)[sz];
36908:     }
36909:     pcache1.pEnd = pBuf;
36910:   }
36911: }
36912: 
36913: /*
36914: ** Malloc function used within this file to allocate space from the buffer
36915: ** configured using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no 
36916: ** such buffer exists or there is no space left in it, this function falls 
36917: ** back to sqlite3Malloc().
36918: **
36919: ** Multiple threads can run this routine at the same time.  Global variables
36920: ** in pcache1 need to be protected via mutex.
36921: */
36922: static void *pcache1Alloc(int nByte){
36923:   void *p = 0;
36924:   assert( sqlite3_mutex_notheld(pcache1.grp.mutex) );
36925:   sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, nByte);
36926:   if( nByte<=pcache1.szSlot ){
36927:     sqlite3_mutex_enter(pcache1.mutex);
36928:     p = (PgHdr1 *)pcache1.pFree;
36929:     if( p ){
36930:       pcache1.pFree = pcache1.pFree->pNext;
36931:       pcache1.nFreeSlot--;
36932:       pcache1.bUnderPressure = pcache1.nFreeSlot<pcache1.nReserve;
36933:       assert( pcache1.nFreeSlot>=0 );
36934:       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1);
36935:     }
36936:     sqlite3_mutex_leave(pcache1.mutex);
36937:   }
36938:   if( p==0 ){
36939:     /* Memory is not available in the SQLITE_CONFIG_PAGECACHE pool.  Get
36940:     ** it from sqlite3Malloc instead.
36941:     */
36942:     p = sqlite3Malloc(nByte);
36943:     if( p ){
36944:       int sz = sqlite3MallocSize(p);
36945:       sqlite3_mutex_enter(pcache1.mutex);
36946:       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, sz);
36947:       sqlite3_mutex_leave(pcache1.mutex);
36948:     }
36949:     sqlite3MemdebugSetType(p, MEMTYPE_PCACHE);
36950:   }
36951:   return p;
36952: }
36953: 
36954: /*
36955: ** Free an allocated buffer obtained from pcache1Alloc().
36956: */
36957: static int pcache1Free(void *p){
36958:   int nFreed = 0;
36959:   if( p==0 ) return 0;
36960:   if( p>=pcache1.pStart && p<pcache1.pEnd ){
36961:     PgFreeslot *pSlot;
36962:     sqlite3_mutex_enter(pcache1.mutex);
36963:     sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, -1);
36964:     pSlot = (PgFreeslot*)p;
36965:     pSlot->pNext = pcache1.pFree;
36966:     pcache1.pFree = pSlot;
36967:     pcache1.nFreeSlot++;
36968:     pcache1.bUnderPressure = pcache1.nFreeSlot<pcache1.nReserve;
36969:     assert( pcache1.nFreeSlot<=pcache1.nSlot );
36970:     sqlite3_mutex_leave(pcache1.mutex);
36971:   }else{
36972:     assert( sqlite3MemdebugHasType(p, MEMTYPE_PCACHE) );
36973:     sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
36974:     nFreed = sqlite3MallocSize(p);
36975:     sqlite3_mutex_enter(pcache1.mutex);
36976:     sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, -nFreed);
36977:     sqlite3_mutex_leave(pcache1.mutex);
36978:     sqlite3_free(p);
36979:   }
36980:   return nFreed;
36981: }
36982: 
36983: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
36984: /*
36985: ** Return the size of a pcache allocation
36986: */
36987: static int pcache1MemSize(void *p){
36988:   if( p>=pcache1.pStart && p<pcache1.pEnd ){
36989:     return pcache1.szSlot;
36990:   }else{
36991:     int iSize;
36992:     assert( sqlite3MemdebugHasType(p, MEMTYPE_PCACHE) );
36993:     sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
36994:     iSize = sqlite3MallocSize(p);
36995:     sqlite3MemdebugSetType(p, MEMTYPE_PCACHE);
36996:     return iSize;
36997:   }
36998: }
36999: #endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */
37000: 
37001: /*
37002: ** Allocate a new page object initially associated with cache pCache.
37003: */
37004: static PgHdr1 *pcache1AllocPage(PCache1 *pCache){
37005:   PgHdr1 *p = 0;
37006:   void *pPg;
37007: 
37008:   /* The group mutex must be released before pcache1Alloc() is called. This
37009:   ** is because it may call sqlite3_release_memory(), which assumes that 
37010:   ** this mutex is not held. */
37011:   assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
37012:   pcache1LeaveMutex(pCache->pGroup);
37013: #ifdef SQLITE_PCACHE_SEPARATE_HEADER
37014:   pPg = pcache1Alloc(pCache->szPage);
37015:   p = sqlite3Malloc(sizeof(PgHdr1) + pCache->szExtra);
37016:   if( !pPg || !p ){
37017:     pcache1Free(pPg);
37018:     sqlite3_free(p);
37019:     pPg = 0;
37020:   }
37021: #else
37022:   pPg = pcache1Alloc(sizeof(PgHdr1) + pCache->szPage + pCache->szExtra);
37023:   p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage];
37024: #endif
37025:   pcache1EnterMutex(pCache->pGroup);
37026: 
37027:   if( pPg ){
37028:     p->page.pBuf = pPg;
37029:     p->page.pExtra = &p[1];
37030:     if( pCache->bPurgeable ){
37031:       pCache->pGroup->nCurrentPage++;
37032:     }
37033:     return p;
37034:   }
37035:   return 0;
37036: }
37037: 
37038: /*
37039: ** Free a page object allocated by pcache1AllocPage().
37040: **
37041: ** The pointer is allowed to be NULL, which is prudent.  But it turns out
37042: ** that the current implementation happens to never call this routine
37043: ** with a NULL pointer, so we mark the NULL test with ALWAYS().
37044: */
37045: static void pcache1FreePage(PgHdr1 *p){
37046:   if( ALWAYS(p) ){
37047:     PCache1 *pCache = p->pCache;
37048:     assert( sqlite3_mutex_held(p->pCache->pGroup->mutex) );
37049:     pcache1Free(p->page.pBuf);
37050: #ifdef SQLITE_PCACHE_SEPARATE_HEADER
37051:     sqlite3_free(p);
37052: #endif
37053:     if( pCache->bPurgeable ){
37054:       pCache->pGroup->nCurrentPage--;
37055:     }
37056:   }
37057: }
37058: 
37059: /*
37060: ** Malloc function used by SQLite to obtain space from the buffer configured
37061: ** using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no such buffer
37062: ** exists, this function falls back to sqlite3Malloc().
37063: */
37064: SQLITE_PRIVATE void *sqlite3PageMalloc(int sz){
37065:   return pcache1Alloc(sz);
37066: }
37067: 
37068: /*
37069: ** Free an allocated buffer obtained from sqlite3PageMalloc().
37070: */
37071: SQLITE_PRIVATE void sqlite3PageFree(void *p){
37072:   pcache1Free(p);
37073: }
37074: 
37075: 
37076: /*
37077: ** Return true if it desirable to avoid allocating a new page cache
37078: ** entry.
37079: **
37080: ** If memory was allocated specifically to the page cache using
37081: ** SQLITE_CONFIG_PAGECACHE but that memory has all been used, then
37082: ** it is desirable to avoid allocating a new page cache entry because
37083: ** presumably SQLITE_CONFIG_PAGECACHE was suppose to be sufficient
37084: ** for all page cache needs and we should not need to spill the
37085: ** allocation onto the heap.
37086: **
37087: ** Or, the heap is used for all page cache memory but the heap is
37088: ** under memory pressure, then again it is desirable to avoid
37089: ** allocating a new page cache entry in order to avoid stressing
37090: ** the heap even further.
37091: */
37092: static int pcache1UnderMemoryPressure(PCache1 *pCache){
37093:   if( pcache1.nSlot && (pCache->szPage+pCache->szExtra)<=pcache1.szSlot ){
37094:     return pcache1.bUnderPressure;
37095:   }else{
37096:     return sqlite3HeapNearlyFull();
37097:   }
37098: }
37099: 
37100: /******************************************************************************/
37101: /******** General Implementation Functions ************************************/
37102: 
37103: /*
37104: ** This function is used to resize the hash table used by the cache passed
37105: ** as the first argument.
37106: **
37107: ** The PCache mutex must be held when this function is called.
37108: */
37109: static int pcache1ResizeHash(PCache1 *p){
37110:   PgHdr1 **apNew;
37111:   unsigned int nNew;
37112:   unsigned int i;
37113: 
37114:   assert( sqlite3_mutex_held(p->pGroup->mutex) );
37115: 
37116:   nNew = p->nHash*2;
37117:   if( nNew<256 ){
37118:     nNew = 256;
37119:   }
37120: 
37121:   pcache1LeaveMutex(p->pGroup);
37122:   if( p->nHash ){ sqlite3BeginBenignMalloc(); }
37123:   apNew = (PgHdr1 **)sqlite3_malloc(sizeof(PgHdr1 *)*nNew);
37124:   if( p->nHash ){ sqlite3EndBenignMalloc(); }
37125:   pcache1EnterMutex(p->pGroup);
37126:   if( apNew ){
37127:     memset(apNew, 0, sizeof(PgHdr1 *)*nNew);
37128:     for(i=0; i<p->nHash; i++){
37129:       PgHdr1 *pPage;
37130:       PgHdr1 *pNext = p->apHash[i];
37131:       while( (pPage = pNext)!=0 ){
37132:         unsigned int h = pPage->iKey % nNew;
37133:         pNext = pPage->pNext;
37134:         pPage->pNext = apNew[h];
37135:         apNew[h] = pPage;
37136:       }
37137:     }
37138:     sqlite3_free(p->apHash);
37139:     p->apHash = apNew;
37140:     p->nHash = nNew;
37141:   }
37142: 
37143:   return (p->apHash ? SQLITE_OK : SQLITE_NOMEM);
37144: }
37145: 
37146: /*
37147: ** This function is used internally to remove the page pPage from the 
37148: ** PGroup LRU list, if is part of it. If pPage is not part of the PGroup
37149: ** LRU list, then this function is a no-op.
37150: **
37151: ** The PGroup mutex must be held when this function is called.
37152: **
37153: ** If pPage is NULL then this routine is a no-op.
37154: */
37155: static void pcache1PinPage(PgHdr1 *pPage){
37156:   PCache1 *pCache;
37157:   PGroup *pGroup;
37158: 
37159:   if( pPage==0 ) return;
37160:   pCache = pPage->pCache;
37161:   pGroup = pCache->pGroup;
37162:   assert( sqlite3_mutex_held(pGroup->mutex) );
37163:   if( pPage->pLruNext || pPage==pGroup->pLruTail ){
37164:     if( pPage->pLruPrev ){
37165:       pPage->pLruPrev->pLruNext = pPage->pLruNext;
37166:     }
37167:     if( pPage->pLruNext ){
37168:       pPage->pLruNext->pLruPrev = pPage->pLruPrev;
37169:     }
37170:     if( pGroup->pLruHead==pPage ){
37171:       pGroup->pLruHead = pPage->pLruNext;
37172:     }
37173:     if( pGroup->pLruTail==pPage ){
37174:       pGroup->pLruTail = pPage->pLruPrev;
37175:     }
37176:     pPage->pLruNext = 0;
37177:     pPage->pLruPrev = 0;
37178:     pPage->pCache->nRecyclable--;
37179:   }
37180: }
37181: 
37182: 
37183: /*
37184: ** Remove the page supplied as an argument from the hash table 
37185: ** (PCache1.apHash structure) that it is currently stored in.
37186: **
37187: ** The PGroup mutex must be held when this function is called.
37188: */
37189: static void pcache1RemoveFromHash(PgHdr1 *pPage){
37190:   unsigned int h;
37191:   PCache1 *pCache = pPage->pCache;
37192:   PgHdr1 **pp;
37193: 
37194:   assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
37195:   h = pPage->iKey % pCache->nHash;
37196:   for(pp=&pCache->apHash[h]; (*pp)!=pPage; pp=&(*pp)->pNext);
37197:   *pp = (*pp)->pNext;
37198: 
37199:   pCache->nPage--;
37200: }
37201: 
37202: /*
37203: ** If there are currently more than nMaxPage pages allocated, try
37204: ** to recycle pages to reduce the number allocated to nMaxPage.
37205: */
37206: static void pcache1EnforceMaxPage(PGroup *pGroup){
37207:   assert( sqlite3_mutex_held(pGroup->mutex) );
37208:   while( pGroup->nCurrentPage>pGroup->nMaxPage && pGroup->pLruTail ){
37209:     PgHdr1 *p = pGroup->pLruTail;
37210:     assert( p->pCache->pGroup==pGroup );
37211:     pcache1PinPage(p);
37212:     pcache1RemoveFromHash(p);
37213:     pcache1FreePage(p);
37214:   }
37215: }
37216: 
37217: /*
37218: ** Discard all pages from cache pCache with a page number (key value) 
37219: ** greater than or equal to iLimit. Any pinned pages that meet this 
37220: ** criteria are unpinned before they are discarded.
37221: **
37222: ** The PCache mutex must be held when this function is called.
37223: */
37224: static void pcache1TruncateUnsafe(
37225:   PCache1 *pCache,             /* The cache to truncate */
37226:   unsigned int iLimit          /* Drop pages with this pgno or larger */
37227: ){
37228:   TESTONLY( unsigned int nPage = 0; )  /* To assert pCache->nPage is correct */
37229:   unsigned int h;
37230:   assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
37231:   for(h=0; h<pCache->nHash; h++){
37232:     PgHdr1 **pp = &pCache->apHash[h]; 
37233:     PgHdr1 *pPage;
37234:     while( (pPage = *pp)!=0 ){
37235:       if( pPage->iKey>=iLimit ){
37236:         pCache->nPage--;
37237:         *pp = pPage->pNext;
37238:         pcache1PinPage(pPage);
37239:         pcache1FreePage(pPage);
37240:       }else{
37241:         pp = &pPage->pNext;
37242:         TESTONLY( nPage++; )
37243:       }
37244:     }
37245:   }
37246:   assert( pCache->nPage==nPage );
37247: }
37248: 
37249: /******************************************************************************/
37250: /******** sqlite3_pcache Methods **********************************************/
37251: 
37252: /*
37253: ** Implementation of the sqlite3_pcache.xInit method.
37254: */
37255: static int pcache1Init(void *NotUsed){
37256:   UNUSED_PARAMETER(NotUsed);
37257:   assert( pcache1.isInit==0 );
37258:   memset(&pcache1, 0, sizeof(pcache1));
37259:   if( sqlite3GlobalConfig.bCoreMutex ){
37260:     pcache1.grp.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU);
37261:     pcache1.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_PMEM);
37262:   }
37263:   pcache1.grp.mxPinned = 10;
37264:   pcache1.isInit = 1;
37265:   return SQLITE_OK;
37266: }
37267: 
37268: /*
37269: ** Implementation of the sqlite3_pcache.xShutdown method.
37270: ** Note that the static mutex allocated in xInit does 
37271: ** not need to be freed.
37272: */
37273: static void pcache1Shutdown(void *NotUsed){
37274:   UNUSED_PARAMETER(NotUsed);
37275:   assert( pcache1.isInit!=0 );
37276:   memset(&pcache1, 0, sizeof(pcache1));
37277: }
37278: 
37279: /*
37280: ** Implementation of the sqlite3_pcache.xCreate method.
37281: **
37282: ** Allocate a new cache.
37283: */
37284: static sqlite3_pcache *pcache1Create(int szPage, int szExtra, int bPurgeable){
37285:   PCache1 *pCache;      /* The newly created page cache */
37286:   PGroup *pGroup;       /* The group the new page cache will belong to */
37287:   int sz;               /* Bytes of memory required to allocate the new cache */
37288: 
37289:   /*
37290:   ** The seperateCache variable is true if each PCache has its own private
37291:   ** PGroup.  In other words, separateCache is true for mode (1) where no
37292:   ** mutexing is required.
37293:   **
37294:   **   *  Always use a unified cache (mode-2) if ENABLE_MEMORY_MANAGEMENT
37295:   **
37296:   **   *  Always use a unified cache in single-threaded applications
37297:   **
37298:   **   *  Otherwise (if multi-threaded and ENABLE_MEMORY_MANAGEMENT is off)
37299:   **      use separate caches (mode-1)
37300:   */
37301: #if defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) || SQLITE_THREADSAFE==0
37302:   const int separateCache = 0;
37303: #else
37304:   int separateCache = sqlite3GlobalConfig.bCoreMutex>0;
37305: #endif
37306: 
37307:   assert( (szPage & (szPage-1))==0 && szPage>=512 && szPage<=65536 );
37308:   assert( szExtra < 300 );
37309: 
37310:   sz = sizeof(PCache1) + sizeof(PGroup)*separateCache;
37311:   pCache = (PCache1 *)sqlite3_malloc(sz);
37312:   if( pCache ){
37313:     memset(pCache, 0, sz);
37314:     if( separateCache ){
37315:       pGroup = (PGroup*)&pCache[1];
37316:       pGroup->mxPinned = 10;
37317:     }else{
37318:       pGroup = &pcache1.grp;
37319:     }
37320:     pCache->pGroup = pGroup;
37321:     pCache->szPage = szPage;
37322:     pCache->szExtra = szExtra;
37323:     pCache->bPurgeable = (bPurgeable ? 1 : 0);
37324:     if( bPurgeable ){
37325:       pCache->nMin = 10;
37326:       pcache1EnterMutex(pGroup);
37327:       pGroup->nMinPage += pCache->nMin;
37328:       pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
37329:       pcache1LeaveMutex(pGroup);
37330:     }
37331:   }
37332:   return (sqlite3_pcache *)pCache;
37333: }
37334: 
37335: /*
37336: ** Implementation of the sqlite3_pcache.xCachesize method. 
37337: **
37338: ** Configure the cache_size limit for a cache.
37339: */
37340: static void pcache1Cachesize(sqlite3_pcache *p, int nMax){
37341:   PCache1 *pCache = (PCache1 *)p;
37342:   if( pCache->bPurgeable ){
37343:     PGroup *pGroup = pCache->pGroup;
37344:     pcache1EnterMutex(pGroup);
37345:     pGroup->nMaxPage += (nMax - pCache->nMax);
37346:     pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
37347:     pCache->nMax = nMax;
37348:     pCache->n90pct = pCache->nMax*9/10;
37349:     pcache1EnforceMaxPage(pGroup);
37350:     pcache1LeaveMutex(pGroup);
37351:   }
37352: }
37353: 
37354: /*
37355: ** Implementation of the sqlite3_pcache.xShrink method. 
37356: **
37357: ** Free up as much memory as possible.
37358: */
37359: static void pcache1Shrink(sqlite3_pcache *p){
37360:   PCache1 *pCache = (PCache1*)p;
37361:   if( pCache->bPurgeable ){
37362:     PGroup *pGroup = pCache->pGroup;
37363:     int savedMaxPage;
37364:     pcache1EnterMutex(pGroup);
37365:     savedMaxPage = pGroup->nMaxPage;
37366:     pGroup->nMaxPage = 0;
37367:     pcache1EnforceMaxPage(pGroup);
37368:     pGroup->nMaxPage = savedMaxPage;
37369:     pcache1LeaveMutex(pGroup);
37370:   }
37371: }
37372: 
37373: /*
37374: ** Implementation of the sqlite3_pcache.xPagecount method. 
37375: */
37376: static int pcache1Pagecount(sqlite3_pcache *p){
37377:   int n;
37378:   PCache1 *pCache = (PCache1*)p;
37379:   pcache1EnterMutex(pCache->pGroup);
37380:   n = pCache->nPage;
37381:   pcache1LeaveMutex(pCache->pGroup);
37382:   return n;
37383: }
37384: 
37385: /*
37386: ** Implementation of the sqlite3_pcache.xFetch method. 
37387: **
37388: ** Fetch a page by key value.
37389: **
37390: ** Whether or not a new page may be allocated by this function depends on
37391: ** the value of the createFlag argument.  0 means do not allocate a new
37392: ** page.  1 means allocate a new page if space is easily available.  2 
37393: ** means to try really hard to allocate a new page.
37394: **
37395: ** For a non-purgeable cache (a cache used as the storage for an in-memory
37396: ** database) there is really no difference between createFlag 1 and 2.  So
37397: ** the calling function (pcache.c) will never have a createFlag of 1 on
37398: ** a non-purgeable cache.
37399: **
37400: ** There are three different approaches to obtaining space for a page,
37401: ** depending on the value of parameter createFlag (which may be 0, 1 or 2).
37402: **
37403: **   1. Regardless of the value of createFlag, the cache is searched for a 
37404: **      copy of the requested page. If one is found, it is returned.
37405: **
37406: **   2. If createFlag==0 and the page is not already in the cache, NULL is
37407: **      returned.
37408: **
37409: **   3. If createFlag is 1, and the page is not already in the cache, then
37410: **      return NULL (do not allocate a new page) if any of the following
37411: **      conditions are true:
37412: **
37413: **       (a) the number of pages pinned by the cache is greater than
37414: **           PCache1.nMax, or
37415: **
37416: **       (b) the number of pages pinned by the cache is greater than
37417: **           the sum of nMax for all purgeable caches, less the sum of 
37418: **           nMin for all other purgeable caches, or
37419: **
37420: **   4. If none of the first three conditions apply and the cache is marked
37421: **      as purgeable, and if one of the following is true:
37422: **
37423: **       (a) The number of pages allocated for the cache is already 
37424: **           PCache1.nMax, or
37425: **
37426: **       (b) The number of pages allocated for all purgeable caches is
37427: **           already equal to or greater than the sum of nMax for all
37428: **           purgeable caches,
37429: **
37430: **       (c) The system is under memory pressure and wants to avoid
37431: **           unnecessary pages cache entry allocations
37432: **
37433: **      then attempt to recycle a page from the LRU list. If it is the right
37434: **      size, return the recycled buffer. Otherwise, free the buffer and
37435: **      proceed to step 5. 
37436: **
37437: **   5. Otherwise, allocate and return a new page buffer.
37438: */
37439: static sqlite3_pcache_page *pcache1Fetch(
37440:   sqlite3_pcache *p, 
37441:   unsigned int iKey, 
37442:   int createFlag
37443: ){
37444:   unsigned int nPinned;
37445:   PCache1 *pCache = (PCache1 *)p;
37446:   PGroup *pGroup;
37447:   PgHdr1 *pPage = 0;
37448: 
37449:   assert( pCache->bPurgeable || createFlag!=1 );
37450:   assert( pCache->bPurgeable || pCache->nMin==0 );
37451:   assert( pCache->bPurgeable==0 || pCache->nMin==10 );
37452:   assert( pCache->nMin==0 || pCache->bPurgeable );
37453:   pcache1EnterMutex(pGroup = pCache->pGroup);
37454: 
37455:   /* Step 1: Search the hash table for an existing entry. */
37456:   if( pCache->nHash>0 ){
37457:     unsigned int h = iKey % pCache->nHash;
37458:     for(pPage=pCache->apHash[h]; pPage&&pPage->iKey!=iKey; pPage=pPage->pNext);
37459:   }
37460: 
37461:   /* Step 2: Abort if no existing page is found and createFlag is 0 */
37462:   if( pPage || createFlag==0 ){
37463:     pcache1PinPage(pPage);
37464:     goto fetch_out;
37465:   }
37466: 
37467:   /* The pGroup local variable will normally be initialized by the
37468:   ** pcache1EnterMutex() macro above.  But if SQLITE_MUTEX_OMIT is defined,
37469:   ** then pcache1EnterMutex() is a no-op, so we have to initialize the
37470:   ** local variable here.  Delaying the initialization of pGroup is an
37471:   ** optimization:  The common case is to exit the module before reaching
37472:   ** this point.
37473:   */
37474: #ifdef SQLITE_MUTEX_OMIT
37475:   pGroup = pCache->pGroup;
37476: #endif
37477: 
37478:   /* Step 3: Abort if createFlag is 1 but the cache is nearly full */
37479:   assert( pCache->nPage >= pCache->nRecyclable );
37480:   nPinned = pCache->nPage - pCache->nRecyclable;
37481:   assert( pGroup->mxPinned == pGroup->nMaxPage + 10 - pGroup->nMinPage );
37482:   assert( pCache->n90pct == pCache->nMax*9/10 );
37483:   if( createFlag==1 && (
37484:         nPinned>=pGroup->mxPinned
37485:      || nPinned>=pCache->n90pct
37486:      || pcache1UnderMemoryPressure(pCache)
37487:   )){
37488:     goto fetch_out;
37489:   }
37490: 
37491:   if( pCache->nPage>=pCache->nHash && pcache1ResizeHash(pCache) ){
37492:     goto fetch_out;
37493:   }
37494: 
37495:   /* Step 4. Try to recycle a page. */
37496:   if( pCache->bPurgeable && pGroup->pLruTail && (
37497:          (pCache->nPage+1>=pCache->nMax)
37498:       || pGroup->nCurrentPage>=pGroup->nMaxPage
37499:       || pcache1UnderMemoryPressure(pCache)
37500:   )){
37501:     PCache1 *pOther;
37502:     pPage = pGroup->pLruTail;
37503:     pcache1RemoveFromHash(pPage);
37504:     pcache1PinPage(pPage);
37505:     pOther = pPage->pCache;
37506: 
37507:     /* We want to verify that szPage and szExtra are the same for pOther
37508:     ** and pCache.  Assert that we can verify this by comparing sums. */
37509:     assert( (pCache->szPage & (pCache->szPage-1))==0 && pCache->szPage>=512 );
37510:     assert( pCache->szExtra<512 );
37511:     assert( (pOther->szPage & (pOther->szPage-1))==0 && pOther->szPage>=512 );
37512:     assert( pOther->szExtra<512 );
37513: 
37514:     if( pOther->szPage+pOther->szExtra != pCache->szPage+pCache->szExtra ){
37515:       pcache1FreePage(pPage);
37516:       pPage = 0;
37517:     }else{
37518:       pGroup->nCurrentPage -= (pOther->bPurgeable - pCache->bPurgeable);
37519:     }
37520:   }
37521: 
37522:   /* Step 5. If a usable page buffer has still not been found, 
37523:   ** attempt to allocate a new one. 
37524:   */
37525:   if( !pPage ){
37526:     if( createFlag==1 ) sqlite3BeginBenignMalloc();
37527:     pPage = pcache1AllocPage(pCache);
37528:     if( createFlag==1 ) sqlite3EndBenignMalloc();
37529:   }
37530: 
37531:   if( pPage ){
37532:     unsigned int h = iKey % pCache->nHash;
37533:     pCache->nPage++;
37534:     pPage->iKey = iKey;
37535:     pPage->pNext = pCache->apHash[h];
37536:     pPage->pCache = pCache;
37537:     pPage->pLruPrev = 0;
37538:     pPage->pLruNext = 0;
37539:     *(void **)pPage->page.pExtra = 0;
37540:     pCache->apHash[h] = pPage;
37541:   }
37542: 
37543: fetch_out:
37544:   if( pPage && iKey>pCache->iMaxKey ){
37545:     pCache->iMaxKey = iKey;
37546:   }
37547:   pcache1LeaveMutex(pGroup);
37548:   return &pPage->page;
37549: }
37550: 
37551: 
37552: /*
37553: ** Implementation of the sqlite3_pcache.xUnpin method.
37554: **
37555: ** Mark a page as unpinned (eligible for asynchronous recycling).
37556: */
37557: static void pcache1Unpin(
37558:   sqlite3_pcache *p, 
37559:   sqlite3_pcache_page *pPg, 
37560:   int reuseUnlikely
37561: ){
37562:   PCache1 *pCache = (PCache1 *)p;
37563:   PgHdr1 *pPage = (PgHdr1 *)pPg;
37564:   PGroup *pGroup = pCache->pGroup;
37565:  
37566:   assert( pPage->pCache==pCache );
37567:   pcache1EnterMutex(pGroup);
37568: 
37569:   /* It is an error to call this function if the page is already 
37570:   ** part of the PGroup LRU list.
37571:   */
37572:   assert( pPage->pLruPrev==0 && pPage->pLruNext==0 );
37573:   assert( pGroup->pLruHead!=pPage && pGroup->pLruTail!=pPage );
37574: 
37575:   if( reuseUnlikely || pGroup->nCurrentPage>pGroup->nMaxPage ){
37576:     pcache1RemoveFromHash(pPage);
37577:     pcache1FreePage(pPage);
37578:   }else{
37579:     /* Add the page to the PGroup LRU list. */
37580:     if( pGroup->pLruHead ){
37581:       pGroup->pLruHead->pLruPrev = pPage;
37582:       pPage->pLruNext = pGroup->pLruHead;
37583:       pGroup->pLruHead = pPage;
37584:     }else{
37585:       pGroup->pLruTail = pPage;
37586:       pGroup->pLruHead = pPage;
37587:     }
37588:     pCache->nRecyclable++;
37589:   }
37590: 
37591:   pcache1LeaveMutex(pCache->pGroup);
37592: }
37593: 
37594: /*
37595: ** Implementation of the sqlite3_pcache.xRekey method. 
37596: */
37597: static void pcache1Rekey(
37598:   sqlite3_pcache *p,
37599:   sqlite3_pcache_page *pPg,
37600:   unsigned int iOld,
37601:   unsigned int iNew
37602: ){
37603:   PCache1 *pCache = (PCache1 *)p;
37604:   PgHdr1 *pPage = (PgHdr1 *)pPg;
37605:   PgHdr1 **pp;
37606:   unsigned int h; 
37607:   assert( pPage->iKey==iOld );
37608:   assert( pPage->pCache==pCache );
37609: 
37610:   pcache1EnterMutex(pCache->pGroup);
37611: 
37612:   h = iOld%pCache->nHash;
37613:   pp = &pCache->apHash[h];
37614:   while( (*pp)!=pPage ){
37615:     pp = &(*pp)->pNext;
37616:   }
37617:   *pp = pPage->pNext;
37618: 
37619:   h = iNew%pCache->nHash;
37620:   pPage->iKey = iNew;
37621:   pPage->pNext = pCache->apHash[h];
37622:   pCache->apHash[h] = pPage;
37623:   if( iNew>pCache->iMaxKey ){
37624:     pCache->iMaxKey = iNew;
37625:   }
37626: 
37627:   pcache1LeaveMutex(pCache->pGroup);
37628: }
37629: 
37630: /*
37631: ** Implementation of the sqlite3_pcache.xTruncate method. 
37632: **
37633: ** Discard all unpinned pages in the cache with a page number equal to
37634: ** or greater than parameter iLimit. Any pinned pages with a page number
37635: ** equal to or greater than iLimit are implicitly unpinned.
37636: */
37637: static void pcache1Truncate(sqlite3_pcache *p, unsigned int iLimit){
37638:   PCache1 *pCache = (PCache1 *)p;
37639:   pcache1EnterMutex(pCache->pGroup);
37640:   if( iLimit<=pCache->iMaxKey ){
37641:     pcache1TruncateUnsafe(pCache, iLimit);
37642:     pCache->iMaxKey = iLimit-1;
37643:   }
37644:   pcache1LeaveMutex(pCache->pGroup);
37645: }
37646: 
37647: /*
37648: ** Implementation of the sqlite3_pcache.xDestroy method. 
37649: **
37650: ** Destroy a cache allocated using pcache1Create().
37651: */
37652: static void pcache1Destroy(sqlite3_pcache *p){
37653:   PCache1 *pCache = (PCache1 *)p;
37654:   PGroup *pGroup = pCache->pGroup;
37655:   assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) );
37656:   pcache1EnterMutex(pGroup);
37657:   pcache1TruncateUnsafe(pCache, 0);
37658:   assert( pGroup->nMaxPage >= pCache->nMax );
37659:   pGroup->nMaxPage -= pCache->nMax;
37660:   assert( pGroup->nMinPage >= pCache->nMin );
37661:   pGroup->nMinPage -= pCache->nMin;
37662:   pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
37663:   pcache1EnforceMaxPage(pGroup);
37664:   pcache1LeaveMutex(pGroup);
37665:   sqlite3_free(pCache->apHash);
37666:   sqlite3_free(pCache);
37667: }
37668: 
37669: /*
37670: ** This function is called during initialization (sqlite3_initialize()) to
37671: ** install the default pluggable cache module, assuming the user has not
37672: ** already provided an alternative.
37673: */
37674: SQLITE_PRIVATE void sqlite3PCacheSetDefault(void){
37675:   static const sqlite3_pcache_methods2 defaultMethods = {
37676:     1,                       /* iVersion */
37677:     0,                       /* pArg */
37678:     pcache1Init,             /* xInit */
37679:     pcache1Shutdown,         /* xShutdown */
37680:     pcache1Create,           /* xCreate */
37681:     pcache1Cachesize,        /* xCachesize */
37682:     pcache1Pagecount,        /* xPagecount */
37683:     pcache1Fetch,            /* xFetch */
37684:     pcache1Unpin,            /* xUnpin */
37685:     pcache1Rekey,            /* xRekey */
37686:     pcache1Truncate,         /* xTruncate */
37687:     pcache1Destroy,          /* xDestroy */
37688:     pcache1Shrink            /* xShrink */
37689:   };
37690:   sqlite3_config(SQLITE_CONFIG_PCACHE2, &defaultMethods);
37691: }
37692: 
37693: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
37694: /*
37695: ** This function is called to free superfluous dynamically allocated memory
37696: ** held by the pager system. Memory in use by any SQLite pager allocated
37697: ** by the current thread may be sqlite3_free()ed.
37698: **
37699: ** nReq is the number of bytes of memory required. Once this much has
37700: ** been released, the function returns. The return value is the total number 
37701: ** of bytes of memory released.
37702: */
37703: SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){
37704:   int nFree = 0;
37705:   assert( sqlite3_mutex_notheld(pcache1.grp.mutex) );
37706:   assert( sqlite3_mutex_notheld(pcache1.mutex) );
37707:   if( pcache1.pStart==0 ){
37708:     PgHdr1 *p;
37709:     pcache1EnterMutex(&pcache1.grp);
37710:     while( (nReq<0 || nFree<nReq) && ((p=pcache1.grp.pLruTail)!=0) ){
37711:       nFree += pcache1MemSize(p->page.pBuf);
37712: #ifdef SQLITE_PCACHE_SEPARATE_HEADER
37713:       nFree += sqlite3MemSize(p);
37714: #endif
37715:       pcache1PinPage(p);
37716:       pcache1RemoveFromHash(p);
37717:       pcache1FreePage(p);
37718:     }
37719:     pcache1LeaveMutex(&pcache1.grp);
37720:   }
37721:   return nFree;
37722: }
37723: #endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */
37724: 
37725: #ifdef SQLITE_TEST
37726: /*
37727: ** This function is used by test procedures to inspect the internal state
37728: ** of the global cache.
37729: */
37730: SQLITE_PRIVATE void sqlite3PcacheStats(
37731:   int *pnCurrent,      /* OUT: Total number of pages cached */
37732:   int *pnMax,          /* OUT: Global maximum cache size */
37733:   int *pnMin,          /* OUT: Sum of PCache1.nMin for purgeable caches */
37734:   int *pnRecyclable    /* OUT: Total number of pages available for recycling */
37735: ){
37736:   PgHdr1 *p;
37737:   int nRecyclable = 0;
37738:   for(p=pcache1.grp.pLruHead; p; p=p->pLruNext){
37739:     nRecyclable++;
37740:   }
37741:   *pnCurrent = pcache1.grp.nCurrentPage;
37742:   *pnMax = (int)pcache1.grp.nMaxPage;
37743:   *pnMin = (int)pcache1.grp.nMinPage;
37744:   *pnRecyclable = nRecyclable;
37745: }
37746: #endif
37747: 
37748: /************** End of pcache1.c *********************************************/
37749: /************** Begin file rowset.c ******************************************/
37750: /*
37751: ** 2008 December 3
37752: **
37753: ** The author disclaims copyright to this source code.  In place of
37754: ** a legal notice, here is a blessing:
37755: **
37756: **    May you do good and not evil.
37757: **    May you find forgiveness for yourself and forgive others.
37758: **    May you share freely, never taking more than you give.
37759: **
37760: *************************************************************************
37761: **
37762: ** This module implements an object we call a "RowSet".
37763: **
37764: ** The RowSet object is a collection of rowids.  Rowids
37765: ** are inserted into the RowSet in an arbitrary order.  Inserts
37766: ** can be intermixed with tests to see if a given rowid has been
37767: ** previously inserted into the RowSet.
37768: **
37769: ** After all inserts are finished, it is possible to extract the
37770: ** elements of the RowSet in sorted order.  Once this extraction
37771: ** process has started, no new elements may be inserted.
37772: **
37773: ** Hence, the primitive operations for a RowSet are:
37774: **
37775: **    CREATE
37776: **    INSERT
37777: **    TEST
37778: **    SMALLEST
37779: **    DESTROY
37780: **
37781: ** The CREATE and DESTROY primitives are the constructor and destructor,
37782: ** obviously.  The INSERT primitive adds a new element to the RowSet.
37783: ** TEST checks to see if an element is already in the RowSet.  SMALLEST
37784: ** extracts the least value from the RowSet.
37785: **
37786: ** The INSERT primitive might allocate additional memory.  Memory is
37787: ** allocated in chunks so most INSERTs do no allocation.  There is an 
37788: ** upper bound on the size of allocated memory.  No memory is freed
37789: ** until DESTROY.
37790: **
37791: ** The TEST primitive includes a "batch" number.  The TEST primitive
37792: ** will only see elements that were inserted before the last change
37793: ** in the batch number.  In other words, if an INSERT occurs between
37794: ** two TESTs where the TESTs have the same batch nubmer, then the
37795: ** value added by the INSERT will not be visible to the second TEST.
37796: ** The initial batch number is zero, so if the very first TEST contains
37797: ** a non-zero batch number, it will see all prior INSERTs.
37798: **
37799: ** No INSERTs may occurs after a SMALLEST.  An assertion will fail if
37800: ** that is attempted.
37801: **
37802: ** The cost of an INSERT is roughly constant.  (Sometime new memory
37803: ** has to be allocated on an INSERT.)  The cost of a TEST with a new
37804: ** batch number is O(NlogN) where N is the number of elements in the RowSet.
37805: ** The cost of a TEST using the same batch number is O(logN).  The cost
37806: ** of the first SMALLEST is O(NlogN).  Second and subsequent SMALLEST
37807: ** primitives are constant time.  The cost of DESTROY is O(N).
37808: **
37809: ** There is an added cost of O(N) when switching between TEST and
37810: ** SMALLEST primitives.
37811: */
37812: 
37813: 
37814: /*
37815: ** Target size for allocation chunks.
37816: */
37817: #define ROWSET_ALLOCATION_SIZE 1024
37818: 
37819: /*
37820: ** The number of rowset entries per allocation chunk.
37821: */
37822: #define ROWSET_ENTRY_PER_CHUNK  \
37823:                        ((ROWSET_ALLOCATION_SIZE-8)/sizeof(struct RowSetEntry))
37824: 
37825: /*
37826: ** Each entry in a RowSet is an instance of the following object.
37827: */
37828: struct RowSetEntry {            
37829:   i64 v;                        /* ROWID value for this entry */
37830:   struct RowSetEntry *pRight;   /* Right subtree (larger entries) or list */
37831:   struct RowSetEntry *pLeft;    /* Left subtree (smaller entries) */
37832: };
37833: 
37834: /*
37835: ** RowSetEntry objects are allocated in large chunks (instances of the
37836: ** following structure) to reduce memory allocation overhead.  The
37837: ** chunks are kept on a linked list so that they can be deallocated
37838: ** when the RowSet is destroyed.
37839: */
37840: struct RowSetChunk {
37841:   struct RowSetChunk *pNextChunk;        /* Next chunk on list of them all */
37842:   struct RowSetEntry aEntry[ROWSET_ENTRY_PER_CHUNK]; /* Allocated entries */
37843: };
37844: 
37845: /*
37846: ** A RowSet in an instance of the following structure.
37847: **
37848: ** A typedef of this structure if found in sqliteInt.h.
37849: */
37850: struct RowSet {
37851:   struct RowSetChunk *pChunk;    /* List of all chunk allocations */
37852:   sqlite3 *db;                   /* The database connection */
37853:   struct RowSetEntry *pEntry;    /* List of entries using pRight */
37854:   struct RowSetEntry *pLast;     /* Last entry on the pEntry list */
37855:   struct RowSetEntry *pFresh;    /* Source of new entry objects */
37856:   struct RowSetEntry *pTree;     /* Binary tree of entries */
37857:   u16 nFresh;                    /* Number of objects on pFresh */
37858:   u8 isSorted;                   /* True if pEntry is sorted */
37859:   u8 iBatch;                     /* Current insert batch */
37860: };
37861: 
37862: /*
37863: ** Turn bulk memory into a RowSet object.  N bytes of memory
37864: ** are available at pSpace.  The db pointer is used as a memory context
37865: ** for any subsequent allocations that need to occur.
37866: ** Return a pointer to the new RowSet object.
37867: **
37868: ** It must be the case that N is sufficient to make a Rowset.  If not
37869: ** an assertion fault occurs.
37870: ** 
37871: ** If N is larger than the minimum, use the surplus as an initial
37872: ** allocation of entries available to be filled.
37873: */
37874: SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3 *db, void *pSpace, unsigned int N){
37875:   RowSet *p;
37876:   assert( N >= ROUND8(sizeof(*p)) );
37877:   p = pSpace;
37878:   p->pChunk = 0;
37879:   p->db = db;
37880:   p->pEntry = 0;
37881:   p->pLast = 0;
37882:   p->pTree = 0;
37883:   p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p);
37884:   p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry));
37885:   p->isSorted = 1;
37886:   p->iBatch = 0;
37887:   return p;
37888: }
37889: 
37890: /*
37891: ** Deallocate all chunks from a RowSet.  This frees all memory that
37892: ** the RowSet has allocated over its lifetime.  This routine is
37893: ** the destructor for the RowSet.
37894: */
37895: SQLITE_PRIVATE void sqlite3RowSetClear(RowSet *p){
37896:   struct RowSetChunk *pChunk, *pNextChunk;
37897:   for(pChunk=p->pChunk; pChunk; pChunk = pNextChunk){
37898:     pNextChunk = pChunk->pNextChunk;
37899:     sqlite3DbFree(p->db, pChunk);
37900:   }
37901:   p->pChunk = 0;
37902:   p->nFresh = 0;
37903:   p->pEntry = 0;
37904:   p->pLast = 0;
37905:   p->pTree = 0;
37906:   p->isSorted = 1;
37907: }
37908: 
37909: /*
37910: ** Insert a new value into a RowSet.
37911: **
37912: ** The mallocFailed flag of the database connection is set if a
37913: ** memory allocation fails.
37914: */
37915: SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet *p, i64 rowid){
37916:   struct RowSetEntry *pEntry;  /* The new entry */
37917:   struct RowSetEntry *pLast;   /* The last prior entry */
37918:   assert( p!=0 );
37919:   if( p->nFresh==0 ){
37920:     struct RowSetChunk *pNew;
37921:     pNew = sqlite3DbMallocRaw(p->db, sizeof(*pNew));
37922:     if( pNew==0 ){
37923:       return;
37924:     }
37925:     pNew->pNextChunk = p->pChunk;
37926:     p->pChunk = pNew;
37927:     p->pFresh = pNew->aEntry;
37928:     p->nFresh = ROWSET_ENTRY_PER_CHUNK;
37929:   }
37930:   pEntry = p->pFresh++;
37931:   p->nFresh--;
37932:   pEntry->v = rowid;
37933:   pEntry->pRight = 0;
37934:   pLast = p->pLast;
37935:   if( pLast ){
37936:     if( p->isSorted && rowid<=pLast->v ){
37937:       p->isSorted = 0;
37938:     }
37939:     pLast->pRight = pEntry;
37940:   }else{
37941:     assert( p->pEntry==0 ); /* Fires if INSERT after SMALLEST */
37942:     p->pEntry = pEntry;
37943:   }
37944:   p->pLast = pEntry;
37945: }
37946: 
37947: /*
37948: ** Merge two lists of RowSetEntry objects.  Remove duplicates.
37949: **
37950: ** The input lists are connected via pRight pointers and are 
37951: ** assumed to each already be in sorted order.
37952: */
37953: static struct RowSetEntry *rowSetMerge(
37954:   struct RowSetEntry *pA,    /* First sorted list to be merged */
37955:   struct RowSetEntry *pB     /* Second sorted list to be merged */
37956: ){
37957:   struct RowSetEntry head;
37958:   struct RowSetEntry *pTail;
37959: 
37960:   pTail = &head;
37961:   while( pA && pB ){
37962:     assert( pA->pRight==0 || pA->v<=pA->pRight->v );
37963:     assert( pB->pRight==0 || pB->v<=pB->pRight->v );
37964:     if( pA->v<pB->v ){
37965:       pTail->pRight = pA;
37966:       pA = pA->pRight;
37967:       pTail = pTail->pRight;
37968:     }else if( pB->v<pA->v ){
37969:       pTail->pRight = pB;
37970:       pB = pB->pRight;
37971:       pTail = pTail->pRight;
37972:     }else{
37973:       pA = pA->pRight;
37974:     }
37975:   }
37976:   if( pA ){
37977:     assert( pA->pRight==0 || pA->v<=pA->pRight->v );
37978:     pTail->pRight = pA;
37979:   }else{
37980:     assert( pB==0 || pB->pRight==0 || pB->v<=pB->pRight->v );
37981:     pTail->pRight = pB;
37982:   }
37983:   return head.pRight;
37984: }
37985: 
37986: /*
37987: ** Sort all elements on the pEntry list of the RowSet into ascending order.
37988: */ 
37989: static void rowSetSort(RowSet *p){
37990:   unsigned int i;
37991:   struct RowSetEntry *pEntry;
37992:   struct RowSetEntry *aBucket[40];
37993: 
37994:   assert( p->isSorted==0 );
37995:   memset(aBucket, 0, sizeof(aBucket));
37996:   while( p->pEntry ){
37997:     pEntry = p->pEntry;
37998:     p->pEntry = pEntry->pRight;
37999:     pEntry->pRight = 0;
38000:     for(i=0; aBucket[i]; i++){
38001:       pEntry = rowSetMerge(aBucket[i], pEntry);
38002:       aBucket[i] = 0;
38003:     }
38004:     aBucket[i] = pEntry;
38005:   }
38006:   pEntry = 0;
38007:   for(i=0; i<sizeof(aBucket)/sizeof(aBucket[0]); i++){
38008:     pEntry = rowSetMerge(pEntry, aBucket[i]);
38009:   }
38010:   p->pEntry = pEntry;
38011:   p->pLast = 0;
38012:   p->isSorted = 1;
38013: }
38014: 
38015: 
38016: /*
38017: ** The input, pIn, is a binary tree (or subtree) of RowSetEntry objects.
38018: ** Convert this tree into a linked list connected by the pRight pointers
38019: ** and return pointers to the first and last elements of the new list.
38020: */
38021: static void rowSetTreeToList(
38022:   struct RowSetEntry *pIn,         /* Root of the input tree */
38023:   struct RowSetEntry **ppFirst,    /* Write head of the output list here */
38024:   struct RowSetEntry **ppLast      /* Write tail of the output list here */
38025: ){
38026:   assert( pIn!=0 );
38027:   if( pIn->pLeft ){
38028:     struct RowSetEntry *p;
38029:     rowSetTreeToList(pIn->pLeft, ppFirst, &p);
38030:     p->pRight = pIn;
38031:   }else{
38032:     *ppFirst = pIn;
38033:   }
38034:   if( pIn->pRight ){
38035:     rowSetTreeToList(pIn->pRight, &pIn->pRight, ppLast);
38036:   }else{
38037:     *ppLast = pIn;
38038:   }
38039:   assert( (*ppLast)->pRight==0 );
38040: }
38041: 
38042: 
38043: /*
38044: ** Convert a sorted list of elements (connected by pRight) into a binary
38045: ** tree with depth of iDepth.  A depth of 1 means the tree contains a single
38046: ** node taken from the head of *ppList.  A depth of 2 means a tree with
38047: ** three nodes.  And so forth.
38048: **
38049: ** Use as many entries from the input list as required and update the
38050: ** *ppList to point to the unused elements of the list.  If the input
38051: ** list contains too few elements, then construct an incomplete tree
38052: ** and leave *ppList set to NULL.
38053: **
38054: ** Return a pointer to the root of the constructed binary tree.
38055: */
38056: static struct RowSetEntry *rowSetNDeepTree(
38057:   struct RowSetEntry **ppList,
38058:   int iDepth
38059: ){
38060:   struct RowSetEntry *p;         /* Root of the new tree */
38061:   struct RowSetEntry *pLeft;     /* Left subtree */
38062:   if( *ppList==0 ){
38063:     return 0;
38064:   }
38065:   if( iDepth==1 ){
38066:     p = *ppList;
38067:     *ppList = p->pRight;
38068:     p->pLeft = p->pRight = 0;
38069:     return p;
38070:   }
38071:   pLeft = rowSetNDeepTree(ppList, iDepth-1);
38072:   p = *ppList;
38073:   if( p==0 ){
38074:     return pLeft;
38075:   }
38076:   p->pLeft = pLeft;
38077:   *ppList = p->pRight;
38078:   p->pRight = rowSetNDeepTree(ppList, iDepth-1);
38079:   return p;
38080: }
38081: 
38082: /*
38083: ** Convert a sorted list of elements into a binary tree. Make the tree
38084: ** as deep as it needs to be in order to contain the entire list.
38085: */
38086: static struct RowSetEntry *rowSetListToTree(struct RowSetEntry *pList){
38087:   int iDepth;           /* Depth of the tree so far */
38088:   struct RowSetEntry *p;       /* Current tree root */
38089:   struct RowSetEntry *pLeft;   /* Left subtree */
38090: 
38091:   assert( pList!=0 );
38092:   p = pList;
38093:   pList = p->pRight;
38094:   p->pLeft = p->pRight = 0;
38095:   for(iDepth=1; pList; iDepth++){
38096:     pLeft = p;
38097:     p = pList;
38098:     pList = p->pRight;
38099:     p->pLeft = pLeft;
38100:     p->pRight = rowSetNDeepTree(&pList, iDepth);
38101:   }
38102:   return p;
38103: }
38104: 
38105: /*
38106: ** Convert the list in p->pEntry into a sorted list if it is not
38107: ** sorted already.  If there is a binary tree on p->pTree, then
38108: ** convert it into a list too and merge it into the p->pEntry list.
38109: */
38110: static void rowSetToList(RowSet *p){
38111:   if( !p->isSorted ){
38112:     rowSetSort(p);
38113:   }
38114:   if( p->pTree ){
38115:     struct RowSetEntry *pHead, *pTail;
38116:     rowSetTreeToList(p->pTree, &pHead, &pTail);
38117:     p->pTree = 0;
38118:     p->pEntry = rowSetMerge(p->pEntry, pHead);
38119:   }
38120: }
38121: 
38122: /*
38123: ** Extract the smallest element from the RowSet.
38124: ** Write the element into *pRowid.  Return 1 on success.  Return
38125: ** 0 if the RowSet is already empty.
38126: **
38127: ** After this routine has been called, the sqlite3RowSetInsert()
38128: ** routine may not be called again.  
38129: */
38130: SQLITE_PRIVATE int sqlite3RowSetNext(RowSet *p, i64 *pRowid){
38131:   rowSetToList(p);
38132:   if( p->pEntry ){
38133:     *pRowid = p->pEntry->v;
38134:     p->pEntry = p->pEntry->pRight;
38135:     if( p->pEntry==0 ){
38136:       sqlite3RowSetClear(p);
38137:     }
38138:     return 1;
38139:   }else{
38140:     return 0;
38141:   }
38142: }
38143: 
38144: /*
38145: ** Check to see if element iRowid was inserted into the the rowset as
38146: ** part of any insert batch prior to iBatch.  Return 1 or 0.
38147: */
38148: SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, u8 iBatch, sqlite3_int64 iRowid){
38149:   struct RowSetEntry *p;
38150:   if( iBatch!=pRowSet->iBatch ){
38151:     if( pRowSet->pEntry ){
38152:       rowSetToList(pRowSet);
38153:       pRowSet->pTree = rowSetListToTree(pRowSet->pEntry);
38154:       pRowSet->pEntry = 0;
38155:       pRowSet->pLast = 0;
38156:     }
38157:     pRowSet->iBatch = iBatch;
38158:   }
38159:   p = pRowSet->pTree;
38160:   while( p ){
38161:     if( p->v<iRowid ){
38162:       p = p->pRight;
38163:     }else if( p->v>iRowid ){
38164:       p = p->pLeft;
38165:     }else{
38166:       return 1;
38167:     }
38168:   }
38169:   return 0;
38170: }
38171: 
38172: /************** End of rowset.c **********************************************/
38173: /************** Begin file pager.c *******************************************/
38174: /*
38175: ** 2001 September 15
38176: **
38177: ** The author disclaims copyright to this source code.  In place of
38178: ** a legal notice, here is a blessing:
38179: **
38180: **    May you do good and not evil.
38181: **    May you find forgiveness for yourself and forgive others.
38182: **    May you share freely, never taking more than you give.
38183: **
38184: *************************************************************************
38185: ** This is the implementation of the page cache subsystem or "pager".
38186: ** 
38187: ** The pager is used to access a database disk file.  It implements
38188: ** atomic commit and rollback through the use of a journal file that
38189: ** is separate from the database file.  The pager also implements file
38190: ** locking to prevent two processes from writing the same database
38191: ** file simultaneously, or one process from reading the database while
38192: ** another is writing.
38193: */
38194: #ifndef SQLITE_OMIT_DISKIO
38195: /************** Include wal.h in the middle of pager.c ***********************/
38196: /************** Begin file wal.h *********************************************/
38197: /*
38198: ** 2010 February 1
38199: **
38200: ** The author disclaims copyright to this source code.  In place of
38201: ** a legal notice, here is a blessing:
38202: **
38203: **    May you do good and not evil.
38204: **    May you find forgiveness for yourself and forgive others.
38205: **    May you share freely, never taking more than you give.
38206: **
38207: *************************************************************************
38208: ** This header file defines the interface to the write-ahead logging 
38209: ** system. Refer to the comments below and the header comment attached to 
38210: ** the implementation of each function in log.c for further details.
38211: */
38212: 
38213: #ifndef _WAL_H_
38214: #define _WAL_H_
38215: 
38216: 
38217: /* Additional values that can be added to the sync_flags argument of
38218: ** sqlite3WalFrames():
38219: */
38220: #define WAL_SYNC_TRANSACTIONS  0x20   /* Sync at the end of each transaction */
38221: #define SQLITE_SYNC_MASK       0x13   /* Mask off the SQLITE_SYNC_* values */
38222: 
38223: #ifdef SQLITE_OMIT_WAL
38224: # define sqlite3WalOpen(x,y,z)                   0
38225: # define sqlite3WalLimit(x,y)
38226: # define sqlite3WalClose(w,x,y,z)                0
38227: # define sqlite3WalBeginReadTransaction(y,z)     0
38228: # define sqlite3WalEndReadTransaction(z)
38229: # define sqlite3WalRead(v,w,x,y,z)               0
38230: # define sqlite3WalDbsize(y)                     0
38231: # define sqlite3WalBeginWriteTransaction(y)      0
38232: # define sqlite3WalEndWriteTransaction(x)        0
38233: # define sqlite3WalUndo(x,y,z)                   0
38234: # define sqlite3WalSavepoint(y,z)
38235: # define sqlite3WalSavepointUndo(y,z)            0
38236: # define sqlite3WalFrames(u,v,w,x,y,z)           0
38237: # define sqlite3WalCheckpoint(r,s,t,u,v,w,x,y,z) 0
38238: # define sqlite3WalCallback(z)                   0
38239: # define sqlite3WalExclusiveMode(y,z)            0
38240: # define sqlite3WalHeapMemory(z)                 0
38241: #else
38242: 
38243: #define WAL_SAVEPOINT_NDATA 4
38244: 
38245: /* Connection to a write-ahead log (WAL) file. 
38246: ** There is one object of this type for each pager. 
38247: */
38248: typedef struct Wal Wal;
38249: 
38250: /* Open and close a connection to a write-ahead log. */
38251: SQLITE_PRIVATE int sqlite3WalOpen(sqlite3_vfs*, sqlite3_file*, const char *, int, i64, Wal**);
38252: SQLITE_PRIVATE int sqlite3WalClose(Wal *pWal, int sync_flags, int, u8 *);
38253: 
38254: /* Set the limiting size of a WAL file. */
38255: SQLITE_PRIVATE void sqlite3WalLimit(Wal*, i64);
38256: 
38257: /* Used by readers to open (lock) and close (unlock) a snapshot.  A 
38258: ** snapshot is like a read-transaction.  It is the state of the database
38259: ** at an instant in time.  sqlite3WalOpenSnapshot gets a read lock and
38260: ** preserves the current state even if the other threads or processes
38261: ** write to or checkpoint the WAL.  sqlite3WalCloseSnapshot() closes the
38262: ** transaction and releases the lock.
38263: */
38264: SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *);
38265: SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal);
38266: 
38267: /* Read a page from the write-ahead log, if it is present. */
38268: SQLITE_PRIVATE int sqlite3WalRead(Wal *pWal, Pgno pgno, int *pInWal, int nOut, u8 *pOut);
38269: 
38270: /* If the WAL is not empty, return the size of the database. */
38271: SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal);
38272: 
38273: /* Obtain or release the WRITER lock. */
38274: SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal);
38275: SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal);
38276: 
38277: /* Undo any frames written (but not committed) to the log */
38278: SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx);
38279: 
38280: /* Return an integer that records the current (uncommitted) write
38281: ** position in the WAL */
38282: SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData);
38283: 
38284: /* Move the write position of the WAL back to iFrame.  Called in
38285: ** response to a ROLLBACK TO command. */
38286: SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData);
38287: 
38288: /* Write a frame or frames to the log. */
38289: SQLITE_PRIVATE int sqlite3WalFrames(Wal *pWal, int, PgHdr *, Pgno, int, int);
38290: 
38291: /* Copy pages from the log to the database file */ 
38292: SQLITE_PRIVATE int sqlite3WalCheckpoint(
38293:   Wal *pWal,                      /* Write-ahead log connection */
38294:   int eMode,                      /* One of PASSIVE, FULL and RESTART */
38295:   int (*xBusy)(void*),            /* Function to call when busy */
38296:   void *pBusyArg,                 /* Context argument for xBusyHandler */
38297:   int sync_flags,                 /* Flags to sync db file with (or 0) */
38298:   int nBuf,                       /* Size of buffer nBuf */
38299:   u8 *zBuf,                       /* Temporary buffer to use */
38300:   int *pnLog,                     /* OUT: Number of frames in WAL */
38301:   int *pnCkpt                     /* OUT: Number of backfilled frames in WAL */
38302: );
38303: 
38304: /* Return the value to pass to a sqlite3_wal_hook callback, the
38305: ** number of frames in the WAL at the point of the last commit since
38306: ** sqlite3WalCallback() was called.  If no commits have occurred since
38307: ** the last call, then return 0.
38308: */
38309: SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal);
38310: 
38311: /* Tell the wal layer that an EXCLUSIVE lock has been obtained (or released)
38312: ** by the pager layer on the database file.
38313: */
38314: SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op);
38315: 
38316: /* Return true if the argument is non-NULL and the WAL module is using
38317: ** heap-memory for the wal-index. Otherwise, if the argument is NULL or the
38318: ** WAL module is using shared-memory, return false. 
38319: */
38320: SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal);
38321: 
38322: #endif /* ifndef SQLITE_OMIT_WAL */
38323: #endif /* _WAL_H_ */
38324: 
38325: /************** End of wal.h *************************************************/
38326: /************** Continuing where we left off in pager.c **********************/
38327: 
38328: 
38329: /******************* NOTES ON THE DESIGN OF THE PAGER ************************
38330: **
38331: ** This comment block describes invariants that hold when using a rollback
38332: ** journal.  These invariants do not apply for journal_mode=WAL,
38333: ** journal_mode=MEMORY, or journal_mode=OFF.
38334: **
38335: ** Within this comment block, a page is deemed to have been synced
38336: ** automatically as soon as it is written when PRAGMA synchronous=OFF.
38337: ** Otherwise, the page is not synced until the xSync method of the VFS
38338: ** is called successfully on the file containing the page.
38339: **
38340: ** Definition:  A page of the database file is said to be "overwriteable" if
38341: ** one or more of the following are true about the page:
38342: ** 
38343: **     (a)  The original content of the page as it was at the beginning of
38344: **          the transaction has been written into the rollback journal and
38345: **          synced.
38346: ** 
38347: **     (b)  The page was a freelist leaf page at the start of the transaction.
38348: ** 
38349: **     (c)  The page number is greater than the largest page that existed in
38350: **          the database file at the start of the transaction.
38351: ** 
38352: ** (1) A page of the database file is never overwritten unless one of the
38353: **     following are true:
38354: ** 
38355: **     (a) The page and all other pages on the same sector are overwriteable.
38356: ** 
38357: **     (b) The atomic page write optimization is enabled, and the entire
38358: **         transaction other than the update of the transaction sequence
38359: **         number consists of a single page change.
38360: ** 
38361: ** (2) The content of a page written into the rollback journal exactly matches
38362: **     both the content in the database when the rollback journal was written
38363: **     and the content in the database at the beginning of the current
38364: **     transaction.
38365: ** 
38366: ** (3) Writes to the database file are an integer multiple of the page size
38367: **     in length and are aligned on a page boundary.
38368: ** 
38369: ** (4) Reads from the database file are either aligned on a page boundary and
38370: **     an integer multiple of the page size in length or are taken from the
38371: **     first 100 bytes of the database file.
38372: ** 
38373: ** (5) All writes to the database file are synced prior to the rollback journal
38374: **     being deleted, truncated, or zeroed.
38375: ** 
38376: ** (6) If a master journal file is used, then all writes to the database file
38377: **     are synced prior to the master journal being deleted.
38378: ** 
38379: ** Definition: Two databases (or the same database at two points it time)
38380: ** are said to be "logically equivalent" if they give the same answer to
38381: ** all queries.  Note in particular the the content of freelist leaf
38382: ** pages can be changed arbitarily without effecting the logical equivalence
38383: ** of the database.
38384: ** 
38385: ** (7) At any time, if any subset, including the empty set and the total set,
38386: **     of the unsynced changes to a rollback journal are removed and the 
38387: **     journal is rolled back, the resulting database file will be logical
38388: **     equivalent to the database file at the beginning of the transaction.
38389: ** 
38390: ** (8) When a transaction is rolled back, the xTruncate method of the VFS
38391: **     is called to restore the database file to the same size it was at
38392: **     the beginning of the transaction.  (In some VFSes, the xTruncate
38393: **     method is a no-op, but that does not change the fact the SQLite will
38394: **     invoke it.)
38395: ** 
38396: ** (9) Whenever the database file is modified, at least one bit in the range
38397: **     of bytes from 24 through 39 inclusive will be changed prior to releasing
38398: **     the EXCLUSIVE lock, thus signaling other connections on the same
38399: **     database to flush their caches.
38400: **
38401: ** (10) The pattern of bits in bytes 24 through 39 shall not repeat in less
38402: **      than one billion transactions.
38403: **
38404: ** (11) A database file is well-formed at the beginning and at the conclusion
38405: **      of every transaction.
38406: **
38407: ** (12) An EXCLUSIVE lock is held on the database file when writing to
38408: **      the database file.
38409: **
38410: ** (13) A SHARED lock is held on the database file while reading any
38411: **      content out of the database file.
38412: **
38413: ******************************************************************************/
38414: 
38415: /*
38416: ** Macros for troubleshooting.  Normally turned off
38417: */
38418: #if 0
38419: int sqlite3PagerTrace=1;  /* True to enable tracing */
38420: #define sqlite3DebugPrintf printf
38421: #define PAGERTRACE(X)     if( sqlite3PagerTrace ){ sqlite3DebugPrintf X; }
38422: #else
38423: #define PAGERTRACE(X)
38424: #endif
38425: 
38426: /*
38427: ** The following two macros are used within the PAGERTRACE() macros above
38428: ** to print out file-descriptors. 
38429: **
38430: ** PAGERID() takes a pointer to a Pager struct as its argument. The
38431: ** associated file-descriptor is returned. FILEHANDLEID() takes an sqlite3_file
38432: ** struct as its argument.
38433: */
38434: #define PAGERID(p) ((int)(p->fd))
38435: #define FILEHANDLEID(fd) ((int)fd)
38436: 
38437: /*
38438: ** The Pager.eState variable stores the current 'state' of a pager. A
38439: ** pager may be in any one of the seven states shown in the following
38440: ** state diagram.
38441: **
38442: **                            OPEN <------+------+
38443: **                              |         |      |
38444: **                              V         |      |
38445: **               +---------> READER-------+      |
38446: **               |              |                |
38447: **               |              V                |
38448: **               |<-------WRITER_LOCKED------> ERROR
38449: **               |              |                ^  
38450: **               |              V                |
38451: **               |<------WRITER_CACHEMOD-------->|
38452: **               |              |                |
38453: **               |              V                |
38454: **               |<-------WRITER_DBMOD---------->|
38455: **               |              |                |
38456: **               |              V                |
38457: **               +<------WRITER_FINISHED-------->+
38458: **
38459: **
38460: ** List of state transitions and the C [function] that performs each:
38461: ** 
38462: **   OPEN              -> READER              [sqlite3PagerSharedLock]
38463: **   READER            -> OPEN                [pager_unlock]
38464: **
38465: **   READER            -> WRITER_LOCKED       [sqlite3PagerBegin]
38466: **   WRITER_LOCKED     -> WRITER_CACHEMOD     [pager_open_journal]
38467: **   WRITER_CACHEMOD   -> WRITER_DBMOD        [syncJournal]
38468: **   WRITER_DBMOD      -> WRITER_FINISHED     [sqlite3PagerCommitPhaseOne]
38469: **   WRITER_***        -> READER              [pager_end_transaction]
38470: **
38471: **   WRITER_***        -> ERROR               [pager_error]
38472: **   ERROR             -> OPEN                [pager_unlock]
38473: ** 
38474: **
38475: **  OPEN:
38476: **
38477: **    The pager starts up in this state. Nothing is guaranteed in this
38478: **    state - the file may or may not be locked and the database size is
38479: **    unknown. The database may not be read or written.
38480: **
38481: **    * No read or write transaction is active.
38482: **    * Any lock, or no lock at all, may be held on the database file.
38483: **    * The dbSize, dbOrigSize and dbFileSize variables may not be trusted.
38484: **
38485: **  READER:
38486: **
38487: **    In this state all the requirements for reading the database in 
38488: **    rollback (non-WAL) mode are met. Unless the pager is (or recently
38489: **    was) in exclusive-locking mode, a user-level read transaction is 
38490: **    open. The database size is known in this state.
38491: **
38492: **    A connection running with locking_mode=normal enters this state when
38493: **    it opens a read-transaction on the database and returns to state
38494: **    OPEN after the read-transaction is completed. However a connection
38495: **    running in locking_mode=exclusive (including temp databases) remains in
38496: **    this state even after the read-transaction is closed. The only way
38497: **    a locking_mode=exclusive connection can transition from READER to OPEN
38498: **    is via the ERROR state (see below).
38499: ** 
38500: **    * A read transaction may be active (but a write-transaction cannot).
38501: **    * A SHARED or greater lock is held on the database file.
38502: **    * The dbSize variable may be trusted (even if a user-level read 
38503: **      transaction is not active). The dbOrigSize and dbFileSize variables
38504: **      may not be trusted at this point.
38505: **    * If the database is a WAL database, then the WAL connection is open.
38506: **    * Even if a read-transaction is not open, it is guaranteed that 
38507: **      there is no hot-journal in the file-system.
38508: **
38509: **  WRITER_LOCKED:
38510: **
38511: **    The pager moves to this state from READER when a write-transaction
38512: **    is first opened on the database. In WRITER_LOCKED state, all locks 
38513: **    required to start a write-transaction are held, but no actual 
38514: **    modifications to the cache or database have taken place.
38515: **
38516: **    In rollback mode, a RESERVED or (if the transaction was opened with 
38517: **    BEGIN EXCLUSIVE) EXCLUSIVE lock is obtained on the database file when
38518: **    moving to this state, but the journal file is not written to or opened 
38519: **    to in this state. If the transaction is committed or rolled back while 
38520: **    in WRITER_LOCKED state, all that is required is to unlock the database 
38521: **    file.
38522: **
38523: **    IN WAL mode, WalBeginWriteTransaction() is called to lock the log file.
38524: **    If the connection is running with locking_mode=exclusive, an attempt
38525: **    is made to obtain an EXCLUSIVE lock on the database file.
38526: **
38527: **    * A write transaction is active.
38528: **    * If the connection is open in rollback-mode, a RESERVED or greater 
38529: **      lock is held on the database file.
38530: **    * If the connection is open in WAL-mode, a WAL write transaction
38531: **      is open (i.e. sqlite3WalBeginWriteTransaction() has been successfully
38532: **      called).
38533: **    * The dbSize, dbOrigSize and dbFileSize variables are all valid.
38534: **    * The contents of the pager cache have not been modified.
38535: **    * The journal file may or may not be open.
38536: **    * Nothing (not even the first header) has been written to the journal.
38537: **
38538: **  WRITER_CACHEMOD:
38539: **
38540: **    A pager moves from WRITER_LOCKED state to this state when a page is
38541: **    first modified by the upper layer. In rollback mode the journal file
38542: **    is opened (if it is not already open) and a header written to the
38543: **    start of it. The database file on disk has not been modified.
38544: **
38545: **    * A write transaction is active.
38546: **    * A RESERVED or greater lock is held on the database file.
38547: **    * The journal file is open and the first header has been written 
38548: **      to it, but the header has not been synced to disk.
38549: **    * The contents of the page cache have been modified.
38550: **
38551: **  WRITER_DBMOD:
38552: **
38553: **    The pager transitions from WRITER_CACHEMOD into WRITER_DBMOD state
38554: **    when it modifies the contents of the database file. WAL connections
38555: **    never enter this state (since they do not modify the database file,
38556: **    just the log file).
38557: **
38558: **    * A write transaction is active.
38559: **    * An EXCLUSIVE or greater lock is held on the database file.
38560: **    * The journal file is open and the first header has been written 
38561: **      and synced to disk.
38562: **    * The contents of the page cache have been modified (and possibly
38563: **      written to disk).
38564: **
38565: **  WRITER_FINISHED:
38566: **
38567: **    It is not possible for a WAL connection to enter this state.
38568: **
38569: **    A rollback-mode pager changes to WRITER_FINISHED state from WRITER_DBMOD
38570: **    state after the entire transaction has been successfully written into the
38571: **    database file. In this state the transaction may be committed simply
38572: **    by finalizing the journal file. Once in WRITER_FINISHED state, it is 
38573: **    not possible to modify the database further. At this point, the upper 
38574: **    layer must either commit or rollback the transaction.
38575: **
38576: **    * A write transaction is active.
38577: **    * An EXCLUSIVE or greater lock is held on the database file.
38578: **    * All writing and syncing of journal and database data has finished.
38579: **      If no error occured, all that remains is to finalize the journal to
38580: **      commit the transaction. If an error did occur, the caller will need
38581: **      to rollback the transaction. 
38582: **
38583: **  ERROR:
38584: **
38585: **    The ERROR state is entered when an IO or disk-full error (including
38586: **    SQLITE_IOERR_NOMEM) occurs at a point in the code that makes it 
38587: **    difficult to be sure that the in-memory pager state (cache contents, 
38588: **    db size etc.) are consistent with the contents of the file-system.
38589: **
38590: **    Temporary pager files may enter the ERROR state, but in-memory pagers
38591: **    cannot.
38592: **
38593: **    For example, if an IO error occurs while performing a rollback, 
38594: **    the contents of the page-cache may be left in an inconsistent state.
38595: **    At this point it would be dangerous to change back to READER state
38596: **    (as usually happens after a rollback). Any subsequent readers might
38597: **    report database corruption (due to the inconsistent cache), and if
38598: **    they upgrade to writers, they may inadvertently corrupt the database
38599: **    file. To avoid this hazard, the pager switches into the ERROR state
38600: **    instead of READER following such an error.
38601: **
38602: **    Once it has entered the ERROR state, any attempt to use the pager
38603: **    to read or write data returns an error. Eventually, once all 
38604: **    outstanding transactions have been abandoned, the pager is able to
38605: **    transition back to OPEN state, discarding the contents of the 
38606: **    page-cache and any other in-memory state at the same time. Everything
38607: **    is reloaded from disk (and, if necessary, hot-journal rollback peformed)
38608: **    when a read-transaction is next opened on the pager (transitioning
38609: **    the pager into READER state). At that point the system has recovered 
38610: **    from the error.
38611: **
38612: **    Specifically, the pager jumps into the ERROR state if:
38613: **
38614: **      1. An error occurs while attempting a rollback. This happens in
38615: **         function sqlite3PagerRollback().
38616: **
38617: **      2. An error occurs while attempting to finalize a journal file
38618: **         following a commit in function sqlite3PagerCommitPhaseTwo().
38619: **
38620: **      3. An error occurs while attempting to write to the journal or
38621: **         database file in function pagerStress() in order to free up
38622: **         memory.
38623: **
38624: **    In other cases, the error is returned to the b-tree layer. The b-tree
38625: **    layer then attempts a rollback operation. If the error condition 
38626: **    persists, the pager enters the ERROR state via condition (1) above.
38627: **
38628: **    Condition (3) is necessary because it can be triggered by a read-only
38629: **    statement executed within a transaction. In this case, if the error
38630: **    code were simply returned to the user, the b-tree layer would not
38631: **    automatically attempt a rollback, as it assumes that an error in a
38632: **    read-only statement cannot leave the pager in an internally inconsistent 
38633: **    state.
38634: **
38635: **    * The Pager.errCode variable is set to something other than SQLITE_OK.
38636: **    * There are one or more outstanding references to pages (after the
38637: **      last reference is dropped the pager should move back to OPEN state).
38638: **    * The pager is not an in-memory pager.
38639: **    
38640: **
38641: ** Notes:
38642: **
38643: **   * A pager is never in WRITER_DBMOD or WRITER_FINISHED state if the
38644: **     connection is open in WAL mode. A WAL connection is always in one
38645: **     of the first four states.
38646: **
38647: **   * Normally, a connection open in exclusive mode is never in PAGER_OPEN
38648: **     state. There are two exceptions: immediately after exclusive-mode has
38649: **     been turned on (and before any read or write transactions are 
38650: **     executed), and when the pager is leaving the "error state".
38651: **
38652: **   * See also: assert_pager_state().
38653: */
38654: #define PAGER_OPEN                  0
38655: #define PAGER_READER                1
38656: #define PAGER_WRITER_LOCKED         2
38657: #define PAGER_WRITER_CACHEMOD       3
38658: #define PAGER_WRITER_DBMOD          4
38659: #define PAGER_WRITER_FINISHED       5
38660: #define PAGER_ERROR                 6
38661: 
38662: /*
38663: ** The Pager.eLock variable is almost always set to one of the 
38664: ** following locking-states, according to the lock currently held on
38665: ** the database file: NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK.
38666: ** This variable is kept up to date as locks are taken and released by
38667: ** the pagerLockDb() and pagerUnlockDb() wrappers.
38668: **
38669: ** If the VFS xLock() or xUnlock() returns an error other than SQLITE_BUSY
38670: ** (i.e. one of the SQLITE_IOERR subtypes), it is not clear whether or not
38671: ** the operation was successful. In these circumstances pagerLockDb() and
38672: ** pagerUnlockDb() take a conservative approach - eLock is always updated
38673: ** when unlocking the file, and only updated when locking the file if the
38674: ** VFS call is successful. This way, the Pager.eLock variable may be set
38675: ** to a less exclusive (lower) value than the lock that is actually held
38676: ** at the system level, but it is never set to a more exclusive value.
38677: **
38678: ** This is usually safe. If an xUnlock fails or appears to fail, there may 
38679: ** be a few redundant xLock() calls or a lock may be held for longer than
38680: ** required, but nothing really goes wrong.
38681: **
38682: ** The exception is when the database file is unlocked as the pager moves
38683: ** from ERROR to OPEN state. At this point there may be a hot-journal file 
38684: ** in the file-system that needs to be rolled back (as part of a OPEN->SHARED
38685: ** transition, by the same pager or any other). If the call to xUnlock()
38686: ** fails at this point and the pager is left holding an EXCLUSIVE lock, this
38687: ** can confuse the call to xCheckReservedLock() call made later as part
38688: ** of hot-journal detection.
38689: **
38690: ** xCheckReservedLock() is defined as returning true "if there is a RESERVED 
38691: ** lock held by this process or any others". So xCheckReservedLock may 
38692: ** return true because the caller itself is holding an EXCLUSIVE lock (but
38693: ** doesn't know it because of a previous error in xUnlock). If this happens
38694: ** a hot-journal may be mistaken for a journal being created by an active
38695: ** transaction in another process, causing SQLite to read from the database
38696: ** without rolling it back.
38697: **
38698: ** To work around this, if a call to xUnlock() fails when unlocking the
38699: ** database in the ERROR state, Pager.eLock is set to UNKNOWN_LOCK. It
38700: ** is only changed back to a real locking state after a successful call
38701: ** to xLock(EXCLUSIVE). Also, the code to do the OPEN->SHARED state transition
38702: ** omits the check for a hot-journal if Pager.eLock is set to UNKNOWN_LOCK 
38703: ** lock. Instead, it assumes a hot-journal exists and obtains an EXCLUSIVE
38704: ** lock on the database file before attempting to roll it back. See function
38705: ** PagerSharedLock() for more detail.
38706: **
38707: ** Pager.eLock may only be set to UNKNOWN_LOCK when the pager is in 
38708: ** PAGER_OPEN state.
38709: */
38710: #define UNKNOWN_LOCK                (EXCLUSIVE_LOCK+1)
38711: 
38712: /*
38713: ** A macro used for invoking the codec if there is one
38714: */
38715: #ifdef SQLITE_HAS_CODEC
38716: # define CODEC1(P,D,N,X,E) \
38717:     if( P->xCodec && P->xCodec(P->pCodec,D,N,X)==0 ){ E; }
38718: # define CODEC2(P,D,N,X,E,O) \
38719:     if( P->xCodec==0 ){ O=(char*)D; }else \
38720:     if( (O=(char*)(P->xCodec(P->pCodec,D,N,X)))==0 ){ E; }
38721: #else
38722: # define CODEC1(P,D,N,X,E)   /* NO-OP */
38723: # define CODEC2(P,D,N,X,E,O) O=(char*)D
38724: #endif
38725: 
38726: /*
38727: ** The maximum allowed sector size. 64KiB. If the xSectorsize() method 
38728: ** returns a value larger than this, then MAX_SECTOR_SIZE is used instead.
38729: ** This could conceivably cause corruption following a power failure on
38730: ** such a system. This is currently an undocumented limit.
38731: */
38732: #define MAX_SECTOR_SIZE 0x10000
38733: 
38734: /*
38735: ** An instance of the following structure is allocated for each active
38736: ** savepoint and statement transaction in the system. All such structures
38737: ** are stored in the Pager.aSavepoint[] array, which is allocated and
38738: ** resized using sqlite3Realloc().
38739: **
38740: ** When a savepoint is created, the PagerSavepoint.iHdrOffset field is
38741: ** set to 0. If a journal-header is written into the main journal while
38742: ** the savepoint is active, then iHdrOffset is set to the byte offset 
38743: ** immediately following the last journal record written into the main
38744: ** journal before the journal-header. This is required during savepoint
38745: ** rollback (see pagerPlaybackSavepoint()).
38746: */
38747: typedef struct PagerSavepoint PagerSavepoint;
38748: struct PagerSavepoint {
38749:   i64 iOffset;                 /* Starting offset in main journal */
38750:   i64 iHdrOffset;              /* See above */
38751:   Bitvec *pInSavepoint;        /* Set of pages in this savepoint */
38752:   Pgno nOrig;                  /* Original number of pages in file */
38753:   Pgno iSubRec;                /* Index of first record in sub-journal */
38754: #ifndef SQLITE_OMIT_WAL
38755:   u32 aWalData[WAL_SAVEPOINT_NDATA];        /* WAL savepoint context */
38756: #endif
38757: };
38758: 
38759: /*
38760: ** A open page cache is an instance of struct Pager. A description of
38761: ** some of the more important member variables follows:
38762: **
38763: ** eState
38764: **
38765: **   The current 'state' of the pager object. See the comment and state
38766: **   diagram above for a description of the pager state.
38767: **
38768: ** eLock
38769: **
38770: **   For a real on-disk database, the current lock held on the database file -
38771: **   NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK.
38772: **
38773: **   For a temporary or in-memory database (neither of which require any
38774: **   locks), this variable is always set to EXCLUSIVE_LOCK. Since such
38775: **   databases always have Pager.exclusiveMode==1, this tricks the pager
38776: **   logic into thinking that it already has all the locks it will ever
38777: **   need (and no reason to release them).
38778: **
38779: **   In some (obscure) circumstances, this variable may also be set to
38780: **   UNKNOWN_LOCK. See the comment above the #define of UNKNOWN_LOCK for
38781: **   details.
38782: **
38783: ** changeCountDone
38784: **
38785: **   This boolean variable is used to make sure that the change-counter 
38786: **   (the 4-byte header field at byte offset 24 of the database file) is 
38787: **   not updated more often than necessary. 
38788: **
38789: **   It is set to true when the change-counter field is updated, which 
38790: **   can only happen if an exclusive lock is held on the database file.
38791: **   It is cleared (set to false) whenever an exclusive lock is 
38792: **   relinquished on the database file. Each time a transaction is committed,
38793: **   The changeCountDone flag is inspected. If it is true, the work of
38794: **   updating the change-counter is omitted for the current transaction.
38795: **
38796: **   This mechanism means that when running in exclusive mode, a connection 
38797: **   need only update the change-counter once, for the first transaction
38798: **   committed.
38799: **
38800: ** setMaster
38801: **
38802: **   When PagerCommitPhaseOne() is called to commit a transaction, it may
38803: **   (or may not) specify a master-journal name to be written into the 
38804: **   journal file before it is synced to disk.
38805: **
38806: **   Whether or not a journal file contains a master-journal pointer affects 
38807: **   the way in which the journal file is finalized after the transaction is 
38808: **   committed or rolled back when running in "journal_mode=PERSIST" mode.
38809: **   If a journal file does not contain a master-journal pointer, it is
38810: **   finalized by overwriting the first journal header with zeroes. If
38811: **   it does contain a master-journal pointer the journal file is finalized 
38812: **   by truncating it to zero bytes, just as if the connection were 
38813: **   running in "journal_mode=truncate" mode.
38814: **
38815: **   Journal files that contain master journal pointers cannot be finalized
38816: **   simply by overwriting the first journal-header with zeroes, as the
38817: **   master journal pointer could interfere with hot-journal rollback of any
38818: **   subsequently interrupted transaction that reuses the journal file.
38819: **
38820: **   The flag is cleared as soon as the journal file is finalized (either
38821: **   by PagerCommitPhaseTwo or PagerRollback). If an IO error prevents the
38822: **   journal file from being successfully finalized, the setMaster flag
38823: **   is cleared anyway (and the pager will move to ERROR state).
38824: **
38825: ** doNotSpill, doNotSyncSpill
38826: **
38827: **   These two boolean variables control the behaviour of cache-spills
38828: **   (calls made by the pcache module to the pagerStress() routine to
38829: **   write cached data to the file-system in order to free up memory).
38830: **
38831: **   When doNotSpill is non-zero, writing to the database from pagerStress()
38832: **   is disabled altogether. This is done in a very obscure case that
38833: **   comes up during savepoint rollback that requires the pcache module
38834: **   to allocate a new page to prevent the journal file from being written
38835: **   while it is being traversed by code in pager_playback().
38836: ** 
38837: **   If doNotSyncSpill is non-zero, writing to the database from pagerStress()
38838: **   is permitted, but syncing the journal file is not. This flag is set
38839: **   by sqlite3PagerWrite() when the file-system sector-size is larger than
38840: **   the database page-size in order to prevent a journal sync from happening 
38841: **   in between the journalling of two pages on the same sector. 
38842: **
38843: ** subjInMemory
38844: **
38845: **   This is a boolean variable. If true, then any required sub-journal
38846: **   is opened as an in-memory journal file. If false, then in-memory
38847: **   sub-journals are only used for in-memory pager files.
38848: **
38849: **   This variable is updated by the upper layer each time a new 
38850: **   write-transaction is opened.
38851: **
38852: ** dbSize, dbOrigSize, dbFileSize
38853: **
38854: **   Variable dbSize is set to the number of pages in the database file.
38855: **   It is valid in PAGER_READER and higher states (all states except for
38856: **   OPEN and ERROR). 
38857: **
38858: **   dbSize is set based on the size of the database file, which may be 
38859: **   larger than the size of the database (the value stored at offset
38860: **   28 of the database header by the btree). If the size of the file
38861: **   is not an integer multiple of the page-size, the value stored in
38862: **   dbSize is rounded down (i.e. a 5KB file with 2K page-size has dbSize==2).
38863: **   Except, any file that is greater than 0 bytes in size is considered
38864: **   to have at least one page. (i.e. a 1KB file with 2K page-size leads
38865: **   to dbSize==1).
38866: **
38867: **   During a write-transaction, if pages with page-numbers greater than
38868: **   dbSize are modified in the cache, dbSize is updated accordingly.
38869: **   Similarly, if the database is truncated using PagerTruncateImage(), 
38870: **   dbSize is updated.
38871: **
38872: **   Variables dbOrigSize and dbFileSize are valid in states 
38873: **   PAGER_WRITER_LOCKED and higher. dbOrigSize is a copy of the dbSize
38874: **   variable at the start of the transaction. It is used during rollback,
38875: **   and to determine whether or not pages need to be journalled before
38876: **   being modified.
38877: **
38878: **   Throughout a write-transaction, dbFileSize contains the size of
38879: **   the file on disk in pages. It is set to a copy of dbSize when the
38880: **   write-transaction is first opened, and updated when VFS calls are made
38881: **   to write or truncate the database file on disk. 
38882: **
38883: **   The only reason the dbFileSize variable is required is to suppress 
38884: **   unnecessary calls to xTruncate() after committing a transaction. If, 
38885: **   when a transaction is committed, the dbFileSize variable indicates 
38886: **   that the database file is larger than the database image (Pager.dbSize), 
38887: **   pager_truncate() is called. The pager_truncate() call uses xFilesize()
38888: **   to measure the database file on disk, and then truncates it if required.
38889: **   dbFileSize is not used when rolling back a transaction. In this case
38890: **   pager_truncate() is called unconditionally (which means there may be
38891: **   a call to xFilesize() that is not strictly required). In either case,
38892: **   pager_truncate() may cause the file to become smaller or larger.
38893: **
38894: ** dbHintSize
38895: **
38896: **   The dbHintSize variable is used to limit the number of calls made to
38897: **   the VFS xFileControl(FCNTL_SIZE_HINT) method. 
38898: **
38899: **   dbHintSize is set to a copy of the dbSize variable when a
38900: **   write-transaction is opened (at the same time as dbFileSize and
38901: **   dbOrigSize). If the xFileControl(FCNTL_SIZE_HINT) method is called,
38902: **   dbHintSize is increased to the number of pages that correspond to the
38903: **   size-hint passed to the method call. See pager_write_pagelist() for 
38904: **   details.
38905: **
38906: ** errCode
38907: **
38908: **   The Pager.errCode variable is only ever used in PAGER_ERROR state. It
38909: **   is set to zero in all other states. In PAGER_ERROR state, Pager.errCode 
38910: **   is always set to SQLITE_FULL, SQLITE_IOERR or one of the SQLITE_IOERR_XXX 
38911: **   sub-codes.
38912: */
38913: struct Pager {
38914:   sqlite3_vfs *pVfs;          /* OS functions to use for IO */
38915:   u8 exclusiveMode;           /* Boolean. True if locking_mode==EXCLUSIVE */
38916:   u8 journalMode;             /* One of the PAGER_JOURNALMODE_* values */
38917:   u8 useJournal;              /* Use a rollback journal on this file */
38918:   u8 noReadlock;              /* Do not bother to obtain readlocks */
38919:   u8 noSync;                  /* Do not sync the journal if true */
38920:   u8 fullSync;                /* Do extra syncs of the journal for robustness */
38921:   u8 ckptSyncFlags;           /* SYNC_NORMAL or SYNC_FULL for checkpoint */
38922:   u8 walSyncFlags;            /* SYNC_NORMAL or SYNC_FULL for wal writes */
38923:   u8 syncFlags;               /* SYNC_NORMAL or SYNC_FULL otherwise */
38924:   u8 tempFile;                /* zFilename is a temporary file */
38925:   u8 readOnly;                /* True for a read-only database */
38926:   u8 memDb;                   /* True to inhibit all file I/O */
38927: 
38928:   /**************************************************************************
38929:   ** The following block contains those class members that change during
38930:   ** routine opertion.  Class members not in this block are either fixed
38931:   ** when the pager is first created or else only change when there is a
38932:   ** significant mode change (such as changing the page_size, locking_mode,
38933:   ** or the journal_mode).  From another view, these class members describe
38934:   ** the "state" of the pager, while other class members describe the
38935:   ** "configuration" of the pager.
38936:   */
38937:   u8 eState;                  /* Pager state (OPEN, READER, WRITER_LOCKED..) */
38938:   u8 eLock;                   /* Current lock held on database file */
38939:   u8 changeCountDone;         /* Set after incrementing the change-counter */
38940:   u8 setMaster;               /* True if a m-j name has been written to jrnl */
38941:   u8 doNotSpill;              /* Do not spill the cache when non-zero */
38942:   u8 doNotSyncSpill;          /* Do not do a spill that requires jrnl sync */
38943:   u8 subjInMemory;            /* True to use in-memory sub-journals */
38944:   Pgno dbSize;                /* Number of pages in the database */
38945:   Pgno dbOrigSize;            /* dbSize before the current transaction */
38946:   Pgno dbFileSize;            /* Number of pages in the database file */
38947:   Pgno dbHintSize;            /* Value passed to FCNTL_SIZE_HINT call */
38948:   int errCode;                /* One of several kinds of errors */
38949:   int nRec;                   /* Pages journalled since last j-header written */
38950:   u32 cksumInit;              /* Quasi-random value added to every checksum */
38951:   u32 nSubRec;                /* Number of records written to sub-journal */
38952:   Bitvec *pInJournal;         /* One bit for each page in the database file */
38953:   sqlite3_file *fd;           /* File descriptor for database */
38954:   sqlite3_file *jfd;          /* File descriptor for main journal */
38955:   sqlite3_file *sjfd;         /* File descriptor for sub-journal */
38956:   i64 journalOff;             /* Current write offset in the journal file */
38957:   i64 journalHdr;             /* Byte offset to previous journal header */
38958:   sqlite3_backup *pBackup;    /* Pointer to list of ongoing backup processes */
38959:   PagerSavepoint *aSavepoint; /* Array of active savepoints */
38960:   int nSavepoint;             /* Number of elements in aSavepoint[] */
38961:   char dbFileVers[16];        /* Changes whenever database file changes */
38962:   /*
38963:   ** End of the routinely-changing class members
38964:   ***************************************************************************/
38965: 
38966:   u16 nExtra;                 /* Add this many bytes to each in-memory page */
38967:   i16 nReserve;               /* Number of unused bytes at end of each page */
38968:   u32 vfsFlags;               /* Flags for sqlite3_vfs.xOpen() */
38969:   u32 sectorSize;             /* Assumed sector size during rollback */
38970:   int pageSize;               /* Number of bytes in a page */
38971:   Pgno mxPgno;                /* Maximum allowed size of the database */
38972:   i64 journalSizeLimit;       /* Size limit for persistent journal files */
38973:   char *zFilename;            /* Name of the database file */
38974:   char *zJournal;             /* Name of the journal file */
38975:   int (*xBusyHandler)(void*); /* Function to call when busy */
38976:   void *pBusyHandlerArg;      /* Context argument for xBusyHandler */
38977:   int nHit, nMiss;            /* Total cache hits and misses */
38978: #ifdef SQLITE_TEST
38979:   int nRead, nWrite;          /* Database pages read/written */
38980: #endif
38981:   void (*xReiniter)(DbPage*); /* Call this routine when reloading pages */
38982: #ifdef SQLITE_HAS_CODEC
38983:   void *(*xCodec)(void*,void*,Pgno,int); /* Routine for en/decoding data */
38984:   void (*xCodecSizeChng)(void*,int,int); /* Notify of page size changes */
38985:   void (*xCodecFree)(void*);             /* Destructor for the codec */
38986:   void *pCodec;               /* First argument to xCodec... methods */
38987: #endif
38988:   char *pTmpSpace;            /* Pager.pageSize bytes of space for tmp use */
38989:   PCache *pPCache;            /* Pointer to page cache object */
38990: #ifndef SQLITE_OMIT_WAL
38991:   Wal *pWal;                  /* Write-ahead log used by "journal_mode=wal" */
38992:   char *zWal;                 /* File name for write-ahead log */
38993: #endif
38994: };
38995: 
38996: /*
38997: ** The following global variables hold counters used for
38998: ** testing purposes only.  These variables do not exist in
38999: ** a non-testing build.  These variables are not thread-safe.
39000: */
39001: #ifdef SQLITE_TEST
39002: SQLITE_API int sqlite3_pager_readdb_count = 0;    /* Number of full pages read from DB */
39003: SQLITE_API int sqlite3_pager_writedb_count = 0;   /* Number of full pages written to DB */
39004: SQLITE_API int sqlite3_pager_writej_count = 0;    /* Number of pages written to journal */
39005: # define PAGER_INCR(v)  v++
39006: #else
39007: # define PAGER_INCR(v)
39008: #endif
39009: 
39010: 
39011: 
39012: /*
39013: ** Journal files begin with the following magic string.  The data
39014: ** was obtained from /dev/random.  It is used only as a sanity check.
39015: **
39016: ** Since version 2.8.0, the journal format contains additional sanity
39017: ** checking information.  If the power fails while the journal is being
39018: ** written, semi-random garbage data might appear in the journal
39019: ** file after power is restored.  If an attempt is then made
39020: ** to roll the journal back, the database could be corrupted.  The additional
39021: ** sanity checking data is an attempt to discover the garbage in the
39022: ** journal and ignore it.
39023: **
39024: ** The sanity checking information for the new journal format consists
39025: ** of a 32-bit checksum on each page of data.  The checksum covers both
39026: ** the page number and the pPager->pageSize bytes of data for the page.
39027: ** This cksum is initialized to a 32-bit random value that appears in the
39028: ** journal file right after the header.  The random initializer is important,
39029: ** because garbage data that appears at the end of a journal is likely
39030: ** data that was once in other files that have now been deleted.  If the
39031: ** garbage data came from an obsolete journal file, the checksums might
39032: ** be correct.  But by initializing the checksum to random value which
39033: ** is different for every journal, we minimize that risk.
39034: */
39035: static const unsigned char aJournalMagic[] = {
39036:   0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7,
39037: };
39038: 
39039: /*
39040: ** The size of the of each page record in the journal is given by
39041: ** the following macro.
39042: */
39043: #define JOURNAL_PG_SZ(pPager)  ((pPager->pageSize) + 8)
39044: 
39045: /*
39046: ** The journal header size for this pager. This is usually the same 
39047: ** size as a single disk sector. See also setSectorSize().
39048: */
39049: #define JOURNAL_HDR_SZ(pPager) (pPager->sectorSize)
39050: 
39051: /*
39052: ** The macro MEMDB is true if we are dealing with an in-memory database.
39053: ** We do this as a macro so that if the SQLITE_OMIT_MEMORYDB macro is set,
39054: ** the value of MEMDB will be a constant and the compiler will optimize
39055: ** out code that would never execute.
39056: */
39057: #ifdef SQLITE_OMIT_MEMORYDB
39058: # define MEMDB 0
39059: #else
39060: # define MEMDB pPager->memDb
39061: #endif
39062: 
39063: /*
39064: ** The maximum legal page number is (2^31 - 1).
39065: */
39066: #define PAGER_MAX_PGNO 2147483647
39067: 
39068: /*
39069: ** The argument to this macro is a file descriptor (type sqlite3_file*).
39070: ** Return 0 if it is not open, or non-zero (but not 1) if it is.
39071: **
39072: ** This is so that expressions can be written as:
39073: **
39074: **   if( isOpen(pPager->jfd) ){ ...
39075: **
39076: ** instead of
39077: **
39078: **   if( pPager->jfd->pMethods ){ ...
39079: */
39080: #define isOpen(pFd) ((pFd)->pMethods)
39081: 
39082: /*
39083: ** Return true if this pager uses a write-ahead log instead of the usual
39084: ** rollback journal. Otherwise false.
39085: */
39086: #ifndef SQLITE_OMIT_WAL
39087: static int pagerUseWal(Pager *pPager){
39088:   return (pPager->pWal!=0);
39089: }
39090: #else
39091: # define pagerUseWal(x) 0
39092: # define pagerRollbackWal(x) 0
39093: # define pagerWalFrames(v,w,x,y) 0
39094: # define pagerOpenWalIfPresent(z) SQLITE_OK
39095: # define pagerBeginReadTransaction(z) SQLITE_OK
39096: #endif
39097: 
39098: #ifndef NDEBUG 
39099: /*
39100: ** Usage:
39101: **
39102: **   assert( assert_pager_state(pPager) );
39103: **
39104: ** This function runs many asserts to try to find inconsistencies in
39105: ** the internal state of the Pager object.
39106: */
39107: static int assert_pager_state(Pager *p){
39108:   Pager *pPager = p;
39109: 
39110:   /* State must be valid. */
39111:   assert( p->eState==PAGER_OPEN
39112:        || p->eState==PAGER_READER
39113:        || p->eState==PAGER_WRITER_LOCKED
39114:        || p->eState==PAGER_WRITER_CACHEMOD
39115:        || p->eState==PAGER_WRITER_DBMOD
39116:        || p->eState==PAGER_WRITER_FINISHED
39117:        || p->eState==PAGER_ERROR
39118:   );
39119: 
39120:   /* Regardless of the current state, a temp-file connection always behaves
39121:   ** as if it has an exclusive lock on the database file. It never updates
39122:   ** the change-counter field, so the changeCountDone flag is always set.
39123:   */
39124:   assert( p->tempFile==0 || p->eLock==EXCLUSIVE_LOCK );
39125:   assert( p->tempFile==0 || pPager->changeCountDone );
39126: 
39127:   /* If the useJournal flag is clear, the journal-mode must be "OFF". 
39128:   ** And if the journal-mode is "OFF", the journal file must not be open.
39129:   */
39130:   assert( p->journalMode==PAGER_JOURNALMODE_OFF || p->useJournal );
39131:   assert( p->journalMode!=PAGER_JOURNALMODE_OFF || !isOpen(p->jfd) );
39132: 
39133:   /* Check that MEMDB implies noSync. And an in-memory journal. Since 
39134:   ** this means an in-memory pager performs no IO at all, it cannot encounter 
39135:   ** either SQLITE_IOERR or SQLITE_FULL during rollback or while finalizing 
39136:   ** a journal file. (although the in-memory journal implementation may 
39137:   ** return SQLITE_IOERR_NOMEM while the journal file is being written). It 
39138:   ** is therefore not possible for an in-memory pager to enter the ERROR 
39139:   ** state.
39140:   */
39141:   if( MEMDB ){
39142:     assert( p->noSync );
39143:     assert( p->journalMode==PAGER_JOURNALMODE_OFF 
39144:          || p->journalMode==PAGER_JOURNALMODE_MEMORY 
39145:     );
39146:     assert( p->eState!=PAGER_ERROR && p->eState!=PAGER_OPEN );
39147:     assert( pagerUseWal(p)==0 );
39148:   }
39149: 
39150:   /* If changeCountDone is set, a RESERVED lock or greater must be held
39151:   ** on the file.
39152:   */
39153:   assert( pPager->changeCountDone==0 || pPager->eLock>=RESERVED_LOCK );
39154:   assert( p->eLock!=PENDING_LOCK );
39155: 
39156:   switch( p->eState ){
39157:     case PAGER_OPEN:
39158:       assert( !MEMDB );
39159:       assert( pPager->errCode==SQLITE_OK );
39160:       assert( sqlite3PcacheRefCount(pPager->pPCache)==0 || pPager->tempFile );
39161:       break;
39162: 
39163:     case PAGER_READER:
39164:       assert( pPager->errCode==SQLITE_OK );
39165:       assert( p->eLock!=UNKNOWN_LOCK );
39166:       assert( p->eLock>=SHARED_LOCK || p->noReadlock );
39167:       break;
39168: 
39169:     case PAGER_WRITER_LOCKED:
39170:       assert( p->eLock!=UNKNOWN_LOCK );
39171:       assert( pPager->errCode==SQLITE_OK );
39172:       if( !pagerUseWal(pPager) ){
39173:         assert( p->eLock>=RESERVED_LOCK );
39174:       }
39175:       assert( pPager->dbSize==pPager->dbOrigSize );
39176:       assert( pPager->dbOrigSize==pPager->dbFileSize );
39177:       assert( pPager->dbOrigSize==pPager->dbHintSize );
39178:       assert( pPager->setMaster==0 );
39179:       break;
39180: 
39181:     case PAGER_WRITER_CACHEMOD:
39182:       assert( p->eLock!=UNKNOWN_LOCK );
39183:       assert( pPager->errCode==SQLITE_OK );
39184:       if( !pagerUseWal(pPager) ){
39185:         /* It is possible that if journal_mode=wal here that neither the
39186:         ** journal file nor the WAL file are open. This happens during
39187:         ** a rollback transaction that switches from journal_mode=off
39188:         ** to journal_mode=wal.
39189:         */
39190:         assert( p->eLock>=RESERVED_LOCK );
39191:         assert( isOpen(p->jfd) 
39192:              || p->journalMode==PAGER_JOURNALMODE_OFF 
39193:              || p->journalMode==PAGER_JOURNALMODE_WAL 
39194:         );
39195:       }
39196:       assert( pPager->dbOrigSize==pPager->dbFileSize );
39197:       assert( pPager->dbOrigSize==pPager->dbHintSize );
39198:       break;
39199: 
39200:     case PAGER_WRITER_DBMOD:
39201:       assert( p->eLock==EXCLUSIVE_LOCK );
39202:       assert( pPager->errCode==SQLITE_OK );
39203:       assert( !pagerUseWal(pPager) );
39204:       assert( p->eLock>=EXCLUSIVE_LOCK );
39205:       assert( isOpen(p->jfd) 
39206:            || p->journalMode==PAGER_JOURNALMODE_OFF 
39207:            || p->journalMode==PAGER_JOURNALMODE_WAL 
39208:       );
39209:       assert( pPager->dbOrigSize<=pPager->dbHintSize );
39210:       break;
39211: 
39212:     case PAGER_WRITER_FINISHED:
39213:       assert( p->eLock==EXCLUSIVE_LOCK );
39214:       assert( pPager->errCode==SQLITE_OK );
39215:       assert( !pagerUseWal(pPager) );
39216:       assert( isOpen(p->jfd) 
39217:            || p->journalMode==PAGER_JOURNALMODE_OFF 
39218:            || p->journalMode==PAGER_JOURNALMODE_WAL 
39219:       );
39220:       break;
39221: 
39222:     case PAGER_ERROR:
39223:       /* There must be at least one outstanding reference to the pager if
39224:       ** in ERROR state. Otherwise the pager should have already dropped
39225:       ** back to OPEN state.
39226:       */
39227:       assert( pPager->errCode!=SQLITE_OK );
39228:       assert( sqlite3PcacheRefCount(pPager->pPCache)>0 );
39229:       break;
39230:   }
39231: 
39232:   return 1;
39233: }
39234: #endif /* ifndef NDEBUG */
39235: 
39236: #ifdef SQLITE_DEBUG 
39237: /*
39238: ** Return a pointer to a human readable string in a static buffer
39239: ** containing the state of the Pager object passed as an argument. This
39240: ** is intended to be used within debuggers. For example, as an alternative
39241: ** to "print *pPager" in gdb:
39242: **
39243: ** (gdb) printf "%s", print_pager_state(pPager)
39244: */
39245: static char *print_pager_state(Pager *p){
39246:   static char zRet[1024];
39247: 
39248:   sqlite3_snprintf(1024, zRet,
39249:       "Filename:      %s\n"
39250:       "State:         %s errCode=%d\n"
39251:       "Lock:          %s\n"
39252:       "Locking mode:  locking_mode=%s\n"
39253:       "Journal mode:  journal_mode=%s\n"
39254:       "Backing store: tempFile=%d memDb=%d useJournal=%d\n"
39255:       "Journal:       journalOff=%lld journalHdr=%lld\n"
39256:       "Size:          dbsize=%d dbOrigSize=%d dbFileSize=%d\n"
39257:       , p->zFilename
39258:       , p->eState==PAGER_OPEN            ? "OPEN" :
39259:         p->eState==PAGER_READER          ? "READER" :
39260:         p->eState==PAGER_WRITER_LOCKED   ? "WRITER_LOCKED" :
39261:         p->eState==PAGER_WRITER_CACHEMOD ? "WRITER_CACHEMOD" :
39262:         p->eState==PAGER_WRITER_DBMOD    ? "WRITER_DBMOD" :
39263:         p->eState==PAGER_WRITER_FINISHED ? "WRITER_FINISHED" :
39264:         p->eState==PAGER_ERROR           ? "ERROR" : "?error?"
39265:       , (int)p->errCode
39266:       , p->eLock==NO_LOCK         ? "NO_LOCK" :
39267:         p->eLock==RESERVED_LOCK   ? "RESERVED" :
39268:         p->eLock==EXCLUSIVE_LOCK  ? "EXCLUSIVE" :
39269:         p->eLock==SHARED_LOCK     ? "SHARED" :
39270:         p->eLock==UNKNOWN_LOCK    ? "UNKNOWN" : "?error?"
39271:       , p->exclusiveMode ? "exclusive" : "normal"
39272:       , p->journalMode==PAGER_JOURNALMODE_MEMORY   ? "memory" :
39273:         p->journalMode==PAGER_JOURNALMODE_OFF      ? "off" :
39274:         p->journalMode==PAGER_JOURNALMODE_DELETE   ? "delete" :
39275:         p->journalMode==PAGER_JOURNALMODE_PERSIST  ? "persist" :
39276:         p->journalMode==PAGER_JOURNALMODE_TRUNCATE ? "truncate" :
39277:         p->journalMode==PAGER_JOURNALMODE_WAL      ? "wal" : "?error?"
39278:       , (int)p->tempFile, (int)p->memDb, (int)p->useJournal
39279:       , p->journalOff, p->journalHdr
39280:       , (int)p->dbSize, (int)p->dbOrigSize, (int)p->dbFileSize
39281:   );
39282: 
39283:   return zRet;
39284: }
39285: #endif
39286: 
39287: /*
39288: ** Return true if it is necessary to write page *pPg into the sub-journal.
39289: ** A page needs to be written into the sub-journal if there exists one
39290: ** or more open savepoints for which:
39291: **
39292: **   * The page-number is less than or equal to PagerSavepoint.nOrig, and
39293: **   * The bit corresponding to the page-number is not set in
39294: **     PagerSavepoint.pInSavepoint.
39295: */
39296: static int subjRequiresPage(PgHdr *pPg){
39297:   Pgno pgno = pPg->pgno;
39298:   Pager *pPager = pPg->pPager;
39299:   int i;
39300:   for(i=0; i<pPager->nSavepoint; i++){
39301:     PagerSavepoint *p = &pPager->aSavepoint[i];
39302:     if( p->nOrig>=pgno && 0==sqlite3BitvecTest(p->pInSavepoint, pgno) ){
39303:       return 1;
39304:     }
39305:   }
39306:   return 0;
39307: }
39308: 
39309: /*
39310: ** Return true if the page is already in the journal file.
39311: */
39312: static int pageInJournal(PgHdr *pPg){
39313:   return sqlite3BitvecTest(pPg->pPager->pInJournal, pPg->pgno);
39314: }
39315: 
39316: /*
39317: ** Read a 32-bit integer from the given file descriptor.  Store the integer
39318: ** that is read in *pRes.  Return SQLITE_OK if everything worked, or an
39319: ** error code is something goes wrong.
39320: **
39321: ** All values are stored on disk as big-endian.
39322: */
39323: static int read32bits(sqlite3_file *fd, i64 offset, u32 *pRes){
39324:   unsigned char ac[4];
39325:   int rc = sqlite3OsRead(fd, ac, sizeof(ac), offset);
39326:   if( rc==SQLITE_OK ){
39327:     *pRes = sqlite3Get4byte(ac);
39328:   }
39329:   return rc;
39330: }
39331: 
39332: /*
39333: ** Write a 32-bit integer into a string buffer in big-endian byte order.
39334: */
39335: #define put32bits(A,B)  sqlite3Put4byte((u8*)A,B)
39336: 
39337: 
39338: /*
39339: ** Write a 32-bit integer into the given file descriptor.  Return SQLITE_OK
39340: ** on success or an error code is something goes wrong.
39341: */
39342: static int write32bits(sqlite3_file *fd, i64 offset, u32 val){
39343:   char ac[4];
39344:   put32bits(ac, val);
39345:   return sqlite3OsWrite(fd, ac, 4, offset);
39346: }
39347: 
39348: /*
39349: ** Unlock the database file to level eLock, which must be either NO_LOCK
39350: ** or SHARED_LOCK. Regardless of whether or not the call to xUnlock()
39351: ** succeeds, set the Pager.eLock variable to match the (attempted) new lock.
39352: **
39353: ** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is
39354: ** called, do not modify it. See the comment above the #define of 
39355: ** UNKNOWN_LOCK for an explanation of this.
39356: */
39357: static int pagerUnlockDb(Pager *pPager, int eLock){
39358:   int rc = SQLITE_OK;
39359: 
39360:   assert( !pPager->exclusiveMode || pPager->eLock==eLock );
39361:   assert( eLock==NO_LOCK || eLock==SHARED_LOCK );
39362:   assert( eLock!=NO_LOCK || pagerUseWal(pPager)==0 );
39363:   if( isOpen(pPager->fd) ){
39364:     assert( pPager->eLock>=eLock );
39365:     rc = sqlite3OsUnlock(pPager->fd, eLock);
39366:     if( pPager->eLock!=UNKNOWN_LOCK ){
39367:       pPager->eLock = (u8)eLock;
39368:     }
39369:     IOTRACE(("UNLOCK %p %d\n", pPager, eLock))
39370:   }
39371:   return rc;
39372: }
39373: 
39374: /*
39375: ** Lock the database file to level eLock, which must be either SHARED_LOCK,
39376: ** RESERVED_LOCK or EXCLUSIVE_LOCK. If the caller is successful, set the
39377: ** Pager.eLock variable to the new locking state. 
39378: **
39379: ** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is 
39380: ** called, do not modify it unless the new locking state is EXCLUSIVE_LOCK. 
39381: ** See the comment above the #define of UNKNOWN_LOCK for an explanation 
39382: ** of this.
39383: */
39384: static int pagerLockDb(Pager *pPager, int eLock){
39385:   int rc = SQLITE_OK;
39386: 
39387:   assert( eLock==SHARED_LOCK || eLock==RESERVED_LOCK || eLock==EXCLUSIVE_LOCK );
39388:   if( pPager->eLock<eLock || pPager->eLock==UNKNOWN_LOCK ){
39389:     rc = sqlite3OsLock(pPager->fd, eLock);
39390:     if( rc==SQLITE_OK && (pPager->eLock!=UNKNOWN_LOCK||eLock==EXCLUSIVE_LOCK) ){
39391:       pPager->eLock = (u8)eLock;
39392:       IOTRACE(("LOCK %p %d\n", pPager, eLock))
39393:     }
39394:   }
39395:   return rc;
39396: }
39397: 
39398: /*
39399: ** This function determines whether or not the atomic-write optimization
39400: ** can be used with this pager. The optimization can be used if:
39401: **
39402: **  (a) the value returned by OsDeviceCharacteristics() indicates that
39403: **      a database page may be written atomically, and
39404: **  (b) the value returned by OsSectorSize() is less than or equal
39405: **      to the page size.
39406: **
39407: ** The optimization is also always enabled for temporary files. It is
39408: ** an error to call this function if pPager is opened on an in-memory
39409: ** database.
39410: **
39411: ** If the optimization cannot be used, 0 is returned. If it can be used,
39412: ** then the value returned is the size of the journal file when it
39413: ** contains rollback data for exactly one page.
39414: */
39415: #ifdef SQLITE_ENABLE_ATOMIC_WRITE
39416: static int jrnlBufferSize(Pager *pPager){
39417:   assert( !MEMDB );
39418:   if( !pPager->tempFile ){
39419:     int dc;                           /* Device characteristics */
39420:     int nSector;                      /* Sector size */
39421:     int szPage;                       /* Page size */
39422: 
39423:     assert( isOpen(pPager->fd) );
39424:     dc = sqlite3OsDeviceCharacteristics(pPager->fd);
39425:     nSector = pPager->sectorSize;
39426:     szPage = pPager->pageSize;
39427: 
39428:     assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
39429:     assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
39430:     if( 0==(dc&(SQLITE_IOCAP_ATOMIC|(szPage>>8)) || nSector>szPage) ){
39431:       return 0;
39432:     }
39433:   }
39434: 
39435:   return JOURNAL_HDR_SZ(pPager) + JOURNAL_PG_SZ(pPager);
39436: }
39437: #endif
39438: 
39439: /*
39440: ** If SQLITE_CHECK_PAGES is defined then we do some sanity checking
39441: ** on the cache using a hash function.  This is used for testing
39442: ** and debugging only.
39443: */
39444: #ifdef SQLITE_CHECK_PAGES
39445: /*
39446: ** Return a 32-bit hash of the page data for pPage.
39447: */
39448: static u32 pager_datahash(int nByte, unsigned char *pData){
39449:   u32 hash = 0;
39450:   int i;
39451:   for(i=0; i<nByte; i++){
39452:     hash = (hash*1039) + pData[i];
39453:   }
39454:   return hash;
39455: }
39456: static u32 pager_pagehash(PgHdr *pPage){
39457:   return pager_datahash(pPage->pPager->pageSize, (unsigned char *)pPage->pData);
39458: }
39459: static void pager_set_pagehash(PgHdr *pPage){
39460:   pPage->pageHash = pager_pagehash(pPage);
39461: }
39462: 
39463: /*
39464: ** The CHECK_PAGE macro takes a PgHdr* as an argument. If SQLITE_CHECK_PAGES
39465: ** is defined, and NDEBUG is not defined, an assert() statement checks
39466: ** that the page is either dirty or still matches the calculated page-hash.
39467: */
39468: #define CHECK_PAGE(x) checkPage(x)
39469: static void checkPage(PgHdr *pPg){
39470:   Pager *pPager = pPg->pPager;
39471:   assert( pPager->eState!=PAGER_ERROR );
39472:   assert( (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) );
39473: }
39474: 
39475: #else
39476: #define pager_datahash(X,Y)  0
39477: #define pager_pagehash(X)  0
39478: #define pager_set_pagehash(X)
39479: #define CHECK_PAGE(x)
39480: #endif  /* SQLITE_CHECK_PAGES */
39481: 
39482: /*
39483: ** When this is called the journal file for pager pPager must be open.
39484: ** This function attempts to read a master journal file name from the 
39485: ** end of the file and, if successful, copies it into memory supplied 
39486: ** by the caller. See comments above writeMasterJournal() for the format
39487: ** used to store a master journal file name at the end of a journal file.
39488: **
39489: ** zMaster must point to a buffer of at least nMaster bytes allocated by
39490: ** the caller. This should be sqlite3_vfs.mxPathname+1 (to ensure there is
39491: ** enough space to write the master journal name). If the master journal
39492: ** name in the journal is longer than nMaster bytes (including a
39493: ** nul-terminator), then this is handled as if no master journal name
39494: ** were present in the journal.
39495: **
39496: ** If a master journal file name is present at the end of the journal
39497: ** file, then it is copied into the buffer pointed to by zMaster. A
39498: ** nul-terminator byte is appended to the buffer following the master
39499: ** journal file name.
39500: **
39501: ** If it is determined that no master journal file name is present 
39502: ** zMaster[0] is set to 0 and SQLITE_OK returned.
39503: **
39504: ** If an error occurs while reading from the journal file, an SQLite
39505: ** error code is returned.
39506: */
39507: static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMaster){
39508:   int rc;                    /* Return code */
39509:   u32 len;                   /* Length in bytes of master journal name */
39510:   i64 szJ;                   /* Total size in bytes of journal file pJrnl */
39511:   u32 cksum;                 /* MJ checksum value read from journal */
39512:   u32 u;                     /* Unsigned loop counter */
39513:   unsigned char aMagic[8];   /* A buffer to hold the magic header */
39514:   zMaster[0] = '\0';
39515: 
39516:   if( SQLITE_OK!=(rc = sqlite3OsFileSize(pJrnl, &szJ))
39517:    || szJ<16
39518:    || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len))
39519:    || len>=nMaster 
39520:    || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum))
39521:    || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8))
39522:    || memcmp(aMagic, aJournalMagic, 8)
39523:    || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, zMaster, len, szJ-16-len))
39524:   ){
39525:     return rc;
39526:   }
39527: 
39528:   /* See if the checksum matches the master journal name */
39529:   for(u=0; u<len; u++){
39530:     cksum -= zMaster[u];
39531:   }
39532:   if( cksum ){
39533:     /* If the checksum doesn't add up, then one or more of the disk sectors
39534:     ** containing the master journal filename is corrupted. This means
39535:     ** definitely roll back, so just return SQLITE_OK and report a (nul)
39536:     ** master-journal filename.
39537:     */
39538:     len = 0;
39539:   }
39540:   zMaster[len] = '\0';
39541:    
39542:   return SQLITE_OK;
39543: }
39544: 
39545: /*
39546: ** Return the offset of the sector boundary at or immediately 
39547: ** following the value in pPager->journalOff, assuming a sector 
39548: ** size of pPager->sectorSize bytes.
39549: **
39550: ** i.e for a sector size of 512:
39551: **
39552: **   Pager.journalOff          Return value
39553: **   ---------------------------------------
39554: **   0                         0
39555: **   512                       512
39556: **   100                       512
39557: **   2000                      2048
39558: ** 
39559: */
39560: static i64 journalHdrOffset(Pager *pPager){
39561:   i64 offset = 0;
39562:   i64 c = pPager->journalOff;
39563:   if( c ){
39564:     offset = ((c-1)/JOURNAL_HDR_SZ(pPager) + 1) * JOURNAL_HDR_SZ(pPager);
39565:   }
39566:   assert( offset%JOURNAL_HDR_SZ(pPager)==0 );
39567:   assert( offset>=c );
39568:   assert( (offset-c)<JOURNAL_HDR_SZ(pPager) );
39569:   return offset;
39570: }
39571: 
39572: /*
39573: ** The journal file must be open when this function is called.
39574: **
39575: ** This function is a no-op if the journal file has not been written to
39576: ** within the current transaction (i.e. if Pager.journalOff==0).
39577: **
39578: ** If doTruncate is non-zero or the Pager.journalSizeLimit variable is
39579: ** set to 0, then truncate the journal file to zero bytes in size. Otherwise,
39580: ** zero the 28-byte header at the start of the journal file. In either case, 
39581: ** if the pager is not in no-sync mode, sync the journal file immediately 
39582: ** after writing or truncating it.
39583: **
39584: ** If Pager.journalSizeLimit is set to a positive, non-zero value, and
39585: ** following the truncation or zeroing described above the size of the 
39586: ** journal file in bytes is larger than this value, then truncate the
39587: ** journal file to Pager.journalSizeLimit bytes. The journal file does
39588: ** not need to be synced following this operation.
39589: **
39590: ** If an IO error occurs, abandon processing and return the IO error code.
39591: ** Otherwise, return SQLITE_OK.
39592: */
39593: static int zeroJournalHdr(Pager *pPager, int doTruncate){
39594:   int rc = SQLITE_OK;                               /* Return code */
39595:   assert( isOpen(pPager->jfd) );
39596:   if( pPager->journalOff ){
39597:     const i64 iLimit = pPager->journalSizeLimit;    /* Local cache of jsl */
39598: 
39599:     IOTRACE(("JZEROHDR %p\n", pPager))
39600:     if( doTruncate || iLimit==0 ){
39601:       rc = sqlite3OsTruncate(pPager->jfd, 0);
39602:     }else{
39603:       static const char zeroHdr[28] = {0};
39604:       rc = sqlite3OsWrite(pPager->jfd, zeroHdr, sizeof(zeroHdr), 0);
39605:     }
39606:     if( rc==SQLITE_OK && !pPager->noSync ){
39607:       rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_DATAONLY|pPager->syncFlags);
39608:     }
39609: 
39610:     /* At this point the transaction is committed but the write lock 
39611:     ** is still held on the file. If there is a size limit configured for 
39612:     ** the persistent journal and the journal file currently consumes more
39613:     ** space than that limit allows for, truncate it now. There is no need
39614:     ** to sync the file following this operation.
39615:     */
39616:     if( rc==SQLITE_OK && iLimit>0 ){
39617:       i64 sz;
39618:       rc = sqlite3OsFileSize(pPager->jfd, &sz);
39619:       if( rc==SQLITE_OK && sz>iLimit ){
39620:         rc = sqlite3OsTruncate(pPager->jfd, iLimit);
39621:       }
39622:     }
39623:   }
39624:   return rc;
39625: }
39626: 
39627: /*
39628: ** The journal file must be open when this routine is called. A journal
39629: ** header (JOURNAL_HDR_SZ bytes) is written into the journal file at the
39630: ** current location.
39631: **
39632: ** The format for the journal header is as follows:
39633: ** - 8 bytes: Magic identifying journal format.
39634: ** - 4 bytes: Number of records in journal, or -1 no-sync mode is on.
39635: ** - 4 bytes: Random number used for page hash.
39636: ** - 4 bytes: Initial database page count.
39637: ** - 4 bytes: Sector size used by the process that wrote this journal.
39638: ** - 4 bytes: Database page size.
39639: ** 
39640: ** Followed by (JOURNAL_HDR_SZ - 28) bytes of unused space.
39641: */
39642: static int writeJournalHdr(Pager *pPager){
39643:   int rc = SQLITE_OK;                 /* Return code */
39644:   char *zHeader = pPager->pTmpSpace;  /* Temporary space used to build header */
39645:   u32 nHeader = (u32)pPager->pageSize;/* Size of buffer pointed to by zHeader */
39646:   u32 nWrite;                         /* Bytes of header sector written */
39647:   int ii;                             /* Loop counter */
39648: 
39649:   assert( isOpen(pPager->jfd) );      /* Journal file must be open. */
39650: 
39651:   if( nHeader>JOURNAL_HDR_SZ(pPager) ){
39652:     nHeader = JOURNAL_HDR_SZ(pPager);
39653:   }
39654: 
39655:   /* If there are active savepoints and any of them were created 
39656:   ** since the most recent journal header was written, update the 
39657:   ** PagerSavepoint.iHdrOffset fields now.
39658:   */
39659:   for(ii=0; ii<pPager->nSavepoint; ii++){
39660:     if( pPager->aSavepoint[ii].iHdrOffset==0 ){
39661:       pPager->aSavepoint[ii].iHdrOffset = pPager->journalOff;
39662:     }
39663:   }
39664: 
39665:   pPager->journalHdr = pPager->journalOff = journalHdrOffset(pPager);
39666: 
39667:   /* 
39668:   ** Write the nRec Field - the number of page records that follow this
39669:   ** journal header. Normally, zero is written to this value at this time.
39670:   ** After the records are added to the journal (and the journal synced, 
39671:   ** if in full-sync mode), the zero is overwritten with the true number
39672:   ** of records (see syncJournal()).
39673:   **
39674:   ** A faster alternative is to write 0xFFFFFFFF to the nRec field. When
39675:   ** reading the journal this value tells SQLite to assume that the
39676:   ** rest of the journal file contains valid page records. This assumption
39677:   ** is dangerous, as if a failure occurred whilst writing to the journal
39678:   ** file it may contain some garbage data. There are two scenarios
39679:   ** where this risk can be ignored:
39680:   **
39681:   **   * When the pager is in no-sync mode. Corruption can follow a
39682:   **     power failure in this case anyway.
39683:   **
39684:   **   * When the SQLITE_IOCAP_SAFE_APPEND flag is set. This guarantees
39685:   **     that garbage data is never appended to the journal file.
39686:   */
39687:   assert( isOpen(pPager->fd) || pPager->noSync );
39688:   if( pPager->noSync || (pPager->journalMode==PAGER_JOURNALMODE_MEMORY)
39689:    || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_SAFE_APPEND) 
39690:   ){
39691:     memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
39692:     put32bits(&zHeader[sizeof(aJournalMagic)], 0xffffffff);
39693:   }else{
39694:     memset(zHeader, 0, sizeof(aJournalMagic)+4);
39695:   }
39696: 
39697:   /* The random check-hash initialiser */ 
39698:   sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit);
39699:   put32bits(&zHeader[sizeof(aJournalMagic)+4], pPager->cksumInit);
39700:   /* The initial database size */
39701:   put32bits(&zHeader[sizeof(aJournalMagic)+8], pPager->dbOrigSize);
39702:   /* The assumed sector size for this process */
39703:   put32bits(&zHeader[sizeof(aJournalMagic)+12], pPager->sectorSize);
39704: 
39705:   /* The page size */
39706:   put32bits(&zHeader[sizeof(aJournalMagic)+16], pPager->pageSize);
39707: 
39708:   /* Initializing the tail of the buffer is not necessary.  Everything
39709:   ** works find if the following memset() is omitted.  But initializing
39710:   ** the memory prevents valgrind from complaining, so we are willing to
39711:   ** take the performance hit.
39712:   */
39713:   memset(&zHeader[sizeof(aJournalMagic)+20], 0,
39714:          nHeader-(sizeof(aJournalMagic)+20));
39715: 
39716:   /* In theory, it is only necessary to write the 28 bytes that the 
39717:   ** journal header consumes to the journal file here. Then increment the 
39718:   ** Pager.journalOff variable by JOURNAL_HDR_SZ so that the next 
39719:   ** record is written to the following sector (leaving a gap in the file
39720:   ** that will be implicitly filled in by the OS).
39721:   **
39722:   ** However it has been discovered that on some systems this pattern can 
39723:   ** be significantly slower than contiguously writing data to the file,
39724:   ** even if that means explicitly writing data to the block of 
39725:   ** (JOURNAL_HDR_SZ - 28) bytes that will not be used. So that is what
39726:   ** is done. 
39727:   **
39728:   ** The loop is required here in case the sector-size is larger than the 
39729:   ** database page size. Since the zHeader buffer is only Pager.pageSize
39730:   ** bytes in size, more than one call to sqlite3OsWrite() may be required
39731:   ** to populate the entire journal header sector.
39732:   */ 
39733:   for(nWrite=0; rc==SQLITE_OK&&nWrite<JOURNAL_HDR_SZ(pPager); nWrite+=nHeader){
39734:     IOTRACE(("JHDR %p %lld %d\n", pPager, pPager->journalHdr, nHeader))
39735:     rc = sqlite3OsWrite(pPager->jfd, zHeader, nHeader, pPager->journalOff);
39736:     assert( pPager->journalHdr <= pPager->journalOff );
39737:     pPager->journalOff += nHeader;
39738:   }
39739: 
39740:   return rc;
39741: }
39742: 
39743: /*
39744: ** The journal file must be open when this is called. A journal header file
39745: ** (JOURNAL_HDR_SZ bytes) is read from the current location in the journal
39746: ** file. The current location in the journal file is given by
39747: ** pPager->journalOff. See comments above function writeJournalHdr() for
39748: ** a description of the journal header format.
39749: **
39750: ** If the header is read successfully, *pNRec is set to the number of
39751: ** page records following this header and *pDbSize is set to the size of the
39752: ** database before the transaction began, in pages. Also, pPager->cksumInit
39753: ** is set to the value read from the journal header. SQLITE_OK is returned
39754: ** in this case.
39755: **
39756: ** If the journal header file appears to be corrupted, SQLITE_DONE is
39757: ** returned and *pNRec and *PDbSize are undefined.  If JOURNAL_HDR_SZ bytes
39758: ** cannot be read from the journal file an error code is returned.
39759: */
39760: static int readJournalHdr(
39761:   Pager *pPager,               /* Pager object */
39762:   int isHot,
39763:   i64 journalSize,             /* Size of the open journal file in bytes */
39764:   u32 *pNRec,                  /* OUT: Value read from the nRec field */
39765:   u32 *pDbSize                 /* OUT: Value of original database size field */
39766: ){
39767:   int rc;                      /* Return code */
39768:   unsigned char aMagic[8];     /* A buffer to hold the magic header */
39769:   i64 iHdrOff;                 /* Offset of journal header being read */
39770: 
39771:   assert( isOpen(pPager->jfd) );      /* Journal file must be open. */
39772: 
39773:   /* Advance Pager.journalOff to the start of the next sector. If the
39774:   ** journal file is too small for there to be a header stored at this
39775:   ** point, return SQLITE_DONE.
39776:   */
39777:   pPager->journalOff = journalHdrOffset(pPager);
39778:   if( pPager->journalOff+JOURNAL_HDR_SZ(pPager) > journalSize ){
39779:     return SQLITE_DONE;
39780:   }
39781:   iHdrOff = pPager->journalOff;
39782: 
39783:   /* Read in the first 8 bytes of the journal header. If they do not match
39784:   ** the  magic string found at the start of each journal header, return
39785:   ** SQLITE_DONE. If an IO error occurs, return an error code. Otherwise,
39786:   ** proceed.
39787:   */
39788:   if( isHot || iHdrOff!=pPager->journalHdr ){
39789:     rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic), iHdrOff);
39790:     if( rc ){
39791:       return rc;
39792:     }
39793:     if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){
39794:       return SQLITE_DONE;
39795:     }
39796:   }
39797: 
39798:   /* Read the first three 32-bit fields of the journal header: The nRec
39799:   ** field, the checksum-initializer and the database size at the start
39800:   ** of the transaction. Return an error code if anything goes wrong.
39801:   */
39802:   if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+8, pNRec))
39803:    || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+12, &pPager->cksumInit))
39804:    || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+16, pDbSize))
39805:   ){
39806:     return rc;
39807:   }
39808: 
39809:   if( pPager->journalOff==0 ){
39810:     u32 iPageSize;               /* Page-size field of journal header */
39811:     u32 iSectorSize;             /* Sector-size field of journal header */
39812: 
39813:     /* Read the page-size and sector-size journal header fields. */
39814:     if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+20, &iSectorSize))
39815:      || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+24, &iPageSize))
39816:     ){
39817:       return rc;
39818:     }
39819: 
39820:     /* Versions of SQLite prior to 3.5.8 set the page-size field of the
39821:     ** journal header to zero. In this case, assume that the Pager.pageSize
39822:     ** variable is already set to the correct page size.
39823:     */
39824:     if( iPageSize==0 ){
39825:       iPageSize = pPager->pageSize;
39826:     }
39827: 
39828:     /* Check that the values read from the page-size and sector-size fields
39829:     ** are within range. To be 'in range', both values need to be a power
39830:     ** of two greater than or equal to 512 or 32, and not greater than their 
39831:     ** respective compile time maximum limits.
39832:     */
39833:     if( iPageSize<512                  || iSectorSize<32
39834:      || iPageSize>SQLITE_MAX_PAGE_SIZE || iSectorSize>MAX_SECTOR_SIZE
39835:      || ((iPageSize-1)&iPageSize)!=0   || ((iSectorSize-1)&iSectorSize)!=0 
39836:     ){
39837:       /* If the either the page-size or sector-size in the journal-header is 
39838:       ** invalid, then the process that wrote the journal-header must have 
39839:       ** crashed before the header was synced. In this case stop reading 
39840:       ** the journal file here.
39841:       */
39842:       return SQLITE_DONE;
39843:     }
39844: 
39845:     /* Update the page-size to match the value read from the journal. 
39846:     ** Use a testcase() macro to make sure that malloc failure within 
39847:     ** PagerSetPagesize() is tested.
39848:     */
39849:     rc = sqlite3PagerSetPagesize(pPager, &iPageSize, -1);
39850:     testcase( rc!=SQLITE_OK );
39851: 
39852:     /* Update the assumed sector-size to match the value used by 
39853:     ** the process that created this journal. If this journal was
39854:     ** created by a process other than this one, then this routine
39855:     ** is being called from within pager_playback(). The local value
39856:     ** of Pager.sectorSize is restored at the end of that routine.
39857:     */
39858:     pPager->sectorSize = iSectorSize;
39859:   }
39860: 
39861:   pPager->journalOff += JOURNAL_HDR_SZ(pPager);
39862:   return rc;
39863: }
39864: 
39865: 
39866: /*
39867: ** Write the supplied master journal name into the journal file for pager
39868: ** pPager at the current location. The master journal name must be the last
39869: ** thing written to a journal file. If the pager is in full-sync mode, the
39870: ** journal file descriptor is advanced to the next sector boundary before
39871: ** anything is written. The format is:
39872: **
39873: **   + 4 bytes: PAGER_MJ_PGNO.
39874: **   + N bytes: Master journal filename in utf-8.
39875: **   + 4 bytes: N (length of master journal name in bytes, no nul-terminator).
39876: **   + 4 bytes: Master journal name checksum.
39877: **   + 8 bytes: aJournalMagic[].
39878: **
39879: ** The master journal page checksum is the sum of the bytes in the master
39880: ** journal name, where each byte is interpreted as a signed 8-bit integer.
39881: **
39882: ** If zMaster is a NULL pointer (occurs for a single database transaction), 
39883: ** this call is a no-op.
39884: */
39885: static int writeMasterJournal(Pager *pPager, const char *zMaster){
39886:   int rc;                          /* Return code */
39887:   int nMaster;                     /* Length of string zMaster */
39888:   i64 iHdrOff;                     /* Offset of header in journal file */
39889:   i64 jrnlSize;                    /* Size of journal file on disk */
39890:   u32 cksum = 0;                   /* Checksum of string zMaster */
39891: 
39892:   assert( pPager->setMaster==0 );
39893:   assert( !pagerUseWal(pPager) );
39894: 
39895:   if( !zMaster 
39896:    || pPager->journalMode==PAGER_JOURNALMODE_MEMORY 
39897:    || pPager->journalMode==PAGER_JOURNALMODE_OFF 
39898:   ){
39899:     return SQLITE_OK;
39900:   }
39901:   pPager->setMaster = 1;
39902:   assert( isOpen(pPager->jfd) );
39903:   assert( pPager->journalHdr <= pPager->journalOff );
39904: 
39905:   /* Calculate the length in bytes and the checksum of zMaster */
39906:   for(nMaster=0; zMaster[nMaster]; nMaster++){
39907:     cksum += zMaster[nMaster];
39908:   }
39909: 
39910:   /* If in full-sync mode, advance to the next disk sector before writing
39911:   ** the master journal name. This is in case the previous page written to
39912:   ** the journal has already been synced.
39913:   */
39914:   if( pPager->fullSync ){
39915:     pPager->journalOff = journalHdrOffset(pPager);
39916:   }
39917:   iHdrOff = pPager->journalOff;
39918: 
39919:   /* Write the master journal data to the end of the journal file. If
39920:   ** an error occurs, return the error code to the caller.
39921:   */
39922:   if( (0 != (rc = write32bits(pPager->jfd, iHdrOff, PAGER_MJ_PGNO(pPager))))
39923:    || (0 != (rc = sqlite3OsWrite(pPager->jfd, zMaster, nMaster, iHdrOff+4)))
39924:    || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster, nMaster)))
39925:    || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster+4, cksum)))
39926:    || (0 != (rc = sqlite3OsWrite(pPager->jfd, aJournalMagic, 8, iHdrOff+4+nMaster+8)))
39927:   ){
39928:     return rc;
39929:   }
39930:   pPager->journalOff += (nMaster+20);
39931: 
39932:   /* If the pager is in peristent-journal mode, then the physical 
39933:   ** journal-file may extend past the end of the master-journal name
39934:   ** and 8 bytes of magic data just written to the file. This is 
39935:   ** dangerous because the code to rollback a hot-journal file
39936:   ** will not be able to find the master-journal name to determine 
39937:   ** whether or not the journal is hot. 
39938:   **
39939:   ** Easiest thing to do in this scenario is to truncate the journal 
39940:   ** file to the required size.
39941:   */ 
39942:   if( SQLITE_OK==(rc = sqlite3OsFileSize(pPager->jfd, &jrnlSize))
39943:    && jrnlSize>pPager->journalOff
39944:   ){
39945:     rc = sqlite3OsTruncate(pPager->jfd, pPager->journalOff);
39946:   }
39947:   return rc;
39948: }
39949: 
39950: /*
39951: ** Find a page in the hash table given its page number. Return
39952: ** a pointer to the page or NULL if the requested page is not 
39953: ** already in memory.
39954: */
39955: static PgHdr *pager_lookup(Pager *pPager, Pgno pgno){
39956:   PgHdr *p;                         /* Return value */
39957: 
39958:   /* It is not possible for a call to PcacheFetch() with createFlag==0 to
39959:   ** fail, since no attempt to allocate dynamic memory will be made.
39960:   */
39961:   (void)sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &p);
39962:   return p;
39963: }
39964: 
39965: /*
39966: ** Discard the entire contents of the in-memory page-cache.
39967: */
39968: static void pager_reset(Pager *pPager){
39969:   sqlite3BackupRestart(pPager->pBackup);
39970:   sqlite3PcacheClear(pPager->pPCache);
39971: }
39972: 
39973: /*
39974: ** Free all structures in the Pager.aSavepoint[] array and set both
39975: ** Pager.aSavepoint and Pager.nSavepoint to zero. Close the sub-journal
39976: ** if it is open and the pager is not in exclusive mode.
39977: */
39978: static void releaseAllSavepoints(Pager *pPager){
39979:   int ii;               /* Iterator for looping through Pager.aSavepoint */
39980:   for(ii=0; ii<pPager->nSavepoint; ii++){
39981:     sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);
39982:   }
39983:   if( !pPager->exclusiveMode || sqlite3IsMemJournal(pPager->sjfd) ){
39984:     sqlite3OsClose(pPager->sjfd);
39985:   }
39986:   sqlite3_free(pPager->aSavepoint);
39987:   pPager->aSavepoint = 0;
39988:   pPager->nSavepoint = 0;
39989:   pPager->nSubRec = 0;
39990: }
39991: 
39992: /*
39993: ** Set the bit number pgno in the PagerSavepoint.pInSavepoint 
39994: ** bitvecs of all open savepoints. Return SQLITE_OK if successful
39995: ** or SQLITE_NOMEM if a malloc failure occurs.
39996: */
39997: static int addToSavepointBitvecs(Pager *pPager, Pgno pgno){
39998:   int ii;                   /* Loop counter */
39999:   int rc = SQLITE_OK;       /* Result code */
40000: 
40001:   for(ii=0; ii<pPager->nSavepoint; ii++){
40002:     PagerSavepoint *p = &pPager->aSavepoint[ii];
40003:     if( pgno<=p->nOrig ){
40004:       rc |= sqlite3BitvecSet(p->pInSavepoint, pgno);
40005:       testcase( rc==SQLITE_NOMEM );
40006:       assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
40007:     }
40008:   }
40009:   return rc;
40010: }
40011: 
40012: /*
40013: ** This function is a no-op if the pager is in exclusive mode and not
40014: ** in the ERROR state. Otherwise, it switches the pager to PAGER_OPEN
40015: ** state.
40016: **
40017: ** If the pager is not in exclusive-access mode, the database file is
40018: ** completely unlocked. If the file is unlocked and the file-system does
40019: ** not exhibit the UNDELETABLE_WHEN_OPEN property, the journal file is
40020: ** closed (if it is open).
40021: **
40022: ** If the pager is in ERROR state when this function is called, the 
40023: ** contents of the pager cache are discarded before switching back to 
40024: ** the OPEN state. Regardless of whether the pager is in exclusive-mode
40025: ** or not, any journal file left in the file-system will be treated
40026: ** as a hot-journal and rolled back the next time a read-transaction
40027: ** is opened (by this or by any other connection).
40028: */
40029: static void pager_unlock(Pager *pPager){
40030: 
40031:   assert( pPager->eState==PAGER_READER 
40032:        || pPager->eState==PAGER_OPEN 
40033:        || pPager->eState==PAGER_ERROR 
40034:   );
40035: 
40036:   sqlite3BitvecDestroy(pPager->pInJournal);
40037:   pPager->pInJournal = 0;
40038:   releaseAllSavepoints(pPager);
40039: 
40040:   if( pagerUseWal(pPager) ){
40041:     assert( !isOpen(pPager->jfd) );
40042:     sqlite3WalEndReadTransaction(pPager->pWal);
40043:     pPager->eState = PAGER_OPEN;
40044:   }else if( !pPager->exclusiveMode ){
40045:     int rc;                       /* Error code returned by pagerUnlockDb() */
40046:     int iDc = isOpen(pPager->fd)?sqlite3OsDeviceCharacteristics(pPager->fd):0;
40047: 
40048:     /* If the operating system support deletion of open files, then
40049:     ** close the journal file when dropping the database lock.  Otherwise
40050:     ** another connection with journal_mode=delete might delete the file
40051:     ** out from under us.
40052:     */
40053:     assert( (PAGER_JOURNALMODE_MEMORY   & 5)!=1 );
40054:     assert( (PAGER_JOURNALMODE_OFF      & 5)!=1 );
40055:     assert( (PAGER_JOURNALMODE_WAL      & 5)!=1 );
40056:     assert( (PAGER_JOURNALMODE_DELETE   & 5)!=1 );
40057:     assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 );
40058:     assert( (PAGER_JOURNALMODE_PERSIST  & 5)==1 );
40059:     if( 0==(iDc & SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN)
40060:      || 1!=(pPager->journalMode & 5)
40061:     ){
40062:       sqlite3OsClose(pPager->jfd);
40063:     }
40064: 
40065:     /* If the pager is in the ERROR state and the call to unlock the database
40066:     ** file fails, set the current lock to UNKNOWN_LOCK. See the comment
40067:     ** above the #define for UNKNOWN_LOCK for an explanation of why this
40068:     ** is necessary.
40069:     */
40070:     rc = pagerUnlockDb(pPager, NO_LOCK);
40071:     if( rc!=SQLITE_OK && pPager->eState==PAGER_ERROR ){
40072:       pPager->eLock = UNKNOWN_LOCK;
40073:     }
40074: 
40075:     /* The pager state may be changed from PAGER_ERROR to PAGER_OPEN here
40076:     ** without clearing the error code. This is intentional - the error
40077:     ** code is cleared and the cache reset in the block below.
40078:     */
40079:     assert( pPager->errCode || pPager->eState!=PAGER_ERROR );
40080:     pPager->changeCountDone = 0;
40081:     pPager->eState = PAGER_OPEN;
40082:   }
40083: 
40084:   /* If Pager.errCode is set, the contents of the pager cache cannot be
40085:   ** trusted. Now that there are no outstanding references to the pager,
40086:   ** it can safely move back to PAGER_OPEN state. This happens in both
40087:   ** normal and exclusive-locking mode.
40088:   */
40089:   if( pPager->errCode ){
40090:     assert( !MEMDB );
40091:     pager_reset(pPager);
40092:     pPager->changeCountDone = pPager->tempFile;
40093:     pPager->eState = PAGER_OPEN;
40094:     pPager->errCode = SQLITE_OK;
40095:   }
40096: 
40097:   pPager->journalOff = 0;
40098:   pPager->journalHdr = 0;
40099:   pPager->setMaster = 0;
40100: }
40101: 
40102: /*
40103: ** This function is called whenever an IOERR or FULL error that requires
40104: ** the pager to transition into the ERROR state may ahve occurred.
40105: ** The first argument is a pointer to the pager structure, the second 
40106: ** the error-code about to be returned by a pager API function. The 
40107: ** value returned is a copy of the second argument to this function. 
40108: **
40109: ** If the second argument is SQLITE_FULL, SQLITE_IOERR or one of the
40110: ** IOERR sub-codes, the pager enters the ERROR state and the error code
40111: ** is stored in Pager.errCode. While the pager remains in the ERROR state,
40112: ** all major API calls on the Pager will immediately return Pager.errCode.
40113: **
40114: ** The ERROR state indicates that the contents of the pager-cache 
40115: ** cannot be trusted. This state can be cleared by completely discarding 
40116: ** the contents of the pager-cache. If a transaction was active when
40117: ** the persistent error occurred, then the rollback journal may need
40118: ** to be replayed to restore the contents of the database file (as if
40119: ** it were a hot-journal).
40120: */
40121: static int pager_error(Pager *pPager, int rc){
40122:   int rc2 = rc & 0xff;
40123:   assert( rc==SQLITE_OK || !MEMDB );
40124:   assert(
40125:        pPager->errCode==SQLITE_FULL ||
40126:        pPager->errCode==SQLITE_OK ||
40127:        (pPager->errCode & 0xff)==SQLITE_IOERR
40128:   );
40129:   if( rc2==SQLITE_FULL || rc2==SQLITE_IOERR ){
40130:     pPager->errCode = rc;
40131:     pPager->eState = PAGER_ERROR;
40132:   }
40133:   return rc;
40134: }
40135: 
40136: /*
40137: ** This routine ends a transaction. A transaction is usually ended by 
40138: ** either a COMMIT or a ROLLBACK operation. This routine may be called 
40139: ** after rollback of a hot-journal, or if an error occurs while opening
40140: ** the journal file or writing the very first journal-header of a
40141: ** database transaction.
40142: ** 
40143: ** This routine is never called in PAGER_ERROR state. If it is called
40144: ** in PAGER_NONE or PAGER_SHARED state and the lock held is less
40145: ** exclusive than a RESERVED lock, it is a no-op.
40146: **
40147: ** Otherwise, any active savepoints are released.
40148: **
40149: ** If the journal file is open, then it is "finalized". Once a journal 
40150: ** file has been finalized it is not possible to use it to roll back a 
40151: ** transaction. Nor will it be considered to be a hot-journal by this
40152: ** or any other database connection. Exactly how a journal is finalized
40153: ** depends on whether or not the pager is running in exclusive mode and
40154: ** the current journal-mode (Pager.journalMode value), as follows:
40155: **
40156: **   journalMode==MEMORY
40157: **     Journal file descriptor is simply closed. This destroys an 
40158: **     in-memory journal.
40159: **
40160: **   journalMode==TRUNCATE
40161: **     Journal file is truncated to zero bytes in size.
40162: **
40163: **   journalMode==PERSIST
40164: **     The first 28 bytes of the journal file are zeroed. This invalidates
40165: **     the first journal header in the file, and hence the entire journal
40166: **     file. An invalid journal file cannot be rolled back.
40167: **
40168: **   journalMode==DELETE
40169: **     The journal file is closed and deleted using sqlite3OsDelete().
40170: **
40171: **     If the pager is running in exclusive mode, this method of finalizing
40172: **     the journal file is never used. Instead, if the journalMode is
40173: **     DELETE and the pager is in exclusive mode, the method described under
40174: **     journalMode==PERSIST is used instead.
40175: **
40176: ** After the journal is finalized, the pager moves to PAGER_READER state.
40177: ** If running in non-exclusive rollback mode, the lock on the file is 
40178: ** downgraded to a SHARED_LOCK.
40179: **
40180: ** SQLITE_OK is returned if no error occurs. If an error occurs during
40181: ** any of the IO operations to finalize the journal file or unlock the
40182: ** database then the IO error code is returned to the user. If the 
40183: ** operation to finalize the journal file fails, then the code still
40184: ** tries to unlock the database file if not in exclusive mode. If the
40185: ** unlock operation fails as well, then the first error code related
40186: ** to the first error encountered (the journal finalization one) is
40187: ** returned.
40188: */
40189: static int pager_end_transaction(Pager *pPager, int hasMaster){
40190:   int rc = SQLITE_OK;      /* Error code from journal finalization operation */
40191:   int rc2 = SQLITE_OK;     /* Error code from db file unlock operation */
40192: 
40193:   /* Do nothing if the pager does not have an open write transaction
40194:   ** or at least a RESERVED lock. This function may be called when there
40195:   ** is no write-transaction active but a RESERVED or greater lock is
40196:   ** held under two circumstances:
40197:   **
40198:   **   1. After a successful hot-journal rollback, it is called with
40199:   **      eState==PAGER_NONE and eLock==EXCLUSIVE_LOCK.
40200:   **
40201:   **   2. If a connection with locking_mode=exclusive holding an EXCLUSIVE 
40202:   **      lock switches back to locking_mode=normal and then executes a
40203:   **      read-transaction, this function is called with eState==PAGER_READER 
40204:   **      and eLock==EXCLUSIVE_LOCK when the read-transaction is closed.
40205:   */
40206:   assert( assert_pager_state(pPager) );
40207:   assert( pPager->eState!=PAGER_ERROR );
40208:   if( pPager->eState<PAGER_WRITER_LOCKED && pPager->eLock<RESERVED_LOCK ){
40209:     return SQLITE_OK;
40210:   }
40211: 
40212:   releaseAllSavepoints(pPager);
40213:   assert( isOpen(pPager->jfd) || pPager->pInJournal==0 );
40214:   if( isOpen(pPager->jfd) ){
40215:     assert( !pagerUseWal(pPager) );
40216: 
40217:     /* Finalize the journal file. */
40218:     if( sqlite3IsMemJournal(pPager->jfd) ){
40219:       assert( pPager->journalMode==PAGER_JOURNALMODE_MEMORY );
40220:       sqlite3OsClose(pPager->jfd);
40221:     }else if( pPager->journalMode==PAGER_JOURNALMODE_TRUNCATE ){
40222:       if( pPager->journalOff==0 ){
40223:         rc = SQLITE_OK;
40224:       }else{
40225:         rc = sqlite3OsTruncate(pPager->jfd, 0);
40226:       }
40227:       pPager->journalOff = 0;
40228:     }else if( pPager->journalMode==PAGER_JOURNALMODE_PERSIST
40229:       || (pPager->exclusiveMode && pPager->journalMode!=PAGER_JOURNALMODE_WAL)
40230:     ){
40231:       rc = zeroJournalHdr(pPager, hasMaster);
40232:       pPager->journalOff = 0;
40233:     }else{
40234:       /* This branch may be executed with Pager.journalMode==MEMORY if
40235:       ** a hot-journal was just rolled back. In this case the journal
40236:       ** file should be closed and deleted. If this connection writes to
40237:       ** the database file, it will do so using an in-memory journal. 
40238:       */
40239:       assert( pPager->journalMode==PAGER_JOURNALMODE_DELETE 
40240:            || pPager->journalMode==PAGER_JOURNALMODE_MEMORY 
40241:            || pPager->journalMode==PAGER_JOURNALMODE_WAL 
40242:       );
40243:       sqlite3OsClose(pPager->jfd);
40244:       if( !pPager->tempFile ){
40245:         rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
40246:       }
40247:     }
40248:   }
40249: 
40250: #ifdef SQLITE_CHECK_PAGES
40251:   sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash);
40252:   if( pPager->dbSize==0 && sqlite3PcacheRefCount(pPager->pPCache)>0 ){
40253:     PgHdr *p = pager_lookup(pPager, 1);
40254:     if( p ){
40255:       p->pageHash = 0;
40256:       sqlite3PagerUnref(p);
40257:     }
40258:   }
40259: #endif
40260: 
40261:   sqlite3BitvecDestroy(pPager->pInJournal);
40262:   pPager->pInJournal = 0;
40263:   pPager->nRec = 0;
40264:   sqlite3PcacheCleanAll(pPager->pPCache);
40265:   sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize);
40266: 
40267:   if( pagerUseWal(pPager) ){
40268:     /* Drop the WAL write-lock, if any. Also, if the connection was in 
40269:     ** locking_mode=exclusive mode but is no longer, drop the EXCLUSIVE 
40270:     ** lock held on the database file.
40271:     */
40272:     rc2 = sqlite3WalEndWriteTransaction(pPager->pWal);
40273:     assert( rc2==SQLITE_OK );
40274:   }
40275:   if( !pPager->exclusiveMode 
40276:    && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0))
40277:   ){
40278:     rc2 = pagerUnlockDb(pPager, SHARED_LOCK);
40279:     pPager->changeCountDone = 0;
40280:   }
40281:   pPager->eState = PAGER_READER;
40282:   pPager->setMaster = 0;
40283: 
40284:   return (rc==SQLITE_OK?rc2:rc);
40285: }
40286: 
40287: /*
40288: ** Execute a rollback if a transaction is active and unlock the 
40289: ** database file. 
40290: **
40291: ** If the pager has already entered the ERROR state, do not attempt 
40292: ** the rollback at this time. Instead, pager_unlock() is called. The
40293: ** call to pager_unlock() will discard all in-memory pages, unlock
40294: ** the database file and move the pager back to OPEN state. If this 
40295: ** means that there is a hot-journal left in the file-system, the next 
40296: ** connection to obtain a shared lock on the pager (which may be this one) 
40297: ** will roll it back.
40298: **
40299: ** If the pager has not already entered the ERROR state, but an IO or
40300: ** malloc error occurs during a rollback, then this will itself cause 
40301: ** the pager to enter the ERROR state. Which will be cleared by the
40302: ** call to pager_unlock(), as described above.
40303: */
40304: static void pagerUnlockAndRollback(Pager *pPager){
40305:   if( pPager->eState!=PAGER_ERROR && pPager->eState!=PAGER_OPEN ){
40306:     assert( assert_pager_state(pPager) );
40307:     if( pPager->eState>=PAGER_WRITER_LOCKED ){
40308:       sqlite3BeginBenignMalloc();
40309:       sqlite3PagerRollback(pPager);
40310:       sqlite3EndBenignMalloc();
40311:     }else if( !pPager->exclusiveMode ){
40312:       assert( pPager->eState==PAGER_READER );
40313:       pager_end_transaction(pPager, 0);
40314:     }
40315:   }
40316:   pager_unlock(pPager);
40317: }
40318: 
40319: /*
40320: ** Parameter aData must point to a buffer of pPager->pageSize bytes
40321: ** of data. Compute and return a checksum based ont the contents of the 
40322: ** page of data and the current value of pPager->cksumInit.
40323: **
40324: ** This is not a real checksum. It is really just the sum of the 
40325: ** random initial value (pPager->cksumInit) and every 200th byte
40326: ** of the page data, starting with byte offset (pPager->pageSize%200).
40327: ** Each byte is interpreted as an 8-bit unsigned integer.
40328: **
40329: ** Changing the formula used to compute this checksum results in an
40330: ** incompatible journal file format.
40331: **
40332: ** If journal corruption occurs due to a power failure, the most likely 
40333: ** scenario is that one end or the other of the record will be changed. 
40334: ** It is much less likely that the two ends of the journal record will be
40335: ** correct and the middle be corrupt.  Thus, this "checksum" scheme,
40336: ** though fast and simple, catches the mostly likely kind of corruption.
40337: */
40338: static u32 pager_cksum(Pager *pPager, const u8 *aData){
40339:   u32 cksum = pPager->cksumInit;         /* Checksum value to return */
40340:   int i = pPager->pageSize-200;          /* Loop counter */
40341:   while( i>0 ){
40342:     cksum += aData[i];
40343:     i -= 200;
40344:   }
40345:   return cksum;
40346: }
40347: 
40348: /*
40349: ** Report the current page size and number of reserved bytes back
40350: ** to the codec.
40351: */
40352: #ifdef SQLITE_HAS_CODEC
40353: static void pagerReportSize(Pager *pPager){
40354:   if( pPager->xCodecSizeChng ){
40355:     pPager->xCodecSizeChng(pPager->pCodec, pPager->pageSize,
40356:                            (int)pPager->nReserve);
40357:   }
40358: }
40359: #else
40360: # define pagerReportSize(X)     /* No-op if we do not support a codec */
40361: #endif
40362: 
40363: /*
40364: ** Read a single page from either the journal file (if isMainJrnl==1) or
40365: ** from the sub-journal (if isMainJrnl==0) and playback that page.
40366: ** The page begins at offset *pOffset into the file. The *pOffset
40367: ** value is increased to the start of the next page in the journal.
40368: **
40369: ** The main rollback journal uses checksums - the statement journal does 
40370: ** not.
40371: **
40372: ** If the page number of the page record read from the (sub-)journal file
40373: ** is greater than the current value of Pager.dbSize, then playback is
40374: ** skipped and SQLITE_OK is returned.
40375: **
40376: ** If pDone is not NULL, then it is a record of pages that have already
40377: ** been played back.  If the page at *pOffset has already been played back
40378: ** (if the corresponding pDone bit is set) then skip the playback.
40379: ** Make sure the pDone bit corresponding to the *pOffset page is set
40380: ** prior to returning.
40381: **
40382: ** If the page record is successfully read from the (sub-)journal file
40383: ** and played back, then SQLITE_OK is returned. If an IO error occurs
40384: ** while reading the record from the (sub-)journal file or while writing
40385: ** to the database file, then the IO error code is returned. If data
40386: ** is successfully read from the (sub-)journal file but appears to be
40387: ** corrupted, SQLITE_DONE is returned. Data is considered corrupted in
40388: ** two circumstances:
40389: ** 
40390: **   * If the record page-number is illegal (0 or PAGER_MJ_PGNO), or
40391: **   * If the record is being rolled back from the main journal file
40392: **     and the checksum field does not match the record content.
40393: **
40394: ** Neither of these two scenarios are possible during a savepoint rollback.
40395: **
40396: ** If this is a savepoint rollback, then memory may have to be dynamically
40397: ** allocated by this function. If this is the case and an allocation fails,
40398: ** SQLITE_NOMEM is returned.
40399: */
40400: static int pager_playback_one_page(
40401:   Pager *pPager,                /* The pager being played back */
40402:   i64 *pOffset,                 /* Offset of record to playback */
40403:   Bitvec *pDone,                /* Bitvec of pages already played back */
40404:   int isMainJrnl,               /* 1 -> main journal. 0 -> sub-journal. */
40405:   int isSavepnt                 /* True for a savepoint rollback */
40406: ){
40407:   int rc;
40408:   PgHdr *pPg;                   /* An existing page in the cache */
40409:   Pgno pgno;                    /* The page number of a page in journal */
40410:   u32 cksum;                    /* Checksum used for sanity checking */
40411:   char *aData;                  /* Temporary storage for the page */
40412:   sqlite3_file *jfd;            /* The file descriptor for the journal file */
40413:   int isSynced;                 /* True if journal page is synced */
40414: 
40415:   assert( (isMainJrnl&~1)==0 );      /* isMainJrnl is 0 or 1 */
40416:   assert( (isSavepnt&~1)==0 );       /* isSavepnt is 0 or 1 */
40417:   assert( isMainJrnl || pDone );     /* pDone always used on sub-journals */
40418:   assert( isSavepnt || pDone==0 );   /* pDone never used on non-savepoint */
40419: 
40420:   aData = pPager->pTmpSpace;
40421:   assert( aData );         /* Temp storage must have already been allocated */
40422:   assert( pagerUseWal(pPager)==0 || (!isMainJrnl && isSavepnt) );
40423: 
40424:   /* Either the state is greater than PAGER_WRITER_CACHEMOD (a transaction 
40425:   ** or savepoint rollback done at the request of the caller) or this is
40426:   ** a hot-journal rollback. If it is a hot-journal rollback, the pager
40427:   ** is in state OPEN and holds an EXCLUSIVE lock. Hot-journal rollback
40428:   ** only reads from the main journal, not the sub-journal.
40429:   */
40430:   assert( pPager->eState>=PAGER_WRITER_CACHEMOD
40431:        || (pPager->eState==PAGER_OPEN && pPager->eLock==EXCLUSIVE_LOCK)
40432:   );
40433:   assert( pPager->eState>=PAGER_WRITER_CACHEMOD || isMainJrnl );
40434: 
40435:   /* Read the page number and page data from the journal or sub-journal
40436:   ** file. Return an error code to the caller if an IO error occurs.
40437:   */
40438:   jfd = isMainJrnl ? pPager->jfd : pPager->sjfd;
40439:   rc = read32bits(jfd, *pOffset, &pgno);
40440:   if( rc!=SQLITE_OK ) return rc;
40441:   rc = sqlite3OsRead(jfd, (u8*)aData, pPager->pageSize, (*pOffset)+4);
40442:   if( rc!=SQLITE_OK ) return rc;
40443:   *pOffset += pPager->pageSize + 4 + isMainJrnl*4;
40444: 
40445:   /* Sanity checking on the page.  This is more important that I originally
40446:   ** thought.  If a power failure occurs while the journal is being written,
40447:   ** it could cause invalid data to be written into the journal.  We need to
40448:   ** detect this invalid data (with high probability) and ignore it.
40449:   */
40450:   if( pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){
40451:     assert( !isSavepnt );
40452:     return SQLITE_DONE;
40453:   }
40454:   if( pgno>(Pgno)pPager->dbSize || sqlite3BitvecTest(pDone, pgno) ){
40455:     return SQLITE_OK;
40456:   }
40457:   if( isMainJrnl ){
40458:     rc = read32bits(jfd, (*pOffset)-4, &cksum);
40459:     if( rc ) return rc;
40460:     if( !isSavepnt && pager_cksum(pPager, (u8*)aData)!=cksum ){
40461:       return SQLITE_DONE;
40462:     }
40463:   }
40464: 
40465:   /* If this page has already been played by before during the current
40466:   ** rollback, then don't bother to play it back again.
40467:   */
40468:   if( pDone && (rc = sqlite3BitvecSet(pDone, pgno))!=SQLITE_OK ){
40469:     return rc;
40470:   }
40471: 
40472:   /* When playing back page 1, restore the nReserve setting
40473:   */
40474:   if( pgno==1 && pPager->nReserve!=((u8*)aData)[20] ){
40475:     pPager->nReserve = ((u8*)aData)[20];
40476:     pagerReportSize(pPager);
40477:   }
40478: 
40479:   /* If the pager is in CACHEMOD state, then there must be a copy of this
40480:   ** page in the pager cache. In this case just update the pager cache,
40481:   ** not the database file. The page is left marked dirty in this case.
40482:   **
40483:   ** An exception to the above rule: If the database is in no-sync mode
40484:   ** and a page is moved during an incremental vacuum then the page may
40485:   ** not be in the pager cache. Later: if a malloc() or IO error occurs
40486:   ** during a Movepage() call, then the page may not be in the cache
40487:   ** either. So the condition described in the above paragraph is not
40488:   ** assert()able.
40489:   **
40490:   ** If in WRITER_DBMOD, WRITER_FINISHED or OPEN state, then we update the
40491:   ** pager cache if it exists and the main file. The page is then marked 
40492:   ** not dirty. Since this code is only executed in PAGER_OPEN state for
40493:   ** a hot-journal rollback, it is guaranteed that the page-cache is empty
40494:   ** if the pager is in OPEN state.
40495:   **
40496:   ** Ticket #1171:  The statement journal might contain page content that is
40497:   ** different from the page content at the start of the transaction.
40498:   ** This occurs when a page is changed prior to the start of a statement
40499:   ** then changed again within the statement.  When rolling back such a
40500:   ** statement we must not write to the original database unless we know
40501:   ** for certain that original page contents are synced into the main rollback
40502:   ** journal.  Otherwise, a power loss might leave modified data in the
40503:   ** database file without an entry in the rollback journal that can
40504:   ** restore the database to its original form.  Two conditions must be
40505:   ** met before writing to the database files. (1) the database must be
40506:   ** locked.  (2) we know that the original page content is fully synced
40507:   ** in the main journal either because the page is not in cache or else
40508:   ** the page is marked as needSync==0.
40509:   **
40510:   ** 2008-04-14:  When attempting to vacuum a corrupt database file, it
40511:   ** is possible to fail a statement on a database that does not yet exist.
40512:   ** Do not attempt to write if database file has never been opened.
40513:   */
40514:   if( pagerUseWal(pPager) ){
40515:     pPg = 0;
40516:   }else{
40517:     pPg = pager_lookup(pPager, pgno);
40518:   }
40519:   assert( pPg || !MEMDB );
40520:   assert( pPager->eState!=PAGER_OPEN || pPg==0 );
40521:   PAGERTRACE(("PLAYBACK %d page %d hash(%08x) %s\n",
40522:            PAGERID(pPager), pgno, pager_datahash(pPager->pageSize, (u8*)aData),
40523:            (isMainJrnl?"main-journal":"sub-journal")
40524:   ));
40525:   if( isMainJrnl ){
40526:     isSynced = pPager->noSync || (*pOffset <= pPager->journalHdr);
40527:   }else{
40528:     isSynced = (pPg==0 || 0==(pPg->flags & PGHDR_NEED_SYNC));
40529:   }
40530:   if( isOpen(pPager->fd)
40531:    && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
40532:    && isSynced
40533:   ){
40534:     i64 ofst = (pgno-1)*(i64)pPager->pageSize;
40535:     testcase( !isSavepnt && pPg!=0 && (pPg->flags&PGHDR_NEED_SYNC)!=0 );
40536:     assert( !pagerUseWal(pPager) );
40537:     rc = sqlite3OsWrite(pPager->fd, (u8*)aData, pPager->pageSize, ofst);
40538:     if( pgno>pPager->dbFileSize ){
40539:       pPager->dbFileSize = pgno;
40540:     }
40541:     if( pPager->pBackup ){
40542:       CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM);
40543:       sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)aData);
40544:       CODEC2(pPager, aData, pgno, 7, rc=SQLITE_NOMEM, aData);
40545:     }
40546:   }else if( !isMainJrnl && pPg==0 ){
40547:     /* If this is a rollback of a savepoint and data was not written to
40548:     ** the database and the page is not in-memory, there is a potential
40549:     ** problem. When the page is next fetched by the b-tree layer, it 
40550:     ** will be read from the database file, which may or may not be 
40551:     ** current. 
40552:     **
40553:     ** There are a couple of different ways this can happen. All are quite
40554:     ** obscure. When running in synchronous mode, this can only happen 
40555:     ** if the page is on the free-list at the start of the transaction, then
40556:     ** populated, then moved using sqlite3PagerMovepage().
40557:     **
40558:     ** The solution is to add an in-memory page to the cache containing
40559:     ** the data just read from the sub-journal. Mark the page as dirty 
40560:     ** and if the pager requires a journal-sync, then mark the page as 
40561:     ** requiring a journal-sync before it is written.
40562:     */
40563:     assert( isSavepnt );
40564:     assert( pPager->doNotSpill==0 );
40565:     pPager->doNotSpill++;
40566:     rc = sqlite3PagerAcquire(pPager, pgno, &pPg, 1);
40567:     assert( pPager->doNotSpill==1 );
40568:     pPager->doNotSpill--;
40569:     if( rc!=SQLITE_OK ) return rc;
40570:     pPg->flags &= ~PGHDR_NEED_READ;
40571:     sqlite3PcacheMakeDirty(pPg);
40572:   }
40573:   if( pPg ){
40574:     /* No page should ever be explicitly rolled back that is in use, except
40575:     ** for page 1 which is held in use in order to keep the lock on the
40576:     ** database active. However such a page may be rolled back as a result
40577:     ** of an internal error resulting in an automatic call to
40578:     ** sqlite3PagerRollback().
40579:     */
40580:     void *pData;
40581:     pData = pPg->pData;
40582:     memcpy(pData, (u8*)aData, pPager->pageSize);
40583:     pPager->xReiniter(pPg);
40584:     if( isMainJrnl && (!isSavepnt || *pOffset<=pPager->journalHdr) ){
40585:       /* If the contents of this page were just restored from the main 
40586:       ** journal file, then its content must be as they were when the 
40587:       ** transaction was first opened. In this case we can mark the page
40588:       ** as clean, since there will be no need to write it out to the
40589:       ** database.
40590:       **
40591:       ** There is one exception to this rule. If the page is being rolled
40592:       ** back as part of a savepoint (or statement) rollback from an 
40593:       ** unsynced portion of the main journal file, then it is not safe
40594:       ** to mark the page as clean. This is because marking the page as
40595:       ** clean will clear the PGHDR_NEED_SYNC flag. Since the page is
40596:       ** already in the journal file (recorded in Pager.pInJournal) and
40597:       ** the PGHDR_NEED_SYNC flag is cleared, if the page is written to
40598:       ** again within this transaction, it will be marked as dirty but
40599:       ** the PGHDR_NEED_SYNC flag will not be set. It could then potentially
40600:       ** be written out into the database file before its journal file
40601:       ** segment is synced. If a crash occurs during or following this,
40602:       ** database corruption may ensue.
40603:       */
40604:       assert( !pagerUseWal(pPager) );
40605:       sqlite3PcacheMakeClean(pPg);
40606:     }
40607:     pager_set_pagehash(pPg);
40608: 
40609:     /* If this was page 1, then restore the value of Pager.dbFileVers.
40610:     ** Do this before any decoding. */
40611:     if( pgno==1 ){
40612:       memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers));
40613:     }
40614: 
40615:     /* Decode the page just read from disk */
40616:     CODEC1(pPager, pData, pPg->pgno, 3, rc=SQLITE_NOMEM);
40617:     sqlite3PcacheRelease(pPg);
40618:   }
40619:   return rc;
40620: }
40621: 
40622: /*
40623: ** Parameter zMaster is the name of a master journal file. A single journal
40624: ** file that referred to the master journal file has just been rolled back.
40625: ** This routine checks if it is possible to delete the master journal file,
40626: ** and does so if it is.
40627: **
40628: ** Argument zMaster may point to Pager.pTmpSpace. So that buffer is not 
40629: ** available for use within this function.
40630: **
40631: ** When a master journal file is created, it is populated with the names 
40632: ** of all of its child journals, one after another, formatted as utf-8 
40633: ** encoded text. The end of each child journal file is marked with a 
40634: ** nul-terminator byte (0x00). i.e. the entire contents of a master journal
40635: ** file for a transaction involving two databases might be:
40636: **
40637: **   "/home/bill/a.db-journal\x00/home/bill/b.db-journal\x00"
40638: **
40639: ** A master journal file may only be deleted once all of its child 
40640: ** journals have been rolled back.
40641: **
40642: ** This function reads the contents of the master-journal file into 
40643: ** memory and loops through each of the child journal names. For
40644: ** each child journal, it checks if:
40645: **
40646: **   * if the child journal exists, and if so
40647: **   * if the child journal contains a reference to master journal 
40648: **     file zMaster
40649: **
40650: ** If a child journal can be found that matches both of the criteria
40651: ** above, this function returns without doing anything. Otherwise, if
40652: ** no such child journal can be found, file zMaster is deleted from
40653: ** the file-system using sqlite3OsDelete().
40654: **
40655: ** If an IO error within this function, an error code is returned. This
40656: ** function allocates memory by calling sqlite3Malloc(). If an allocation
40657: ** fails, SQLITE_NOMEM is returned. Otherwise, if no IO or malloc errors 
40658: ** occur, SQLITE_OK is returned.
40659: **
40660: ** TODO: This function allocates a single block of memory to load
40661: ** the entire contents of the master journal file. This could be
40662: ** a couple of kilobytes or so - potentially larger than the page 
40663: ** size.
40664: */
40665: static int pager_delmaster(Pager *pPager, const char *zMaster){
40666:   sqlite3_vfs *pVfs = pPager->pVfs;
40667:   int rc;                   /* Return code */
40668:   sqlite3_file *pMaster;    /* Malloc'd master-journal file descriptor */
40669:   sqlite3_file *pJournal;   /* Malloc'd child-journal file descriptor */
40670:   char *zMasterJournal = 0; /* Contents of master journal file */
40671:   i64 nMasterJournal;       /* Size of master journal file */
40672:   char *zJournal;           /* Pointer to one journal within MJ file */
40673:   char *zMasterPtr;         /* Space to hold MJ filename from a journal file */
40674:   int nMasterPtr;           /* Amount of space allocated to zMasterPtr[] */
40675: 
40676:   /* Allocate space for both the pJournal and pMaster file descriptors.
40677:   ** If successful, open the master journal file for reading.
40678:   */
40679:   pMaster = (sqlite3_file *)sqlite3MallocZero(pVfs->szOsFile * 2);
40680:   pJournal = (sqlite3_file *)(((u8 *)pMaster) + pVfs->szOsFile);
40681:   if( !pMaster ){
40682:     rc = SQLITE_NOMEM;
40683:   }else{
40684:     const int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MASTER_JOURNAL);
40685:     rc = sqlite3OsOpen(pVfs, zMaster, pMaster, flags, 0);
40686:   }
40687:   if( rc!=SQLITE_OK ) goto delmaster_out;
40688: 
40689:   /* Load the entire master journal file into space obtained from
40690:   ** sqlite3_malloc() and pointed to by zMasterJournal.   Also obtain
40691:   ** sufficient space (in zMasterPtr) to hold the names of master
40692:   ** journal files extracted from regular rollback-journals.
40693:   */
40694:   rc = sqlite3OsFileSize(pMaster, &nMasterJournal);
40695:   if( rc!=SQLITE_OK ) goto delmaster_out;
40696:   nMasterPtr = pVfs->mxPathname+1;
40697:   zMasterJournal = sqlite3Malloc((int)nMasterJournal + nMasterPtr + 1);
40698:   if( !zMasterJournal ){
40699:     rc = SQLITE_NOMEM;
40700:     goto delmaster_out;
40701:   }
40702:   zMasterPtr = &zMasterJournal[nMasterJournal+1];
40703:   rc = sqlite3OsRead(pMaster, zMasterJournal, (int)nMasterJournal, 0);
40704:   if( rc!=SQLITE_OK ) goto delmaster_out;
40705:   zMasterJournal[nMasterJournal] = 0;
40706: 
40707:   zJournal = zMasterJournal;
40708:   while( (zJournal-zMasterJournal)<nMasterJournal ){
40709:     int exists;
40710:     rc = sqlite3OsAccess(pVfs, zJournal, SQLITE_ACCESS_EXISTS, &exists);
40711:     if( rc!=SQLITE_OK ){
40712:       goto delmaster_out;
40713:     }
40714:     if( exists ){
40715:       /* One of the journals pointed to by the master journal exists.
40716:       ** Open it and check if it points at the master journal. If
40717:       ** so, return without deleting the master journal file.
40718:       */
40719:       int c;
40720:       int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL);
40721:       rc = sqlite3OsOpen(pVfs, zJournal, pJournal, flags, 0);
40722:       if( rc!=SQLITE_OK ){
40723:         goto delmaster_out;
40724:       }
40725: 
40726:       rc = readMasterJournal(pJournal, zMasterPtr, nMasterPtr);
40727:       sqlite3OsClose(pJournal);
40728:       if( rc!=SQLITE_OK ){
40729:         goto delmaster_out;
40730:       }
40731: 
40732:       c = zMasterPtr[0]!=0 && strcmp(zMasterPtr, zMaster)==0;
40733:       if( c ){
40734:         /* We have a match. Do not delete the master journal file. */
40735:         goto delmaster_out;
40736:       }
40737:     }
40738:     zJournal += (sqlite3Strlen30(zJournal)+1);
40739:   }
40740:  
40741:   sqlite3OsClose(pMaster);
40742:   rc = sqlite3OsDelete(pVfs, zMaster, 0);
40743: 
40744: delmaster_out:
40745:   sqlite3_free(zMasterJournal);
40746:   if( pMaster ){
40747:     sqlite3OsClose(pMaster);
40748:     assert( !isOpen(pJournal) );
40749:     sqlite3_free(pMaster);
40750:   }
40751:   return rc;
40752: }
40753: 
40754: 
40755: /*
40756: ** This function is used to change the actual size of the database 
40757: ** file in the file-system. This only happens when committing a transaction,
40758: ** or rolling back a transaction (including rolling back a hot-journal).
40759: **
40760: ** If the main database file is not open, or the pager is not in either
40761: ** DBMOD or OPEN state, this function is a no-op. Otherwise, the size 
40762: ** of the file is changed to nPage pages (nPage*pPager->pageSize bytes). 
40763: ** If the file on disk is currently larger than nPage pages, then use the VFS
40764: ** xTruncate() method to truncate it.
40765: **
40766: ** Or, it might might be the case that the file on disk is smaller than 
40767: ** nPage pages. Some operating system implementations can get confused if 
40768: ** you try to truncate a file to some size that is larger than it 
40769: ** currently is, so detect this case and write a single zero byte to 
40770: ** the end of the new file instead.
40771: **
40772: ** If successful, return SQLITE_OK. If an IO error occurs while modifying
40773: ** the database file, return the error code to the caller.
40774: */
40775: static int pager_truncate(Pager *pPager, Pgno nPage){
40776:   int rc = SQLITE_OK;
40777:   assert( pPager->eState!=PAGER_ERROR );
40778:   assert( pPager->eState!=PAGER_READER );
40779:   
40780:   if( isOpen(pPager->fd) 
40781:    && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) 
40782:   ){
40783:     i64 currentSize, newSize;
40784:     int szPage = pPager->pageSize;
40785:     assert( pPager->eLock==EXCLUSIVE_LOCK );
40786:     /* TODO: Is it safe to use Pager.dbFileSize here? */
40787:     rc = sqlite3OsFileSize(pPager->fd, &currentSize);
40788:     newSize = szPage*(i64)nPage;
40789:     if( rc==SQLITE_OK && currentSize!=newSize ){
40790:       if( currentSize>newSize ){
40791:         rc = sqlite3OsTruncate(pPager->fd, newSize);
40792:       }else if( (currentSize+szPage)<=newSize ){
40793:         char *pTmp = pPager->pTmpSpace;
40794:         memset(pTmp, 0, szPage);
40795:         testcase( (newSize-szPage) == currentSize );
40796:         testcase( (newSize-szPage) >  currentSize );
40797:         rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, newSize-szPage);
40798:       }
40799:       if( rc==SQLITE_OK ){
40800:         pPager->dbFileSize = nPage;
40801:       }
40802:     }
40803:   }
40804:   return rc;
40805: }
40806: 
40807: /*
40808: ** Set the value of the Pager.sectorSize variable for the given
40809: ** pager based on the value returned by the xSectorSize method
40810: ** of the open database file. The sector size will be used used 
40811: ** to determine the size and alignment of journal header and 
40812: ** master journal pointers within created journal files.
40813: **
40814: ** For temporary files the effective sector size is always 512 bytes.
40815: **
40816: ** Otherwise, for non-temporary files, the effective sector size is
40817: ** the value returned by the xSectorSize() method rounded up to 32 if
40818: ** it is less than 32, or rounded down to MAX_SECTOR_SIZE if it
40819: ** is greater than MAX_SECTOR_SIZE.
40820: **
40821: ** If the file has the SQLITE_IOCAP_POWERSAFE_OVERWRITE property, then set
40822: ** the effective sector size to its minimum value (512).  The purpose of
40823: ** pPager->sectorSize is to define the "blast radius" of bytes that
40824: ** might change if a crash occurs while writing to a single byte in
40825: ** that range.  But with POWERSAFE_OVERWRITE, the blast radius is zero
40826: ** (that is what POWERSAFE_OVERWRITE means), so we minimize the sector
40827: ** size.  For backwards compatibility of the rollback journal file format,
40828: ** we cannot reduce the effective sector size below 512.
40829: */
40830: static void setSectorSize(Pager *pPager){
40831:   assert( isOpen(pPager->fd) || pPager->tempFile );
40832: 
40833:   if( pPager->tempFile
40834:    || (sqlite3OsDeviceCharacteristics(pPager->fd) & 
40835:               SQLITE_IOCAP_POWERSAFE_OVERWRITE)!=0
40836:   ){
40837:     /* Sector size doesn't matter for temporary files. Also, the file
40838:     ** may not have been opened yet, in which case the OsSectorSize()
40839:     ** call will segfault. */
40840:     pPager->sectorSize = 512;
40841:   }else{
40842:     pPager->sectorSize = sqlite3OsSectorSize(pPager->fd);
40843:     if( pPager->sectorSize<32 ){
40844:       pPager->sectorSize = 512;
40845:     }
40846:     if( pPager->sectorSize>MAX_SECTOR_SIZE ){
40847:       assert( MAX_SECTOR_SIZE>=512 );
40848:       pPager->sectorSize = MAX_SECTOR_SIZE;
40849:     }
40850:   }
40851: }
40852: 
40853: /*
40854: ** Playback the journal and thus restore the database file to
40855: ** the state it was in before we started making changes.  
40856: **
40857: ** The journal file format is as follows: 
40858: **
40859: **  (1)  8 byte prefix.  A copy of aJournalMagic[].
40860: **  (2)  4 byte big-endian integer which is the number of valid page records
40861: **       in the journal.  If this value is 0xffffffff, then compute the
40862: **       number of page records from the journal size.
40863: **  (3)  4 byte big-endian integer which is the initial value for the 
40864: **       sanity checksum.
40865: **  (4)  4 byte integer which is the number of pages to truncate the
40866: **       database to during a rollback.
40867: **  (5)  4 byte big-endian integer which is the sector size.  The header
40868: **       is this many bytes in size.
40869: **  (6)  4 byte big-endian integer which is the page size.
40870: **  (7)  zero padding out to the next sector size.
40871: **  (8)  Zero or more pages instances, each as follows:
40872: **        +  4 byte page number.
40873: **        +  pPager->pageSize bytes of data.
40874: **        +  4 byte checksum
40875: **
40876: ** When we speak of the journal header, we mean the first 7 items above.
40877: ** Each entry in the journal is an instance of the 8th item.
40878: **
40879: ** Call the value from the second bullet "nRec".  nRec is the number of
40880: ** valid page entries in the journal.  In most cases, you can compute the
40881: ** value of nRec from the size of the journal file.  But if a power
40882: ** failure occurred while the journal was being written, it could be the
40883: ** case that the size of the journal file had already been increased but
40884: ** the extra entries had not yet made it safely to disk.  In such a case,
40885: ** the value of nRec computed from the file size would be too large.  For
40886: ** that reason, we always use the nRec value in the header.
40887: **
40888: ** If the nRec value is 0xffffffff it means that nRec should be computed
40889: ** from the file size.  This value is used when the user selects the
40890: ** no-sync option for the journal.  A power failure could lead to corruption
40891: ** in this case.  But for things like temporary table (which will be
40892: ** deleted when the power is restored) we don't care.  
40893: **
40894: ** If the file opened as the journal file is not a well-formed
40895: ** journal file then all pages up to the first corrupted page are rolled
40896: ** back (or no pages if the journal header is corrupted). The journal file
40897: ** is then deleted and SQLITE_OK returned, just as if no corruption had
40898: ** been encountered.
40899: **
40900: ** If an I/O or malloc() error occurs, the journal-file is not deleted
40901: ** and an error code is returned.
40902: **
40903: ** The isHot parameter indicates that we are trying to rollback a journal
40904: ** that might be a hot journal.  Or, it could be that the journal is 
40905: ** preserved because of JOURNALMODE_PERSIST or JOURNALMODE_TRUNCATE.
40906: ** If the journal really is hot, reset the pager cache prior rolling
40907: ** back any content.  If the journal is merely persistent, no reset is
40908: ** needed.
40909: */
40910: static int pager_playback(Pager *pPager, int isHot){
40911:   sqlite3_vfs *pVfs = pPager->pVfs;
40912:   i64 szJ;                 /* Size of the journal file in bytes */
40913:   u32 nRec;                /* Number of Records in the journal */
40914:   u32 u;                   /* Unsigned loop counter */
40915:   Pgno mxPg = 0;           /* Size of the original file in pages */
40916:   int rc;                  /* Result code of a subroutine */
40917:   int res = 1;             /* Value returned by sqlite3OsAccess() */
40918:   char *zMaster = 0;       /* Name of master journal file if any */
40919:   int needPagerReset;      /* True to reset page prior to first page rollback */
40920: 
40921:   /* Figure out how many records are in the journal.  Abort early if
40922:   ** the journal is empty.
40923:   */
40924:   assert( isOpen(pPager->jfd) );
40925:   rc = sqlite3OsFileSize(pPager->jfd, &szJ);
40926:   if( rc!=SQLITE_OK ){
40927:     goto end_playback;
40928:   }
40929: 
40930:   /* Read the master journal name from the journal, if it is present.
40931:   ** If a master journal file name is specified, but the file is not
40932:   ** present on disk, then the journal is not hot and does not need to be
40933:   ** played back.
40934:   **
40935:   ** TODO: Technically the following is an error because it assumes that
40936:   ** buffer Pager.pTmpSpace is (mxPathname+1) bytes or larger. i.e. that
40937:   ** (pPager->pageSize >= pPager->pVfs->mxPathname+1). Using os_unix.c,
40938:   **  mxPathname is 512, which is the same as the minimum allowable value
40939:   ** for pageSize.
40940:   */
40941:   zMaster = pPager->pTmpSpace;
40942:   rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1);
40943:   if( rc==SQLITE_OK && zMaster[0] ){
40944:     rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);
40945:   }
40946:   zMaster = 0;
40947:   if( rc!=SQLITE_OK || !res ){
40948:     goto end_playback;
40949:   }
40950:   pPager->journalOff = 0;
40951:   needPagerReset = isHot;
40952: 
40953:   /* This loop terminates either when a readJournalHdr() or 
40954:   ** pager_playback_one_page() call returns SQLITE_DONE or an IO error 
40955:   ** occurs. 
40956:   */
40957:   while( 1 ){
40958:     /* Read the next journal header from the journal file.  If there are
40959:     ** not enough bytes left in the journal file for a complete header, or
40960:     ** it is corrupted, then a process must have failed while writing it.
40961:     ** This indicates nothing more needs to be rolled back.
40962:     */
40963:     rc = readJournalHdr(pPager, isHot, szJ, &nRec, &mxPg);
40964:     if( rc!=SQLITE_OK ){ 
40965:       if( rc==SQLITE_DONE ){
40966:         rc = SQLITE_OK;
40967:       }
40968:       goto end_playback;
40969:     }
40970: 
40971:     /* If nRec is 0xffffffff, then this journal was created by a process
40972:     ** working in no-sync mode. This means that the rest of the journal
40973:     ** file consists of pages, there are no more journal headers. Compute
40974:     ** the value of nRec based on this assumption.
40975:     */
40976:     if( nRec==0xffffffff ){
40977:       assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) );
40978:       nRec = (int)((szJ - JOURNAL_HDR_SZ(pPager))/JOURNAL_PG_SZ(pPager));
40979:     }
40980: 
40981:     /* If nRec is 0 and this rollback is of a transaction created by this
40982:     ** process and if this is the final header in the journal, then it means
40983:     ** that this part of the journal was being filled but has not yet been
40984:     ** synced to disk.  Compute the number of pages based on the remaining
40985:     ** size of the file.
40986:     **
40987:     ** The third term of the test was added to fix ticket #2565.
40988:     ** When rolling back a hot journal, nRec==0 always means that the next
40989:     ** chunk of the journal contains zero pages to be rolled back.  But
40990:     ** when doing a ROLLBACK and the nRec==0 chunk is the last chunk in
40991:     ** the journal, it means that the journal might contain additional
40992:     ** pages that need to be rolled back and that the number of pages 
40993:     ** should be computed based on the journal file size.
40994:     */
40995:     if( nRec==0 && !isHot &&
40996:         pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff ){
40997:       nRec = (int)((szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager));
40998:     }
40999: 
41000:     /* If this is the first header read from the journal, truncate the
41001:     ** database file back to its original size.
41002:     */
41003:     if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){
41004:       rc = pager_truncate(pPager, mxPg);
41005:       if( rc!=SQLITE_OK ){
41006:         goto end_playback;
41007:       }
41008:       pPager->dbSize = mxPg;
41009:     }
41010: 
41011:     /* Copy original pages out of the journal and back into the 
41012:     ** database file and/or page cache.
41013:     */
41014:     for(u=0; u<nRec; u++){
41015:       if( needPagerReset ){
41016:         pager_reset(pPager);
41017:         needPagerReset = 0;
41018:       }
41019:       rc = pager_playback_one_page(pPager,&pPager->journalOff,0,1,0);
41020:       if( rc!=SQLITE_OK ){
41021:         if( rc==SQLITE_DONE ){
41022:           pPager->journalOff = szJ;
41023:           break;
41024:         }else if( rc==SQLITE_IOERR_SHORT_READ ){
41025:           /* If the journal has been truncated, simply stop reading and
41026:           ** processing the journal. This might happen if the journal was
41027:           ** not completely written and synced prior to a crash.  In that
41028:           ** case, the database should have never been written in the
41029:           ** first place so it is OK to simply abandon the rollback. */
41030:           rc = SQLITE_OK;
41031:           goto end_playback;
41032:         }else{
41033:           /* If we are unable to rollback, quit and return the error
41034:           ** code.  This will cause the pager to enter the error state
41035:           ** so that no further harm will be done.  Perhaps the next
41036:           ** process to come along will be able to rollback the database.
41037:           */
41038:           goto end_playback;
41039:         }
41040:       }
41041:     }
41042:   }
41043:   /*NOTREACHED*/
41044:   assert( 0 );
41045: 
41046: end_playback:
41047:   /* Following a rollback, the database file should be back in its original
41048:   ** state prior to the start of the transaction, so invoke the
41049:   ** SQLITE_FCNTL_DB_UNCHANGED file-control method to disable the
41050:   ** assertion that the transaction counter was modified.
41051:   */
41052: #ifdef SQLITE_DEBUG
41053:   if( pPager->fd->pMethods ){
41054:     sqlite3OsFileControlHint(pPager->fd,SQLITE_FCNTL_DB_UNCHANGED,0);
41055:   }
41056: #endif
41057: 
41058:   /* If this playback is happening automatically as a result of an IO or 
41059:   ** malloc error that occurred after the change-counter was updated but 
41060:   ** before the transaction was committed, then the change-counter 
41061:   ** modification may just have been reverted. If this happens in exclusive 
41062:   ** mode, then subsequent transactions performed by the connection will not
41063:   ** update the change-counter at all. This may lead to cache inconsistency
41064:   ** problems for other processes at some point in the future. So, just
41065:   ** in case this has happened, clear the changeCountDone flag now.
41066:   */
41067:   pPager->changeCountDone = pPager->tempFile;
41068: 
41069:   if( rc==SQLITE_OK ){
41070:     zMaster = pPager->pTmpSpace;
41071:     rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1);
41072:     testcase( rc!=SQLITE_OK );
41073:   }
41074:   if( rc==SQLITE_OK
41075:    && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
41076:   ){
41077:     rc = sqlite3PagerSync(pPager);
41078:   }
41079:   if( rc==SQLITE_OK ){
41080:     rc = pager_end_transaction(pPager, zMaster[0]!='\0');
41081:     testcase( rc!=SQLITE_OK );
41082:   }
41083:   if( rc==SQLITE_OK && zMaster[0] && res ){
41084:     /* If there was a master journal and this routine will return success,
41085:     ** see if it is possible to delete the master journal.
41086:     */
41087:     rc = pager_delmaster(pPager, zMaster);
41088:     testcase( rc!=SQLITE_OK );
41089:   }
41090: 
41091:   /* The Pager.sectorSize variable may have been updated while rolling
41092:   ** back a journal created by a process with a different sector size
41093:   ** value. Reset it to the correct value for this process.
41094:   */
41095:   setSectorSize(pPager);
41096:   return rc;
41097: }
41098: 
41099: 
41100: /*
41101: ** Read the content for page pPg out of the database file and into 
41102: ** pPg->pData. A shared lock or greater must be held on the database
41103: ** file before this function is called.
41104: **
41105: ** If page 1 is read, then the value of Pager.dbFileVers[] is set to
41106: ** the value read from the database file.
41107: **
41108: ** If an IO error occurs, then the IO error is returned to the caller.
41109: ** Otherwise, SQLITE_OK is returned.
41110: */
41111: static int readDbPage(PgHdr *pPg){
41112:   Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */
41113:   Pgno pgno = pPg->pgno;       /* Page number to read */
41114:   int rc = SQLITE_OK;          /* Return code */
41115:   int isInWal = 0;             /* True if page is in log file */
41116:   int pgsz = pPager->pageSize; /* Number of bytes to read */
41117: 
41118:   assert( pPager->eState>=PAGER_READER && !MEMDB );
41119:   assert( isOpen(pPager->fd) );
41120: 
41121:   if( NEVER(!isOpen(pPager->fd)) ){
41122:     assert( pPager->tempFile );
41123:     memset(pPg->pData, 0, pPager->pageSize);
41124:     return SQLITE_OK;
41125:   }
41126: 
41127:   if( pagerUseWal(pPager) ){
41128:     /* Try to pull the page from the write-ahead log. */
41129:     rc = sqlite3WalRead(pPager->pWal, pgno, &isInWal, pgsz, pPg->pData);
41130:   }
41131:   if( rc==SQLITE_OK && !isInWal ){
41132:     i64 iOffset = (pgno-1)*(i64)pPager->pageSize;
41133:     rc = sqlite3OsRead(pPager->fd, pPg->pData, pgsz, iOffset);
41134:     if( rc==SQLITE_IOERR_SHORT_READ ){
41135:       rc = SQLITE_OK;
41136:     }
41137:   }
41138: 
41139:   if( pgno==1 ){
41140:     if( rc ){
41141:       /* If the read is unsuccessful, set the dbFileVers[] to something
41142:       ** that will never be a valid file version.  dbFileVers[] is a copy
41143:       ** of bytes 24..39 of the database.  Bytes 28..31 should always be
41144:       ** zero or the size of the database in page. Bytes 32..35 and 35..39
41145:       ** should be page numbers which are never 0xffffffff.  So filling
41146:       ** pPager->dbFileVers[] with all 0xff bytes should suffice.
41147:       **
41148:       ** For an encrypted database, the situation is more complex:  bytes
41149:       ** 24..39 of the database are white noise.  But the probability of
41150:       ** white noising equaling 16 bytes of 0xff is vanishingly small so
41151:       ** we should still be ok.
41152:       */
41153:       memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers));
41154:     }else{
41155:       u8 *dbFileVers = &((u8*)pPg->pData)[24];
41156:       memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers));
41157:     }
41158:   }
41159:   CODEC1(pPager, pPg->pData, pgno, 3, rc = SQLITE_NOMEM);
41160: 
41161:   PAGER_INCR(sqlite3_pager_readdb_count);
41162:   PAGER_INCR(pPager->nRead);
41163:   IOTRACE(("PGIN %p %d\n", pPager, pgno));
41164:   PAGERTRACE(("FETCH %d page %d hash(%08x)\n",
41165:                PAGERID(pPager), pgno, pager_pagehash(pPg)));
41166: 
41167:   return rc;
41168: }
41169: 
41170: /*
41171: ** Update the value of the change-counter at offsets 24 and 92 in
41172: ** the header and the sqlite version number at offset 96.
41173: **
41174: ** This is an unconditional update.  See also the pager_incr_changecounter()
41175: ** routine which only updates the change-counter if the update is actually
41176: ** needed, as determined by the pPager->changeCountDone state variable.
41177: */
41178: static void pager_write_changecounter(PgHdr *pPg){
41179:   u32 change_counter;
41180: 
41181:   /* Increment the value just read and write it back to byte 24. */
41182:   change_counter = sqlite3Get4byte((u8*)pPg->pPager->dbFileVers)+1;
41183:   put32bits(((char*)pPg->pData)+24, change_counter);
41184: 
41185:   /* Also store the SQLite version number in bytes 96..99 and in
41186:   ** bytes 92..95 store the change counter for which the version number
41187:   ** is valid. */
41188:   put32bits(((char*)pPg->pData)+92, change_counter);
41189:   put32bits(((char*)pPg->pData)+96, SQLITE_VERSION_NUMBER);
41190: }
41191: 
41192: #ifndef SQLITE_OMIT_WAL
41193: /*
41194: ** This function is invoked once for each page that has already been 
41195: ** written into the log file when a WAL transaction is rolled back.
41196: ** Parameter iPg is the page number of said page. The pCtx argument 
41197: ** is actually a pointer to the Pager structure.
41198: **
41199: ** If page iPg is present in the cache, and has no outstanding references,
41200: ** it is discarded. Otherwise, if there are one or more outstanding
41201: ** references, the page content is reloaded from the database. If the
41202: ** attempt to reload content from the database is required and fails, 
41203: ** return an SQLite error code. Otherwise, SQLITE_OK.
41204: */
41205: static int pagerUndoCallback(void *pCtx, Pgno iPg){
41206:   int rc = SQLITE_OK;
41207:   Pager *pPager = (Pager *)pCtx;
41208:   PgHdr *pPg;
41209: 
41210:   pPg = sqlite3PagerLookup(pPager, iPg);
41211:   if( pPg ){
41212:     if( sqlite3PcachePageRefcount(pPg)==1 ){
41213:       sqlite3PcacheDrop(pPg);
41214:     }else{
41215:       rc = readDbPage(pPg);
41216:       if( rc==SQLITE_OK ){
41217:         pPager->xReiniter(pPg);
41218:       }
41219:       sqlite3PagerUnref(pPg);
41220:     }
41221:   }
41222: 
41223:   /* Normally, if a transaction is rolled back, any backup processes are
41224:   ** updated as data is copied out of the rollback journal and into the
41225:   ** database. This is not generally possible with a WAL database, as
41226:   ** rollback involves simply truncating the log file. Therefore, if one
41227:   ** or more frames have already been written to the log (and therefore 
41228:   ** also copied into the backup databases) as part of this transaction,
41229:   ** the backups must be restarted.
41230:   */
41231:   sqlite3BackupRestart(pPager->pBackup);
41232: 
41233:   return rc;
41234: }
41235: 
41236: /*
41237: ** This function is called to rollback a transaction on a WAL database.
41238: */
41239: static int pagerRollbackWal(Pager *pPager){
41240:   int rc;                         /* Return Code */
41241:   PgHdr *pList;                   /* List of dirty pages to revert */
41242: 
41243:   /* For all pages in the cache that are currently dirty or have already
41244:   ** been written (but not committed) to the log file, do one of the 
41245:   ** following:
41246:   **
41247:   **   + Discard the cached page (if refcount==0), or
41248:   **   + Reload page content from the database (if refcount>0).
41249:   */
41250:   pPager->dbSize = pPager->dbOrigSize;
41251:   rc = sqlite3WalUndo(pPager->pWal, pagerUndoCallback, (void *)pPager);
41252:   pList = sqlite3PcacheDirtyList(pPager->pPCache);
41253:   while( pList && rc==SQLITE_OK ){
41254:     PgHdr *pNext = pList->pDirty;
41255:     rc = pagerUndoCallback((void *)pPager, pList->pgno);
41256:     pList = pNext;
41257:   }
41258: 
41259:   return rc;
41260: }
41261: 
41262: /*
41263: ** This function is a wrapper around sqlite3WalFrames(). As well as logging
41264: ** the contents of the list of pages headed by pList (connected by pDirty),
41265: ** this function notifies any active backup processes that the pages have
41266: ** changed. 
41267: **
41268: ** The list of pages passed into this routine is always sorted by page number.
41269: ** Hence, if page 1 appears anywhere on the list, it will be the first page.
41270: */ 
41271: static int pagerWalFrames(
41272:   Pager *pPager,                  /* Pager object */
41273:   PgHdr *pList,                   /* List of frames to log */
41274:   Pgno nTruncate,                 /* Database size after this commit */
41275:   int isCommit                    /* True if this is a commit */
41276: ){
41277:   int rc;                         /* Return code */
41278: #if defined(SQLITE_DEBUG) || defined(SQLITE_CHECK_PAGES)
41279:   PgHdr *p;                       /* For looping over pages */
41280: #endif
41281: 
41282:   assert( pPager->pWal );
41283:   assert( pList );
41284: #ifdef SQLITE_DEBUG
41285:   /* Verify that the page list is in accending order */
41286:   for(p=pList; p && p->pDirty; p=p->pDirty){
41287:     assert( p->pgno < p->pDirty->pgno );
41288:   }
41289: #endif
41290: 
41291:   if( isCommit ){
41292:     /* If a WAL transaction is being committed, there is no point in writing
41293:     ** any pages with page numbers greater than nTruncate into the WAL file.
41294:     ** They will never be read by any client. So remove them from the pDirty
41295:     ** list here. */
41296:     PgHdr *p;
41297:     PgHdr **ppNext = &pList;
41298:     for(p=pList; (*ppNext = p); p=p->pDirty){
41299:       if( p->pgno<=nTruncate ) ppNext = &p->pDirty;
41300:     }
41301:     assert( pList );
41302:   }
41303: 
41304:   if( pList->pgno==1 ) pager_write_changecounter(pList);
41305:   rc = sqlite3WalFrames(pPager->pWal, 
41306:       pPager->pageSize, pList, nTruncate, isCommit, pPager->walSyncFlags
41307:   );
41308:   if( rc==SQLITE_OK && pPager->pBackup ){
41309:     PgHdr *p;
41310:     for(p=pList; p; p=p->pDirty){
41311:       sqlite3BackupUpdate(pPager->pBackup, p->pgno, (u8 *)p->pData);
41312:     }
41313:   }
41314: 
41315: #ifdef SQLITE_CHECK_PAGES
41316:   pList = sqlite3PcacheDirtyList(pPager->pPCache);
41317:   for(p=pList; p; p=p->pDirty){
41318:     pager_set_pagehash(p);
41319:   }
41320: #endif
41321: 
41322:   return rc;
41323: }
41324: 
41325: /*
41326: ** Begin a read transaction on the WAL.
41327: **
41328: ** This routine used to be called "pagerOpenSnapshot()" because it essentially
41329: ** makes a snapshot of the database at the current point in time and preserves
41330: ** that snapshot for use by the reader in spite of concurrently changes by
41331: ** other writers or checkpointers.
41332: */
41333: static int pagerBeginReadTransaction(Pager *pPager){
41334:   int rc;                         /* Return code */
41335:   int changed = 0;                /* True if cache must be reset */
41336: 
41337:   assert( pagerUseWal(pPager) );
41338:   assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER );
41339: 
41340:   /* sqlite3WalEndReadTransaction() was not called for the previous
41341:   ** transaction in locking_mode=EXCLUSIVE.  So call it now.  If we
41342:   ** are in locking_mode=NORMAL and EndRead() was previously called,
41343:   ** the duplicate call is harmless.
41344:   */
41345:   sqlite3WalEndReadTransaction(pPager->pWal);
41346: 
41347:   rc = sqlite3WalBeginReadTransaction(pPager->pWal, &changed);
41348:   if( rc!=SQLITE_OK || changed ){
41349:     pager_reset(pPager);
41350:   }
41351: 
41352:   return rc;
41353: }
41354: #endif
41355: 
41356: /*
41357: ** This function is called as part of the transition from PAGER_OPEN
41358: ** to PAGER_READER state to determine the size of the database file
41359: ** in pages (assuming the page size currently stored in Pager.pageSize).
41360: **
41361: ** If no error occurs, SQLITE_OK is returned and the size of the database
41362: ** in pages is stored in *pnPage. Otherwise, an error code (perhaps
41363: ** SQLITE_IOERR_FSTAT) is returned and *pnPage is left unmodified.
41364: */
41365: static int pagerPagecount(Pager *pPager, Pgno *pnPage){
41366:   Pgno nPage;                     /* Value to return via *pnPage */
41367: 
41368:   /* Query the WAL sub-system for the database size. The WalDbsize()
41369:   ** function returns zero if the WAL is not open (i.e. Pager.pWal==0), or
41370:   ** if the database size is not available. The database size is not
41371:   ** available from the WAL sub-system if the log file is empty or
41372:   ** contains no valid committed transactions.
41373:   */
41374:   assert( pPager->eState==PAGER_OPEN );
41375:   assert( pPager->eLock>=SHARED_LOCK || pPager->noReadlock );
41376:   nPage = sqlite3WalDbsize(pPager->pWal);
41377: 
41378:   /* If the database size was not available from the WAL sub-system,
41379:   ** determine it based on the size of the database file. If the size
41380:   ** of the database file is not an integer multiple of the page-size,
41381:   ** round down to the nearest page. Except, any file larger than 0
41382:   ** bytes in size is considered to contain at least one page.
41383:   */
41384:   if( nPage==0 ){
41385:     i64 n = 0;                    /* Size of db file in bytes */
41386:     assert( isOpen(pPager->fd) || pPager->tempFile );
41387:     if( isOpen(pPager->fd) ){
41388:       int rc = sqlite3OsFileSize(pPager->fd, &n);
41389:       if( rc!=SQLITE_OK ){
41390:         return rc;
41391:       }
41392:     }
41393:     nPage = (Pgno)((n+pPager->pageSize-1) / pPager->pageSize);
41394:   }
41395: 
41396:   /* If the current number of pages in the file is greater than the
41397:   ** configured maximum pager number, increase the allowed limit so
41398:   ** that the file can be read.
41399:   */
41400:   if( nPage>pPager->mxPgno ){
41401:     pPager->mxPgno = (Pgno)nPage;
41402:   }
41403: 
41404:   *pnPage = nPage;
41405:   return SQLITE_OK;
41406: }
41407: 
41408: #ifndef SQLITE_OMIT_WAL
41409: /*
41410: ** Check if the *-wal file that corresponds to the database opened by pPager
41411: ** exists if the database is not empy, or verify that the *-wal file does
41412: ** not exist (by deleting it) if the database file is empty.
41413: **
41414: ** If the database is not empty and the *-wal file exists, open the pager
41415: ** in WAL mode.  If the database is empty or if no *-wal file exists and
41416: ** if no error occurs, make sure Pager.journalMode is not set to
41417: ** PAGER_JOURNALMODE_WAL.
41418: **
41419: ** Return SQLITE_OK or an error code.
41420: **
41421: ** The caller must hold a SHARED lock on the database file to call this
41422: ** function. Because an EXCLUSIVE lock on the db file is required to delete 
41423: ** a WAL on a none-empty database, this ensures there is no race condition 
41424: ** between the xAccess() below and an xDelete() being executed by some 
41425: ** other connection.
41426: */
41427: static int pagerOpenWalIfPresent(Pager *pPager){
41428:   int rc = SQLITE_OK;
41429:   assert( pPager->eState==PAGER_OPEN );
41430:   assert( pPager->eLock>=SHARED_LOCK || pPager->noReadlock );
41431: 
41432:   if( !pPager->tempFile ){
41433:     int isWal;                    /* True if WAL file exists */
41434:     Pgno nPage;                   /* Size of the database file */
41435: 
41436:     rc = pagerPagecount(pPager, &nPage);
41437:     if( rc ) return rc;
41438:     if( nPage==0 ){
41439:       rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0);
41440:       isWal = 0;
41441:     }else{
41442:       rc = sqlite3OsAccess(
41443:           pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal
41444:       );
41445:     }
41446:     if( rc==SQLITE_OK ){
41447:       if( isWal ){
41448:         testcase( sqlite3PcachePagecount(pPager->pPCache)==0 );
41449:         rc = sqlite3PagerOpenWal(pPager, 0);
41450:       }else if( pPager->journalMode==PAGER_JOURNALMODE_WAL ){
41451:         pPager->journalMode = PAGER_JOURNALMODE_DELETE;
41452:       }
41453:     }
41454:   }
41455:   return rc;
41456: }
41457: #endif
41458: 
41459: /*
41460: ** Playback savepoint pSavepoint. Or, if pSavepoint==NULL, then playback
41461: ** the entire master journal file. The case pSavepoint==NULL occurs when 
41462: ** a ROLLBACK TO command is invoked on a SAVEPOINT that is a transaction 
41463: ** savepoint.
41464: **
41465: ** When pSavepoint is not NULL (meaning a non-transaction savepoint is 
41466: ** being rolled back), then the rollback consists of up to three stages,
41467: ** performed in the order specified:
41468: **
41469: **   * Pages are played back from the main journal starting at byte
41470: **     offset PagerSavepoint.iOffset and continuing to 
41471: **     PagerSavepoint.iHdrOffset, or to the end of the main journal
41472: **     file if PagerSavepoint.iHdrOffset is zero.
41473: **
41474: **   * If PagerSavepoint.iHdrOffset is not zero, then pages are played
41475: **     back starting from the journal header immediately following 
41476: **     PagerSavepoint.iHdrOffset to the end of the main journal file.
41477: **
41478: **   * Pages are then played back from the sub-journal file, starting
41479: **     with the PagerSavepoint.iSubRec and continuing to the end of
41480: **     the journal file.
41481: **
41482: ** Throughout the rollback process, each time a page is rolled back, the
41483: ** corresponding bit is set in a bitvec structure (variable pDone in the
41484: ** implementation below). This is used to ensure that a page is only
41485: ** rolled back the first time it is encountered in either journal.
41486: **
41487: ** If pSavepoint is NULL, then pages are only played back from the main
41488: ** journal file. There is no need for a bitvec in this case.
41489: **
41490: ** In either case, before playback commences the Pager.dbSize variable
41491: ** is reset to the value that it held at the start of the savepoint 
41492: ** (or transaction). No page with a page-number greater than this value
41493: ** is played back. If one is encountered it is simply skipped.
41494: */
41495: static int pagerPlaybackSavepoint(Pager *pPager, PagerSavepoint *pSavepoint){
41496:   i64 szJ;                 /* Effective size of the main journal */
41497:   i64 iHdrOff;             /* End of first segment of main-journal records */
41498:   int rc = SQLITE_OK;      /* Return code */
41499:   Bitvec *pDone = 0;       /* Bitvec to ensure pages played back only once */
41500: 
41501:   assert( pPager->eState!=PAGER_ERROR );
41502:   assert( pPager->eState>=PAGER_WRITER_LOCKED );
41503: 
41504:   /* Allocate a bitvec to use to store the set of pages rolled back */
41505:   if( pSavepoint ){
41506:     pDone = sqlite3BitvecCreate(pSavepoint->nOrig);
41507:     if( !pDone ){
41508:       return SQLITE_NOMEM;
41509:     }
41510:   }
41511: 
41512:   /* Set the database size back to the value it was before the savepoint 
41513:   ** being reverted was opened.
41514:   */
41515:   pPager->dbSize = pSavepoint ? pSavepoint->nOrig : pPager->dbOrigSize;
41516:   pPager->changeCountDone = pPager->tempFile;
41517: 
41518:   if( !pSavepoint && pagerUseWal(pPager) ){
41519:     return pagerRollbackWal(pPager);
41520:   }
41521: 
41522:   /* Use pPager->journalOff as the effective size of the main rollback
41523:   ** journal.  The actual file might be larger than this in
41524:   ** PAGER_JOURNALMODE_TRUNCATE or PAGER_JOURNALMODE_PERSIST.  But anything
41525:   ** past pPager->journalOff is off-limits to us.
41526:   */
41527:   szJ = pPager->journalOff;
41528:   assert( pagerUseWal(pPager)==0 || szJ==0 );
41529: 
41530:   /* Begin by rolling back records from the main journal starting at
41531:   ** PagerSavepoint.iOffset and continuing to the next journal header.
41532:   ** There might be records in the main journal that have a page number
41533:   ** greater than the current database size (pPager->dbSize) but those
41534:   ** will be skipped automatically.  Pages are added to pDone as they
41535:   ** are played back.
41536:   */
41537:   if( pSavepoint && !pagerUseWal(pPager) ){
41538:     iHdrOff = pSavepoint->iHdrOffset ? pSavepoint->iHdrOffset : szJ;
41539:     pPager->journalOff = pSavepoint->iOffset;
41540:     while( rc==SQLITE_OK && pPager->journalOff<iHdrOff ){
41541:       rc = pager_playback_one_page(pPager, &pPager->journalOff, pDone, 1, 1);
41542:     }
41543:     assert( rc!=SQLITE_DONE );
41544:   }else{
41545:     pPager->journalOff = 0;
41546:   }
41547: 
41548:   /* Continue rolling back records out of the main journal starting at
41549:   ** the first journal header seen and continuing until the effective end
41550:   ** of the main journal file.  Continue to skip out-of-range pages and
41551:   ** continue adding pages rolled back to pDone.
41552:   */
41553:   while( rc==SQLITE_OK && pPager->journalOff<szJ ){
41554:     u32 ii;            /* Loop counter */
41555:     u32 nJRec = 0;     /* Number of Journal Records */
41556:     u32 dummy;
41557:     rc = readJournalHdr(pPager, 0, szJ, &nJRec, &dummy);
41558:     assert( rc!=SQLITE_DONE );
41559: 
41560:     /*
41561:     ** The "pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff"
41562:     ** test is related to ticket #2565.  See the discussion in the
41563:     ** pager_playback() function for additional information.
41564:     */
41565:     if( nJRec==0 
41566:      && pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff
41567:     ){
41568:       nJRec = (u32)((szJ - pPager->journalOff)/JOURNAL_PG_SZ(pPager));
41569:     }
41570:     for(ii=0; rc==SQLITE_OK && ii<nJRec && pPager->journalOff<szJ; ii++){
41571:       rc = pager_playback_one_page(pPager, &pPager->journalOff, pDone, 1, 1);
41572:     }
41573:     assert( rc!=SQLITE_DONE );
41574:   }
41575:   assert( rc!=SQLITE_OK || pPager->journalOff>=szJ );
41576: 
41577:   /* Finally,  rollback pages from the sub-journal.  Page that were
41578:   ** previously rolled back out of the main journal (and are hence in pDone)
41579:   ** will be skipped.  Out-of-range pages are also skipped.
41580:   */
41581:   if( pSavepoint ){
41582:     u32 ii;            /* Loop counter */
41583:     i64 offset = (i64)pSavepoint->iSubRec*(4+pPager->pageSize);
41584: 
41585:     if( pagerUseWal(pPager) ){
41586:       rc = sqlite3WalSavepointUndo(pPager->pWal, pSavepoint->aWalData);
41587:     }
41588:     for(ii=pSavepoint->iSubRec; rc==SQLITE_OK && ii<pPager->nSubRec; ii++){
41589:       assert( offset==(i64)ii*(4+pPager->pageSize) );
41590:       rc = pager_playback_one_page(pPager, &offset, pDone, 0, 1);
41591:     }
41592:     assert( rc!=SQLITE_DONE );
41593:   }
41594: 
41595:   sqlite3BitvecDestroy(pDone);
41596:   if( rc==SQLITE_OK ){
41597:     pPager->journalOff = szJ;
41598:   }
41599: 
41600:   return rc;
41601: }
41602: 
41603: /*
41604: ** Change the maximum number of in-memory pages that are allowed.
41605: */
41606: SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){
41607:   sqlite3PcacheSetCachesize(pPager->pPCache, mxPage);
41608: }
41609: 
41610: /*
41611: ** Free as much memory as possible from the pager.
41612: */
41613: SQLITE_PRIVATE void sqlite3PagerShrink(Pager *pPager){
41614:   sqlite3PcacheShrink(pPager->pPCache);
41615: }
41616: 
41617: /*
41618: ** Adjust the robustness of the database to damage due to OS crashes
41619: ** or power failures by changing the number of syncs()s when writing
41620: ** the rollback journal.  There are three levels:
41621: **
41622: **    OFF       sqlite3OsSync() is never called.  This is the default
41623: **              for temporary and transient files.
41624: **
41625: **    NORMAL    The journal is synced once before writes begin on the
41626: **              database.  This is normally adequate protection, but
41627: **              it is theoretically possible, though very unlikely,
41628: **              that an inopertune power failure could leave the journal
41629: **              in a state which would cause damage to the database
41630: **              when it is rolled back.
41631: **
41632: **    FULL      The journal is synced twice before writes begin on the
41633: **              database (with some additional information - the nRec field
41634: **              of the journal header - being written in between the two
41635: **              syncs).  If we assume that writing a
41636: **              single disk sector is atomic, then this mode provides
41637: **              assurance that the journal will not be corrupted to the
41638: **              point of causing damage to the database during rollback.
41639: **
41640: ** The above is for a rollback-journal mode.  For WAL mode, OFF continues
41641: ** to mean that no syncs ever occur.  NORMAL means that the WAL is synced
41642: ** prior to the start of checkpoint and that the database file is synced
41643: ** at the conclusion of the checkpoint if the entire content of the WAL
41644: ** was written back into the database.  But no sync operations occur for
41645: ** an ordinary commit in NORMAL mode with WAL.  FULL means that the WAL
41646: ** file is synced following each commit operation, in addition to the
41647: ** syncs associated with NORMAL.
41648: **
41649: ** Do not confuse synchronous=FULL with SQLITE_SYNC_FULL.  The
41650: ** SQLITE_SYNC_FULL macro means to use the MacOSX-style full-fsync
41651: ** using fcntl(F_FULLFSYNC).  SQLITE_SYNC_NORMAL means to do an
41652: ** ordinary fsync() call.  There is no difference between SQLITE_SYNC_FULL
41653: ** and SQLITE_SYNC_NORMAL on platforms other than MacOSX.  But the
41654: ** synchronous=FULL versus synchronous=NORMAL setting determines when
41655: ** the xSync primitive is called and is relevant to all platforms.
41656: **
41657: ** Numeric values associated with these states are OFF==1, NORMAL=2,
41658: ** and FULL=3.
41659: */
41660: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
41661: SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(
41662:   Pager *pPager,        /* The pager to set safety level for */
41663:   int level,            /* PRAGMA synchronous.  1=OFF, 2=NORMAL, 3=FULL */  
41664:   int bFullFsync,       /* PRAGMA fullfsync */
41665:   int bCkptFullFsync    /* PRAGMA checkpoint_fullfsync */
41666: ){
41667:   assert( level>=1 && level<=3 );
41668:   pPager->noSync =  (level==1 || pPager->tempFile) ?1:0;
41669:   pPager->fullSync = (level==3 && !pPager->tempFile) ?1:0;
41670:   if( pPager->noSync ){
41671:     pPager->syncFlags = 0;
41672:     pPager->ckptSyncFlags = 0;
41673:   }else if( bFullFsync ){
41674:     pPager->syncFlags = SQLITE_SYNC_FULL;
41675:     pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
41676:   }else if( bCkptFullFsync ){
41677:     pPager->syncFlags = SQLITE_SYNC_NORMAL;
41678:     pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
41679:   }else{
41680:     pPager->syncFlags = SQLITE_SYNC_NORMAL;
41681:     pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
41682:   }
41683:   pPager->walSyncFlags = pPager->syncFlags;
41684:   if( pPager->fullSync ){
41685:     pPager->walSyncFlags |= WAL_SYNC_TRANSACTIONS;
41686:   }
41687: }
41688: #endif
41689: 
41690: /*
41691: ** The following global variable is incremented whenever the library
41692: ** attempts to open a temporary file.  This information is used for
41693: ** testing and analysis only.  
41694: */
41695: #ifdef SQLITE_TEST
41696: SQLITE_API int sqlite3_opentemp_count = 0;
41697: #endif
41698: 
41699: /*
41700: ** Open a temporary file.
41701: **
41702: ** Write the file descriptor into *pFile. Return SQLITE_OK on success 
41703: ** or some other error code if we fail. The OS will automatically 
41704: ** delete the temporary file when it is closed.
41705: **
41706: ** The flags passed to the VFS layer xOpen() call are those specified
41707: ** by parameter vfsFlags ORed with the following:
41708: **
41709: **     SQLITE_OPEN_READWRITE
41710: **     SQLITE_OPEN_CREATE
41711: **     SQLITE_OPEN_EXCLUSIVE
41712: **     SQLITE_OPEN_DELETEONCLOSE
41713: */
41714: static int pagerOpentemp(
41715:   Pager *pPager,        /* The pager object */
41716:   sqlite3_file *pFile,  /* Write the file descriptor here */
41717:   int vfsFlags          /* Flags passed through to the VFS */
41718: ){
41719:   int rc;               /* Return code */
41720: 
41721: #ifdef SQLITE_TEST
41722:   sqlite3_opentemp_count++;  /* Used for testing and analysis only */
41723: #endif
41724: 
41725:   vfsFlags |=  SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
41726:             SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE;
41727:   rc = sqlite3OsOpen(pPager->pVfs, 0, pFile, vfsFlags, 0);
41728:   assert( rc!=SQLITE_OK || isOpen(pFile) );
41729:   return rc;
41730: }
41731: 
41732: /*
41733: ** Set the busy handler function.
41734: **
41735: ** The pager invokes the busy-handler if sqlite3OsLock() returns 
41736: ** SQLITE_BUSY when trying to upgrade from no-lock to a SHARED lock,
41737: ** or when trying to upgrade from a RESERVED lock to an EXCLUSIVE 
41738: ** lock. It does *not* invoke the busy handler when upgrading from
41739: ** SHARED to RESERVED, or when upgrading from SHARED to EXCLUSIVE
41740: ** (which occurs during hot-journal rollback). Summary:
41741: **
41742: **   Transition                        | Invokes xBusyHandler
41743: **   --------------------------------------------------------
41744: **   NO_LOCK       -> SHARED_LOCK      | Yes
41745: **   SHARED_LOCK   -> RESERVED_LOCK    | No
41746: **   SHARED_LOCK   -> EXCLUSIVE_LOCK   | No
41747: **   RESERVED_LOCK -> EXCLUSIVE_LOCK   | Yes
41748: **
41749: ** If the busy-handler callback returns non-zero, the lock is 
41750: ** retried. If it returns zero, then the SQLITE_BUSY error is
41751: ** returned to the caller of the pager API function.
41752: */
41753: SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(
41754:   Pager *pPager,                       /* Pager object */
41755:   int (*xBusyHandler)(void *),         /* Pointer to busy-handler function */
41756:   void *pBusyHandlerArg                /* Argument to pass to xBusyHandler */
41757: ){  
41758:   pPager->xBusyHandler = xBusyHandler;
41759:   pPager->pBusyHandlerArg = pBusyHandlerArg;
41760: }
41761: 
41762: /*
41763: ** Change the page size used by the Pager object. The new page size 
41764: ** is passed in *pPageSize.
41765: **
41766: ** If the pager is in the error state when this function is called, it
41767: ** is a no-op. The value returned is the error state error code (i.e. 
41768: ** one of SQLITE_IOERR, an SQLITE_IOERR_xxx sub-code or SQLITE_FULL).
41769: **
41770: ** Otherwise, if all of the following are true:
41771: **
41772: **   * the new page size (value of *pPageSize) is valid (a power 
41773: **     of two between 512 and SQLITE_MAX_PAGE_SIZE, inclusive), and
41774: **
41775: **   * there are no outstanding page references, and
41776: **
41777: **   * the database is either not an in-memory database or it is
41778: **     an in-memory database that currently consists of zero pages.
41779: **
41780: ** then the pager object page size is set to *pPageSize.
41781: **
41782: ** If the page size is changed, then this function uses sqlite3PagerMalloc() 
41783: ** to obtain a new Pager.pTmpSpace buffer. If this allocation attempt 
41784: ** fails, SQLITE_NOMEM is returned and the page size remains unchanged. 
41785: ** In all other cases, SQLITE_OK is returned.
41786: **
41787: ** If the page size is not changed, either because one of the enumerated
41788: ** conditions above is not true, the pager was in error state when this
41789: ** function was called, or because the memory allocation attempt failed, 
41790: ** then *pPageSize is set to the old, retained page size before returning.
41791: */
41792: SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nReserve){
41793:   int rc = SQLITE_OK;
41794: 
41795:   /* It is not possible to do a full assert_pager_state() here, as this
41796:   ** function may be called from within PagerOpen(), before the state
41797:   ** of the Pager object is internally consistent.
41798:   **
41799:   ** At one point this function returned an error if the pager was in 
41800:   ** PAGER_ERROR state. But since PAGER_ERROR state guarantees that
41801:   ** there is at least one outstanding page reference, this function
41802:   ** is a no-op for that case anyhow.
41803:   */
41804: 
41805:   u32 pageSize = *pPageSize;
41806:   assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) );
41807:   if( (pPager->memDb==0 || pPager->dbSize==0)
41808:    && sqlite3PcacheRefCount(pPager->pPCache)==0 
41809:    && pageSize && pageSize!=(u32)pPager->pageSize 
41810:   ){
41811:     char *pNew = NULL;             /* New temp space */
41812:     i64 nByte = 0;
41813: 
41814:     if( pPager->eState>PAGER_OPEN && isOpen(pPager->fd) ){
41815:       rc = sqlite3OsFileSize(pPager->fd, &nByte);
41816:     }
41817:     if( rc==SQLITE_OK ){
41818:       pNew = (char *)sqlite3PageMalloc(pageSize);
41819:       if( !pNew ) rc = SQLITE_NOMEM;
41820:     }
41821: 
41822:     if( rc==SQLITE_OK ){
41823:       pager_reset(pPager);
41824:       pPager->dbSize = (Pgno)((nByte+pageSize-1)/pageSize);
41825:       pPager->pageSize = pageSize;
41826:       sqlite3PageFree(pPager->pTmpSpace);
41827:       pPager->pTmpSpace = pNew;
41828:       sqlite3PcacheSetPageSize(pPager->pPCache, pageSize);
41829:     }
41830:   }
41831: 
41832:   *pPageSize = pPager->pageSize;
41833:   if( rc==SQLITE_OK ){
41834:     if( nReserve<0 ) nReserve = pPager->nReserve;
41835:     assert( nReserve>=0 && nReserve<1000 );
41836:     pPager->nReserve = (i16)nReserve;
41837:     pagerReportSize(pPager);
41838:   }
41839:   return rc;
41840: }
41841: 
41842: /*
41843: ** Return a pointer to the "temporary page" buffer held internally
41844: ** by the pager.  This is a buffer that is big enough to hold the
41845: ** entire content of a database page.  This buffer is used internally
41846: ** during rollback and will be overwritten whenever a rollback
41847: ** occurs.  But other modules are free to use it too, as long as
41848: ** no rollbacks are happening.
41849: */
41850: SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager *pPager){
41851:   return pPager->pTmpSpace;
41852: }
41853: 
41854: /*
41855: ** Attempt to set the maximum database page count if mxPage is positive. 
41856: ** Make no changes if mxPage is zero or negative.  And never reduce the
41857: ** maximum page count below the current size of the database.
41858: **
41859: ** Regardless of mxPage, return the current maximum page count.
41860: */
41861: SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager *pPager, int mxPage){
41862:   if( mxPage>0 ){
41863:     pPager->mxPgno = mxPage;
41864:   }
41865:   assert( pPager->eState!=PAGER_OPEN );      /* Called only by OP_MaxPgcnt */
41866:   assert( pPager->mxPgno>=pPager->dbSize );  /* OP_MaxPgcnt enforces this */
41867:   return pPager->mxPgno;
41868: }
41869: 
41870: /*
41871: ** The following set of routines are used to disable the simulated
41872: ** I/O error mechanism.  These routines are used to avoid simulated
41873: ** errors in places where we do not care about errors.
41874: **
41875: ** Unless -DSQLITE_TEST=1 is used, these routines are all no-ops
41876: ** and generate no code.
41877: */
41878: #ifdef SQLITE_TEST
41879: SQLITE_API extern int sqlite3_io_error_pending;
41880: SQLITE_API extern int sqlite3_io_error_hit;
41881: static int saved_cnt;
41882: void disable_simulated_io_errors(void){
41883:   saved_cnt = sqlite3_io_error_pending;
41884:   sqlite3_io_error_pending = -1;
41885: }
41886: void enable_simulated_io_errors(void){
41887:   sqlite3_io_error_pending = saved_cnt;
41888: }
41889: #else
41890: # define disable_simulated_io_errors()
41891: # define enable_simulated_io_errors()
41892: #endif
41893: 
41894: /*
41895: ** Read the first N bytes from the beginning of the file into memory
41896: ** that pDest points to. 
41897: **
41898: ** If the pager was opened on a transient file (zFilename==""), or
41899: ** opened on a file less than N bytes in size, the output buffer is
41900: ** zeroed and SQLITE_OK returned. The rationale for this is that this 
41901: ** function is used to read database headers, and a new transient or
41902: ** zero sized database has a header than consists entirely of zeroes.
41903: **
41904: ** If any IO error apart from SQLITE_IOERR_SHORT_READ is encountered,
41905: ** the error code is returned to the caller and the contents of the
41906: ** output buffer undefined.
41907: */
41908: SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager *pPager, int N, unsigned char *pDest){
41909:   int rc = SQLITE_OK;
41910:   memset(pDest, 0, N);
41911:   assert( isOpen(pPager->fd) || pPager->tempFile );
41912: 
41913:   /* This routine is only called by btree immediately after creating
41914:   ** the Pager object.  There has not been an opportunity to transition
41915:   ** to WAL mode yet.
41916:   */
41917:   assert( !pagerUseWal(pPager) );
41918: 
41919:   if( isOpen(pPager->fd) ){
41920:     IOTRACE(("DBHDR %p 0 %d\n", pPager, N))
41921:     rc = sqlite3OsRead(pPager->fd, pDest, N, 0);
41922:     if( rc==SQLITE_IOERR_SHORT_READ ){
41923:       rc = SQLITE_OK;
41924:     }
41925:   }
41926:   return rc;
41927: }
41928: 
41929: /*
41930: ** This function may only be called when a read-transaction is open on
41931: ** the pager. It returns the total number of pages in the database.
41932: **
41933: ** However, if the file is between 1 and <page-size> bytes in size, then 
41934: ** this is considered a 1 page file.
41935: */
41936: SQLITE_PRIVATE void sqlite3PagerPagecount(Pager *pPager, int *pnPage){
41937:   assert( pPager->eState>=PAGER_READER );
41938:   assert( pPager->eState!=PAGER_WRITER_FINISHED );
41939:   *pnPage = (int)pPager->dbSize;
41940: }
41941: 
41942: 
41943: /*
41944: ** Try to obtain a lock of type locktype on the database file. If
41945: ** a similar or greater lock is already held, this function is a no-op
41946: ** (returning SQLITE_OK immediately).
41947: **
41948: ** Otherwise, attempt to obtain the lock using sqlite3OsLock(). Invoke 
41949: ** the busy callback if the lock is currently not available. Repeat 
41950: ** until the busy callback returns false or until the attempt to 
41951: ** obtain the lock succeeds.
41952: **
41953: ** Return SQLITE_OK on success and an error code if we cannot obtain
41954: ** the lock. If the lock is obtained successfully, set the Pager.state 
41955: ** variable to locktype before returning.
41956: */
41957: static int pager_wait_on_lock(Pager *pPager, int locktype){
41958:   int rc;                              /* Return code */
41959: 
41960:   /* Check that this is either a no-op (because the requested lock is 
41961:   ** already held, or one of the transistions that the busy-handler
41962:   ** may be invoked during, according to the comment above
41963:   ** sqlite3PagerSetBusyhandler().
41964:   */
41965:   assert( (pPager->eLock>=locktype)
41966:        || (pPager->eLock==NO_LOCK && locktype==SHARED_LOCK)
41967:        || (pPager->eLock==RESERVED_LOCK && locktype==EXCLUSIVE_LOCK)
41968:   );
41969: 
41970:   do {
41971:     rc = pagerLockDb(pPager, locktype);
41972:   }while( rc==SQLITE_BUSY && pPager->xBusyHandler(pPager->pBusyHandlerArg) );
41973:   return rc;
41974: }
41975: 
41976: /*
41977: ** Function assertTruncateConstraint(pPager) checks that one of the 
41978: ** following is true for all dirty pages currently in the page-cache:
41979: **
41980: **   a) The page number is less than or equal to the size of the 
41981: **      current database image, in pages, OR
41982: **
41983: **   b) if the page content were written at this time, it would not
41984: **      be necessary to write the current content out to the sub-journal
41985: **      (as determined by function subjRequiresPage()).
41986: **
41987: ** If the condition asserted by this function were not true, and the
41988: ** dirty page were to be discarded from the cache via the pagerStress()
41989: ** routine, pagerStress() would not write the current page content to
41990: ** the database file. If a savepoint transaction were rolled back after
41991: ** this happened, the correct behaviour would be to restore the current
41992: ** content of the page. However, since this content is not present in either
41993: ** the database file or the portion of the rollback journal and 
41994: ** sub-journal rolled back the content could not be restored and the
41995: ** database image would become corrupt. It is therefore fortunate that 
41996: ** this circumstance cannot arise.
41997: */
41998: #if defined(SQLITE_DEBUG)
41999: static void assertTruncateConstraintCb(PgHdr *pPg){
42000:   assert( pPg->flags&PGHDR_DIRTY );
42001:   assert( !subjRequiresPage(pPg) || pPg->pgno<=pPg->pPager->dbSize );
42002: }
42003: static void assertTruncateConstraint(Pager *pPager){
42004:   sqlite3PcacheIterateDirty(pPager->pPCache, assertTruncateConstraintCb);
42005: }
42006: #else
42007: # define assertTruncateConstraint(pPager)
42008: #endif
42009: 
42010: /*
42011: ** Truncate the in-memory database file image to nPage pages. This 
42012: ** function does not actually modify the database file on disk. It 
42013: ** just sets the internal state of the pager object so that the 
42014: ** truncation will be done when the current transaction is committed.
42015: */
42016: SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){
42017:   assert( pPager->dbSize>=nPage );
42018:   assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
42019:   pPager->dbSize = nPage;
42020:   assertTruncateConstraint(pPager);
42021: }
42022: 
42023: 
42024: /*
42025: ** This function is called before attempting a hot-journal rollback. It
42026: ** syncs the journal file to disk, then sets pPager->journalHdr to the
42027: ** size of the journal file so that the pager_playback() routine knows
42028: ** that the entire journal file has been synced.
42029: **
42030: ** Syncing a hot-journal to disk before attempting to roll it back ensures 
42031: ** that if a power-failure occurs during the rollback, the process that
42032: ** attempts rollback following system recovery sees the same journal
42033: ** content as this process.
42034: **
42035: ** If everything goes as planned, SQLITE_OK is returned. Otherwise, 
42036: ** an SQLite error code.
42037: */
42038: static int pagerSyncHotJournal(Pager *pPager){
42039:   int rc = SQLITE_OK;
42040:   if( !pPager->noSync ){
42041:     rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_NORMAL);
42042:   }
42043:   if( rc==SQLITE_OK ){
42044:     rc = sqlite3OsFileSize(pPager->jfd, &pPager->journalHdr);
42045:   }
42046:   return rc;
42047: }
42048: 
42049: /*
42050: ** Shutdown the page cache.  Free all memory and close all files.
42051: **
42052: ** If a transaction was in progress when this routine is called, that
42053: ** transaction is rolled back.  All outstanding pages are invalidated
42054: ** and their memory is freed.  Any attempt to use a page associated
42055: ** with this page cache after this function returns will likely
42056: ** result in a coredump.
42057: **
42058: ** This function always succeeds. If a transaction is active an attempt
42059: ** is made to roll it back. If an error occurs during the rollback 
42060: ** a hot journal may be left in the filesystem but no error is returned
42061: ** to the caller.
42062: */
42063: SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager){
42064:   u8 *pTmp = (u8 *)pPager->pTmpSpace;
42065: 
42066:   assert( assert_pager_state(pPager) );
42067:   disable_simulated_io_errors();
42068:   sqlite3BeginBenignMalloc();
42069:   /* pPager->errCode = 0; */
42070:   pPager->exclusiveMode = 0;
42071: #ifndef SQLITE_OMIT_WAL
42072:   sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags, pPager->pageSize, pTmp);
42073:   pPager->pWal = 0;
42074: #endif
42075:   pager_reset(pPager);
42076:   if( MEMDB ){
42077:     pager_unlock(pPager);
42078:   }else{
42079:     /* If it is open, sync the journal file before calling UnlockAndRollback.
42080:     ** If this is not done, then an unsynced portion of the open journal 
42081:     ** file may be played back into the database. If a power failure occurs 
42082:     ** while this is happening, the database could become corrupt.
42083:     **
42084:     ** If an error occurs while trying to sync the journal, shift the pager
42085:     ** into the ERROR state. This causes UnlockAndRollback to unlock the
42086:     ** database and close the journal file without attempting to roll it
42087:     ** back or finalize it. The next database user will have to do hot-journal
42088:     ** rollback before accessing the database file.
42089:     */
42090:     if( isOpen(pPager->jfd) ){
42091:       pager_error(pPager, pagerSyncHotJournal(pPager));
42092:     }
42093:     pagerUnlockAndRollback(pPager);
42094:   }
42095:   sqlite3EndBenignMalloc();
42096:   enable_simulated_io_errors();
42097:   PAGERTRACE(("CLOSE %d\n", PAGERID(pPager)));
42098:   IOTRACE(("CLOSE %p\n", pPager))
42099:   sqlite3OsClose(pPager->jfd);
42100:   sqlite3OsClose(pPager->fd);
42101:   sqlite3PageFree(pTmp);
42102:   sqlite3PcacheClose(pPager->pPCache);
42103: 
42104: #ifdef SQLITE_HAS_CODEC
42105:   if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);
42106: #endif
42107: 
42108:   assert( !pPager->aSavepoint && !pPager->pInJournal );
42109:   assert( !isOpen(pPager->jfd) && !isOpen(pPager->sjfd) );
42110: 
42111:   sqlite3_free(pPager);
42112:   return SQLITE_OK;
42113: }
42114: 
42115: #if !defined(NDEBUG) || defined(SQLITE_TEST)
42116: /*
42117: ** Return the page number for page pPg.
42118: */
42119: SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage *pPg){
42120:   return pPg->pgno;
42121: }
42122: #endif
42123: 
42124: /*
42125: ** Increment the reference count for page pPg.
42126: */
42127: SQLITE_PRIVATE void sqlite3PagerRef(DbPage *pPg){
42128:   sqlite3PcacheRef(pPg);
42129: }
42130: 
42131: /*
42132: ** Sync the journal. In other words, make sure all the pages that have
42133: ** been written to the journal have actually reached the surface of the
42134: ** disk and can be restored in the event of a hot-journal rollback.
42135: **
42136: ** If the Pager.noSync flag is set, then this function is a no-op.
42137: ** Otherwise, the actions required depend on the journal-mode and the 
42138: ** device characteristics of the the file-system, as follows:
42139: **
42140: **   * If the journal file is an in-memory journal file, no action need
42141: **     be taken.
42142: **
42143: **   * Otherwise, if the device does not support the SAFE_APPEND property,
42144: **     then the nRec field of the most recently written journal header
42145: **     is updated to contain the number of journal records that have
42146: **     been written following it. If the pager is operating in full-sync
42147: **     mode, then the journal file is synced before this field is updated.
42148: **
42149: **   * If the device does not support the SEQUENTIAL property, then 
42150: **     journal file is synced.
42151: **
42152: ** Or, in pseudo-code:
42153: **
42154: **   if( NOT <in-memory journal> ){
42155: **     if( NOT SAFE_APPEND ){
42156: **       if( <full-sync mode> ) xSync(<journal file>);
42157: **       <update nRec field>
42158: **     } 
42159: **     if( NOT SEQUENTIAL ) xSync(<journal file>);
42160: **   }
42161: **
42162: ** If successful, this routine clears the PGHDR_NEED_SYNC flag of every 
42163: ** page currently held in memory before returning SQLITE_OK. If an IO
42164: ** error is encountered, then the IO error code is returned to the caller.
42165: */
42166: static int syncJournal(Pager *pPager, int newHdr){
42167:   int rc;                         /* Return code */
42168: 
42169:   assert( pPager->eState==PAGER_WRITER_CACHEMOD
42170:        || pPager->eState==PAGER_WRITER_DBMOD
42171:   );
42172:   assert( assert_pager_state(pPager) );
42173:   assert( !pagerUseWal(pPager) );
42174: 
42175:   rc = sqlite3PagerExclusiveLock(pPager);
42176:   if( rc!=SQLITE_OK ) return rc;
42177: 
42178:   if( !pPager->noSync ){
42179:     assert( !pPager->tempFile );
42180:     if( isOpen(pPager->jfd) && pPager->journalMode!=PAGER_JOURNALMODE_MEMORY ){
42181:       const int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
42182:       assert( isOpen(pPager->jfd) );
42183: 
42184:       if( 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
42185:         /* This block deals with an obscure problem. If the last connection
42186:         ** that wrote to this database was operating in persistent-journal
42187:         ** mode, then the journal file may at this point actually be larger
42188:         ** than Pager.journalOff bytes. If the next thing in the journal
42189:         ** file happens to be a journal-header (written as part of the
42190:         ** previous connection's transaction), and a crash or power-failure 
42191:         ** occurs after nRec is updated but before this connection writes 
42192:         ** anything else to the journal file (or commits/rolls back its 
42193:         ** transaction), then SQLite may become confused when doing the 
42194:         ** hot-journal rollback following recovery. It may roll back all
42195:         ** of this connections data, then proceed to rolling back the old,
42196:         ** out-of-date data that follows it. Database corruption.
42197:         **
42198:         ** To work around this, if the journal file does appear to contain
42199:         ** a valid header following Pager.journalOff, then write a 0x00
42200:         ** byte to the start of it to prevent it from being recognized.
42201:         **
42202:         ** Variable iNextHdrOffset is set to the offset at which this
42203:         ** problematic header will occur, if it exists. aMagic is used 
42204:         ** as a temporary buffer to inspect the first couple of bytes of
42205:         ** the potential journal header.
42206:         */
42207:         i64 iNextHdrOffset;
42208:         u8 aMagic[8];
42209:         u8 zHeader[sizeof(aJournalMagic)+4];
42210: 
42211:         memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
42212:         put32bits(&zHeader[sizeof(aJournalMagic)], pPager->nRec);
42213: 
42214:         iNextHdrOffset = journalHdrOffset(pPager);
42215:         rc = sqlite3OsRead(pPager->jfd, aMagic, 8, iNextHdrOffset);
42216:         if( rc==SQLITE_OK && 0==memcmp(aMagic, aJournalMagic, 8) ){
42217:           static const u8 zerobyte = 0;
42218:           rc = sqlite3OsWrite(pPager->jfd, &zerobyte, 1, iNextHdrOffset);
42219:         }
42220:         if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){
42221:           return rc;
42222:         }
42223: 
42224:         /* Write the nRec value into the journal file header. If in
42225:         ** full-synchronous mode, sync the journal first. This ensures that
42226:         ** all data has really hit the disk before nRec is updated to mark
42227:         ** it as a candidate for rollback.
42228:         **
42229:         ** This is not required if the persistent media supports the
42230:         ** SAFE_APPEND property. Because in this case it is not possible 
42231:         ** for garbage data to be appended to the file, the nRec field
42232:         ** is populated with 0xFFFFFFFF when the journal header is written
42233:         ** and never needs to be updated.
42234:         */
42235:         if( pPager->fullSync && 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
42236:           PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
42237:           IOTRACE(("JSYNC %p\n", pPager))
42238:           rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags);
42239:           if( rc!=SQLITE_OK ) return rc;
42240:         }
42241:         IOTRACE(("JHDR %p %lld\n", pPager, pPager->journalHdr));
42242:         rc = sqlite3OsWrite(
42243:             pPager->jfd, zHeader, sizeof(zHeader), pPager->journalHdr
42244:         );
42245:         if( rc!=SQLITE_OK ) return rc;
42246:       }
42247:       if( 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
42248:         PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
42249:         IOTRACE(("JSYNC %p\n", pPager))
42250:         rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags| 
42251:           (pPager->syncFlags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0)
42252:         );
42253:         if( rc!=SQLITE_OK ) return rc;
42254:       }
42255: 
42256:       pPager->journalHdr = pPager->journalOff;
42257:       if( newHdr && 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
42258:         pPager->nRec = 0;
42259:         rc = writeJournalHdr(pPager);
42260:         if( rc!=SQLITE_OK ) return rc;
42261:       }
42262:     }else{
42263:       pPager->journalHdr = pPager->journalOff;
42264:     }
42265:   }
42266: 
42267:   /* Unless the pager is in noSync mode, the journal file was just 
42268:   ** successfully synced. Either way, clear the PGHDR_NEED_SYNC flag on 
42269:   ** all pages.
42270:   */
42271:   sqlite3PcacheClearSyncFlags(pPager->pPCache);
42272:   pPager->eState = PAGER_WRITER_DBMOD;
42273:   assert( assert_pager_state(pPager) );
42274:   return SQLITE_OK;
42275: }
42276: 
42277: /*
42278: ** The argument is the first in a linked list of dirty pages connected
42279: ** by the PgHdr.pDirty pointer. This function writes each one of the
42280: ** in-memory pages in the list to the database file. The argument may
42281: ** be NULL, representing an empty list. In this case this function is
42282: ** a no-op.
42283: **
42284: ** The pager must hold at least a RESERVED lock when this function
42285: ** is called. Before writing anything to the database file, this lock
42286: ** is upgraded to an EXCLUSIVE lock. If the lock cannot be obtained,
42287: ** SQLITE_BUSY is returned and no data is written to the database file.
42288: ** 
42289: ** If the pager is a temp-file pager and the actual file-system file
42290: ** is not yet open, it is created and opened before any data is 
42291: ** written out.
42292: **
42293: ** Once the lock has been upgraded and, if necessary, the file opened,
42294: ** the pages are written out to the database file in list order. Writing
42295: ** a page is skipped if it meets either of the following criteria:
42296: **
42297: **   * The page number is greater than Pager.dbSize, or
42298: **   * The PGHDR_DONT_WRITE flag is set on the page.
42299: **
42300: ** If writing out a page causes the database file to grow, Pager.dbFileSize
42301: ** is updated accordingly. If page 1 is written out, then the value cached
42302: ** in Pager.dbFileVers[] is updated to match the new value stored in
42303: ** the database file.
42304: **
42305: ** If everything is successful, SQLITE_OK is returned. If an IO error 
42306: ** occurs, an IO error code is returned. Or, if the EXCLUSIVE lock cannot
42307: ** be obtained, SQLITE_BUSY is returned.
42308: */
42309: static int pager_write_pagelist(Pager *pPager, PgHdr *pList){
42310:   int rc = SQLITE_OK;                  /* Return code */
42311: 
42312:   /* This function is only called for rollback pagers in WRITER_DBMOD state. */
42313:   assert( !pagerUseWal(pPager) );
42314:   assert( pPager->eState==PAGER_WRITER_DBMOD );
42315:   assert( pPager->eLock==EXCLUSIVE_LOCK );
42316: 
42317:   /* If the file is a temp-file has not yet been opened, open it now. It
42318:   ** is not possible for rc to be other than SQLITE_OK if this branch
42319:   ** is taken, as pager_wait_on_lock() is a no-op for temp-files.
42320:   */
42321:   if( !isOpen(pPager->fd) ){
42322:     assert( pPager->tempFile && rc==SQLITE_OK );
42323:     rc = pagerOpentemp(pPager, pPager->fd, pPager->vfsFlags);
42324:   }
42325: 
42326:   /* Before the first write, give the VFS a hint of what the final
42327:   ** file size will be.
42328:   */
42329:   assert( rc!=SQLITE_OK || isOpen(pPager->fd) );
42330:   if( rc==SQLITE_OK && pPager->dbSize>pPager->dbHintSize ){
42331:     sqlite3_int64 szFile = pPager->pageSize * (sqlite3_int64)pPager->dbSize;
42332:     sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_SIZE_HINT, &szFile);
42333:     pPager->dbHintSize = pPager->dbSize;
42334:   }
42335: 
42336:   while( rc==SQLITE_OK && pList ){
42337:     Pgno pgno = pList->pgno;
42338: 
42339:     /* If there are dirty pages in the page cache with page numbers greater
42340:     ** than Pager.dbSize, this means sqlite3PagerTruncateImage() was called to
42341:     ** make the file smaller (presumably by auto-vacuum code). Do not write
42342:     ** any such pages to the file.
42343:     **
42344:     ** Also, do not write out any page that has the PGHDR_DONT_WRITE flag
42345:     ** set (set by sqlite3PagerDontWrite()).
42346:     */
42347:     if( pgno<=pPager->dbSize && 0==(pList->flags&PGHDR_DONT_WRITE) ){
42348:       i64 offset = (pgno-1)*(i64)pPager->pageSize;   /* Offset to write */
42349:       char *pData;                                   /* Data to write */    
42350: 
42351:       assert( (pList->flags&PGHDR_NEED_SYNC)==0 );
42352:       if( pList->pgno==1 ) pager_write_changecounter(pList);
42353: 
42354:       /* Encode the database */
42355:       CODEC2(pPager, pList->pData, pgno, 6, return SQLITE_NOMEM, pData);
42356: 
42357:       /* Write out the page data. */
42358:       rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize, offset);
42359: 
42360:       /* If page 1 was just written, update Pager.dbFileVers to match
42361:       ** the value now stored in the database file. If writing this 
42362:       ** page caused the database file to grow, update dbFileSize. 
42363:       */
42364:       if( pgno==1 ){
42365:         memcpy(&pPager->dbFileVers, &pData[24], sizeof(pPager->dbFileVers));
42366:       }
42367:       if( pgno>pPager->dbFileSize ){
42368:         pPager->dbFileSize = pgno;
42369:       }
42370: 
42371:       /* Update any backup objects copying the contents of this pager. */
42372:       sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)pList->pData);
42373: 
42374:       PAGERTRACE(("STORE %d page %d hash(%08x)\n",
42375:                    PAGERID(pPager), pgno, pager_pagehash(pList)));
42376:       IOTRACE(("PGOUT %p %d\n", pPager, pgno));
42377:       PAGER_INCR(sqlite3_pager_writedb_count);
42378:       PAGER_INCR(pPager->nWrite);
42379:     }else{
42380:       PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno));
42381:     }
42382:     pager_set_pagehash(pList);
42383:     pList = pList->pDirty;
42384:   }
42385: 
42386:   return rc;
42387: }
42388: 
42389: /*
42390: ** Ensure that the sub-journal file is open. If it is already open, this 
42391: ** function is a no-op.
42392: **
42393: ** SQLITE_OK is returned if everything goes according to plan. An 
42394: ** SQLITE_IOERR_XXX error code is returned if a call to sqlite3OsOpen() 
42395: ** fails.
42396: */
42397: static int openSubJournal(Pager *pPager){
42398:   int rc = SQLITE_OK;
42399:   if( !isOpen(pPager->sjfd) ){
42400:     if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY || pPager->subjInMemory ){
42401:       sqlite3MemJournalOpen(pPager->sjfd);
42402:     }else{
42403:       rc = pagerOpentemp(pPager, pPager->sjfd, SQLITE_OPEN_SUBJOURNAL);
42404:     }
42405:   }
42406:   return rc;
42407: }
42408: 
42409: /*
42410: ** Append a record of the current state of page pPg to the sub-journal. 
42411: ** It is the callers responsibility to use subjRequiresPage() to check 
42412: ** that it is really required before calling this function.
42413: **
42414: ** If successful, set the bit corresponding to pPg->pgno in the bitvecs
42415: ** for all open savepoints before returning.
42416: **
42417: ** This function returns SQLITE_OK if everything is successful, an IO
42418: ** error code if the attempt to write to the sub-journal fails, or 
42419: ** SQLITE_NOMEM if a malloc fails while setting a bit in a savepoint
42420: ** bitvec.
42421: */
42422: static int subjournalPage(PgHdr *pPg){
42423:   int rc = SQLITE_OK;
42424:   Pager *pPager = pPg->pPager;
42425:   if( pPager->journalMode!=PAGER_JOURNALMODE_OFF ){
42426: 
42427:     /* Open the sub-journal, if it has not already been opened */
42428:     assert( pPager->useJournal );
42429:     assert( isOpen(pPager->jfd) || pagerUseWal(pPager) );
42430:     assert( isOpen(pPager->sjfd) || pPager->nSubRec==0 );
42431:     assert( pagerUseWal(pPager) 
42432:          || pageInJournal(pPg) 
42433:          || pPg->pgno>pPager->dbOrigSize 
42434:     );
42435:     rc = openSubJournal(pPager);
42436: 
42437:     /* If the sub-journal was opened successfully (or was already open),
42438:     ** write the journal record into the file.  */
42439:     if( rc==SQLITE_OK ){
42440:       void *pData = pPg->pData;
42441:       i64 offset = (i64)pPager->nSubRec*(4+pPager->pageSize);
42442:       char *pData2;
42443:   
42444:       CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
42445:       PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno));
42446:       rc = write32bits(pPager->sjfd, offset, pPg->pgno);
42447:       if( rc==SQLITE_OK ){
42448:         rc = sqlite3OsWrite(pPager->sjfd, pData2, pPager->pageSize, offset+4);
42449:       }
42450:     }
42451:   }
42452:   if( rc==SQLITE_OK ){
42453:     pPager->nSubRec++;
42454:     assert( pPager->nSavepoint>0 );
42455:     rc = addToSavepointBitvecs(pPager, pPg->pgno);
42456:   }
42457:   return rc;
42458: }
42459: 
42460: /*
42461: ** This function is called by the pcache layer when it has reached some
42462: ** soft memory limit. The first argument is a pointer to a Pager object
42463: ** (cast as a void*). The pager is always 'purgeable' (not an in-memory
42464: ** database). The second argument is a reference to a page that is 
42465: ** currently dirty but has no outstanding references. The page
42466: ** is always associated with the Pager object passed as the first 
42467: ** argument.
42468: **
42469: ** The job of this function is to make pPg clean by writing its contents
42470: ** out to the database file, if possible. This may involve syncing the
42471: ** journal file. 
42472: **
42473: ** If successful, sqlite3PcacheMakeClean() is called on the page and
42474: ** SQLITE_OK returned. If an IO error occurs while trying to make the
42475: ** page clean, the IO error code is returned. If the page cannot be
42476: ** made clean for some other reason, but no error occurs, then SQLITE_OK
42477: ** is returned by sqlite3PcacheMakeClean() is not called.
42478: */
42479: static int pagerStress(void *p, PgHdr *pPg){
42480:   Pager *pPager = (Pager *)p;
42481:   int rc = SQLITE_OK;
42482: 
42483:   assert( pPg->pPager==pPager );
42484:   assert( pPg->flags&PGHDR_DIRTY );
42485: 
42486:   /* The doNotSyncSpill flag is set during times when doing a sync of
42487:   ** journal (and adding a new header) is not allowed.  This occurs
42488:   ** during calls to sqlite3PagerWrite() while trying to journal multiple
42489:   ** pages belonging to the same sector.
42490:   **
42491:   ** The doNotSpill flag inhibits all cache spilling regardless of whether
42492:   ** or not a sync is required.  This is set during a rollback.
42493:   **
42494:   ** Spilling is also prohibited when in an error state since that could
42495:   ** lead to database corruption.   In the current implementaton it 
42496:   ** is impossible for sqlite3PcacheFetch() to be called with createFlag==1
42497:   ** while in the error state, hence it is impossible for this routine to
42498:   ** be called in the error state.  Nevertheless, we include a NEVER()
42499:   ** test for the error state as a safeguard against future changes.
42500:   */
42501:   if( NEVER(pPager->errCode) ) return SQLITE_OK;
42502:   if( pPager->doNotSpill ) return SQLITE_OK;
42503:   if( pPager->doNotSyncSpill && (pPg->flags & PGHDR_NEED_SYNC)!=0 ){
42504:     return SQLITE_OK;
42505:   }
42506: 
42507:   pPg->pDirty = 0;
42508:   if( pagerUseWal(pPager) ){
42509:     /* Write a single frame for this page to the log. */
42510:     if( subjRequiresPage(pPg) ){ 
42511:       rc = subjournalPage(pPg); 
42512:     }
42513:     if( rc==SQLITE_OK ){
42514:       rc = pagerWalFrames(pPager, pPg, 0, 0);
42515:     }
42516:   }else{
42517:   
42518:     /* Sync the journal file if required. */
42519:     if( pPg->flags&PGHDR_NEED_SYNC 
42520:      || pPager->eState==PAGER_WRITER_CACHEMOD
42521:     ){
42522:       rc = syncJournal(pPager, 1);
42523:     }
42524:   
42525:     /* If the page number of this page is larger than the current size of
42526:     ** the database image, it may need to be written to the sub-journal.
42527:     ** This is because the call to pager_write_pagelist() below will not
42528:     ** actually write data to the file in this case.
42529:     **
42530:     ** Consider the following sequence of events:
42531:     **
42532:     **   BEGIN;
42533:     **     <journal page X>
42534:     **     <modify page X>
42535:     **     SAVEPOINT sp;
42536:     **       <shrink database file to Y pages>
42537:     **       pagerStress(page X)
42538:     **     ROLLBACK TO sp;
42539:     **
42540:     ** If (X>Y), then when pagerStress is called page X will not be written
42541:     ** out to the database file, but will be dropped from the cache. Then,
42542:     ** following the "ROLLBACK TO sp" statement, reading page X will read
42543:     ** data from the database file. This will be the copy of page X as it
42544:     ** was when the transaction started, not as it was when "SAVEPOINT sp"
42545:     ** was executed.
42546:     **
42547:     ** The solution is to write the current data for page X into the 
42548:     ** sub-journal file now (if it is not already there), so that it will
42549:     ** be restored to its current value when the "ROLLBACK TO sp" is 
42550:     ** executed.
42551:     */
42552:     if( NEVER(
42553:         rc==SQLITE_OK && pPg->pgno>pPager->dbSize && subjRequiresPage(pPg)
42554:     ) ){
42555:       rc = subjournalPage(pPg);
42556:     }
42557:   
42558:     /* Write the contents of the page out to the database file. */
42559:     if( rc==SQLITE_OK ){
42560:       assert( (pPg->flags&PGHDR_NEED_SYNC)==0 );
42561:       rc = pager_write_pagelist(pPager, pPg);
42562:     }
42563:   }
42564: 
42565:   /* Mark the page as clean. */
42566:   if( rc==SQLITE_OK ){
42567:     PAGERTRACE(("STRESS %d page %d\n", PAGERID(pPager), pPg->pgno));
42568:     sqlite3PcacheMakeClean(pPg);
42569:   }
42570: 
42571:   return pager_error(pPager, rc); 
42572: }
42573: 
42574: 
42575: /*
42576: ** Allocate and initialize a new Pager object and put a pointer to it
42577: ** in *ppPager. The pager should eventually be freed by passing it
42578: ** to sqlite3PagerClose().
42579: **
42580: ** The zFilename argument is the path to the database file to open.
42581: ** If zFilename is NULL then a randomly-named temporary file is created
42582: ** and used as the file to be cached. Temporary files are be deleted
42583: ** automatically when they are closed. If zFilename is ":memory:" then 
42584: ** all information is held in cache. It is never written to disk. 
42585: ** This can be used to implement an in-memory database.
42586: **
42587: ** The nExtra parameter specifies the number of bytes of space allocated
42588: ** along with each page reference. This space is available to the user
42589: ** via the sqlite3PagerGetExtra() API.
42590: **
42591: ** The flags argument is used to specify properties that affect the
42592: ** operation of the pager. It should be passed some bitwise combination
42593: ** of the PAGER_OMIT_JOURNAL and PAGER_NO_READLOCK flags.
42594: **
42595: ** The vfsFlags parameter is a bitmask to pass to the flags parameter
42596: ** of the xOpen() method of the supplied VFS when opening files. 
42597: **
42598: ** If the pager object is allocated and the specified file opened 
42599: ** successfully, SQLITE_OK is returned and *ppPager set to point to
42600: ** the new pager object. If an error occurs, *ppPager is set to NULL
42601: ** and error code returned. This function may return SQLITE_NOMEM
42602: ** (sqlite3Malloc() is used to allocate memory), SQLITE_CANTOPEN or 
42603: ** various SQLITE_IO_XXX errors.
42604: */
42605: SQLITE_PRIVATE int sqlite3PagerOpen(
42606:   sqlite3_vfs *pVfs,       /* The virtual file system to use */
42607:   Pager **ppPager,         /* OUT: Return the Pager structure here */
42608:   const char *zFilename,   /* Name of the database file to open */
42609:   int nExtra,              /* Extra bytes append to each in-memory page */
42610:   int flags,               /* flags controlling this file */
42611:   int vfsFlags,            /* flags passed through to sqlite3_vfs.xOpen() */
42612:   void (*xReinit)(DbPage*) /* Function to reinitialize pages */
42613: ){
42614:   u8 *pPtr;
42615:   Pager *pPager = 0;       /* Pager object to allocate and return */
42616:   int rc = SQLITE_OK;      /* Return code */
42617:   int tempFile = 0;        /* True for temp files (incl. in-memory files) */
42618:   int memDb = 0;           /* True if this is an in-memory file */
42619:   int readOnly = 0;        /* True if this is a read-only file */
42620:   int journalFileSize;     /* Bytes to allocate for each journal fd */
42621:   char *zPathname = 0;     /* Full path to database file */
42622:   int nPathname = 0;       /* Number of bytes in zPathname */
42623:   int useJournal = (flags & PAGER_OMIT_JOURNAL)==0; /* False to omit journal */
42624:   int noReadlock = (flags & PAGER_NO_READLOCK)!=0;  /* True to omit read-lock */
42625:   int pcacheSize = sqlite3PcacheSize();       /* Bytes to allocate for PCache */
42626:   u32 szPageDflt = SQLITE_DEFAULT_PAGE_SIZE;  /* Default page size */
42627:   const char *zUri = 0;    /* URI args to copy */
42628:   int nUri = 0;            /* Number of bytes of URI args at *zUri */
42629: 
42630:   /* Figure out how much space is required for each journal file-handle
42631:   ** (there are two of them, the main journal and the sub-journal). This
42632:   ** is the maximum space required for an in-memory journal file handle 
42633:   ** and a regular journal file-handle. Note that a "regular journal-handle"
42634:   ** may be a wrapper capable of caching the first portion of the journal
42635:   ** file in memory to implement the atomic-write optimization (see 
42636:   ** source file journal.c).
42637:   */
42638:   if( sqlite3JournalSize(pVfs)>sqlite3MemJournalSize() ){
42639:     journalFileSize = ROUND8(sqlite3JournalSize(pVfs));
42640:   }else{
42641:     journalFileSize = ROUND8(sqlite3MemJournalSize());
42642:   }
42643: 
42644:   /* Set the output variable to NULL in case an error occurs. */
42645:   *ppPager = 0;
42646: 
42647: #ifndef SQLITE_OMIT_MEMORYDB
42648:   if( flags & PAGER_MEMORY ){
42649:     memDb = 1;
42650:     zFilename = 0;
42651:   }
42652: #endif
42653: 
42654:   /* Compute and store the full pathname in an allocated buffer pointed
42655:   ** to by zPathname, length nPathname. Or, if this is a temporary file,
42656:   ** leave both nPathname and zPathname set to 0.
42657:   */
42658:   if( zFilename && zFilename[0] ){
42659:     const char *z;
42660:     nPathname = pVfs->mxPathname+1;
42661:     zPathname = sqlite3Malloc(nPathname*2);
42662:     if( zPathname==0 ){
42663:       return SQLITE_NOMEM;
42664:     }
42665:     zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */
42666:     rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname);
42667:     nPathname = sqlite3Strlen30(zPathname);
42668:     z = zUri = &zFilename[sqlite3Strlen30(zFilename)+1];
42669:     while( *z ){
42670:       z += sqlite3Strlen30(z)+1;
42671:       z += sqlite3Strlen30(z)+1;
42672:     }
42673:     nUri = (int)(&z[1] - zUri);
42674:     assert( nUri>=0 );
42675:     if( rc==SQLITE_OK && nPathname+8>pVfs->mxPathname ){
42676:       /* This branch is taken when the journal path required by
42677:       ** the database being opened will be more than pVfs->mxPathname
42678:       ** bytes in length. This means the database cannot be opened,
42679:       ** as it will not be possible to open the journal file or even
42680:       ** check for a hot-journal before reading.
42681:       */
42682:       rc = SQLITE_CANTOPEN_BKPT;
42683:     }
42684:     if( rc!=SQLITE_OK ){
42685:       sqlite3_free(zPathname);
42686:       return rc;
42687:     }
42688:   }
42689: 
42690:   /* Allocate memory for the Pager structure, PCache object, the
42691:   ** three file descriptors, the database file name and the journal 
42692:   ** file name. The layout in memory is as follows:
42693:   **
42694:   **     Pager object                    (sizeof(Pager) bytes)
42695:   **     PCache object                   (sqlite3PcacheSize() bytes)
42696:   **     Database file handle            (pVfs->szOsFile bytes)
42697:   **     Sub-journal file handle         (journalFileSize bytes)
42698:   **     Main journal file handle        (journalFileSize bytes)
42699:   **     Database file name              (nPathname+1 bytes)
42700:   **     Journal file name               (nPathname+8+1 bytes)
42701:   */
42702:   pPtr = (u8 *)sqlite3MallocZero(
42703:     ROUND8(sizeof(*pPager)) +      /* Pager structure */
42704:     ROUND8(pcacheSize) +           /* PCache object */
42705:     ROUND8(pVfs->szOsFile) +       /* The main db file */
42706:     journalFileSize * 2 +          /* The two journal files */ 
42707:     nPathname + 1 + nUri +         /* zFilename */
42708:     nPathname + 8 + 2              /* zJournal */
42709: #ifndef SQLITE_OMIT_WAL
42710:     + nPathname + 4 + 2            /* zWal */
42711: #endif
42712:   );
42713:   assert( EIGHT_BYTE_ALIGNMENT(SQLITE_INT_TO_PTR(journalFileSize)) );
42714:   if( !pPtr ){
42715:     sqlite3_free(zPathname);
42716:     return SQLITE_NOMEM;
42717:   }
42718:   pPager =              (Pager*)(pPtr);
42719:   pPager->pPCache =    (PCache*)(pPtr += ROUND8(sizeof(*pPager)));
42720:   pPager->fd =   (sqlite3_file*)(pPtr += ROUND8(pcacheSize));
42721:   pPager->sjfd = (sqlite3_file*)(pPtr += ROUND8(pVfs->szOsFile));
42722:   pPager->jfd =  (sqlite3_file*)(pPtr += journalFileSize);
42723:   pPager->zFilename =    (char*)(pPtr += journalFileSize);
42724:   assert( EIGHT_BYTE_ALIGNMENT(pPager->jfd) );
42725: 
42726:   /* Fill in the Pager.zFilename and Pager.zJournal buffers, if required. */
42727:   if( zPathname ){
42728:     assert( nPathname>0 );
42729:     pPager->zJournal =   (char*)(pPtr += nPathname + 1 + nUri);
42730:     memcpy(pPager->zFilename, zPathname, nPathname);
42731:     memcpy(&pPager->zFilename[nPathname+1], zUri, nUri);
42732:     memcpy(pPager->zJournal, zPathname, nPathname);
42733:     memcpy(&pPager->zJournal[nPathname], "-journal\000", 8+1);
42734:     sqlite3FileSuffix3(pPager->zFilename, pPager->zJournal);
42735: #ifndef SQLITE_OMIT_WAL
42736:     pPager->zWal = &pPager->zJournal[nPathname+8+1];
42737:     memcpy(pPager->zWal, zPathname, nPathname);
42738:     memcpy(&pPager->zWal[nPathname], "-wal\000", 4+1);
42739:     sqlite3FileSuffix3(pPager->zFilename, pPager->zWal);
42740: #endif
42741:     sqlite3_free(zPathname);
42742:   }
42743:   pPager->pVfs = pVfs;
42744:   pPager->vfsFlags = vfsFlags;
42745: 
42746:   /* Open the pager file.
42747:   */
42748:   if( zFilename && zFilename[0] ){
42749:     int fout = 0;                    /* VFS flags returned by xOpen() */
42750:     rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout);
42751:     assert( !memDb );
42752:     readOnly = (fout&SQLITE_OPEN_READONLY);
42753: 
42754:     /* If the file was successfully opened for read/write access,
42755:     ** choose a default page size in case we have to create the
42756:     ** database file. The default page size is the maximum of:
42757:     **
42758:     **    + SQLITE_DEFAULT_PAGE_SIZE,
42759:     **    + The value returned by sqlite3OsSectorSize()
42760:     **    + The largest page size that can be written atomically.
42761:     */
42762:     if( rc==SQLITE_OK && !readOnly ){
42763:       setSectorSize(pPager);
42764:       assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE);
42765:       if( szPageDflt<pPager->sectorSize ){
42766:         if( pPager->sectorSize>SQLITE_MAX_DEFAULT_PAGE_SIZE ){
42767:           szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE;
42768:         }else{
42769:           szPageDflt = (u32)pPager->sectorSize;
42770:         }
42771:       }
42772: #ifdef SQLITE_ENABLE_ATOMIC_WRITE
42773:       {
42774:         int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
42775:         int ii;
42776:         assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
42777:         assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
42778:         assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536);
42779:         for(ii=szPageDflt; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){
42780:           if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ){
42781:             szPageDflt = ii;
42782:           }
42783:         }
42784:       }
42785: #endif
42786:     }
42787:   }else{
42788:     /* If a temporary file is requested, it is not opened immediately.
42789:     ** In this case we accept the default page size and delay actually
42790:     ** opening the file until the first call to OsWrite().
42791:     **
42792:     ** This branch is also run for an in-memory database. An in-memory
42793:     ** database is the same as a temp-file that is never written out to
42794:     ** disk and uses an in-memory rollback journal.
42795:     */ 
42796:     tempFile = 1;
42797:     pPager->eState = PAGER_READER;
42798:     pPager->eLock = EXCLUSIVE_LOCK;
42799:     readOnly = (vfsFlags&SQLITE_OPEN_READONLY);
42800:   }
42801: 
42802:   /* The following call to PagerSetPagesize() serves to set the value of 
42803:   ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer.
42804:   */
42805:   if( rc==SQLITE_OK ){
42806:     assert( pPager->memDb==0 );
42807:     rc = sqlite3PagerSetPagesize(pPager, &szPageDflt, -1);
42808:     testcase( rc!=SQLITE_OK );
42809:   }
42810: 
42811:   /* If an error occurred in either of the blocks above, free the 
42812:   ** Pager structure and close the file.
42813:   */
42814:   if( rc!=SQLITE_OK ){
42815:     assert( !pPager->pTmpSpace );
42816:     sqlite3OsClose(pPager->fd);
42817:     sqlite3_free(pPager);
42818:     return rc;
42819:   }
42820: 
42821:   /* Initialize the PCache object. */
42822:   assert( nExtra<1000 );
42823:   nExtra = ROUND8(nExtra);
42824:   sqlite3PcacheOpen(szPageDflt, nExtra, !memDb,
42825:                     !memDb?pagerStress:0, (void *)pPager, pPager->pPCache);
42826: 
42827:   PAGERTRACE(("OPEN %d %s\n", FILEHANDLEID(pPager->fd), pPager->zFilename));
42828:   IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename))
42829: 
42830:   pPager->useJournal = (u8)useJournal;
42831:   pPager->noReadlock = (noReadlock && readOnly) ?1:0;
42832:   /* pPager->stmtOpen = 0; */
42833:   /* pPager->stmtInUse = 0; */
42834:   /* pPager->nRef = 0; */
42835:   /* pPager->stmtSize = 0; */
42836:   /* pPager->stmtJSize = 0; */
42837:   /* pPager->nPage = 0; */
42838:   pPager->mxPgno = SQLITE_MAX_PAGE_COUNT;
42839:   /* pPager->state = PAGER_UNLOCK; */
42840: #if 0
42841:   assert( pPager->state == (tempFile ? PAGER_EXCLUSIVE : PAGER_UNLOCK) );
42842: #endif
42843:   /* pPager->errMask = 0; */
42844:   pPager->tempFile = (u8)tempFile;
42845:   assert( tempFile==PAGER_LOCKINGMODE_NORMAL 
42846:           || tempFile==PAGER_LOCKINGMODE_EXCLUSIVE );
42847:   assert( PAGER_LOCKINGMODE_EXCLUSIVE==1 );
42848:   pPager->exclusiveMode = (u8)tempFile; 
42849:   pPager->changeCountDone = pPager->tempFile;
42850:   pPager->memDb = (u8)memDb;
42851:   pPager->readOnly = (u8)readOnly;
42852:   assert( useJournal || pPager->tempFile );
42853:   pPager->noSync = pPager->tempFile;
42854:   if( pPager->noSync ){
42855:     assert( pPager->fullSync==0 );
42856:     assert( pPager->syncFlags==0 );
42857:     assert( pPager->walSyncFlags==0 );
42858:     assert( pPager->ckptSyncFlags==0 );
42859:   }else{
42860:     pPager->fullSync = 1;
42861:     pPager->syncFlags = SQLITE_SYNC_NORMAL;
42862:     pPager->walSyncFlags = SQLITE_SYNC_NORMAL | WAL_SYNC_TRANSACTIONS;
42863:     pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
42864:   }
42865:   /* pPager->pFirst = 0; */
42866:   /* pPager->pFirstSynced = 0; */
42867:   /* pPager->pLast = 0; */
42868:   pPager->nExtra = (u16)nExtra;
42869:   pPager->journalSizeLimit = SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT;
42870:   assert( isOpen(pPager->fd) || tempFile );
42871:   setSectorSize(pPager);
42872:   if( !useJournal ){
42873:     pPager->journalMode = PAGER_JOURNALMODE_OFF;
42874:   }else if( memDb ){
42875:     pPager->journalMode = PAGER_JOURNALMODE_MEMORY;
42876:   }
42877:   /* pPager->xBusyHandler = 0; */
42878:   /* pPager->pBusyHandlerArg = 0; */
42879:   pPager->xReiniter = xReinit;
42880:   /* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */
42881: 
42882:   *ppPager = pPager;
42883:   return SQLITE_OK;
42884: }
42885: 
42886: 
42887: 
42888: /*
42889: ** This function is called after transitioning from PAGER_UNLOCK to
42890: ** PAGER_SHARED state. It tests if there is a hot journal present in
42891: ** the file-system for the given pager. A hot journal is one that 
42892: ** needs to be played back. According to this function, a hot-journal
42893: ** file exists if the following criteria are met:
42894: **
42895: **   * The journal file exists in the file system, and
42896: **   * No process holds a RESERVED or greater lock on the database file, and
42897: **   * The database file itself is greater than 0 bytes in size, and
42898: **   * The first byte of the journal file exists and is not 0x00.
42899: **
42900: ** If the current size of the database file is 0 but a journal file
42901: ** exists, that is probably an old journal left over from a prior
42902: ** database with the same name. In this case the journal file is
42903: ** just deleted using OsDelete, *pExists is set to 0 and SQLITE_OK
42904: ** is returned.
42905: **
42906: ** This routine does not check if there is a master journal filename
42907: ** at the end of the file. If there is, and that master journal file
42908: ** does not exist, then the journal file is not really hot. In this
42909: ** case this routine will return a false-positive. The pager_playback()
42910: ** routine will discover that the journal file is not really hot and 
42911: ** will not roll it back. 
42912: **
42913: ** If a hot-journal file is found to exist, *pExists is set to 1 and 
42914: ** SQLITE_OK returned. If no hot-journal file is present, *pExists is
42915: ** set to 0 and SQLITE_OK returned. If an IO error occurs while trying
42916: ** to determine whether or not a hot-journal file exists, the IO error
42917: ** code is returned and the value of *pExists is undefined.
42918: */
42919: static int hasHotJournal(Pager *pPager, int *pExists){
42920:   sqlite3_vfs * const pVfs = pPager->pVfs;
42921:   int rc = SQLITE_OK;           /* Return code */
42922:   int exists = 1;               /* True if a journal file is present */
42923:   int jrnlOpen = !!isOpen(pPager->jfd);
42924: 
42925:   assert( pPager->useJournal );
42926:   assert( isOpen(pPager->fd) );
42927:   assert( pPager->eState==PAGER_OPEN );
42928: 
42929:   assert( jrnlOpen==0 || ( sqlite3OsDeviceCharacteristics(pPager->jfd) &
42930:     SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
42931:   ));
42932: 
42933:   *pExists = 0;
42934:   if( !jrnlOpen ){
42935:     rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists);
42936:   }
42937:   if( rc==SQLITE_OK && exists ){
42938:     int locked = 0;             /* True if some process holds a RESERVED lock */
42939: 
42940:     /* Race condition here:  Another process might have been holding the
42941:     ** the RESERVED lock and have a journal open at the sqlite3OsAccess() 
42942:     ** call above, but then delete the journal and drop the lock before
42943:     ** we get to the following sqlite3OsCheckReservedLock() call.  If that
42944:     ** is the case, this routine might think there is a hot journal when
42945:     ** in fact there is none.  This results in a false-positive which will
42946:     ** be dealt with by the playback routine.  Ticket #3883.
42947:     */
42948:     rc = sqlite3OsCheckReservedLock(pPager->fd, &locked);
42949:     if( rc==SQLITE_OK && !locked ){
42950:       Pgno nPage;                 /* Number of pages in database file */
42951: 
42952:       /* Check the size of the database file. If it consists of 0 pages,
42953:       ** then delete the journal file. See the header comment above for 
42954:       ** the reasoning here.  Delete the obsolete journal file under
42955:       ** a RESERVED lock to avoid race conditions and to avoid violating
42956:       ** [H33020].
42957:       */
42958:       rc = pagerPagecount(pPager, &nPage);
42959:       if( rc==SQLITE_OK ){
42960:         if( nPage==0 ){
42961:           sqlite3BeginBenignMalloc();
42962:           if( pagerLockDb(pPager, RESERVED_LOCK)==SQLITE_OK ){
42963:             sqlite3OsDelete(pVfs, pPager->zJournal, 0);
42964:             if( !pPager->exclusiveMode ) pagerUnlockDb(pPager, SHARED_LOCK);
42965:           }
42966:           sqlite3EndBenignMalloc();
42967:         }else{
42968:           /* The journal file exists and no other connection has a reserved
42969:           ** or greater lock on the database file. Now check that there is
42970:           ** at least one non-zero bytes at the start of the journal file.
42971:           ** If there is, then we consider this journal to be hot. If not, 
42972:           ** it can be ignored.
42973:           */
42974:           if( !jrnlOpen ){
42975:             int f = SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL;
42976:             rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &f);
42977:           }
42978:           if( rc==SQLITE_OK ){
42979:             u8 first = 0;
42980:             rc = sqlite3OsRead(pPager->jfd, (void *)&first, 1, 0);
42981:             if( rc==SQLITE_IOERR_SHORT_READ ){
42982:               rc = SQLITE_OK;
42983:             }
42984:             if( !jrnlOpen ){
42985:               sqlite3OsClose(pPager->jfd);
42986:             }
42987:             *pExists = (first!=0);
42988:           }else if( rc==SQLITE_CANTOPEN ){
42989:             /* If we cannot open the rollback journal file in order to see if
42990:             ** its has a zero header, that might be due to an I/O error, or
42991:             ** it might be due to the race condition described above and in
42992:             ** ticket #3883.  Either way, assume that the journal is hot.
42993:             ** This might be a false positive.  But if it is, then the
42994:             ** automatic journal playback and recovery mechanism will deal
42995:             ** with it under an EXCLUSIVE lock where we do not need to
42996:             ** worry so much with race conditions.
42997:             */
42998:             *pExists = 1;
42999:             rc = SQLITE_OK;
43000:           }
43001:         }
43002:       }
43003:     }
43004:   }
43005: 
43006:   return rc;
43007: }
43008: 
43009: /*
43010: ** This function is called to obtain a shared lock on the database file.
43011: ** It is illegal to call sqlite3PagerAcquire() until after this function
43012: ** has been successfully called. If a shared-lock is already held when
43013: ** this function is called, it is a no-op.
43014: **
43015: ** The following operations are also performed by this function.
43016: **
43017: **   1) If the pager is currently in PAGER_OPEN state (no lock held
43018: **      on the database file), then an attempt is made to obtain a
43019: **      SHARED lock on the database file. Immediately after obtaining
43020: **      the SHARED lock, the file-system is checked for a hot-journal,
43021: **      which is played back if present. Following any hot-journal 
43022: **      rollback, the contents of the cache are validated by checking
43023: **      the 'change-counter' field of the database file header and
43024: **      discarded if they are found to be invalid.
43025: **
43026: **   2) If the pager is running in exclusive-mode, and there are currently
43027: **      no outstanding references to any pages, and is in the error state,
43028: **      then an attempt is made to clear the error state by discarding
43029: **      the contents of the page cache and rolling back any open journal
43030: **      file.
43031: **
43032: ** If everything is successful, SQLITE_OK is returned. If an IO error 
43033: ** occurs while locking the database, checking for a hot-journal file or 
43034: ** rolling back a journal file, the IO error code is returned.
43035: */
43036: SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){
43037:   int rc = SQLITE_OK;                /* Return code */
43038: 
43039:   /* This routine is only called from b-tree and only when there are no
43040:   ** outstanding pages. This implies that the pager state should either
43041:   ** be OPEN or READER. READER is only possible if the pager is or was in 
43042:   ** exclusive access mode.
43043:   */
43044:   assert( sqlite3PcacheRefCount(pPager->pPCache)==0 );
43045:   assert( assert_pager_state(pPager) );
43046:   assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER );
43047:   if( NEVER(MEMDB && pPager->errCode) ){ return pPager->errCode; }
43048: 
43049:   if( !pagerUseWal(pPager) && pPager->eState==PAGER_OPEN ){
43050:     int bHotJournal = 1;          /* True if there exists a hot journal-file */
43051: 
43052:     assert( !MEMDB );
43053:     assert( pPager->noReadlock==0 || pPager->readOnly );
43054: 
43055:     if( pPager->noReadlock==0 ){
43056:       rc = pager_wait_on_lock(pPager, SHARED_LOCK);
43057:       if( rc!=SQLITE_OK ){
43058:         assert( pPager->eLock==NO_LOCK || pPager->eLock==UNKNOWN_LOCK );
43059:         goto failed;
43060:       }
43061:     }
43062: 
43063:     /* If a journal file exists, and there is no RESERVED lock on the
43064:     ** database file, then it either needs to be played back or deleted.
43065:     */
43066:     if( pPager->eLock<=SHARED_LOCK ){
43067:       rc = hasHotJournal(pPager, &bHotJournal);
43068:     }
43069:     if( rc!=SQLITE_OK ){
43070:       goto failed;
43071:     }
43072:     if( bHotJournal ){
43073:       /* Get an EXCLUSIVE lock on the database file. At this point it is
43074:       ** important that a RESERVED lock is not obtained on the way to the
43075:       ** EXCLUSIVE lock. If it were, another process might open the
43076:       ** database file, detect the RESERVED lock, and conclude that the
43077:       ** database is safe to read while this process is still rolling the 
43078:       ** hot-journal back.
43079:       ** 
43080:       ** Because the intermediate RESERVED lock is not requested, any
43081:       ** other process attempting to access the database file will get to 
43082:       ** this point in the code and fail to obtain its own EXCLUSIVE lock 
43083:       ** on the database file.
43084:       **
43085:       ** Unless the pager is in locking_mode=exclusive mode, the lock is
43086:       ** downgraded to SHARED_LOCK before this function returns.
43087:       */
43088:       rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
43089:       if( rc!=SQLITE_OK ){
43090:         goto failed;
43091:       }
43092:  
43093:       /* If it is not already open and the file exists on disk, open the 
43094:       ** journal for read/write access. Write access is required because 
43095:       ** in exclusive-access mode the file descriptor will be kept open 
43096:       ** and possibly used for a transaction later on. Also, write-access 
43097:       ** is usually required to finalize the journal in journal_mode=persist 
43098:       ** mode (and also for journal_mode=truncate on some systems).
43099:       **
43100:       ** If the journal does not exist, it usually means that some 
43101:       ** other connection managed to get in and roll it back before 
43102:       ** this connection obtained the exclusive lock above. Or, it 
43103:       ** may mean that the pager was in the error-state when this
43104:       ** function was called and the journal file does not exist.
43105:       */
43106:       if( !isOpen(pPager->jfd) ){
43107:         sqlite3_vfs * const pVfs = pPager->pVfs;
43108:         int bExists;              /* True if journal file exists */
43109:         rc = sqlite3OsAccess(
43110:             pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &bExists);
43111:         if( rc==SQLITE_OK && bExists ){
43112:           int fout = 0;
43113:           int f = SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_JOURNAL;
43114:           assert( !pPager->tempFile );
43115:           rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &fout);
43116:           assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
43117:           if( rc==SQLITE_OK && fout&SQLITE_OPEN_READONLY ){
43118:             rc = SQLITE_CANTOPEN_BKPT;
43119:             sqlite3OsClose(pPager->jfd);
43120:           }
43121:         }
43122:       }
43123:  
43124:       /* Playback and delete the journal.  Drop the database write
43125:       ** lock and reacquire the read lock. Purge the cache before
43126:       ** playing back the hot-journal so that we don't end up with
43127:       ** an inconsistent cache.  Sync the hot journal before playing
43128:       ** it back since the process that crashed and left the hot journal
43129:       ** probably did not sync it and we are required to always sync
43130:       ** the journal before playing it back.
43131:       */
43132:       if( isOpen(pPager->jfd) ){
43133:         assert( rc==SQLITE_OK );
43134:         rc = pagerSyncHotJournal(pPager);
43135:         if( rc==SQLITE_OK ){
43136:           rc = pager_playback(pPager, 1);
43137:           pPager->eState = PAGER_OPEN;
43138:         }
43139:       }else if( !pPager->exclusiveMode ){
43140:         pagerUnlockDb(pPager, SHARED_LOCK);
43141:       }
43142: 
43143:       if( rc!=SQLITE_OK ){
43144:         /* This branch is taken if an error occurs while trying to open
43145:         ** or roll back a hot-journal while holding an EXCLUSIVE lock. The
43146:         ** pager_unlock() routine will be called before returning to unlock
43147:         ** the file. If the unlock attempt fails, then Pager.eLock must be
43148:         ** set to UNKNOWN_LOCK (see the comment above the #define for 
43149:         ** UNKNOWN_LOCK above for an explanation). 
43150:         **
43151:         ** In order to get pager_unlock() to do this, set Pager.eState to
43152:         ** PAGER_ERROR now. This is not actually counted as a transition
43153:         ** to ERROR state in the state diagram at the top of this file,
43154:         ** since we know that the same call to pager_unlock() will very
43155:         ** shortly transition the pager object to the OPEN state. Calling
43156:         ** assert_pager_state() would fail now, as it should not be possible
43157:         ** to be in ERROR state when there are zero outstanding page 
43158:         ** references.
43159:         */
43160:         pager_error(pPager, rc);
43161:         goto failed;
43162:       }
43163: 
43164:       assert( pPager->eState==PAGER_OPEN );
43165:       assert( (pPager->eLock==SHARED_LOCK)
43166:            || (pPager->exclusiveMode && pPager->eLock>SHARED_LOCK)
43167:       );
43168:     }
43169: 
43170:     if( !pPager->tempFile 
43171:      && (pPager->pBackup || sqlite3PcachePagecount(pPager->pPCache)>0) 
43172:     ){
43173:       /* The shared-lock has just been acquired on the database file
43174:       ** and there are already pages in the cache (from a previous
43175:       ** read or write transaction).  Check to see if the database
43176:       ** has been modified.  If the database has changed, flush the
43177:       ** cache.
43178:       **
43179:       ** Database changes is detected by looking at 15 bytes beginning
43180:       ** at offset 24 into the file.  The first 4 of these 16 bytes are
43181:       ** a 32-bit counter that is incremented with each change.  The
43182:       ** other bytes change randomly with each file change when
43183:       ** a codec is in use.
43184:       ** 
43185:       ** There is a vanishingly small chance that a change will not be 
43186:       ** detected.  The chance of an undetected change is so small that
43187:       ** it can be neglected.
43188:       */
43189:       Pgno nPage = 0;
43190:       char dbFileVers[sizeof(pPager->dbFileVers)];
43191: 
43192:       rc = pagerPagecount(pPager, &nPage);
43193:       if( rc ) goto failed;
43194: 
43195:       if( nPage>0 ){
43196:         IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers)));
43197:         rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24);
43198:         if( rc!=SQLITE_OK ){
43199:           goto failed;
43200:         }
43201:       }else{
43202:         memset(dbFileVers, 0, sizeof(dbFileVers));
43203:       }
43204: 
43205:       if( memcmp(pPager->dbFileVers, dbFileVers, sizeof(dbFileVers))!=0 ){
43206:         pager_reset(pPager);
43207:       }
43208:     }
43209: 
43210:     /* If there is a WAL file in the file-system, open this database in WAL
43211:     ** mode. Otherwise, the following function call is a no-op.
43212:     */
43213:     rc = pagerOpenWalIfPresent(pPager);
43214: #ifndef SQLITE_OMIT_WAL
43215:     assert( pPager->pWal==0 || rc==SQLITE_OK );
43216: #endif
43217:   }
43218: 
43219:   if( pagerUseWal(pPager) ){
43220:     assert( rc==SQLITE_OK );
43221:     rc = pagerBeginReadTransaction(pPager);
43222:   }
43223: 
43224:   if( pPager->eState==PAGER_OPEN && rc==SQLITE_OK ){
43225:     rc = pagerPagecount(pPager, &pPager->dbSize);
43226:   }
43227: 
43228:  failed:
43229:   if( rc!=SQLITE_OK ){
43230:     assert( !MEMDB );
43231:     pager_unlock(pPager);
43232:     assert( pPager->eState==PAGER_OPEN );
43233:   }else{
43234:     pPager->eState = PAGER_READER;
43235:   }
43236:   return rc;
43237: }
43238: 
43239: /*
43240: ** If the reference count has reached zero, rollback any active
43241: ** transaction and unlock the pager.
43242: **
43243: ** Except, in locking_mode=EXCLUSIVE when there is nothing to in
43244: ** the rollback journal, the unlock is not performed and there is
43245: ** nothing to rollback, so this routine is a no-op.
43246: */ 
43247: static void pagerUnlockIfUnused(Pager *pPager){
43248:   if( (sqlite3PcacheRefCount(pPager->pPCache)==0) ){
43249:     pagerUnlockAndRollback(pPager);
43250:   }
43251: }
43252: 
43253: /*
43254: ** Acquire a reference to page number pgno in pager pPager (a page
43255: ** reference has type DbPage*). If the requested reference is 
43256: ** successfully obtained, it is copied to *ppPage and SQLITE_OK returned.
43257: **
43258: ** If the requested page is already in the cache, it is returned. 
43259: ** Otherwise, a new page object is allocated and populated with data
43260: ** read from the database file. In some cases, the pcache module may
43261: ** choose not to allocate a new page object and may reuse an existing
43262: ** object with no outstanding references.
43263: **
43264: ** The extra data appended to a page is always initialized to zeros the 
43265: ** first time a page is loaded into memory. If the page requested is 
43266: ** already in the cache when this function is called, then the extra
43267: ** data is left as it was when the page object was last used.
43268: **
43269: ** If the database image is smaller than the requested page or if a 
43270: ** non-zero value is passed as the noContent parameter and the 
43271: ** requested page is not already stored in the cache, then no 
43272: ** actual disk read occurs. In this case the memory image of the 
43273: ** page is initialized to all zeros. 
43274: **
43275: ** If noContent is true, it means that we do not care about the contents
43276: ** of the page. This occurs in two seperate scenarios:
43277: **
43278: **   a) When reading a free-list leaf page from the database, and
43279: **
43280: **   b) When a savepoint is being rolled back and we need to load
43281: **      a new page into the cache to be filled with the data read
43282: **      from the savepoint journal.
43283: **
43284: ** If noContent is true, then the data returned is zeroed instead of
43285: ** being read from the database. Additionally, the bits corresponding
43286: ** to pgno in Pager.pInJournal (bitvec of pages already written to the
43287: ** journal file) and the PagerSavepoint.pInSavepoint bitvecs of any open
43288: ** savepoints are set. This means if the page is made writable at any
43289: ** point in the future, using a call to sqlite3PagerWrite(), its contents
43290: ** will not be journaled. This saves IO.
43291: **
43292: ** The acquisition might fail for several reasons.  In all cases,
43293: ** an appropriate error code is returned and *ppPage is set to NULL.
43294: **
43295: ** See also sqlite3PagerLookup().  Both this routine and Lookup() attempt
43296: ** to find a page in the in-memory cache first.  If the page is not already
43297: ** in memory, this routine goes to disk to read it in whereas Lookup()
43298: ** just returns 0.  This routine acquires a read-lock the first time it
43299: ** has to go to disk, and could also playback an old journal if necessary.
43300: ** Since Lookup() never goes to disk, it never has to deal with locks
43301: ** or journal files.
43302: */
43303: SQLITE_PRIVATE int sqlite3PagerAcquire(
43304:   Pager *pPager,      /* The pager open on the database file */
43305:   Pgno pgno,          /* Page number to fetch */
43306:   DbPage **ppPage,    /* Write a pointer to the page here */
43307:   int noContent       /* Do not bother reading content from disk if true */
43308: ){
43309:   int rc;
43310:   PgHdr *pPg;
43311: 
43312:   assert( pPager->eState>=PAGER_READER );
43313:   assert( assert_pager_state(pPager) );
43314: 
43315:   if( pgno==0 ){
43316:     return SQLITE_CORRUPT_BKPT;
43317:   }
43318: 
43319:   /* If the pager is in the error state, return an error immediately. 
43320:   ** Otherwise, request the page from the PCache layer. */
43321:   if( pPager->errCode!=SQLITE_OK ){
43322:     rc = pPager->errCode;
43323:   }else{
43324:     rc = sqlite3PcacheFetch(pPager->pPCache, pgno, 1, ppPage);
43325:   }
43326: 
43327:   if( rc!=SQLITE_OK ){
43328:     /* Either the call to sqlite3PcacheFetch() returned an error or the
43329:     ** pager was already in the error-state when this function was called.
43330:     ** Set pPg to 0 and jump to the exception handler.  */
43331:     pPg = 0;
43332:     goto pager_acquire_err;
43333:   }
43334:   assert( (*ppPage)->pgno==pgno );
43335:   assert( (*ppPage)->pPager==pPager || (*ppPage)->pPager==0 );
43336: 
43337:   if( (*ppPage)->pPager && !noContent ){
43338:     /* In this case the pcache already contains an initialized copy of
43339:     ** the page. Return without further ado.  */
43340:     assert( pgno<=PAGER_MAX_PGNO && pgno!=PAGER_MJ_PGNO(pPager) );
43341:     pPager->nHit++;
43342:     return SQLITE_OK;
43343: 
43344:   }else{
43345:     /* The pager cache has created a new page. Its content needs to 
43346:     ** be initialized.  */
43347: 
43348:     pPg = *ppPage;
43349:     pPg->pPager = pPager;
43350: 
43351:     /* The maximum page number is 2^31. Return SQLITE_CORRUPT if a page
43352:     ** number greater than this, or the unused locking-page, is requested. */
43353:     if( pgno>PAGER_MAX_PGNO || pgno==PAGER_MJ_PGNO(pPager) ){
43354:       rc = SQLITE_CORRUPT_BKPT;
43355:       goto pager_acquire_err;
43356:     }
43357: 
43358:     if( MEMDB || pPager->dbSize<pgno || noContent || !isOpen(pPager->fd) ){
43359:       if( pgno>pPager->mxPgno ){
43360:         rc = SQLITE_FULL;
43361:         goto pager_acquire_err;
43362:       }
43363:       if( noContent ){
43364:         /* Failure to set the bits in the InJournal bit-vectors is benign.
43365:         ** It merely means that we might do some extra work to journal a 
43366:         ** page that does not need to be journaled.  Nevertheless, be sure 
43367:         ** to test the case where a malloc error occurs while trying to set 
43368:         ** a bit in a bit vector.
43369:         */
43370:         sqlite3BeginBenignMalloc();
43371:         if( pgno<=pPager->dbOrigSize ){
43372:           TESTONLY( rc = ) sqlite3BitvecSet(pPager->pInJournal, pgno);
43373:           testcase( rc==SQLITE_NOMEM );
43374:         }
43375:         TESTONLY( rc = ) addToSavepointBitvecs(pPager, pgno);
43376:         testcase( rc==SQLITE_NOMEM );
43377:         sqlite3EndBenignMalloc();
43378:       }
43379:       memset(pPg->pData, 0, pPager->pageSize);
43380:       IOTRACE(("ZERO %p %d\n", pPager, pgno));
43381:     }else{
43382:       assert( pPg->pPager==pPager );
43383:       pPager->nMiss++;
43384:       rc = readDbPage(pPg);
43385:       if( rc!=SQLITE_OK ){
43386:         goto pager_acquire_err;
43387:       }
43388:     }
43389:     pager_set_pagehash(pPg);
43390:   }
43391: 
43392:   return SQLITE_OK;
43393: 
43394: pager_acquire_err:
43395:   assert( rc!=SQLITE_OK );
43396:   if( pPg ){
43397:     sqlite3PcacheDrop(pPg);
43398:   }
43399:   pagerUnlockIfUnused(pPager);
43400: 
43401:   *ppPage = 0;
43402:   return rc;
43403: }
43404: 
43405: /*
43406: ** Acquire a page if it is already in the in-memory cache.  Do
43407: ** not read the page from disk.  Return a pointer to the page,
43408: ** or 0 if the page is not in cache. 
43409: **
43410: ** See also sqlite3PagerGet().  The difference between this routine
43411: ** and sqlite3PagerGet() is that _get() will go to the disk and read
43412: ** in the page if the page is not already in cache.  This routine
43413: ** returns NULL if the page is not in cache or if a disk I/O error 
43414: ** has ever happened.
43415: */
43416: SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){
43417:   PgHdr *pPg = 0;
43418:   assert( pPager!=0 );
43419:   assert( pgno!=0 );
43420:   assert( pPager->pPCache!=0 );
43421:   assert( pPager->eState>=PAGER_READER && pPager->eState!=PAGER_ERROR );
43422:   sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &pPg);
43423:   return pPg;
43424: }
43425: 
43426: /*
43427: ** Release a page reference.
43428: **
43429: ** If the number of references to the page drop to zero, then the
43430: ** page is added to the LRU list.  When all references to all pages
43431: ** are released, a rollback occurs and the lock on the database is
43432: ** removed.
43433: */
43434: SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){
43435:   if( pPg ){
43436:     Pager *pPager = pPg->pPager;
43437:     sqlite3PcacheRelease(pPg);
43438:     pagerUnlockIfUnused(pPager);
43439:   }
43440: }
43441: 
43442: /*
43443: ** This function is called at the start of every write transaction.
43444: ** There must already be a RESERVED or EXCLUSIVE lock on the database 
43445: ** file when this routine is called.
43446: **
43447: ** Open the journal file for pager pPager and write a journal header
43448: ** to the start of it. If there are active savepoints, open the sub-journal
43449: ** as well. This function is only used when the journal file is being 
43450: ** opened to write a rollback log for a transaction. It is not used 
43451: ** when opening a hot journal file to roll it back.
43452: **
43453: ** If the journal file is already open (as it may be in exclusive mode),
43454: ** then this function just writes a journal header to the start of the
43455: ** already open file. 
43456: **
43457: ** Whether or not the journal file is opened by this function, the
43458: ** Pager.pInJournal bitvec structure is allocated.
43459: **
43460: ** Return SQLITE_OK if everything is successful. Otherwise, return 
43461: ** SQLITE_NOMEM if the attempt to allocate Pager.pInJournal fails, or 
43462: ** an IO error code if opening or writing the journal file fails.
43463: */
43464: static int pager_open_journal(Pager *pPager){
43465:   int rc = SQLITE_OK;                        /* Return code */
43466:   sqlite3_vfs * const pVfs = pPager->pVfs;   /* Local cache of vfs pointer */
43467: 
43468:   assert( pPager->eState==PAGER_WRITER_LOCKED );
43469:   assert( assert_pager_state(pPager) );
43470:   assert( pPager->pInJournal==0 );
43471:   
43472:   /* If already in the error state, this function is a no-op.  But on
43473:   ** the other hand, this routine is never called if we are already in
43474:   ** an error state. */
43475:   if( NEVER(pPager->errCode) ) return pPager->errCode;
43476: 
43477:   if( !pagerUseWal(pPager) && pPager->journalMode!=PAGER_JOURNALMODE_OFF ){
43478:     pPager->pInJournal = sqlite3BitvecCreate(pPager->dbSize);
43479:     if( pPager->pInJournal==0 ){
43480:       return SQLITE_NOMEM;
43481:     }
43482:   
43483:     /* Open the journal file if it is not already open. */
43484:     if( !isOpen(pPager->jfd) ){
43485:       if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ){
43486:         sqlite3MemJournalOpen(pPager->jfd);
43487:       }else{
43488:         const int flags =                   /* VFS flags to open journal file */
43489:           SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|
43490:           (pPager->tempFile ? 
43491:             (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL):
43492:             (SQLITE_OPEN_MAIN_JOURNAL)
43493:           );
43494:   #ifdef SQLITE_ENABLE_ATOMIC_WRITE
43495:         rc = sqlite3JournalOpen(
43496:             pVfs, pPager->zJournal, pPager->jfd, flags, jrnlBufferSize(pPager)
43497:         );
43498:   #else
43499:         rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0);
43500:   #endif
43501:       }
43502:       assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
43503:     }
43504:   
43505:   
43506:     /* Write the first journal header to the journal file and open 
43507:     ** the sub-journal if necessary.
43508:     */
43509:     if( rc==SQLITE_OK ){
43510:       /* TODO: Check if all of these are really required. */
43511:       pPager->nRec = 0;
43512:       pPager->journalOff = 0;
43513:       pPager->setMaster = 0;
43514:       pPager->journalHdr = 0;
43515:       rc = writeJournalHdr(pPager);
43516:     }
43517:   }
43518: 
43519:   if( rc!=SQLITE_OK ){
43520:     sqlite3BitvecDestroy(pPager->pInJournal);
43521:     pPager->pInJournal = 0;
43522:   }else{
43523:     assert( pPager->eState==PAGER_WRITER_LOCKED );
43524:     pPager->eState = PAGER_WRITER_CACHEMOD;
43525:   }
43526: 
43527:   return rc;
43528: }
43529: 
43530: /*
43531: ** Begin a write-transaction on the specified pager object. If a 
43532: ** write-transaction has already been opened, this function is a no-op.
43533: **
43534: ** If the exFlag argument is false, then acquire at least a RESERVED
43535: ** lock on the database file. If exFlag is true, then acquire at least
43536: ** an EXCLUSIVE lock. If such a lock is already held, no locking 
43537: ** functions need be called.
43538: **
43539: ** If the subjInMemory argument is non-zero, then any sub-journal opened
43540: ** within this transaction will be opened as an in-memory file. This
43541: ** has no effect if the sub-journal is already opened (as it may be when
43542: ** running in exclusive mode) or if the transaction does not require a
43543: ** sub-journal. If the subjInMemory argument is zero, then any required
43544: ** sub-journal is implemented in-memory if pPager is an in-memory database, 
43545: ** or using a temporary file otherwise.
43546: */
43547: SQLITE_PRIVATE int sqlite3PagerBegin(Pager *pPager, int exFlag, int subjInMemory){
43548:   int rc = SQLITE_OK;
43549: 
43550:   if( pPager->errCode ) return pPager->errCode;
43551:   assert( pPager->eState>=PAGER_READER && pPager->eState<PAGER_ERROR );
43552:   pPager->subjInMemory = (u8)subjInMemory;
43553: 
43554:   if( ALWAYS(pPager->eState==PAGER_READER) ){
43555:     assert( pPager->pInJournal==0 );
43556: 
43557:     if( pagerUseWal(pPager) ){
43558:       /* If the pager is configured to use locking_mode=exclusive, and an
43559:       ** exclusive lock on the database is not already held, obtain it now.
43560:       */
43561:       if( pPager->exclusiveMode && sqlite3WalExclusiveMode(pPager->pWal, -1) ){
43562:         rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
43563:         if( rc!=SQLITE_OK ){
43564:           return rc;
43565:         }
43566:         sqlite3WalExclusiveMode(pPager->pWal, 1);
43567:       }
43568: 
43569:       /* Grab the write lock on the log file. If successful, upgrade to
43570:       ** PAGER_RESERVED state. Otherwise, return an error code to the caller.
43571:       ** The busy-handler is not invoked if another connection already
43572:       ** holds the write-lock. If possible, the upper layer will call it.
43573:       */
43574:       rc = sqlite3WalBeginWriteTransaction(pPager->pWal);
43575:     }else{
43576:       /* Obtain a RESERVED lock on the database file. If the exFlag parameter
43577:       ** is true, then immediately upgrade this to an EXCLUSIVE lock. The
43578:       ** busy-handler callback can be used when upgrading to the EXCLUSIVE
43579:       ** lock, but not when obtaining the RESERVED lock.
43580:       */
43581:       rc = pagerLockDb(pPager, RESERVED_LOCK);
43582:       if( rc==SQLITE_OK && exFlag ){
43583:         rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK);
43584:       }
43585:     }
43586: 
43587:     if( rc==SQLITE_OK ){
43588:       /* Change to WRITER_LOCKED state.
43589:       **
43590:       ** WAL mode sets Pager.eState to PAGER_WRITER_LOCKED or CACHEMOD
43591:       ** when it has an open transaction, but never to DBMOD or FINISHED.
43592:       ** This is because in those states the code to roll back savepoint 
43593:       ** transactions may copy data from the sub-journal into the database 
43594:       ** file as well as into the page cache. Which would be incorrect in 
43595:       ** WAL mode.
43596:       */
43597:       pPager->eState = PAGER_WRITER_LOCKED;
43598:       pPager->dbHintSize = pPager->dbSize;
43599:       pPager->dbFileSize = pPager->dbSize;
43600:       pPager->dbOrigSize = pPager->dbSize;
43601:       pPager->journalOff = 0;
43602:     }
43603: 
43604:     assert( rc==SQLITE_OK || pPager->eState==PAGER_READER );
43605:     assert( rc!=SQLITE_OK || pPager->eState==PAGER_WRITER_LOCKED );
43606:     assert( assert_pager_state(pPager) );
43607:   }
43608: 
43609:   PAGERTRACE(("TRANSACTION %d\n", PAGERID(pPager)));
43610:   return rc;
43611: }
43612: 
43613: /*
43614: ** Mark a single data page as writeable. The page is written into the 
43615: ** main journal or sub-journal as required. If the page is written into
43616: ** one of the journals, the corresponding bit is set in the 
43617: ** Pager.pInJournal bitvec and the PagerSavepoint.pInSavepoint bitvecs
43618: ** of any open savepoints as appropriate.
43619: */
43620: static int pager_write(PgHdr *pPg){
43621:   void *pData = pPg->pData;
43622:   Pager *pPager = pPg->pPager;
43623:   int rc = SQLITE_OK;
43624: 
43625:   /* This routine is not called unless a write-transaction has already 
43626:   ** been started. The journal file may or may not be open at this point.
43627:   ** It is never called in the ERROR state.
43628:   */
43629:   assert( pPager->eState==PAGER_WRITER_LOCKED
43630:        || pPager->eState==PAGER_WRITER_CACHEMOD
43631:        || pPager->eState==PAGER_WRITER_DBMOD
43632:   );
43633:   assert( assert_pager_state(pPager) );
43634: 
43635:   /* If an error has been previously detected, report the same error
43636:   ** again. This should not happen, but the check provides robustness. */
43637:   if( NEVER(pPager->errCode) )  return pPager->errCode;
43638: 
43639:   /* Higher-level routines never call this function if database is not
43640:   ** writable.  But check anyway, just for robustness. */
43641:   if( NEVER(pPager->readOnly) ) return SQLITE_PERM;
43642: 
43643:   CHECK_PAGE(pPg);
43644: 
43645:   /* The journal file needs to be opened. Higher level routines have already
43646:   ** obtained the necessary locks to begin the write-transaction, but the
43647:   ** rollback journal might not yet be open. Open it now if this is the case.
43648:   **
43649:   ** This is done before calling sqlite3PcacheMakeDirty() on the page. 
43650:   ** Otherwise, if it were done after calling sqlite3PcacheMakeDirty(), then
43651:   ** an error might occur and the pager would end up in WRITER_LOCKED state
43652:   ** with pages marked as dirty in the cache.
43653:   */
43654:   if( pPager->eState==PAGER_WRITER_LOCKED ){
43655:     rc = pager_open_journal(pPager);
43656:     if( rc!=SQLITE_OK ) return rc;
43657:   }
43658:   assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
43659:   assert( assert_pager_state(pPager) );
43660: 
43661:   /* Mark the page as dirty.  If the page has already been written
43662:   ** to the journal then we can return right away.
43663:   */
43664:   sqlite3PcacheMakeDirty(pPg);
43665:   if( pageInJournal(pPg) && !subjRequiresPage(pPg) ){
43666:     assert( !pagerUseWal(pPager) );
43667:   }else{
43668:   
43669:     /* The transaction journal now exists and we have a RESERVED or an
43670:     ** EXCLUSIVE lock on the main database file.  Write the current page to
43671:     ** the transaction journal if it is not there already.
43672:     */
43673:     if( !pageInJournal(pPg) && !pagerUseWal(pPager) ){
43674:       assert( pagerUseWal(pPager)==0 );
43675:       if( pPg->pgno<=pPager->dbOrigSize && isOpen(pPager->jfd) ){
43676:         u32 cksum;
43677:         char *pData2;
43678:         i64 iOff = pPager->journalOff;
43679: 
43680:         /* We should never write to the journal file the page that
43681:         ** contains the database locks.  The following assert verifies
43682:         ** that we do not. */
43683:         assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );
43684: 
43685:         assert( pPager->journalHdr<=pPager->journalOff );
43686:         CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
43687:         cksum = pager_cksum(pPager, (u8*)pData2);
43688: 
43689:         /* Even if an IO or diskfull error occurs while journalling the
43690:         ** page in the block above, set the need-sync flag for the page.
43691:         ** Otherwise, when the transaction is rolled back, the logic in
43692:         ** playback_one_page() will think that the page needs to be restored
43693:         ** in the database file. And if an IO error occurs while doing so,
43694:         ** then corruption may follow.
43695:         */
43696:         pPg->flags |= PGHDR_NEED_SYNC;
43697: 
43698:         rc = write32bits(pPager->jfd, iOff, pPg->pgno);
43699:         if( rc!=SQLITE_OK ) return rc;
43700:         rc = sqlite3OsWrite(pPager->jfd, pData2, pPager->pageSize, iOff+4);
43701:         if( rc!=SQLITE_OK ) return rc;
43702:         rc = write32bits(pPager->jfd, iOff+pPager->pageSize+4, cksum);
43703:         if( rc!=SQLITE_OK ) return rc;
43704: 
43705:         IOTRACE(("JOUT %p %d %lld %d\n", pPager, pPg->pgno, 
43706:                  pPager->journalOff, pPager->pageSize));
43707:         PAGER_INCR(sqlite3_pager_writej_count);
43708:         PAGERTRACE(("JOURNAL %d page %d needSync=%d hash(%08x)\n",
43709:              PAGERID(pPager), pPg->pgno, 
43710:              ((pPg->flags&PGHDR_NEED_SYNC)?1:0), pager_pagehash(pPg)));
43711: 
43712:         pPager->journalOff += 8 + pPager->pageSize;
43713:         pPager->nRec++;
43714:         assert( pPager->pInJournal!=0 );
43715:         rc = sqlite3BitvecSet(pPager->pInJournal, pPg->pgno);
43716:         testcase( rc==SQLITE_NOMEM );
43717:         assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
43718:         rc |= addToSavepointBitvecs(pPager, pPg->pgno);
43719:         if( rc!=SQLITE_OK ){
43720:           assert( rc==SQLITE_NOMEM );
43721:           return rc;
43722:         }
43723:       }else{
43724:         if( pPager->eState!=PAGER_WRITER_DBMOD ){
43725:           pPg->flags |= PGHDR_NEED_SYNC;
43726:         }
43727:         PAGERTRACE(("APPEND %d page %d needSync=%d\n",
43728:                 PAGERID(pPager), pPg->pgno,
43729:                ((pPg->flags&PGHDR_NEED_SYNC)?1:0)));
43730:       }
43731:     }
43732:   
43733:     /* If the statement journal is open and the page is not in it,
43734:     ** then write the current page to the statement journal.  Note that
43735:     ** the statement journal format differs from the standard journal format
43736:     ** in that it omits the checksums and the header.
43737:     */
43738:     if( subjRequiresPage(pPg) ){
43739:       rc = subjournalPage(pPg);
43740:     }
43741:   }
43742: 
43743:   /* Update the database size and return.
43744:   */
43745:   if( pPager->dbSize<pPg->pgno ){
43746:     pPager->dbSize = pPg->pgno;
43747:   }
43748:   return rc;
43749: }
43750: 
43751: /*
43752: ** Mark a data page as writeable. This routine must be called before 
43753: ** making changes to a page. The caller must check the return value 
43754: ** of this function and be careful not to change any page data unless 
43755: ** this routine returns SQLITE_OK.
43756: **
43757: ** The difference between this function and pager_write() is that this
43758: ** function also deals with the special case where 2 or more pages
43759: ** fit on a single disk sector. In this case all co-resident pages
43760: ** must have been written to the journal file before returning.
43761: **
43762: ** If an error occurs, SQLITE_NOMEM or an IO error code is returned
43763: ** as appropriate. Otherwise, SQLITE_OK.
43764: */
43765: SQLITE_PRIVATE int sqlite3PagerWrite(DbPage *pDbPage){
43766:   int rc = SQLITE_OK;
43767: 
43768:   PgHdr *pPg = pDbPage;
43769:   Pager *pPager = pPg->pPager;
43770:   Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize);
43771: 
43772:   assert( pPager->eState>=PAGER_WRITER_LOCKED );
43773:   assert( pPager->eState!=PAGER_ERROR );
43774:   assert( assert_pager_state(pPager) );
43775: 
43776:   if( nPagePerSector>1 ){
43777:     Pgno nPageCount;          /* Total number of pages in database file */
43778:     Pgno pg1;                 /* First page of the sector pPg is located on. */
43779:     int nPage = 0;            /* Number of pages starting at pg1 to journal */
43780:     int ii;                   /* Loop counter */
43781:     int needSync = 0;         /* True if any page has PGHDR_NEED_SYNC */
43782: 
43783:     /* Set the doNotSyncSpill flag to 1. This is because we cannot allow
43784:     ** a journal header to be written between the pages journaled by
43785:     ** this function.
43786:     */
43787:     assert( !MEMDB );
43788:     assert( pPager->doNotSyncSpill==0 );
43789:     pPager->doNotSyncSpill++;
43790: 
43791:     /* This trick assumes that both the page-size and sector-size are
43792:     ** an integer power of 2. It sets variable pg1 to the identifier
43793:     ** of the first page of the sector pPg is located on.
43794:     */
43795:     pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1;
43796: 
43797:     nPageCount = pPager->dbSize;
43798:     if( pPg->pgno>nPageCount ){
43799:       nPage = (pPg->pgno - pg1)+1;
43800:     }else if( (pg1+nPagePerSector-1)>nPageCount ){
43801:       nPage = nPageCount+1-pg1;
43802:     }else{
43803:       nPage = nPagePerSector;
43804:     }
43805:     assert(nPage>0);
43806:     assert(pg1<=pPg->pgno);
43807:     assert((pg1+nPage)>pPg->pgno);
43808: 
43809:     for(ii=0; ii<nPage && rc==SQLITE_OK; ii++){
43810:       Pgno pg = pg1+ii;
43811:       PgHdr *pPage;
43812:       if( pg==pPg->pgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){
43813:         if( pg!=PAGER_MJ_PGNO(pPager) ){
43814:           rc = sqlite3PagerGet(pPager, pg, &pPage);
43815:           if( rc==SQLITE_OK ){
43816:             rc = pager_write(pPage);
43817:             if( pPage->flags&PGHDR_NEED_SYNC ){
43818:               needSync = 1;
43819:             }
43820:             sqlite3PagerUnref(pPage);
43821:           }
43822:         }
43823:       }else if( (pPage = pager_lookup(pPager, pg))!=0 ){
43824:         if( pPage->flags&PGHDR_NEED_SYNC ){
43825:           needSync = 1;
43826:         }
43827:         sqlite3PagerUnref(pPage);
43828:       }
43829:     }
43830: 
43831:     /* If the PGHDR_NEED_SYNC flag is set for any of the nPage pages 
43832:     ** starting at pg1, then it needs to be set for all of them. Because
43833:     ** writing to any of these nPage pages may damage the others, the
43834:     ** journal file must contain sync()ed copies of all of them
43835:     ** before any of them can be written out to the database file.
43836:     */
43837:     if( rc==SQLITE_OK && needSync ){
43838:       assert( !MEMDB );
43839:       for(ii=0; ii<nPage; ii++){
43840:         PgHdr *pPage = pager_lookup(pPager, pg1+ii);
43841:         if( pPage ){
43842:           pPage->flags |= PGHDR_NEED_SYNC;
43843:           sqlite3PagerUnref(pPage);
43844:         }
43845:       }
43846:     }
43847: 
43848:     assert( pPager->doNotSyncSpill==1 );
43849:     pPager->doNotSyncSpill--;
43850:   }else{
43851:     rc = pager_write(pDbPage);
43852:   }
43853:   return rc;
43854: }
43855: 
43856: /*
43857: ** Return TRUE if the page given in the argument was previously passed
43858: ** to sqlite3PagerWrite().  In other words, return TRUE if it is ok
43859: ** to change the content of the page.
43860: */
43861: #ifndef NDEBUG
43862: SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage *pPg){
43863:   return pPg->flags&PGHDR_DIRTY;
43864: }
43865: #endif
43866: 
43867: /*
43868: ** A call to this routine tells the pager that it is not necessary to
43869: ** write the information on page pPg back to the disk, even though
43870: ** that page might be marked as dirty.  This happens, for example, when
43871: ** the page has been added as a leaf of the freelist and so its
43872: ** content no longer matters.
43873: **
43874: ** The overlying software layer calls this routine when all of the data
43875: ** on the given page is unused. The pager marks the page as clean so
43876: ** that it does not get written to disk.
43877: **
43878: ** Tests show that this optimization can quadruple the speed of large 
43879: ** DELETE operations.
43880: */
43881: SQLITE_PRIVATE void sqlite3PagerDontWrite(PgHdr *pPg){
43882:   Pager *pPager = pPg->pPager;
43883:   if( (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){
43884:     PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager)));
43885:     IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno))
43886:     pPg->flags |= PGHDR_DONT_WRITE;
43887:     pager_set_pagehash(pPg);
43888:   }
43889: }
43890: 
43891: /*
43892: ** This routine is called to increment the value of the database file 
43893: ** change-counter, stored as a 4-byte big-endian integer starting at 
43894: ** byte offset 24 of the pager file.  The secondary change counter at
43895: ** 92 is also updated, as is the SQLite version number at offset 96.
43896: **
43897: ** But this only happens if the pPager->changeCountDone flag is false.
43898: ** To avoid excess churning of page 1, the update only happens once.
43899: ** See also the pager_write_changecounter() routine that does an 
43900: ** unconditional update of the change counters.
43901: **
43902: ** If the isDirectMode flag is zero, then this is done by calling 
43903: ** sqlite3PagerWrite() on page 1, then modifying the contents of the
43904: ** page data. In this case the file will be updated when the current
43905: ** transaction is committed.
43906: **
43907: ** The isDirectMode flag may only be non-zero if the library was compiled
43908: ** with the SQLITE_ENABLE_ATOMIC_WRITE macro defined. In this case,
43909: ** if isDirect is non-zero, then the database file is updated directly
43910: ** by writing an updated version of page 1 using a call to the 
43911: ** sqlite3OsWrite() function.
43912: */
43913: static int pager_incr_changecounter(Pager *pPager, int isDirectMode){
43914:   int rc = SQLITE_OK;
43915: 
43916:   assert( pPager->eState==PAGER_WRITER_CACHEMOD
43917:        || pPager->eState==PAGER_WRITER_DBMOD
43918:   );
43919:   assert( assert_pager_state(pPager) );
43920: 
43921:   /* Declare and initialize constant integer 'isDirect'. If the
43922:   ** atomic-write optimization is enabled in this build, then isDirect
43923:   ** is initialized to the value passed as the isDirectMode parameter
43924:   ** to this function. Otherwise, it is always set to zero.
43925:   **
43926:   ** The idea is that if the atomic-write optimization is not
43927:   ** enabled at compile time, the compiler can omit the tests of
43928:   ** 'isDirect' below, as well as the block enclosed in the
43929:   ** "if( isDirect )" condition.
43930:   */
43931: #ifndef SQLITE_ENABLE_ATOMIC_WRITE
43932: # define DIRECT_MODE 0
43933:   assert( isDirectMode==0 );
43934:   UNUSED_PARAMETER(isDirectMode);
43935: #else
43936: # define DIRECT_MODE isDirectMode
43937: #endif
43938: 
43939:   if( !pPager->changeCountDone && pPager->dbSize>0 ){
43940:     PgHdr *pPgHdr;                /* Reference to page 1 */
43941: 
43942:     assert( !pPager->tempFile && isOpen(pPager->fd) );
43943: 
43944:     /* Open page 1 of the file for writing. */
43945:     rc = sqlite3PagerGet(pPager, 1, &pPgHdr);
43946:     assert( pPgHdr==0 || rc==SQLITE_OK );
43947: 
43948:     /* If page one was fetched successfully, and this function is not
43949:     ** operating in direct-mode, make page 1 writable.  When not in 
43950:     ** direct mode, page 1 is always held in cache and hence the PagerGet()
43951:     ** above is always successful - hence the ALWAYS on rc==SQLITE_OK.
43952:     */
43953:     if( !DIRECT_MODE && ALWAYS(rc==SQLITE_OK) ){
43954:       rc = sqlite3PagerWrite(pPgHdr);
43955:     }
43956: 
43957:     if( rc==SQLITE_OK ){
43958:       /* Actually do the update of the change counter */
43959:       pager_write_changecounter(pPgHdr);
43960: 
43961:       /* If running in direct mode, write the contents of page 1 to the file. */
43962:       if( DIRECT_MODE ){
43963:         const void *zBuf;
43964:         assert( pPager->dbFileSize>0 );
43965:         CODEC2(pPager, pPgHdr->pData, 1, 6, rc=SQLITE_NOMEM, zBuf);
43966:         if( rc==SQLITE_OK ){
43967:           rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0);
43968:         }
43969:         if( rc==SQLITE_OK ){
43970:           pPager->changeCountDone = 1;
43971:         }
43972:       }else{
43973:         pPager->changeCountDone = 1;
43974:       }
43975:     }
43976: 
43977:     /* Release the page reference. */
43978:     sqlite3PagerUnref(pPgHdr);
43979:   }
43980:   return rc;
43981: }
43982: 
43983: /*
43984: ** Sync the database file to disk. This is a no-op for in-memory databases
43985: ** or pages with the Pager.noSync flag set.
43986: **
43987: ** If successful, or if called on a pager for which it is a no-op, this
43988: ** function returns SQLITE_OK. Otherwise, an IO error code is returned.
43989: */
43990: SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager){
43991:   int rc = SQLITE_OK;
43992:   if( !pPager->noSync ){
43993:     assert( !MEMDB );
43994:     rc = sqlite3OsSync(pPager->fd, pPager->syncFlags);
43995:   }else if( isOpen(pPager->fd) ){
43996:     assert( !MEMDB );
43997:     rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC_OMITTED, 0);
43998:     if( rc==SQLITE_NOTFOUND ){
43999:       rc = SQLITE_OK;
44000:     }
44001:   }
44002:   return rc;
44003: }
44004: 
44005: /*
44006: ** This function may only be called while a write-transaction is active in
44007: ** rollback. If the connection is in WAL mode, this call is a no-op. 
44008: ** Otherwise, if the connection does not already have an EXCLUSIVE lock on 
44009: ** the database file, an attempt is made to obtain one.
44010: **
44011: ** If the EXCLUSIVE lock is already held or the attempt to obtain it is
44012: ** successful, or the connection is in WAL mode, SQLITE_OK is returned.
44013: ** Otherwise, either SQLITE_BUSY or an SQLITE_IOERR_XXX error code is 
44014: ** returned.
44015: */
44016: SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager *pPager){
44017:   int rc = SQLITE_OK;
44018:   assert( pPager->eState==PAGER_WRITER_CACHEMOD 
44019:        || pPager->eState==PAGER_WRITER_DBMOD 
44020:        || pPager->eState==PAGER_WRITER_LOCKED 
44021:   );
44022:   assert( assert_pager_state(pPager) );
44023:   if( 0==pagerUseWal(pPager) ){
44024:     rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK);
44025:   }
44026:   return rc;
44027: }
44028: 
44029: /*
44030: ** Sync the database file for the pager pPager. zMaster points to the name
44031: ** of a master journal file that should be written into the individual
44032: ** journal file. zMaster may be NULL, which is interpreted as no master
44033: ** journal (a single database transaction).
44034: **
44035: ** This routine ensures that:
44036: **
44037: **   * The database file change-counter is updated,
44038: **   * the journal is synced (unless the atomic-write optimization is used),
44039: **   * all dirty pages are written to the database file, 
44040: **   * the database file is truncated (if required), and
44041: **   * the database file synced. 
44042: **
44043: ** The only thing that remains to commit the transaction is to finalize 
44044: ** (delete, truncate or zero the first part of) the journal file (or 
44045: ** delete the master journal file if specified).
44046: **
44047: ** Note that if zMaster==NULL, this does not overwrite a previous value
44048: ** passed to an sqlite3PagerCommitPhaseOne() call.
44049: **
44050: ** If the final parameter - noSync - is true, then the database file itself
44051: ** is not synced. The caller must call sqlite3PagerSync() directly to
44052: ** sync the database file before calling CommitPhaseTwo() to delete the
44053: ** journal file in this case.
44054: */
44055: SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
44056:   Pager *pPager,                  /* Pager object */
44057:   const char *zMaster,            /* If not NULL, the master journal name */
44058:   int noSync                      /* True to omit the xSync on the db file */
44059: ){
44060:   int rc = SQLITE_OK;             /* Return code */
44061: 
44062:   assert( pPager->eState==PAGER_WRITER_LOCKED
44063:        || pPager->eState==PAGER_WRITER_CACHEMOD
44064:        || pPager->eState==PAGER_WRITER_DBMOD
44065:        || pPager->eState==PAGER_ERROR
44066:   );
44067:   assert( assert_pager_state(pPager) );
44068: 
44069:   /* If a prior error occurred, report that error again. */
44070:   if( NEVER(pPager->errCode) ) return pPager->errCode;
44071: 
44072:   PAGERTRACE(("DATABASE SYNC: File=%s zMaster=%s nSize=%d\n", 
44073:       pPager->zFilename, zMaster, pPager->dbSize));
44074: 
44075:   /* If no database changes have been made, return early. */
44076:   if( pPager->eState<PAGER_WRITER_CACHEMOD ) return SQLITE_OK;
44077: 
44078:   if( MEMDB ){
44079:     /* If this is an in-memory db, or no pages have been written to, or this
44080:     ** function has already been called, it is mostly a no-op.  However, any
44081:     ** backup in progress needs to be restarted.
44082:     */
44083:     sqlite3BackupRestart(pPager->pBackup);
44084:   }else{
44085:     if( pagerUseWal(pPager) ){
44086:       PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache);
44087:       PgHdr *pPageOne = 0;
44088:       if( pList==0 ){
44089:         /* Must have at least one page for the WAL commit flag.
44090:         ** Ticket [2d1a5c67dfc2363e44f29d9bbd57f] 2011-05-18 */
44091:         rc = sqlite3PagerGet(pPager, 1, &pPageOne);
44092:         pList = pPageOne;
44093:         pList->pDirty = 0;
44094:       }
44095:       assert( rc==SQLITE_OK );
44096:       if( ALWAYS(pList) ){
44097:         rc = pagerWalFrames(pPager, pList, pPager->dbSize, 1);
44098:       }
44099:       sqlite3PagerUnref(pPageOne);
44100:       if( rc==SQLITE_OK ){
44101:         sqlite3PcacheCleanAll(pPager->pPCache);
44102:       }
44103:     }else{
44104:       /* The following block updates the change-counter. Exactly how it
44105:       ** does this depends on whether or not the atomic-update optimization
44106:       ** was enabled at compile time, and if this transaction meets the 
44107:       ** runtime criteria to use the operation: 
44108:       **
44109:       **    * The file-system supports the atomic-write property for
44110:       **      blocks of size page-size, and 
44111:       **    * This commit is not part of a multi-file transaction, and
44112:       **    * Exactly one page has been modified and store in the journal file.
44113:       **
44114:       ** If the optimization was not enabled at compile time, then the
44115:       ** pager_incr_changecounter() function is called to update the change
44116:       ** counter in 'indirect-mode'. If the optimization is compiled in but
44117:       ** is not applicable to this transaction, call sqlite3JournalCreate()
44118:       ** to make sure the journal file has actually been created, then call
44119:       ** pager_incr_changecounter() to update the change-counter in indirect
44120:       ** mode. 
44121:       **
44122:       ** Otherwise, if the optimization is both enabled and applicable,
44123:       ** then call pager_incr_changecounter() to update the change-counter
44124:       ** in 'direct' mode. In this case the journal file will never be
44125:       ** created for this transaction.
44126:       */
44127:   #ifdef SQLITE_ENABLE_ATOMIC_WRITE
44128:       PgHdr *pPg;
44129:       assert( isOpen(pPager->jfd) 
44130:            || pPager->journalMode==PAGER_JOURNALMODE_OFF 
44131:            || pPager->journalMode==PAGER_JOURNALMODE_WAL 
44132:       );
44133:       if( !zMaster && isOpen(pPager->jfd) 
44134:        && pPager->journalOff==jrnlBufferSize(pPager) 
44135:        && pPager->dbSize>=pPager->dbOrigSize
44136:        && (0==(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty)
44137:       ){
44138:         /* Update the db file change counter via the direct-write method. The 
44139:         ** following call will modify the in-memory representation of page 1 
44140:         ** to include the updated change counter and then write page 1 
44141:         ** directly to the database file. Because of the atomic-write 
44142:         ** property of the host file-system, this is safe.
44143:         */
44144:         rc = pager_incr_changecounter(pPager, 1);
44145:       }else{
44146:         rc = sqlite3JournalCreate(pPager->jfd);
44147:         if( rc==SQLITE_OK ){
44148:           rc = pager_incr_changecounter(pPager, 0);
44149:         }
44150:       }
44151:   #else
44152:       rc = pager_incr_changecounter(pPager, 0);
44153:   #endif
44154:       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44155:   
44156:       /* If this transaction has made the database smaller, then all pages
44157:       ** being discarded by the truncation must be written to the journal
44158:       ** file. This can only happen in auto-vacuum mode.
44159:       **
44160:       ** Before reading the pages with page numbers larger than the 
44161:       ** current value of Pager.dbSize, set dbSize back to the value
44162:       ** that it took at the start of the transaction. Otherwise, the
44163:       ** calls to sqlite3PagerGet() return zeroed pages instead of 
44164:       ** reading data from the database file.
44165:       */
44166:   #ifndef SQLITE_OMIT_AUTOVACUUM
44167:       if( pPager->dbSize<pPager->dbOrigSize 
44168:        && pPager->journalMode!=PAGER_JOURNALMODE_OFF
44169:       ){
44170:         Pgno i;                                   /* Iterator variable */
44171:         const Pgno iSkip = PAGER_MJ_PGNO(pPager); /* Pending lock page */
44172:         const Pgno dbSize = pPager->dbSize;       /* Database image size */ 
44173:         pPager->dbSize = pPager->dbOrigSize;
44174:         for( i=dbSize+1; i<=pPager->dbOrigSize; i++ ){
44175:           if( !sqlite3BitvecTest(pPager->pInJournal, i) && i!=iSkip ){
44176:             PgHdr *pPage;             /* Page to journal */
44177:             rc = sqlite3PagerGet(pPager, i, &pPage);
44178:             if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44179:             rc = sqlite3PagerWrite(pPage);
44180:             sqlite3PagerUnref(pPage);
44181:             if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44182:           }
44183:         }
44184:         pPager->dbSize = dbSize;
44185:       } 
44186:   #endif
44187:   
44188:       /* Write the master journal name into the journal file. If a master 
44189:       ** journal file name has already been written to the journal file, 
44190:       ** or if zMaster is NULL (no master journal), then this call is a no-op.
44191:       */
44192:       rc = writeMasterJournal(pPager, zMaster);
44193:       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44194:   
44195:       /* Sync the journal file and write all dirty pages to the database.
44196:       ** If the atomic-update optimization is being used, this sync will not 
44197:       ** create the journal file or perform any real IO.
44198:       **
44199:       ** Because the change-counter page was just modified, unless the
44200:       ** atomic-update optimization is used it is almost certain that the
44201:       ** journal requires a sync here. However, in locking_mode=exclusive
44202:       ** on a system under memory pressure it is just possible that this is 
44203:       ** not the case. In this case it is likely enough that the redundant
44204:       ** xSync() call will be changed to a no-op by the OS anyhow. 
44205:       */
44206:       rc = syncJournal(pPager, 0);
44207:       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44208:   
44209:       rc = pager_write_pagelist(pPager,sqlite3PcacheDirtyList(pPager->pPCache));
44210:       if( rc!=SQLITE_OK ){
44211:         assert( rc!=SQLITE_IOERR_BLOCKED );
44212:         goto commit_phase_one_exit;
44213:       }
44214:       sqlite3PcacheCleanAll(pPager->pPCache);
44215:   
44216:       /* If the file on disk is not the same size as the database image,
44217:       ** then use pager_truncate to grow or shrink the file here.
44218:       */
44219:       if( pPager->dbSize!=pPager->dbFileSize ){
44220:         Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_MJ_PGNO(pPager));
44221:         assert( pPager->eState==PAGER_WRITER_DBMOD );
44222:         rc = pager_truncate(pPager, nNew);
44223:         if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44224:       }
44225:   
44226:       /* Finally, sync the database file. */
44227:       if( !noSync ){
44228:         rc = sqlite3PagerSync(pPager);
44229:       }
44230:       IOTRACE(("DBSYNC %p\n", pPager))
44231:     }
44232:   }
44233: 
44234: commit_phase_one_exit:
44235:   if( rc==SQLITE_OK && !pagerUseWal(pPager) ){
44236:     pPager->eState = PAGER_WRITER_FINISHED;
44237:   }
44238:   return rc;
44239: }
44240: 
44241: 
44242: /*
44243: ** When this function is called, the database file has been completely
44244: ** updated to reflect the changes made by the current transaction and
44245: ** synced to disk. The journal file still exists in the file-system 
44246: ** though, and if a failure occurs at this point it will eventually
44247: ** be used as a hot-journal and the current transaction rolled back.
44248: **
44249: ** This function finalizes the journal file, either by deleting, 
44250: ** truncating or partially zeroing it, so that it cannot be used 
44251: ** for hot-journal rollback. Once this is done the transaction is
44252: ** irrevocably committed.
44253: **
44254: ** If an error occurs, an IO error code is returned and the pager
44255: ** moves into the error state. Otherwise, SQLITE_OK is returned.
44256: */
44257: SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager *pPager){
44258:   int rc = SQLITE_OK;                  /* Return code */
44259: 
44260:   /* This routine should not be called if a prior error has occurred.
44261:   ** But if (due to a coding error elsewhere in the system) it does get
44262:   ** called, just return the same error code without doing anything. */
44263:   if( NEVER(pPager->errCode) ) return pPager->errCode;
44264: 
44265:   assert( pPager->eState==PAGER_WRITER_LOCKED
44266:        || pPager->eState==PAGER_WRITER_FINISHED
44267:        || (pagerUseWal(pPager) && pPager->eState==PAGER_WRITER_CACHEMOD)
44268:   );
44269:   assert( assert_pager_state(pPager) );
44270: 
44271:   /* An optimization. If the database was not actually modified during
44272:   ** this transaction, the pager is running in exclusive-mode and is
44273:   ** using persistent journals, then this function is a no-op.
44274:   **
44275:   ** The start of the journal file currently contains a single journal 
44276:   ** header with the nRec field set to 0. If such a journal is used as
44277:   ** a hot-journal during hot-journal rollback, 0 changes will be made
44278:   ** to the database file. So there is no need to zero the journal 
44279:   ** header. Since the pager is in exclusive mode, there is no need
44280:   ** to drop any locks either.
44281:   */
44282:   if( pPager->eState==PAGER_WRITER_LOCKED 
44283:    && pPager->exclusiveMode 
44284:    && pPager->journalMode==PAGER_JOURNALMODE_PERSIST
44285:   ){
44286:     assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) || !pPager->journalOff );
44287:     pPager->eState = PAGER_READER;
44288:     return SQLITE_OK;
44289:   }
44290: 
44291:   PAGERTRACE(("COMMIT %d\n", PAGERID(pPager)));
44292:   rc = pager_end_transaction(pPager, pPager->setMaster);
44293:   return pager_error(pPager, rc);
44294: }
44295: 
44296: /*
44297: ** If a write transaction is open, then all changes made within the 
44298: ** transaction are reverted and the current write-transaction is closed.
44299: ** The pager falls back to PAGER_READER state if successful, or PAGER_ERROR
44300: ** state if an error occurs.
44301: **
44302: ** If the pager is already in PAGER_ERROR state when this function is called,
44303: ** it returns Pager.errCode immediately. No work is performed in this case.
44304: **
44305: ** Otherwise, in rollback mode, this function performs two functions:
44306: **
44307: **   1) It rolls back the journal file, restoring all database file and 
44308: **      in-memory cache pages to the state they were in when the transaction
44309: **      was opened, and
44310: **
44311: **   2) It finalizes the journal file, so that it is not used for hot
44312: **      rollback at any point in the future.
44313: **
44314: ** Finalization of the journal file (task 2) is only performed if the 
44315: ** rollback is successful.
44316: **
44317: ** In WAL mode, all cache-entries containing data modified within the
44318: ** current transaction are either expelled from the cache or reverted to
44319: ** their pre-transaction state by re-reading data from the database or
44320: ** WAL files. The WAL transaction is then closed.
44321: */
44322: SQLITE_PRIVATE int sqlite3PagerRollback(Pager *pPager){
44323:   int rc = SQLITE_OK;                  /* Return code */
44324:   PAGERTRACE(("ROLLBACK %d\n", PAGERID(pPager)));
44325: 
44326:   /* PagerRollback() is a no-op if called in READER or OPEN state. If
44327:   ** the pager is already in the ERROR state, the rollback is not 
44328:   ** attempted here. Instead, the error code is returned to the caller.
44329:   */
44330:   assert( assert_pager_state(pPager) );
44331:   if( pPager->eState==PAGER_ERROR ) return pPager->errCode;
44332:   if( pPager->eState<=PAGER_READER ) return SQLITE_OK;
44333: 
44334:   if( pagerUseWal(pPager) ){
44335:     int rc2;
44336:     rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1);
44337:     rc2 = pager_end_transaction(pPager, pPager->setMaster);
44338:     if( rc==SQLITE_OK ) rc = rc2;
44339:   }else if( !isOpen(pPager->jfd) || pPager->eState==PAGER_WRITER_LOCKED ){
44340:     int eState = pPager->eState;
44341:     rc = pager_end_transaction(pPager, 0);
44342:     if( !MEMDB && eState>PAGER_WRITER_LOCKED ){
44343:       /* This can happen using journal_mode=off. Move the pager to the error 
44344:       ** state to indicate that the contents of the cache may not be trusted.
44345:       ** Any active readers will get SQLITE_ABORT.
44346:       */
44347:       pPager->errCode = SQLITE_ABORT;
44348:       pPager->eState = PAGER_ERROR;
44349:       return rc;
44350:     }
44351:   }else{
44352:     rc = pager_playback(pPager, 0);
44353:   }
44354: 
44355:   assert( pPager->eState==PAGER_READER || rc!=SQLITE_OK );
44356:   assert( rc==SQLITE_OK || rc==SQLITE_FULL
44357:           || rc==SQLITE_NOMEM || (rc&0xFF)==SQLITE_IOERR );
44358: 
44359:   /* If an error occurs during a ROLLBACK, we can no longer trust the pager
44360:   ** cache. So call pager_error() on the way out to make any error persistent.
44361:   */
44362:   return pager_error(pPager, rc);
44363: }
44364: 
44365: /*
44366: ** Return TRUE if the database file is opened read-only.  Return FALSE
44367: ** if the database is (in theory) writable.
44368: */
44369: SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager *pPager){
44370:   return pPager->readOnly;
44371: }
44372: 
44373: /*
44374: ** Return the number of references to the pager.
44375: */
44376: SQLITE_PRIVATE int sqlite3PagerRefcount(Pager *pPager){
44377:   return sqlite3PcacheRefCount(pPager->pPCache);
44378: }
44379: 
44380: /*
44381: ** Return the approximate number of bytes of memory currently
44382: ** used by the pager and its associated cache.
44383: */
44384: SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager *pPager){
44385:   int perPageSize = pPager->pageSize + pPager->nExtra + sizeof(PgHdr)
44386:                                      + 5*sizeof(void*);
44387:   return perPageSize*sqlite3PcachePagecount(pPager->pPCache)
44388:            + sqlite3MallocSize(pPager)
44389:            + pPager->pageSize;
44390: }
44391: 
44392: /*
44393: ** Return the number of references to the specified page.
44394: */
44395: SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage *pPage){
44396:   return sqlite3PcachePageRefcount(pPage);
44397: }
44398: 
44399: #ifdef SQLITE_TEST
44400: /*
44401: ** This routine is used for testing and analysis only.
44402: */
44403: SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){
44404:   static int a[11];
44405:   a[0] = sqlite3PcacheRefCount(pPager->pPCache);
44406:   a[1] = sqlite3PcachePagecount(pPager->pPCache);
44407:   a[2] = sqlite3PcacheGetCachesize(pPager->pPCache);
44408:   a[3] = pPager->eState==PAGER_OPEN ? -1 : (int) pPager->dbSize;
44409:   a[4] = pPager->eState;
44410:   a[5] = pPager->errCode;
44411:   a[6] = pPager->nHit;
44412:   a[7] = pPager->nMiss;
44413:   a[8] = 0;  /* Used to be pPager->nOvfl */
44414:   a[9] = pPager->nRead;
44415:   a[10] = pPager->nWrite;
44416:   return a;
44417: }
44418: #endif
44419: 
44420: /*
44421: ** Parameter eStat must be either SQLITE_DBSTATUS_CACHE_HIT or
44422: ** SQLITE_DBSTATUS_CACHE_MISS. Before returning, *pnVal is incremented by the
44423: ** current cache hit or miss count, according to the value of eStat. If the 
44424: ** reset parameter is non-zero, the cache hit or miss count is zeroed before 
44425: ** returning.
44426: */
44427: SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *pPager, int eStat, int reset, int *pnVal){
44428:   int *piStat;
44429: 
44430:   assert( eStat==SQLITE_DBSTATUS_CACHE_HIT
44431:        || eStat==SQLITE_DBSTATUS_CACHE_MISS
44432:   );
44433:   if( eStat==SQLITE_DBSTATUS_CACHE_HIT ){
44434:     piStat = &pPager->nHit;
44435:   }else{
44436:     piStat = &pPager->nMiss;
44437:   }
44438: 
44439:   *pnVal += *piStat;
44440:   if( reset ){
44441:     *piStat = 0;
44442:   }
44443: }
44444: 
44445: /*
44446: ** Return true if this is an in-memory pager.
44447: */
44448: SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager *pPager){
44449:   return MEMDB;
44450: }
44451: 
44452: /*
44453: ** Check that there are at least nSavepoint savepoints open. If there are
44454: ** currently less than nSavepoints open, then open one or more savepoints
44455: ** to make up the difference. If the number of savepoints is already
44456: ** equal to nSavepoint, then this function is a no-op.
44457: **
44458: ** If a memory allocation fails, SQLITE_NOMEM is returned. If an error 
44459: ** occurs while opening the sub-journal file, then an IO error code is
44460: ** returned. Otherwise, SQLITE_OK.
44461: */
44462: SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoint){
44463:   int rc = SQLITE_OK;                       /* Return code */
44464:   int nCurrent = pPager->nSavepoint;        /* Current number of savepoints */
44465: 
44466:   assert( pPager->eState>=PAGER_WRITER_LOCKED );
44467:   assert( assert_pager_state(pPager) );
44468: 
44469:   if( nSavepoint>nCurrent && pPager->useJournal ){
44470:     int ii;                                 /* Iterator variable */
44471:     PagerSavepoint *aNew;                   /* New Pager.aSavepoint array */
44472: 
44473:     /* Grow the Pager.aSavepoint array using realloc(). Return SQLITE_NOMEM
44474:     ** if the allocation fails. Otherwise, zero the new portion in case a 
44475:     ** malloc failure occurs while populating it in the for(...) loop below.
44476:     */
44477:     aNew = (PagerSavepoint *)sqlite3Realloc(
44478:         pPager->aSavepoint, sizeof(PagerSavepoint)*nSavepoint
44479:     );
44480:     if( !aNew ){
44481:       return SQLITE_NOMEM;
44482:     }
44483:     memset(&aNew[nCurrent], 0, (nSavepoint-nCurrent) * sizeof(PagerSavepoint));
44484:     pPager->aSavepoint = aNew;
44485: 
44486:     /* Populate the PagerSavepoint structures just allocated. */
44487:     for(ii=nCurrent; ii<nSavepoint; ii++){
44488:       aNew[ii].nOrig = pPager->dbSize;
44489:       if( isOpen(pPager->jfd) && pPager->journalOff>0 ){
44490:         aNew[ii].iOffset = pPager->journalOff;
44491:       }else{
44492:         aNew[ii].iOffset = JOURNAL_HDR_SZ(pPager);
44493:       }
44494:       aNew[ii].iSubRec = pPager->nSubRec;
44495:       aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize);
44496:       if( !aNew[ii].pInSavepoint ){
44497:         return SQLITE_NOMEM;
44498:       }
44499:       if( pagerUseWal(pPager) ){
44500:         sqlite3WalSavepoint(pPager->pWal, aNew[ii].aWalData);
44501:       }
44502:       pPager->nSavepoint = ii+1;
44503:     }
44504:     assert( pPager->nSavepoint==nSavepoint );
44505:     assertTruncateConstraint(pPager);
44506:   }
44507: 
44508:   return rc;
44509: }
44510: 
44511: /*
44512: ** This function is called to rollback or release (commit) a savepoint.
44513: ** The savepoint to release or rollback need not be the most recently 
44514: ** created savepoint.
44515: **
44516: ** Parameter op is always either SAVEPOINT_ROLLBACK or SAVEPOINT_RELEASE.
44517: ** If it is SAVEPOINT_RELEASE, then release and destroy the savepoint with
44518: ** index iSavepoint. If it is SAVEPOINT_ROLLBACK, then rollback all changes
44519: ** that have occurred since the specified savepoint was created.
44520: **
44521: ** The savepoint to rollback or release is identified by parameter 
44522: ** iSavepoint. A value of 0 means to operate on the outermost savepoint
44523: ** (the first created). A value of (Pager.nSavepoint-1) means operate
44524: ** on the most recently created savepoint. If iSavepoint is greater than
44525: ** (Pager.nSavepoint-1), then this function is a no-op.
44526: **
44527: ** If a negative value is passed to this function, then the current
44528: ** transaction is rolled back. This is different to calling 
44529: ** sqlite3PagerRollback() because this function does not terminate
44530: ** the transaction or unlock the database, it just restores the 
44531: ** contents of the database to its original state. 
44532: **
44533: ** In any case, all savepoints with an index greater than iSavepoint 
44534: ** are destroyed. If this is a release operation (op==SAVEPOINT_RELEASE),
44535: ** then savepoint iSavepoint is also destroyed.
44536: **
44537: ** This function may return SQLITE_NOMEM if a memory allocation fails,
44538: ** or an IO error code if an IO error occurs while rolling back a 
44539: ** savepoint. If no errors occur, SQLITE_OK is returned.
44540: */ 
44541: SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){
44542:   int rc = pPager->errCode;       /* Return code */
44543: 
44544:   assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK );
44545:   assert( iSavepoint>=0 || op==SAVEPOINT_ROLLBACK );
44546: 
44547:   if( rc==SQLITE_OK && iSavepoint<pPager->nSavepoint ){
44548:     int ii;            /* Iterator variable */
44549:     int nNew;          /* Number of remaining savepoints after this op. */
44550: 
44551:     /* Figure out how many savepoints will still be active after this
44552:     ** operation. Store this value in nNew. Then free resources associated 
44553:     ** with any savepoints that are destroyed by this operation.
44554:     */
44555:     nNew = iSavepoint + (( op==SAVEPOINT_RELEASE ) ? 0 : 1);
44556:     for(ii=nNew; ii<pPager->nSavepoint; ii++){
44557:       sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);
44558:     }
44559:     pPager->nSavepoint = nNew;
44560: 
44561:     /* If this is a release of the outermost savepoint, truncate 
44562:     ** the sub-journal to zero bytes in size. */
44563:     if( op==SAVEPOINT_RELEASE ){
44564:       if( nNew==0 && isOpen(pPager->sjfd) ){
44565:         /* Only truncate if it is an in-memory sub-journal. */
44566:         if( sqlite3IsMemJournal(pPager->sjfd) ){
44567:           rc = sqlite3OsTruncate(pPager->sjfd, 0);
44568:           assert( rc==SQLITE_OK );
44569:         }
44570:         pPager->nSubRec = 0;
44571:       }
44572:     }
44573:     /* Else this is a rollback operation, playback the specified savepoint.
44574:     ** If this is a temp-file, it is possible that the journal file has
44575:     ** not yet been opened. In this case there have been no changes to
44576:     ** the database file, so the playback operation can be skipped.
44577:     */
44578:     else if( pagerUseWal(pPager) || isOpen(pPager->jfd) ){
44579:       PagerSavepoint *pSavepoint = (nNew==0)?0:&pPager->aSavepoint[nNew-1];
44580:       rc = pagerPlaybackSavepoint(pPager, pSavepoint);
44581:       assert(rc!=SQLITE_DONE);
44582:     }
44583:   }
44584: 
44585:   return rc;
44586: }
44587: 
44588: /*
44589: ** Return the full pathname of the database file.
44590: */
44591: SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager *pPager){
44592:   return pPager->zFilename;
44593: }
44594: 
44595: /*
44596: ** Return the VFS structure for the pager.
44597: */
44598: SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager *pPager){
44599:   return pPager->pVfs;
44600: }
44601: 
44602: /*
44603: ** Return the file handle for the database file associated
44604: ** with the pager.  This might return NULL if the file has
44605: ** not yet been opened.
44606: */
44607: SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){
44608:   return pPager->fd;
44609: }
44610: 
44611: /*
44612: ** Return the full pathname of the journal file.
44613: */
44614: SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager *pPager){
44615:   return pPager->zJournal;
44616: }
44617: 
44618: /*
44619: ** Return true if fsync() calls are disabled for this pager.  Return FALSE
44620: ** if fsync()s are executed normally.
44621: */
44622: SQLITE_PRIVATE int sqlite3PagerNosync(Pager *pPager){
44623:   return pPager->noSync;
44624: }
44625: 
44626: #ifdef SQLITE_HAS_CODEC
44627: /*
44628: ** Set or retrieve the codec for this pager
44629: */
44630: SQLITE_PRIVATE void sqlite3PagerSetCodec(
44631:   Pager *pPager,
44632:   void *(*xCodec)(void*,void*,Pgno,int),
44633:   void (*xCodecSizeChng)(void*,int,int),
44634:   void (*xCodecFree)(void*),
44635:   void *pCodec
44636: ){
44637:   if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);
44638:   pPager->xCodec = pPager->memDb ? 0 : xCodec;
44639:   pPager->xCodecSizeChng = xCodecSizeChng;
44640:   pPager->xCodecFree = xCodecFree;
44641:   pPager->pCodec = pCodec;
44642:   pagerReportSize(pPager);
44643: }
44644: SQLITE_PRIVATE void *sqlite3PagerGetCodec(Pager *pPager){
44645:   return pPager->pCodec;
44646: }
44647: #endif
44648: 
44649: #ifndef SQLITE_OMIT_AUTOVACUUM
44650: /*
44651: ** Move the page pPg to location pgno in the file.
44652: **
44653: ** There must be no references to the page previously located at
44654: ** pgno (which we call pPgOld) though that page is allowed to be
44655: ** in cache.  If the page previously located at pgno is not already
44656: ** in the rollback journal, it is not put there by by this routine.
44657: **
44658: ** References to the page pPg remain valid. Updating any
44659: ** meta-data associated with pPg (i.e. data stored in the nExtra bytes
44660: ** allocated along with the page) is the responsibility of the caller.
44661: **
44662: ** A transaction must be active when this routine is called. It used to be
44663: ** required that a statement transaction was not active, but this restriction
44664: ** has been removed (CREATE INDEX needs to move a page when a statement
44665: ** transaction is active).
44666: **
44667: ** If the fourth argument, isCommit, is non-zero, then this page is being
44668: ** moved as part of a database reorganization just before the transaction 
44669: ** is being committed. In this case, it is guaranteed that the database page 
44670: ** pPg refers to will not be written to again within this transaction.
44671: **
44672: ** This function may return SQLITE_NOMEM or an IO error code if an error
44673: ** occurs. Otherwise, it returns SQLITE_OK.
44674: */
44675: SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){
44676:   PgHdr *pPgOld;               /* The page being overwritten. */
44677:   Pgno needSyncPgno = 0;       /* Old value of pPg->pgno, if sync is required */
44678:   int rc;                      /* Return code */
44679:   Pgno origPgno;               /* The original page number */
44680: 
44681:   assert( pPg->nRef>0 );
44682:   assert( pPager->eState==PAGER_WRITER_CACHEMOD
44683:        || pPager->eState==PAGER_WRITER_DBMOD
44684:   );
44685:   assert( assert_pager_state(pPager) );
44686: 
44687:   /* In order to be able to rollback, an in-memory database must journal
44688:   ** the page we are moving from.
44689:   */
44690:   if( MEMDB ){
44691:     rc = sqlite3PagerWrite(pPg);
44692:     if( rc ) return rc;
44693:   }
44694: 
44695:   /* If the page being moved is dirty and has not been saved by the latest
44696:   ** savepoint, then save the current contents of the page into the 
44697:   ** sub-journal now. This is required to handle the following scenario:
44698:   **
44699:   **   BEGIN;
44700:   **     <journal page X, then modify it in memory>
44701:   **     SAVEPOINT one;
44702:   **       <Move page X to location Y>
44703:   **     ROLLBACK TO one;
44704:   **
44705:   ** If page X were not written to the sub-journal here, it would not
44706:   ** be possible to restore its contents when the "ROLLBACK TO one"
44707:   ** statement were is processed.
44708:   **
44709:   ** subjournalPage() may need to allocate space to store pPg->pgno into
44710:   ** one or more savepoint bitvecs. This is the reason this function
44711:   ** may return SQLITE_NOMEM.
44712:   */
44713:   if( pPg->flags&PGHDR_DIRTY
44714:    && subjRequiresPage(pPg)
44715:    && SQLITE_OK!=(rc = subjournalPage(pPg))
44716:   ){
44717:     return rc;
44718:   }
44719: 
44720:   PAGERTRACE(("MOVE %d page %d (needSync=%d) moves to %d\n", 
44721:       PAGERID(pPager), pPg->pgno, (pPg->flags&PGHDR_NEED_SYNC)?1:0, pgno));
44722:   IOTRACE(("MOVE %p %d %d\n", pPager, pPg->pgno, pgno))
44723: 
44724:   /* If the journal needs to be sync()ed before page pPg->pgno can
44725:   ** be written to, store pPg->pgno in local variable needSyncPgno.
44726:   **
44727:   ** If the isCommit flag is set, there is no need to remember that
44728:   ** the journal needs to be sync()ed before database page pPg->pgno 
44729:   ** can be written to. The caller has already promised not to write to it.
44730:   */
44731:   if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
44732:     needSyncPgno = pPg->pgno;
44733:     assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
44734:     assert( pPg->flags&PGHDR_DIRTY );
44735:   }
44736: 
44737:   /* If the cache contains a page with page-number pgno, remove it
44738:   ** from its hash chain. Also, if the PGHDR_NEED_SYNC flag was set for 
44739:   ** page pgno before the 'move' operation, it needs to be retained 
44740:   ** for the page moved there.
44741:   */
44742:   pPg->flags &= ~PGHDR_NEED_SYNC;
44743:   pPgOld = pager_lookup(pPager, pgno);
44744:   assert( !pPgOld || pPgOld->nRef==1 );
44745:   if( pPgOld ){
44746:     pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC);
44747:     if( MEMDB ){
44748:       /* Do not discard pages from an in-memory database since we might
44749:       ** need to rollback later.  Just move the page out of the way. */
44750:       sqlite3PcacheMove(pPgOld, pPager->dbSize+1);
44751:     }else{
44752:       sqlite3PcacheDrop(pPgOld);
44753:     }
44754:   }
44755: 
44756:   origPgno = pPg->pgno;
44757:   sqlite3PcacheMove(pPg, pgno);
44758:   sqlite3PcacheMakeDirty(pPg);
44759: 
44760:   /* For an in-memory database, make sure the original page continues
44761:   ** to exist, in case the transaction needs to roll back.  Use pPgOld
44762:   ** as the original page since it has already been allocated.
44763:   */
44764:   if( MEMDB ){
44765:     assert( pPgOld );
44766:     sqlite3PcacheMove(pPgOld, origPgno);
44767:     sqlite3PagerUnref(pPgOld);
44768:   }
44769: 
44770:   if( needSyncPgno ){
44771:     /* If needSyncPgno is non-zero, then the journal file needs to be 
44772:     ** sync()ed before any data is written to database file page needSyncPgno.
44773:     ** Currently, no such page exists in the page-cache and the 
44774:     ** "is journaled" bitvec flag has been set. This needs to be remedied by
44775:     ** loading the page into the pager-cache and setting the PGHDR_NEED_SYNC
44776:     ** flag.
44777:     **
44778:     ** If the attempt to load the page into the page-cache fails, (due
44779:     ** to a malloc() or IO failure), clear the bit in the pInJournal[]
44780:     ** array. Otherwise, if the page is loaded and written again in
44781:     ** this transaction, it may be written to the database file before
44782:     ** it is synced into the journal file. This way, it may end up in
44783:     ** the journal file twice, but that is not a problem.
44784:     */
44785:     PgHdr *pPgHdr;
44786:     rc = sqlite3PagerGet(pPager, needSyncPgno, &pPgHdr);
44787:     if( rc!=SQLITE_OK ){
44788:       if( needSyncPgno<=pPager->dbOrigSize ){
44789:         assert( pPager->pTmpSpace!=0 );
44790:         sqlite3BitvecClear(pPager->pInJournal, needSyncPgno, pPager->pTmpSpace);
44791:       }
44792:       return rc;
44793:     }
44794:     pPgHdr->flags |= PGHDR_NEED_SYNC;
44795:     sqlite3PcacheMakeDirty(pPgHdr);
44796:     sqlite3PagerUnref(pPgHdr);
44797:   }
44798: 
44799:   return SQLITE_OK;
44800: }
44801: #endif
44802: 
44803: /*
44804: ** Return a pointer to the data for the specified page.
44805: */
44806: SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){
44807:   assert( pPg->nRef>0 || pPg->pPager->memDb );
44808:   return pPg->pData;
44809: }
44810: 
44811: /*
44812: ** Return a pointer to the Pager.nExtra bytes of "extra" space 
44813: ** allocated along with the specified page.
44814: */
44815: SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *pPg){
44816:   return pPg->pExtra;
44817: }
44818: 
44819: /*
44820: ** Get/set the locking-mode for this pager. Parameter eMode must be one
44821: ** of PAGER_LOCKINGMODE_QUERY, PAGER_LOCKINGMODE_NORMAL or 
44822: ** PAGER_LOCKINGMODE_EXCLUSIVE. If the parameter is not _QUERY, then
44823: ** the locking-mode is set to the value specified.
44824: **
44825: ** The returned value is either PAGER_LOCKINGMODE_NORMAL or
44826: ** PAGER_LOCKINGMODE_EXCLUSIVE, indicating the current (possibly updated)
44827: ** locking-mode.
44828: */
44829: SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *pPager, int eMode){
44830:   assert( eMode==PAGER_LOCKINGMODE_QUERY
44831:             || eMode==PAGER_LOCKINGMODE_NORMAL
44832:             || eMode==PAGER_LOCKINGMODE_EXCLUSIVE );
44833:   assert( PAGER_LOCKINGMODE_QUERY<0 );
44834:   assert( PAGER_LOCKINGMODE_NORMAL>=0 && PAGER_LOCKINGMODE_EXCLUSIVE>=0 );
44835:   assert( pPager->exclusiveMode || 0==sqlite3WalHeapMemory(pPager->pWal) );
44836:   if( eMode>=0 && !pPager->tempFile && !sqlite3WalHeapMemory(pPager->pWal) ){
44837:     pPager->exclusiveMode = (u8)eMode;
44838:   }
44839:   return (int)pPager->exclusiveMode;
44840: }
44841: 
44842: /*
44843: ** Set the journal-mode for this pager. Parameter eMode must be one of:
44844: **
44845: **    PAGER_JOURNALMODE_DELETE
44846: **    PAGER_JOURNALMODE_TRUNCATE
44847: **    PAGER_JOURNALMODE_PERSIST
44848: **    PAGER_JOURNALMODE_OFF
44849: **    PAGER_JOURNALMODE_MEMORY
44850: **    PAGER_JOURNALMODE_WAL
44851: **
44852: ** The journalmode is set to the value specified if the change is allowed.
44853: ** The change may be disallowed for the following reasons:
44854: **
44855: **   *  An in-memory database can only have its journal_mode set to _OFF
44856: **      or _MEMORY.
44857: **
44858: **   *  Temporary databases cannot have _WAL journalmode.
44859: **
44860: ** The returned indicate the current (possibly updated) journal-mode.
44861: */
44862: SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){
44863:   u8 eOld = pPager->journalMode;    /* Prior journalmode */
44864: 
44865: #ifdef SQLITE_DEBUG
44866:   /* The print_pager_state() routine is intended to be used by the debugger
44867:   ** only.  We invoke it once here to suppress a compiler warning. */
44868:   print_pager_state(pPager);
44869: #endif
44870: 
44871: 
44872:   /* The eMode parameter is always valid */
44873:   assert(      eMode==PAGER_JOURNALMODE_DELETE
44874:             || eMode==PAGER_JOURNALMODE_TRUNCATE
44875:             || eMode==PAGER_JOURNALMODE_PERSIST
44876:             || eMode==PAGER_JOURNALMODE_OFF 
44877:             || eMode==PAGER_JOURNALMODE_WAL 
44878:             || eMode==PAGER_JOURNALMODE_MEMORY );
44879: 
44880:   /* This routine is only called from the OP_JournalMode opcode, and
44881:   ** the logic there will never allow a temporary file to be changed
44882:   ** to WAL mode.
44883:   */
44884:   assert( pPager->tempFile==0 || eMode!=PAGER_JOURNALMODE_WAL );
44885: 
44886:   /* Do allow the journalmode of an in-memory database to be set to
44887:   ** anything other than MEMORY or OFF
44888:   */
44889:   if( MEMDB ){
44890:     assert( eOld==PAGER_JOURNALMODE_MEMORY || eOld==PAGER_JOURNALMODE_OFF );
44891:     if( eMode!=PAGER_JOURNALMODE_MEMORY && eMode!=PAGER_JOURNALMODE_OFF ){
44892:       eMode = eOld;
44893:     }
44894:   }
44895: 
44896:   if( eMode!=eOld ){
44897: 
44898:     /* Change the journal mode. */
44899:     assert( pPager->eState!=PAGER_ERROR );
44900:     pPager->journalMode = (u8)eMode;
44901: 
44902:     /* When transistioning from TRUNCATE or PERSIST to any other journal
44903:     ** mode except WAL, unless the pager is in locking_mode=exclusive mode,
44904:     ** delete the journal file.
44905:     */
44906:     assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 );
44907:     assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 );
44908:     assert( (PAGER_JOURNALMODE_DELETE & 5)==0 );
44909:     assert( (PAGER_JOURNALMODE_MEMORY & 5)==4 );
44910:     assert( (PAGER_JOURNALMODE_OFF & 5)==0 );
44911:     assert( (PAGER_JOURNALMODE_WAL & 5)==5 );
44912: 
44913:     assert( isOpen(pPager->fd) || pPager->exclusiveMode );
44914:     if( !pPager->exclusiveMode && (eOld & 5)==1 && (eMode & 1)==0 ){
44915: 
44916:       /* In this case we would like to delete the journal file. If it is
44917:       ** not possible, then that is not a problem. Deleting the journal file
44918:       ** here is an optimization only.
44919:       **
44920:       ** Before deleting the journal file, obtain a RESERVED lock on the
44921:       ** database file. This ensures that the journal file is not deleted
44922:       ** while it is in use by some other client.
44923:       */
44924:       sqlite3OsClose(pPager->jfd);
44925:       if( pPager->eLock>=RESERVED_LOCK ){
44926:         sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
44927:       }else{
44928:         int rc = SQLITE_OK;
44929:         int state = pPager->eState;
44930:         assert( state==PAGER_OPEN || state==PAGER_READER );
44931:         if( state==PAGER_OPEN ){
44932:           rc = sqlite3PagerSharedLock(pPager);
44933:         }
44934:         if( pPager->eState==PAGER_READER ){
44935:           assert( rc==SQLITE_OK );
44936:           rc = pagerLockDb(pPager, RESERVED_LOCK);
44937:         }
44938:         if( rc==SQLITE_OK ){
44939:           sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
44940:         }
44941:         if( rc==SQLITE_OK && state==PAGER_READER ){
44942:           pagerUnlockDb(pPager, SHARED_LOCK);
44943:         }else if( state==PAGER_OPEN ){
44944:           pager_unlock(pPager);
44945:         }
44946:         assert( state==pPager->eState );
44947:       }
44948:     }
44949:   }
44950: 
44951:   /* Return the new journal mode */
44952:   return (int)pPager->journalMode;
44953: }
44954: 
44955: /*
44956: ** Return the current journal mode.
44957: */
44958: SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager *pPager){
44959:   return (int)pPager->journalMode;
44960: }
44961: 
44962: /*
44963: ** Return TRUE if the pager is in a state where it is OK to change the
44964: ** journalmode.  Journalmode changes can only happen when the database
44965: ** is unmodified.
44966: */
44967: SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager *pPager){
44968:   assert( assert_pager_state(pPager) );
44969:   if( pPager->eState>=PAGER_WRITER_CACHEMOD ) return 0;
44970:   if( NEVER(isOpen(pPager->jfd) && pPager->journalOff>0) ) return 0;
44971:   return 1;
44972: }
44973: 
44974: /*
44975: ** Get/set the size-limit used for persistent journal files.
44976: **
44977: ** Setting the size limit to -1 means no limit is enforced.
44978: ** An attempt to set a limit smaller than -1 is a no-op.
44979: */
44980: SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *pPager, i64 iLimit){
44981:   if( iLimit>=-1 ){
44982:     pPager->journalSizeLimit = iLimit;
44983:     sqlite3WalLimit(pPager->pWal, iLimit);
44984:   }
44985:   return pPager->journalSizeLimit;
44986: }
44987: 
44988: /*
44989: ** Return a pointer to the pPager->pBackup variable. The backup module
44990: ** in backup.c maintains the content of this variable. This module
44991: ** uses it opaquely as an argument to sqlite3BackupRestart() and
44992: ** sqlite3BackupUpdate() only.
44993: */
44994: SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager *pPager){
44995:   return &pPager->pBackup;
44996: }
44997: 
44998: #ifndef SQLITE_OMIT_VACUUM
44999: /*
45000: ** Unless this is an in-memory or temporary database, clear the pager cache.
45001: */
45002: SQLITE_PRIVATE void sqlite3PagerClearCache(Pager *pPager){
45003:   if( !MEMDB && pPager->tempFile==0 ) pager_reset(pPager);
45004: }
45005: #endif
45006: 
45007: #ifndef SQLITE_OMIT_WAL
45008: /*
45009: ** This function is called when the user invokes "PRAGMA wal_checkpoint",
45010: ** "PRAGMA wal_blocking_checkpoint" or calls the sqlite3_wal_checkpoint()
45011: ** or wal_blocking_checkpoint() API functions.
45012: **
45013: ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
45014: */
45015: SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int eMode, int *pnLog, int *pnCkpt){
45016:   int rc = SQLITE_OK;
45017:   if( pPager->pWal ){
45018:     rc = sqlite3WalCheckpoint(pPager->pWal, eMode,
45019:         pPager->xBusyHandler, pPager->pBusyHandlerArg,
45020:         pPager->ckptSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace,
45021:         pnLog, pnCkpt
45022:     );
45023:   }
45024:   return rc;
45025: }
45026: 
45027: SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager){
45028:   return sqlite3WalCallback(pPager->pWal);
45029: }
45030: 
45031: /*
45032: ** Return true if the underlying VFS for the given pager supports the
45033: ** primitives necessary for write-ahead logging.
45034: */
45035: SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager){
45036:   const sqlite3_io_methods *pMethods = pPager->fd->pMethods;
45037:   return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap);
45038: }
45039: 
45040: /*
45041: ** Attempt to take an exclusive lock on the database file. If a PENDING lock
45042: ** is obtained instead, immediately release it.
45043: */
45044: static int pagerExclusiveLock(Pager *pPager){
45045:   int rc;                         /* Return code */
45046: 
45047:   assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK );
45048:   rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
45049:   if( rc!=SQLITE_OK ){
45050:     /* If the attempt to grab the exclusive lock failed, release the 
45051:     ** pending lock that may have been obtained instead.  */
45052:     pagerUnlockDb(pPager, SHARED_LOCK);
45053:   }
45054: 
45055:   return rc;
45056: }
45057: 
45058: /*
45059: ** Call sqlite3WalOpen() to open the WAL handle. If the pager is in 
45060: ** exclusive-locking mode when this function is called, take an EXCLUSIVE
45061: ** lock on the database file and use heap-memory to store the wal-index
45062: ** in. Otherwise, use the normal shared-memory.
45063: */
45064: static int pagerOpenWal(Pager *pPager){
45065:   int rc = SQLITE_OK;
45066: 
45067:   assert( pPager->pWal==0 && pPager->tempFile==0 );
45068:   assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK || pPager->noReadlock);
45069: 
45070:   /* If the pager is already in exclusive-mode, the WAL module will use 
45071:   ** heap-memory for the wal-index instead of the VFS shared-memory 
45072:   ** implementation. Take the exclusive lock now, before opening the WAL
45073:   ** file, to make sure this is safe.
45074:   */
45075:   if( pPager->exclusiveMode ){
45076:     rc = pagerExclusiveLock(pPager);
45077:   }
45078: 
45079:   /* Open the connection to the log file. If this operation fails, 
45080:   ** (e.g. due to malloc() failure), return an error code.
45081:   */
45082:   if( rc==SQLITE_OK ){
45083:     rc = sqlite3WalOpen(pPager->pVfs, 
45084:         pPager->fd, pPager->zWal, pPager->exclusiveMode,
45085:         pPager->journalSizeLimit, &pPager->pWal
45086:     );
45087:   }
45088: 
45089:   return rc;
45090: }
45091: 
45092: 
45093: /*
45094: ** The caller must be holding a SHARED lock on the database file to call
45095: ** this function.
45096: **
45097: ** If the pager passed as the first argument is open on a real database
45098: ** file (not a temp file or an in-memory database), and the WAL file
45099: ** is not already open, make an attempt to open it now. If successful,
45100: ** return SQLITE_OK. If an error occurs or the VFS used by the pager does 
45101: ** not support the xShmXXX() methods, return an error code. *pbOpen is
45102: ** not modified in either case.
45103: **
45104: ** If the pager is open on a temp-file (or in-memory database), or if
45105: ** the WAL file is already open, set *pbOpen to 1 and return SQLITE_OK
45106: ** without doing anything.
45107: */
45108: SQLITE_PRIVATE int sqlite3PagerOpenWal(
45109:   Pager *pPager,                  /* Pager object */
45110:   int *pbOpen                     /* OUT: Set to true if call is a no-op */
45111: ){
45112:   int rc = SQLITE_OK;             /* Return code */
45113: 
45114:   assert( assert_pager_state(pPager) );
45115:   assert( pPager->eState==PAGER_OPEN   || pbOpen );
45116:   assert( pPager->eState==PAGER_READER || !pbOpen );
45117:   assert( pbOpen==0 || *pbOpen==0 );
45118:   assert( pbOpen!=0 || (!pPager->tempFile && !pPager->pWal) );
45119: 
45120:   if( !pPager->tempFile && !pPager->pWal ){
45121:     if( !sqlite3PagerWalSupported(pPager) ) return SQLITE_CANTOPEN;
45122: 
45123:     /* Close any rollback journal previously open */
45124:     sqlite3OsClose(pPager->jfd);
45125: 
45126:     rc = pagerOpenWal(pPager);
45127:     if( rc==SQLITE_OK ){
45128:       pPager->journalMode = PAGER_JOURNALMODE_WAL;
45129:       pPager->eState = PAGER_OPEN;
45130:     }
45131:   }else{
45132:     *pbOpen = 1;
45133:   }
45134: 
45135:   return rc;
45136: }
45137: 
45138: /*
45139: ** This function is called to close the connection to the log file prior
45140: ** to switching from WAL to rollback mode.
45141: **
45142: ** Before closing the log file, this function attempts to take an 
45143: ** EXCLUSIVE lock on the database file. If this cannot be obtained, an
45144: ** error (SQLITE_BUSY) is returned and the log connection is not closed.
45145: ** If successful, the EXCLUSIVE lock is not released before returning.
45146: */
45147: SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager){
45148:   int rc = SQLITE_OK;
45149: 
45150:   assert( pPager->journalMode==PAGER_JOURNALMODE_WAL );
45151: 
45152:   /* If the log file is not already open, but does exist in the file-system,
45153:   ** it may need to be checkpointed before the connection can switch to
45154:   ** rollback mode. Open it now so this can happen.
45155:   */
45156:   if( !pPager->pWal ){
45157:     int logexists = 0;
45158:     rc = pagerLockDb(pPager, SHARED_LOCK);
45159:     if( rc==SQLITE_OK ){
45160:       rc = sqlite3OsAccess(
45161:           pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &logexists
45162:       );
45163:     }
45164:     if( rc==SQLITE_OK && logexists ){
45165:       rc = pagerOpenWal(pPager);
45166:     }
45167:   }
45168:     
45169:   /* Checkpoint and close the log. Because an EXCLUSIVE lock is held on
45170:   ** the database file, the log and log-summary files will be deleted.
45171:   */
45172:   if( rc==SQLITE_OK && pPager->pWal ){
45173:     rc = pagerExclusiveLock(pPager);
45174:     if( rc==SQLITE_OK ){
45175:       rc = sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags,
45176:                            pPager->pageSize, (u8*)pPager->pTmpSpace);
45177:       pPager->pWal = 0;
45178:     }
45179:   }
45180:   return rc;
45181: }
45182: 
45183: #ifdef SQLITE_HAS_CODEC
45184: /*
45185: ** This function is called by the wal module when writing page content
45186: ** into the log file.
45187: **
45188: ** This function returns a pointer to a buffer containing the encrypted
45189: ** page content. If a malloc fails, this function may return NULL.
45190: */
45191: SQLITE_PRIVATE void *sqlite3PagerCodec(PgHdr *pPg){
45192:   void *aData = 0;
45193:   CODEC2(pPg->pPager, pPg->pData, pPg->pgno, 6, return 0, aData);
45194:   return aData;
45195: }
45196: #endif /* SQLITE_HAS_CODEC */
45197: 
45198: #endif /* !SQLITE_OMIT_WAL */
45199: 
45200: #endif /* SQLITE_OMIT_DISKIO */
45201: 
45202: /************** End of pager.c ***********************************************/
45203: /************** Begin file wal.c *********************************************/
45204: /*
45205: ** 2010 February 1
45206: **
45207: ** The author disclaims copyright to this source code.  In place of
45208: ** a legal notice, here is a blessing:
45209: **
45210: **    May you do good and not evil.
45211: **    May you find forgiveness for yourself and forgive others.
45212: **    May you share freely, never taking more than you give.
45213: **
45214: *************************************************************************
45215: **
45216: ** This file contains the implementation of a write-ahead log (WAL) used in 
45217: ** "journal_mode=WAL" mode.
45218: **
45219: ** WRITE-AHEAD LOG (WAL) FILE FORMAT
45220: **
45221: ** A WAL file consists of a header followed by zero or more "frames".
45222: ** Each frame records the revised content of a single page from the
45223: ** database file.  All changes to the database are recorded by writing
45224: ** frames into the WAL.  Transactions commit when a frame is written that
45225: ** contains a commit marker.  A single WAL can and usually does record 
45226: ** multiple transactions.  Periodically, the content of the WAL is
45227: ** transferred back into the database file in an operation called a
45228: ** "checkpoint".
45229: **
45230: ** A single WAL file can be used multiple times.  In other words, the
45231: ** WAL can fill up with frames and then be checkpointed and then new
45232: ** frames can overwrite the old ones.  A WAL always grows from beginning
45233: ** toward the end.  Checksums and counters attached to each frame are
45234: ** used to determine which frames within the WAL are valid and which
45235: ** are leftovers from prior checkpoints.
45236: **
45237: ** The WAL header is 32 bytes in size and consists of the following eight
45238: ** big-endian 32-bit unsigned integer values:
45239: **
45240: **     0: Magic number.  0x377f0682 or 0x377f0683
45241: **     4: File format version.  Currently 3007000
45242: **     8: Database page size.  Example: 1024
45243: **    12: Checkpoint sequence number
45244: **    16: Salt-1, random integer incremented with each checkpoint
45245: **    20: Salt-2, a different random integer changing with each ckpt
45246: **    24: Checksum-1 (first part of checksum for first 24 bytes of header).
45247: **    28: Checksum-2 (second part of checksum for first 24 bytes of header).
45248: **
45249: ** Immediately following the wal-header are zero or more frames. Each
45250: ** frame consists of a 24-byte frame-header followed by a <page-size> bytes
45251: ** of page data. The frame-header is six big-endian 32-bit unsigned 
45252: ** integer values, as follows:
45253: **
45254: **     0: Page number.
45255: **     4: For commit records, the size of the database image in pages 
45256: **        after the commit. For all other records, zero.
45257: **     8: Salt-1 (copied from the header)
45258: **    12: Salt-2 (copied from the header)
45259: **    16: Checksum-1.
45260: **    20: Checksum-2.
45261: **
45262: ** A frame is considered valid if and only if the following conditions are
45263: ** true:
45264: **
45265: **    (1) The salt-1 and salt-2 values in the frame-header match
45266: **        salt values in the wal-header
45267: **
45268: **    (2) The checksum values in the final 8 bytes of the frame-header
45269: **        exactly match the checksum computed consecutively on the
45270: **        WAL header and the first 8 bytes and the content of all frames
45271: **        up to and including the current frame.
45272: **
45273: ** The checksum is computed using 32-bit big-endian integers if the
45274: ** magic number in the first 4 bytes of the WAL is 0x377f0683 and it
45275: ** is computed using little-endian if the magic number is 0x377f0682.
45276: ** The checksum values are always stored in the frame header in a
45277: ** big-endian format regardless of which byte order is used to compute
45278: ** the checksum.  The checksum is computed by interpreting the input as
45279: ** an even number of unsigned 32-bit integers: x[0] through x[N].  The
45280: ** algorithm used for the checksum is as follows:
45281: ** 
45282: **   for i from 0 to n-1 step 2:
45283: **     s0 += x[i] + s1;
45284: **     s1 += x[i+1] + s0;
45285: **   endfor
45286: **
45287: ** Note that s0 and s1 are both weighted checksums using fibonacci weights
45288: ** in reverse order (the largest fibonacci weight occurs on the first element
45289: ** of the sequence being summed.)  The s1 value spans all 32-bit 
45290: ** terms of the sequence whereas s0 omits the final term.
45291: **
45292: ** On a checkpoint, the WAL is first VFS.xSync-ed, then valid content of the
45293: ** WAL is transferred into the database, then the database is VFS.xSync-ed.
45294: ** The VFS.xSync operations serve as write barriers - all writes launched
45295: ** before the xSync must complete before any write that launches after the
45296: ** xSync begins.
45297: **
45298: ** After each checkpoint, the salt-1 value is incremented and the salt-2
45299: ** value is randomized.  This prevents old and new frames in the WAL from
45300: ** being considered valid at the same time and being checkpointing together
45301: ** following a crash.
45302: **
45303: ** READER ALGORITHM
45304: **
45305: ** To read a page from the database (call it page number P), a reader
45306: ** first checks the WAL to see if it contains page P.  If so, then the
45307: ** last valid instance of page P that is a followed by a commit frame
45308: ** or is a commit frame itself becomes the value read.  If the WAL
45309: ** contains no copies of page P that are valid and which are a commit
45310: ** frame or are followed by a commit frame, then page P is read from
45311: ** the database file.
45312: **
45313: ** To start a read transaction, the reader records the index of the last
45314: ** valid frame in the WAL.  The reader uses this recorded "mxFrame" value
45315: ** for all subsequent read operations.  New transactions can be appended
45316: ** to the WAL, but as long as the reader uses its original mxFrame value
45317: ** and ignores the newly appended content, it will see a consistent snapshot
45318: ** of the database from a single point in time.  This technique allows
45319: ** multiple concurrent readers to view different versions of the database
45320: ** content simultaneously.
45321: **
45322: ** The reader algorithm in the previous paragraphs works correctly, but 
45323: ** because frames for page P can appear anywhere within the WAL, the
45324: ** reader has to scan the entire WAL looking for page P frames.  If the
45325: ** WAL is large (multiple megabytes is typical) that scan can be slow,
45326: ** and read performance suffers.  To overcome this problem, a separate
45327: ** data structure called the wal-index is maintained to expedite the
45328: ** search for frames of a particular page.
45329: ** 
45330: ** WAL-INDEX FORMAT
45331: **
45332: ** Conceptually, the wal-index is shared memory, though VFS implementations
45333: ** might choose to implement the wal-index using a mmapped file.  Because
45334: ** the wal-index is shared memory, SQLite does not support journal_mode=WAL 
45335: ** on a network filesystem.  All users of the database must be able to
45336: ** share memory.
45337: **
45338: ** The wal-index is transient.  After a crash, the wal-index can (and should
45339: ** be) reconstructed from the original WAL file.  In fact, the VFS is required
45340: ** to either truncate or zero the header of the wal-index when the last
45341: ** connection to it closes.  Because the wal-index is transient, it can
45342: ** use an architecture-specific format; it does not have to be cross-platform.
45343: ** Hence, unlike the database and WAL file formats which store all values
45344: ** as big endian, the wal-index can store multi-byte values in the native
45345: ** byte order of the host computer.
45346: **
45347: ** The purpose of the wal-index is to answer this question quickly:  Given
45348: ** a page number P, return the index of the last frame for page P in the WAL,
45349: ** or return NULL if there are no frames for page P in the WAL.
45350: **
45351: ** The wal-index consists of a header region, followed by an one or
45352: ** more index blocks.  
45353: **
45354: ** The wal-index header contains the total number of frames within the WAL
45355: ** in the the mxFrame field.  
45356: **
45357: ** Each index block except for the first contains information on 
45358: ** HASHTABLE_NPAGE frames. The first index block contains information on
45359: ** HASHTABLE_NPAGE_ONE frames. The values of HASHTABLE_NPAGE_ONE and 
45360: ** HASHTABLE_NPAGE are selected so that together the wal-index header and
45361: ** first index block are the same size as all other index blocks in the
45362: ** wal-index.
45363: **
45364: ** Each index block contains two sections, a page-mapping that contains the
45365: ** database page number associated with each wal frame, and a hash-table 
45366: ** that allows readers to query an index block for a specific page number.
45367: ** The page-mapping is an array of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE
45368: ** for the first index block) 32-bit page numbers. The first entry in the 
45369: ** first index-block contains the database page number corresponding to the
45370: ** first frame in the WAL file. The first entry in the second index block
45371: ** in the WAL file corresponds to the (HASHTABLE_NPAGE_ONE+1)th frame in
45372: ** the log, and so on.
45373: **
45374: ** The last index block in a wal-index usually contains less than the full
45375: ** complement of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE) page-numbers,
45376: ** depending on the contents of the WAL file. This does not change the
45377: ** allocated size of the page-mapping array - the page-mapping array merely
45378: ** contains unused entries.
45379: **
45380: ** Even without using the hash table, the last frame for page P
45381: ** can be found by scanning the page-mapping sections of each index block
45382: ** starting with the last index block and moving toward the first, and
45383: ** within each index block, starting at the end and moving toward the
45384: ** beginning.  The first entry that equals P corresponds to the frame
45385: ** holding the content for that page.
45386: **
45387: ** The hash table consists of HASHTABLE_NSLOT 16-bit unsigned integers.
45388: ** HASHTABLE_NSLOT = 2*HASHTABLE_NPAGE, and there is one entry in the
45389: ** hash table for each page number in the mapping section, so the hash 
45390: ** table is never more than half full.  The expected number of collisions 
45391: ** prior to finding a match is 1.  Each entry of the hash table is an
45392: ** 1-based index of an entry in the mapping section of the same
45393: ** index block.   Let K be the 1-based index of the largest entry in
45394: ** the mapping section.  (For index blocks other than the last, K will
45395: ** always be exactly HASHTABLE_NPAGE (4096) and for the last index block
45396: ** K will be (mxFrame%HASHTABLE_NPAGE).)  Unused slots of the hash table
45397: ** contain a value of 0.
45398: **
45399: ** To look for page P in the hash table, first compute a hash iKey on
45400: ** P as follows:
45401: **
45402: **      iKey = (P * 383) % HASHTABLE_NSLOT
45403: **
45404: ** Then start scanning entries of the hash table, starting with iKey
45405: ** (wrapping around to the beginning when the end of the hash table is
45406: ** reached) until an unused hash slot is found. Let the first unused slot
45407: ** be at index iUnused.  (iUnused might be less than iKey if there was
45408: ** wrap-around.) Because the hash table is never more than half full,
45409: ** the search is guaranteed to eventually hit an unused entry.  Let 
45410: ** iMax be the value between iKey and iUnused, closest to iUnused,
45411: ** where aHash[iMax]==P.  If there is no iMax entry (if there exists
45412: ** no hash slot such that aHash[i]==p) then page P is not in the
45413: ** current index block.  Otherwise the iMax-th mapping entry of the
45414: ** current index block corresponds to the last entry that references 
45415: ** page P.
45416: **
45417: ** A hash search begins with the last index block and moves toward the
45418: ** first index block, looking for entries corresponding to page P.  On
45419: ** average, only two or three slots in each index block need to be
45420: ** examined in order to either find the last entry for page P, or to
45421: ** establish that no such entry exists in the block.  Each index block
45422: ** holds over 4000 entries.  So two or three index blocks are sufficient
45423: ** to cover a typical 10 megabyte WAL file, assuming 1K pages.  8 or 10
45424: ** comparisons (on average) suffice to either locate a frame in the
45425: ** WAL or to establish that the frame does not exist in the WAL.  This
45426: ** is much faster than scanning the entire 10MB WAL.
45427: **
45428: ** Note that entries are added in order of increasing K.  Hence, one
45429: ** reader might be using some value K0 and a second reader that started
45430: ** at a later time (after additional transactions were added to the WAL
45431: ** and to the wal-index) might be using a different value K1, where K1>K0.
45432: ** Both readers can use the same hash table and mapping section to get
45433: ** the correct result.  There may be entries in the hash table with
45434: ** K>K0 but to the first reader, those entries will appear to be unused
45435: ** slots in the hash table and so the first reader will get an answer as
45436: ** if no values greater than K0 had ever been inserted into the hash table
45437: ** in the first place - which is what reader one wants.  Meanwhile, the
45438: ** second reader using K1 will see additional values that were inserted
45439: ** later, which is exactly what reader two wants.  
45440: **
45441: ** When a rollback occurs, the value of K is decreased. Hash table entries
45442: ** that correspond to frames greater than the new K value are removed
45443: ** from the hash table at this point.
45444: */
45445: #ifndef SQLITE_OMIT_WAL
45446: 
45447: 
45448: /*
45449: ** Trace output macros
45450: */
45451: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
45452: SQLITE_PRIVATE int sqlite3WalTrace = 0;
45453: # define WALTRACE(X)  if(sqlite3WalTrace) sqlite3DebugPrintf X
45454: #else
45455: # define WALTRACE(X)
45456: #endif
45457: 
45458: /*
45459: ** The maximum (and only) versions of the wal and wal-index formats
45460: ** that may be interpreted by this version of SQLite.
45461: **
45462: ** If a client begins recovering a WAL file and finds that (a) the checksum
45463: ** values in the wal-header are correct and (b) the version field is not
45464: ** WAL_MAX_VERSION, recovery fails and SQLite returns SQLITE_CANTOPEN.
45465: **
45466: ** Similarly, if a client successfully reads a wal-index header (i.e. the 
45467: ** checksum test is successful) and finds that the version field is not
45468: ** WALINDEX_MAX_VERSION, then no read-transaction is opened and SQLite
45469: ** returns SQLITE_CANTOPEN.
45470: */
45471: #define WAL_MAX_VERSION      3007000
45472: #define WALINDEX_MAX_VERSION 3007000
45473: 
45474: /*
45475: ** Indices of various locking bytes.   WAL_NREADER is the number
45476: ** of available reader locks and should be at least 3.
45477: */
45478: #define WAL_WRITE_LOCK         0
45479: #define WAL_ALL_BUT_WRITE      1
45480: #define WAL_CKPT_LOCK          1
45481: #define WAL_RECOVER_LOCK       2
45482: #define WAL_READ_LOCK(I)       (3+(I))
45483: #define WAL_NREADER            (SQLITE_SHM_NLOCK-3)
45484: 
45485: 
45486: /* Object declarations */
45487: typedef struct WalIndexHdr WalIndexHdr;
45488: typedef struct WalIterator WalIterator;
45489: typedef struct WalCkptInfo WalCkptInfo;
45490: 
45491: 
45492: /*
45493: ** The following object holds a copy of the wal-index header content.
45494: **
45495: ** The actual header in the wal-index consists of two copies of this
45496: ** object.
45497: **
45498: ** The szPage value can be any power of 2 between 512 and 32768, inclusive.
45499: ** Or it can be 1 to represent a 65536-byte page.  The latter case was
45500: ** added in 3.7.1 when support for 64K pages was added.  
45501: */
45502: struct WalIndexHdr {
45503:   u32 iVersion;                   /* Wal-index version */
45504:   u32 unused;                     /* Unused (padding) field */
45505:   u32 iChange;                    /* Counter incremented each transaction */
45506:   u8 isInit;                      /* 1 when initialized */
45507:   u8 bigEndCksum;                 /* True if checksums in WAL are big-endian */
45508:   u16 szPage;                     /* Database page size in bytes. 1==64K */
45509:   u32 mxFrame;                    /* Index of last valid frame in the WAL */
45510:   u32 nPage;                      /* Size of database in pages */
45511:   u32 aFrameCksum[2];             /* Checksum of last frame in log */
45512:   u32 aSalt[2];                   /* Two salt values copied from WAL header */
45513:   u32 aCksum[2];                  /* Checksum over all prior fields */
45514: };
45515: 
45516: /*
45517: ** A copy of the following object occurs in the wal-index immediately
45518: ** following the second copy of the WalIndexHdr.  This object stores
45519: ** information used by checkpoint.
45520: **
45521: ** nBackfill is the number of frames in the WAL that have been written
45522: ** back into the database. (We call the act of moving content from WAL to
45523: ** database "backfilling".)  The nBackfill number is never greater than
45524: ** WalIndexHdr.mxFrame.  nBackfill can only be increased by threads
45525: ** holding the WAL_CKPT_LOCK lock (which includes a recovery thread).
45526: ** However, a WAL_WRITE_LOCK thread can move the value of nBackfill from
45527: ** mxFrame back to zero when the WAL is reset.
45528: **
45529: ** There is one entry in aReadMark[] for each reader lock.  If a reader
45530: ** holds read-lock K, then the value in aReadMark[K] is no greater than
45531: ** the mxFrame for that reader.  The value READMARK_NOT_USED (0xffffffff)
45532: ** for any aReadMark[] means that entry is unused.  aReadMark[0] is 
45533: ** a special case; its value is never used and it exists as a place-holder
45534: ** to avoid having to offset aReadMark[] indexs by one.  Readers holding
45535: ** WAL_READ_LOCK(0) always ignore the entire WAL and read all content
45536: ** directly from the database.
45537: **
45538: ** The value of aReadMark[K] may only be changed by a thread that
45539: ** is holding an exclusive lock on WAL_READ_LOCK(K).  Thus, the value of
45540: ** aReadMark[K] cannot changed while there is a reader is using that mark
45541: ** since the reader will be holding a shared lock on WAL_READ_LOCK(K).
45542: **
45543: ** The checkpointer may only transfer frames from WAL to database where
45544: ** the frame numbers are less than or equal to every aReadMark[] that is
45545: ** in use (that is, every aReadMark[j] for which there is a corresponding
45546: ** WAL_READ_LOCK(j)).  New readers (usually) pick the aReadMark[] with the
45547: ** largest value and will increase an unused aReadMark[] to mxFrame if there
45548: ** is not already an aReadMark[] equal to mxFrame.  The exception to the
45549: ** previous sentence is when nBackfill equals mxFrame (meaning that everything
45550: ** in the WAL has been backfilled into the database) then new readers
45551: ** will choose aReadMark[0] which has value 0 and hence such reader will
45552: ** get all their all content directly from the database file and ignore 
45553: ** the WAL.
45554: **
45555: ** Writers normally append new frames to the end of the WAL.  However,
45556: ** if nBackfill equals mxFrame (meaning that all WAL content has been
45557: ** written back into the database) and if no readers are using the WAL
45558: ** (in other words, if there are no WAL_READ_LOCK(i) where i>0) then
45559: ** the writer will first "reset" the WAL back to the beginning and start
45560: ** writing new content beginning at frame 1.
45561: **
45562: ** We assume that 32-bit loads are atomic and so no locks are needed in
45563: ** order to read from any aReadMark[] entries.
45564: */
45565: struct WalCkptInfo {
45566:   u32 nBackfill;                  /* Number of WAL frames backfilled into DB */
45567:   u32 aReadMark[WAL_NREADER];     /* Reader marks */
45568: };
45569: #define READMARK_NOT_USED  0xffffffff
45570: 
45571: 
45572: /* A block of WALINDEX_LOCK_RESERVED bytes beginning at
45573: ** WALINDEX_LOCK_OFFSET is reserved for locks. Since some systems
45574: ** only support mandatory file-locks, we do not read or write data
45575: ** from the region of the file on which locks are applied.
45576: */
45577: #define WALINDEX_LOCK_OFFSET   (sizeof(WalIndexHdr)*2 + sizeof(WalCkptInfo))
45578: #define WALINDEX_LOCK_RESERVED 16
45579: #define WALINDEX_HDR_SIZE      (WALINDEX_LOCK_OFFSET+WALINDEX_LOCK_RESERVED)
45580: 
45581: /* Size of header before each frame in wal */
45582: #define WAL_FRAME_HDRSIZE 24
45583: 
45584: /* Size of write ahead log header, including checksum. */
45585: /* #define WAL_HDRSIZE 24 */
45586: #define WAL_HDRSIZE 32
45587: 
45588: /* WAL magic value. Either this value, or the same value with the least
45589: ** significant bit also set (WAL_MAGIC | 0x00000001) is stored in 32-bit
45590: ** big-endian format in the first 4 bytes of a WAL file.
45591: **
45592: ** If the LSB is set, then the checksums for each frame within the WAL
45593: ** file are calculated by treating all data as an array of 32-bit 
45594: ** big-endian words. Otherwise, they are calculated by interpreting 
45595: ** all data as 32-bit little-endian words.
45596: */
45597: #define WAL_MAGIC 0x377f0682
45598: 
45599: /*
45600: ** Return the offset of frame iFrame in the write-ahead log file, 
45601: ** assuming a database page size of szPage bytes. The offset returned
45602: ** is to the start of the write-ahead log frame-header.
45603: */
45604: #define walFrameOffset(iFrame, szPage) (                               \
45605:   WAL_HDRSIZE + ((iFrame)-1)*(i64)((szPage)+WAL_FRAME_HDRSIZE)         \
45606: )
45607: 
45608: /*
45609: ** An open write-ahead log file is represented by an instance of the
45610: ** following object.
45611: */
45612: struct Wal {
45613:   sqlite3_vfs *pVfs;         /* The VFS used to create pDbFd */
45614:   sqlite3_file *pDbFd;       /* File handle for the database file */
45615:   sqlite3_file *pWalFd;      /* File handle for WAL file */
45616:   u32 iCallback;             /* Value to pass to log callback (or 0) */
45617:   i64 mxWalSize;             /* Truncate WAL to this size upon reset */
45618:   int nWiData;               /* Size of array apWiData */
45619:   int szFirstBlock;          /* Size of first block written to WAL file */
45620:   volatile u32 **apWiData;   /* Pointer to wal-index content in memory */
45621:   u32 szPage;                /* Database page size */
45622:   i16 readLock;              /* Which read lock is being held.  -1 for none */
45623:   u8 syncFlags;              /* Flags to use to sync header writes */
45624:   u8 exclusiveMode;          /* Non-zero if connection is in exclusive mode */
45625:   u8 writeLock;              /* True if in a write transaction */
45626:   u8 ckptLock;               /* True if holding a checkpoint lock */
45627:   u8 readOnly;               /* WAL_RDWR, WAL_RDONLY, or WAL_SHM_RDONLY */
45628:   u8 truncateOnCommit;       /* True to truncate WAL file on commit */
45629:   u8 syncHeader;             /* Fsync the WAL header if true */
45630:   u8 padToSectorBoundary;    /* Pad transactions out to the next sector */
45631:   WalIndexHdr hdr;           /* Wal-index header for current transaction */
45632:   const char *zWalName;      /* Name of WAL file */
45633:   u32 nCkpt;                 /* Checkpoint sequence counter in the wal-header */
45634: #ifdef SQLITE_DEBUG
45635:   u8 lockError;              /* True if a locking error has occurred */
45636: #endif
45637: };
45638: 
45639: /*
45640: ** Candidate values for Wal.exclusiveMode.
45641: */
45642: #define WAL_NORMAL_MODE     0
45643: #define WAL_EXCLUSIVE_MODE  1     
45644: #define WAL_HEAPMEMORY_MODE 2
45645: 
45646: /*
45647: ** Possible values for WAL.readOnly
45648: */
45649: #define WAL_RDWR        0    /* Normal read/write connection */
45650: #define WAL_RDONLY      1    /* The WAL file is readonly */
45651: #define WAL_SHM_RDONLY  2    /* The SHM file is readonly */
45652: 
45653: /*
45654: ** Each page of the wal-index mapping contains a hash-table made up of
45655: ** an array of HASHTABLE_NSLOT elements of the following type.
45656: */
45657: typedef u16 ht_slot;
45658: 
45659: /*
45660: ** This structure is used to implement an iterator that loops through
45661: ** all frames in the WAL in database page order. Where two or more frames
45662: ** correspond to the same database page, the iterator visits only the 
45663: ** frame most recently written to the WAL (in other words, the frame with
45664: ** the largest index).
45665: **
45666: ** The internals of this structure are only accessed by:
45667: **
45668: **   walIteratorInit() - Create a new iterator,
45669: **   walIteratorNext() - Step an iterator,
45670: **   walIteratorFree() - Free an iterator.
45671: **
45672: ** This functionality is used by the checkpoint code (see walCheckpoint()).
45673: */
45674: struct WalIterator {
45675:   int iPrior;                     /* Last result returned from the iterator */
45676:   int nSegment;                   /* Number of entries in aSegment[] */
45677:   struct WalSegment {
45678:     int iNext;                    /* Next slot in aIndex[] not yet returned */
45679:     ht_slot *aIndex;              /* i0, i1, i2... such that aPgno[iN] ascend */
45680:     u32 *aPgno;                   /* Array of page numbers. */
45681:     int nEntry;                   /* Nr. of entries in aPgno[] and aIndex[] */
45682:     int iZero;                    /* Frame number associated with aPgno[0] */
45683:   } aSegment[1];                  /* One for every 32KB page in the wal-index */
45684: };
45685: 
45686: /*
45687: ** Define the parameters of the hash tables in the wal-index file. There
45688: ** is a hash-table following every HASHTABLE_NPAGE page numbers in the
45689: ** wal-index.
45690: **
45691: ** Changing any of these constants will alter the wal-index format and
45692: ** create incompatibilities.
45693: */
45694: #define HASHTABLE_NPAGE      4096                 /* Must be power of 2 */
45695: #define HASHTABLE_HASH_1     383                  /* Should be prime */
45696: #define HASHTABLE_NSLOT      (HASHTABLE_NPAGE*2)  /* Must be a power of 2 */
45697: 
45698: /* 
45699: ** The block of page numbers associated with the first hash-table in a
45700: ** wal-index is smaller than usual. This is so that there is a complete
45701: ** hash-table on each aligned 32KB page of the wal-index.
45702: */
45703: #define HASHTABLE_NPAGE_ONE  (HASHTABLE_NPAGE - (WALINDEX_HDR_SIZE/sizeof(u32)))
45704: 
45705: /* The wal-index is divided into pages of WALINDEX_PGSZ bytes each. */
45706: #define WALINDEX_PGSZ   (                                         \
45707:     sizeof(ht_slot)*HASHTABLE_NSLOT + HASHTABLE_NPAGE*sizeof(u32) \
45708: )
45709: 
45710: /*
45711: ** Obtain a pointer to the iPage'th page of the wal-index. The wal-index
45712: ** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are
45713: ** numbered from zero.
45714: **
45715: ** If this call is successful, *ppPage is set to point to the wal-index
45716: ** page and SQLITE_OK is returned. If an error (an OOM or VFS error) occurs,
45717: ** then an SQLite error code is returned and *ppPage is set to 0.
45718: */
45719: static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){
45720:   int rc = SQLITE_OK;
45721: 
45722:   /* Enlarge the pWal->apWiData[] array if required */
45723:   if( pWal->nWiData<=iPage ){
45724:     int nByte = sizeof(u32*)*(iPage+1);
45725:     volatile u32 **apNew;
45726:     apNew = (volatile u32 **)sqlite3_realloc((void *)pWal->apWiData, nByte);
45727:     if( !apNew ){
45728:       *ppPage = 0;
45729:       return SQLITE_NOMEM;
45730:     }
45731:     memset((void*)&apNew[pWal->nWiData], 0,
45732:            sizeof(u32*)*(iPage+1-pWal->nWiData));
45733:     pWal->apWiData = apNew;
45734:     pWal->nWiData = iPage+1;
45735:   }
45736: 
45737:   /* Request a pointer to the required page from the VFS */
45738:   if( pWal->apWiData[iPage]==0 ){
45739:     if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
45740:       pWal->apWiData[iPage] = (u32 volatile *)sqlite3MallocZero(WALINDEX_PGSZ);
45741:       if( !pWal->apWiData[iPage] ) rc = SQLITE_NOMEM;
45742:     }else{
45743:       rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ, 
45744:           pWal->writeLock, (void volatile **)&pWal->apWiData[iPage]
45745:       );
45746:       if( rc==SQLITE_READONLY ){
45747:         pWal->readOnly |= WAL_SHM_RDONLY;
45748:         rc = SQLITE_OK;
45749:       }
45750:     }
45751:   }
45752: 
45753:   *ppPage = pWal->apWiData[iPage];
45754:   assert( iPage==0 || *ppPage || rc!=SQLITE_OK );
45755:   return rc;
45756: }
45757: 
45758: /*
45759: ** Return a pointer to the WalCkptInfo structure in the wal-index.
45760: */
45761: static volatile WalCkptInfo *walCkptInfo(Wal *pWal){
45762:   assert( pWal->nWiData>0 && pWal->apWiData[0] );
45763:   return (volatile WalCkptInfo*)&(pWal->apWiData[0][sizeof(WalIndexHdr)/2]);
45764: }
45765: 
45766: /*
45767: ** Return a pointer to the WalIndexHdr structure in the wal-index.
45768: */
45769: static volatile WalIndexHdr *walIndexHdr(Wal *pWal){
45770:   assert( pWal->nWiData>0 && pWal->apWiData[0] );
45771:   return (volatile WalIndexHdr*)pWal->apWiData[0];
45772: }
45773: 
45774: /*
45775: ** The argument to this macro must be of type u32. On a little-endian
45776: ** architecture, it returns the u32 value that results from interpreting
45777: ** the 4 bytes as a big-endian value. On a big-endian architecture, it
45778: ** returns the value that would be produced by intepreting the 4 bytes
45779: ** of the input value as a little-endian integer.
45780: */
45781: #define BYTESWAP32(x) ( \
45782:     (((x)&0x000000FF)<<24) + (((x)&0x0000FF00)<<8)  \
45783:   + (((x)&0x00FF0000)>>8)  + (((x)&0xFF000000)>>24) \
45784: )
45785: 
45786: /*
45787: ** Generate or extend an 8 byte checksum based on the data in 
45788: ** array aByte[] and the initial values of aIn[0] and aIn[1] (or
45789: ** initial values of 0 and 0 if aIn==NULL).
45790: **
45791: ** The checksum is written back into aOut[] before returning.
45792: **
45793: ** nByte must be a positive multiple of 8.
45794: */
45795: static void walChecksumBytes(
45796:   int nativeCksum, /* True for native byte-order, false for non-native */
45797:   u8 *a,           /* Content to be checksummed */
45798:   int nByte,       /* Bytes of content in a[].  Must be a multiple of 8. */
45799:   const u32 *aIn,  /* Initial checksum value input */
45800:   u32 *aOut        /* OUT: Final checksum value output */
45801: ){
45802:   u32 s1, s2;
45803:   u32 *aData = (u32 *)a;
45804:   u32 *aEnd = (u32 *)&a[nByte];
45805: 
45806:   if( aIn ){
45807:     s1 = aIn[0];
45808:     s2 = aIn[1];
45809:   }else{
45810:     s1 = s2 = 0;
45811:   }
45812: 
45813:   assert( nByte>=8 );
45814:   assert( (nByte&0x00000007)==0 );
45815: 
45816:   if( nativeCksum ){
45817:     do {
45818:       s1 += *aData++ + s2;
45819:       s2 += *aData++ + s1;
45820:     }while( aData<aEnd );
45821:   }else{
45822:     do {
45823:       s1 += BYTESWAP32(aData[0]) + s2;
45824:       s2 += BYTESWAP32(aData[1]) + s1;
45825:       aData += 2;
45826:     }while( aData<aEnd );
45827:   }
45828: 
45829:   aOut[0] = s1;
45830:   aOut[1] = s2;
45831: }
45832: 
45833: static void walShmBarrier(Wal *pWal){
45834:   if( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE ){
45835:     sqlite3OsShmBarrier(pWal->pDbFd);
45836:   }
45837: }
45838: 
45839: /*
45840: ** Write the header information in pWal->hdr into the wal-index.
45841: **
45842: ** The checksum on pWal->hdr is updated before it is written.
45843: */
45844: static void walIndexWriteHdr(Wal *pWal){
45845:   volatile WalIndexHdr *aHdr = walIndexHdr(pWal);
45846:   const int nCksum = offsetof(WalIndexHdr, aCksum);
45847: 
45848:   assert( pWal->writeLock );
45849:   pWal->hdr.isInit = 1;
45850:   pWal->hdr.iVersion = WALINDEX_MAX_VERSION;
45851:   walChecksumBytes(1, (u8*)&pWal->hdr, nCksum, 0, pWal->hdr.aCksum);
45852:   memcpy((void *)&aHdr[1], (void *)&pWal->hdr, sizeof(WalIndexHdr));
45853:   walShmBarrier(pWal);
45854:   memcpy((void *)&aHdr[0], (void *)&pWal->hdr, sizeof(WalIndexHdr));
45855: }
45856: 
45857: /*
45858: ** This function encodes a single frame header and writes it to a buffer
45859: ** supplied by the caller. A frame-header is made up of a series of 
45860: ** 4-byte big-endian integers, as follows:
45861: **
45862: **     0: Page number.
45863: **     4: For commit records, the size of the database image in pages 
45864: **        after the commit. For all other records, zero.
45865: **     8: Salt-1 (copied from the wal-header)
45866: **    12: Salt-2 (copied from the wal-header)
45867: **    16: Checksum-1.
45868: **    20: Checksum-2.
45869: */
45870: static void walEncodeFrame(
45871:   Wal *pWal,                      /* The write-ahead log */
45872:   u32 iPage,                      /* Database page number for frame */
45873:   u32 nTruncate,                  /* New db size (or 0 for non-commit frames) */
45874:   u8 *aData,                      /* Pointer to page data */
45875:   u8 *aFrame                      /* OUT: Write encoded frame here */
45876: ){
45877:   int nativeCksum;                /* True for native byte-order checksums */
45878:   u32 *aCksum = pWal->hdr.aFrameCksum;
45879:   assert( WAL_FRAME_HDRSIZE==24 );
45880:   sqlite3Put4byte(&aFrame[0], iPage);
45881:   sqlite3Put4byte(&aFrame[4], nTruncate);
45882:   memcpy(&aFrame[8], pWal->hdr.aSalt, 8);
45883: 
45884:   nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN);
45885:   walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum);
45886:   walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
45887: 
45888:   sqlite3Put4byte(&aFrame[16], aCksum[0]);
45889:   sqlite3Put4byte(&aFrame[20], aCksum[1]);
45890: }
45891: 
45892: /*
45893: ** Check to see if the frame with header in aFrame[] and content
45894: ** in aData[] is valid.  If it is a valid frame, fill *piPage and
45895: ** *pnTruncate and return true.  Return if the frame is not valid.
45896: */
45897: static int walDecodeFrame(
45898:   Wal *pWal,                      /* The write-ahead log */
45899:   u32 *piPage,                    /* OUT: Database page number for frame */
45900:   u32 *pnTruncate,                /* OUT: New db size (or 0 if not commit) */
45901:   u8 *aData,                      /* Pointer to page data (for checksum) */
45902:   u8 *aFrame                      /* Frame data */
45903: ){
45904:   int nativeCksum;                /* True for native byte-order checksums */
45905:   u32 *aCksum = pWal->hdr.aFrameCksum;
45906:   u32 pgno;                       /* Page number of the frame */
45907:   assert( WAL_FRAME_HDRSIZE==24 );
45908: 
45909:   /* A frame is only valid if the salt values in the frame-header
45910:   ** match the salt values in the wal-header. 
45911:   */
45912:   if( memcmp(&pWal->hdr.aSalt, &aFrame[8], 8)!=0 ){
45913:     return 0;
45914:   }
45915: 
45916:   /* A frame is only valid if the page number is creater than zero.
45917:   */
45918:   pgno = sqlite3Get4byte(&aFrame[0]);
45919:   if( pgno==0 ){
45920:     return 0;
45921:   }
45922: 
45923:   /* A frame is only valid if a checksum of the WAL header,
45924:   ** all prior frams, the first 16 bytes of this frame-header, 
45925:   ** and the frame-data matches the checksum in the last 8 
45926:   ** bytes of this frame-header.
45927:   */
45928:   nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN);
45929:   walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum);
45930:   walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
45931:   if( aCksum[0]!=sqlite3Get4byte(&aFrame[16]) 
45932:    || aCksum[1]!=sqlite3Get4byte(&aFrame[20]) 
45933:   ){
45934:     /* Checksum failed. */
45935:     return 0;
45936:   }
45937: 
45938:   /* If we reach this point, the frame is valid.  Return the page number
45939:   ** and the new database size.
45940:   */
45941:   *piPage = pgno;
45942:   *pnTruncate = sqlite3Get4byte(&aFrame[4]);
45943:   return 1;
45944: }
45945: 
45946: 
45947: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
45948: /*
45949: ** Names of locks.  This routine is used to provide debugging output and is not
45950: ** a part of an ordinary build.
45951: */
45952: static const char *walLockName(int lockIdx){
45953:   if( lockIdx==WAL_WRITE_LOCK ){
45954:     return "WRITE-LOCK";
45955:   }else if( lockIdx==WAL_CKPT_LOCK ){
45956:     return "CKPT-LOCK";
45957:   }else if( lockIdx==WAL_RECOVER_LOCK ){
45958:     return "RECOVER-LOCK";
45959:   }else{
45960:     static char zName[15];
45961:     sqlite3_snprintf(sizeof(zName), zName, "READ-LOCK[%d]",
45962:                      lockIdx-WAL_READ_LOCK(0));
45963:     return zName;
45964:   }
45965: }
45966: #endif /*defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */
45967:     
45968: 
45969: /*
45970: ** Set or release locks on the WAL.  Locks are either shared or exclusive.
45971: ** A lock cannot be moved directly between shared and exclusive - it must go
45972: ** through the unlocked state first.
45973: **
45974: ** In locking_mode=EXCLUSIVE, all of these routines become no-ops.
45975: */
45976: static int walLockShared(Wal *pWal, int lockIdx){
45977:   int rc;
45978:   if( pWal->exclusiveMode ) return SQLITE_OK;
45979:   rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1,
45980:                         SQLITE_SHM_LOCK | SQLITE_SHM_SHARED);
45981:   WALTRACE(("WAL%p: acquire SHARED-%s %s\n", pWal,
45982:             walLockName(lockIdx), rc ? "failed" : "ok"));
45983:   VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); )
45984:   return rc;
45985: }
45986: static void walUnlockShared(Wal *pWal, int lockIdx){
45987:   if( pWal->exclusiveMode ) return;
45988:   (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1,
45989:                          SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED);
45990:   WALTRACE(("WAL%p: release SHARED-%s\n", pWal, walLockName(lockIdx)));
45991: }
45992: static int walLockExclusive(Wal *pWal, int lockIdx, int n){
45993:   int rc;
45994:   if( pWal->exclusiveMode ) return SQLITE_OK;
45995:   rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, n,
45996:                         SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE);
45997:   WALTRACE(("WAL%p: acquire EXCLUSIVE-%s cnt=%d %s\n", pWal,
45998:             walLockName(lockIdx), n, rc ? "failed" : "ok"));
45999:   VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); )
46000:   return rc;
46001: }
46002: static void walUnlockExclusive(Wal *pWal, int lockIdx, int n){
46003:   if( pWal->exclusiveMode ) return;
46004:   (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, n,
46005:                          SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE);
46006:   WALTRACE(("WAL%p: release EXCLUSIVE-%s cnt=%d\n", pWal,
46007:              walLockName(lockIdx), n));
46008: }
46009: 
46010: /*
46011: ** Compute a hash on a page number.  The resulting hash value must land
46012: ** between 0 and (HASHTABLE_NSLOT-1).  The walHashNext() function advances
46013: ** the hash to the next value in the event of a collision.
46014: */
46015: static int walHash(u32 iPage){
46016:   assert( iPage>0 );
46017:   assert( (HASHTABLE_NSLOT & (HASHTABLE_NSLOT-1))==0 );
46018:   return (iPage*HASHTABLE_HASH_1) & (HASHTABLE_NSLOT-1);
46019: }
46020: static int walNextHash(int iPriorHash){
46021:   return (iPriorHash+1)&(HASHTABLE_NSLOT-1);
46022: }
46023: 
46024: /* 
46025: ** Return pointers to the hash table and page number array stored on
46026: ** page iHash of the wal-index. The wal-index is broken into 32KB pages
46027: ** numbered starting from 0.
46028: **
46029: ** Set output variable *paHash to point to the start of the hash table
46030: ** in the wal-index file. Set *piZero to one less than the frame 
46031: ** number of the first frame indexed by this hash table. If a
46032: ** slot in the hash table is set to N, it refers to frame number 
46033: ** (*piZero+N) in the log.
46034: **
46035: ** Finally, set *paPgno so that *paPgno[1] is the page number of the
46036: ** first frame indexed by the hash table, frame (*piZero+1).
46037: */
46038: static int walHashGet(
46039:   Wal *pWal,                      /* WAL handle */
46040:   int iHash,                      /* Find the iHash'th table */
46041:   volatile ht_slot **paHash,      /* OUT: Pointer to hash index */
46042:   volatile u32 **paPgno,          /* OUT: Pointer to page number array */
46043:   u32 *piZero                     /* OUT: Frame associated with *paPgno[0] */
46044: ){
46045:   int rc;                         /* Return code */
46046:   volatile u32 *aPgno;
46047: 
46048:   rc = walIndexPage(pWal, iHash, &aPgno);
46049:   assert( rc==SQLITE_OK || iHash>0 );
46050: 
46051:   if( rc==SQLITE_OK ){
46052:     u32 iZero;
46053:     volatile ht_slot *aHash;
46054: 
46055:     aHash = (volatile ht_slot *)&aPgno[HASHTABLE_NPAGE];
46056:     if( iHash==0 ){
46057:       aPgno = &aPgno[WALINDEX_HDR_SIZE/sizeof(u32)];
46058:       iZero = 0;
46059:     }else{
46060:       iZero = HASHTABLE_NPAGE_ONE + (iHash-1)*HASHTABLE_NPAGE;
46061:     }
46062:   
46063:     *paPgno = &aPgno[-1];
46064:     *paHash = aHash;
46065:     *piZero = iZero;
46066:   }
46067:   return rc;
46068: }
46069: 
46070: /*
46071: ** Return the number of the wal-index page that contains the hash-table
46072: ** and page-number array that contain entries corresponding to WAL frame
46073: ** iFrame. The wal-index is broken up into 32KB pages. Wal-index pages 
46074: ** are numbered starting from 0.
46075: */
46076: static int walFramePage(u32 iFrame){
46077:   int iHash = (iFrame+HASHTABLE_NPAGE-HASHTABLE_NPAGE_ONE-1) / HASHTABLE_NPAGE;
46078:   assert( (iHash==0 || iFrame>HASHTABLE_NPAGE_ONE)
46079:        && (iHash>=1 || iFrame<=HASHTABLE_NPAGE_ONE)
46080:        && (iHash<=1 || iFrame>(HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE))
46081:        && (iHash>=2 || iFrame<=HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE)
46082:        && (iHash<=2 || iFrame>(HASHTABLE_NPAGE_ONE+2*HASHTABLE_NPAGE))
46083:   );
46084:   return iHash;
46085: }
46086: 
46087: /*
46088: ** Return the page number associated with frame iFrame in this WAL.
46089: */
46090: static u32 walFramePgno(Wal *pWal, u32 iFrame){
46091:   int iHash = walFramePage(iFrame);
46092:   if( iHash==0 ){
46093:     return pWal->apWiData[0][WALINDEX_HDR_SIZE/sizeof(u32) + iFrame - 1];
46094:   }
46095:   return pWal->apWiData[iHash][(iFrame-1-HASHTABLE_NPAGE_ONE)%HASHTABLE_NPAGE];
46096: }
46097: 
46098: /*
46099: ** Remove entries from the hash table that point to WAL slots greater
46100: ** than pWal->hdr.mxFrame.
46101: **
46102: ** This function is called whenever pWal->hdr.mxFrame is decreased due
46103: ** to a rollback or savepoint.
46104: **
46105: ** At most only the hash table containing pWal->hdr.mxFrame needs to be
46106: ** updated.  Any later hash tables will be automatically cleared when
46107: ** pWal->hdr.mxFrame advances to the point where those hash tables are
46108: ** actually needed.
46109: */
46110: static void walCleanupHash(Wal *pWal){
46111:   volatile ht_slot *aHash = 0;    /* Pointer to hash table to clear */
46112:   volatile u32 *aPgno = 0;        /* Page number array for hash table */
46113:   u32 iZero = 0;                  /* frame == (aHash[x]+iZero) */
46114:   int iLimit = 0;                 /* Zero values greater than this */
46115:   int nByte;                      /* Number of bytes to zero in aPgno[] */
46116:   int i;                          /* Used to iterate through aHash[] */
46117: 
46118:   assert( pWal->writeLock );
46119:   testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE-1 );
46120:   testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE );
46121:   testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE+1 );
46122: 
46123:   if( pWal->hdr.mxFrame==0 ) return;
46124: 
46125:   /* Obtain pointers to the hash-table and page-number array containing 
46126:   ** the entry that corresponds to frame pWal->hdr.mxFrame. It is guaranteed
46127:   ** that the page said hash-table and array reside on is already mapped.
46128:   */
46129:   assert( pWal->nWiData>walFramePage(pWal->hdr.mxFrame) );
46130:   assert( pWal->apWiData[walFramePage(pWal->hdr.mxFrame)] );
46131:   walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &aHash, &aPgno, &iZero);
46132: 
46133:   /* Zero all hash-table entries that correspond to frame numbers greater
46134:   ** than pWal->hdr.mxFrame.
46135:   */
46136:   iLimit = pWal->hdr.mxFrame - iZero;
46137:   assert( iLimit>0 );
46138:   for(i=0; i<HASHTABLE_NSLOT; i++){
46139:     if( aHash[i]>iLimit ){
46140:       aHash[i] = 0;
46141:     }
46142:   }
46143:   
46144:   /* Zero the entries in the aPgno array that correspond to frames with
46145:   ** frame numbers greater than pWal->hdr.mxFrame. 
46146:   */
46147:   nByte = (int)((char *)aHash - (char *)&aPgno[iLimit+1]);
46148:   memset((void *)&aPgno[iLimit+1], 0, nByte);
46149: 
46150: #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
46151:   /* Verify that the every entry in the mapping region is still reachable
46152:   ** via the hash table even after the cleanup.
46153:   */
46154:   if( iLimit ){
46155:     int i;           /* Loop counter */
46156:     int iKey;        /* Hash key */
46157:     for(i=1; i<=iLimit; i++){
46158:       for(iKey=walHash(aPgno[i]); aHash[iKey]; iKey=walNextHash(iKey)){
46159:         if( aHash[iKey]==i ) break;
46160:       }
46161:       assert( aHash[iKey]==i );
46162:     }
46163:   }
46164: #endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */
46165: }
46166: 
46167: 
46168: /*
46169: ** Set an entry in the wal-index that will map database page number
46170: ** pPage into WAL frame iFrame.
46171: */
46172: static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){
46173:   int rc;                         /* Return code */
46174:   u32 iZero = 0;                  /* One less than frame number of aPgno[1] */
46175:   volatile u32 *aPgno = 0;        /* Page number array */
46176:   volatile ht_slot *aHash = 0;    /* Hash table */
46177: 
46178:   rc = walHashGet(pWal, walFramePage(iFrame), &aHash, &aPgno, &iZero);
46179: 
46180:   /* Assuming the wal-index file was successfully mapped, populate the
46181:   ** page number array and hash table entry.
46182:   */
46183:   if( rc==SQLITE_OK ){
46184:     int iKey;                     /* Hash table key */
46185:     int idx;                      /* Value to write to hash-table slot */
46186:     int nCollide;                 /* Number of hash collisions */
46187: 
46188:     idx = iFrame - iZero;
46189:     assert( idx <= HASHTABLE_NSLOT/2 + 1 );
46190:     
46191:     /* If this is the first entry to be added to this hash-table, zero the
46192:     ** entire hash table and aPgno[] array before proceding. 
46193:     */
46194:     if( idx==1 ){
46195:       int nByte = (int)((u8 *)&aHash[HASHTABLE_NSLOT] - (u8 *)&aPgno[1]);
46196:       memset((void*)&aPgno[1], 0, nByte);
46197:     }
46198: 
46199:     /* If the entry in aPgno[] is already set, then the previous writer
46200:     ** must have exited unexpectedly in the middle of a transaction (after
46201:     ** writing one or more dirty pages to the WAL to free up memory). 
46202:     ** Remove the remnants of that writers uncommitted transaction from 
46203:     ** the hash-table before writing any new entries.
46204:     */
46205:     if( aPgno[idx] ){
46206:       walCleanupHash(pWal);
46207:       assert( !aPgno[idx] );
46208:     }
46209: 
46210:     /* Write the aPgno[] array entry and the hash-table slot. */
46211:     nCollide = idx;
46212:     for(iKey=walHash(iPage); aHash[iKey]; iKey=walNextHash(iKey)){
46213:       if( (nCollide--)==0 ) return SQLITE_CORRUPT_BKPT;
46214:     }
46215:     aPgno[idx] = iPage;
46216:     aHash[iKey] = (ht_slot)idx;
46217: 
46218: #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
46219:     /* Verify that the number of entries in the hash table exactly equals
46220:     ** the number of entries in the mapping region.
46221:     */
46222:     {
46223:       int i;           /* Loop counter */
46224:       int nEntry = 0;  /* Number of entries in the hash table */
46225:       for(i=0; i<HASHTABLE_NSLOT; i++){ if( aHash[i] ) nEntry++; }
46226:       assert( nEntry==idx );
46227:     }
46228: 
46229:     /* Verify that the every entry in the mapping region is reachable
46230:     ** via the hash table.  This turns out to be a really, really expensive
46231:     ** thing to check, so only do this occasionally - not on every
46232:     ** iteration.
46233:     */
46234:     if( (idx&0x3ff)==0 ){
46235:       int i;           /* Loop counter */
46236:       for(i=1; i<=idx; i++){
46237:         for(iKey=walHash(aPgno[i]); aHash[iKey]; iKey=walNextHash(iKey)){
46238:           if( aHash[iKey]==i ) break;
46239:         }
46240:         assert( aHash[iKey]==i );
46241:       }
46242:     }
46243: #endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */
46244:   }
46245: 
46246: 
46247:   return rc;
46248: }
46249: 
46250: 
46251: /*
46252: ** Recover the wal-index by reading the write-ahead log file. 
46253: **
46254: ** This routine first tries to establish an exclusive lock on the
46255: ** wal-index to prevent other threads/processes from doing anything
46256: ** with the WAL or wal-index while recovery is running.  The
46257: ** WAL_RECOVER_LOCK is also held so that other threads will know
46258: ** that this thread is running recovery.  If unable to establish
46259: ** the necessary locks, this routine returns SQLITE_BUSY.
46260: */
46261: static int walIndexRecover(Wal *pWal){
46262:   int rc;                         /* Return Code */
46263:   i64 nSize;                      /* Size of log file */
46264:   u32 aFrameCksum[2] = {0, 0};
46265:   int iLock;                      /* Lock offset to lock for checkpoint */
46266:   int nLock;                      /* Number of locks to hold */
46267: 
46268:   /* Obtain an exclusive lock on all byte in the locking range not already
46269:   ** locked by the caller. The caller is guaranteed to have locked the
46270:   ** WAL_WRITE_LOCK byte, and may have also locked the WAL_CKPT_LOCK byte.
46271:   ** If successful, the same bytes that are locked here are unlocked before
46272:   ** this function returns.
46273:   */
46274:   assert( pWal->ckptLock==1 || pWal->ckptLock==0 );
46275:   assert( WAL_ALL_BUT_WRITE==WAL_WRITE_LOCK+1 );
46276:   assert( WAL_CKPT_LOCK==WAL_ALL_BUT_WRITE );
46277:   assert( pWal->writeLock );
46278:   iLock = WAL_ALL_BUT_WRITE + pWal->ckptLock;
46279:   nLock = SQLITE_SHM_NLOCK - iLock;
46280:   rc = walLockExclusive(pWal, iLock, nLock);
46281:   if( rc ){
46282:     return rc;
46283:   }
46284:   WALTRACE(("WAL%p: recovery begin...\n", pWal));
46285: 
46286:   memset(&pWal->hdr, 0, sizeof(WalIndexHdr));
46287: 
46288:   rc = sqlite3OsFileSize(pWal->pWalFd, &nSize);
46289:   if( rc!=SQLITE_OK ){
46290:     goto recovery_error;
46291:   }
46292: 
46293:   if( nSize>WAL_HDRSIZE ){
46294:     u8 aBuf[WAL_HDRSIZE];         /* Buffer to load WAL header into */
46295:     u8 *aFrame = 0;               /* Malloc'd buffer to load entire frame */
46296:     int szFrame;                  /* Number of bytes in buffer aFrame[] */
46297:     u8 *aData;                    /* Pointer to data part of aFrame buffer */
46298:     int iFrame;                   /* Index of last frame read */
46299:     i64 iOffset;                  /* Next offset to read from log file */
46300:     int szPage;                   /* Page size according to the log */
46301:     u32 magic;                    /* Magic value read from WAL header */
46302:     u32 version;                  /* Magic value read from WAL header */
46303:     int isValid;                  /* True if this frame is valid */
46304: 
46305:     /* Read in the WAL header. */
46306:     rc = sqlite3OsRead(pWal->pWalFd, aBuf, WAL_HDRSIZE, 0);
46307:     if( rc!=SQLITE_OK ){
46308:       goto recovery_error;
46309:     }
46310: 
46311:     /* If the database page size is not a power of two, or is greater than
46312:     ** SQLITE_MAX_PAGE_SIZE, conclude that the WAL file contains no valid 
46313:     ** data. Similarly, if the 'magic' value is invalid, ignore the whole
46314:     ** WAL file.
46315:     */
46316:     magic = sqlite3Get4byte(&aBuf[0]);
46317:     szPage = sqlite3Get4byte(&aBuf[8]);
46318:     if( (magic&0xFFFFFFFE)!=WAL_MAGIC 
46319:      || szPage&(szPage-1) 
46320:      || szPage>SQLITE_MAX_PAGE_SIZE 
46321:      || szPage<512 
46322:     ){
46323:       goto finished;
46324:     }
46325:     pWal->hdr.bigEndCksum = (u8)(magic&0x00000001);
46326:     pWal->szPage = szPage;
46327:     pWal->nCkpt = sqlite3Get4byte(&aBuf[12]);
46328:     memcpy(&pWal->hdr.aSalt, &aBuf[16], 8);
46329: 
46330:     /* Verify that the WAL header checksum is correct */
46331:     walChecksumBytes(pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN, 
46332:         aBuf, WAL_HDRSIZE-2*4, 0, pWal->hdr.aFrameCksum
46333:     );
46334:     if( pWal->hdr.aFrameCksum[0]!=sqlite3Get4byte(&aBuf[24])
46335:      || pWal->hdr.aFrameCksum[1]!=sqlite3Get4byte(&aBuf[28])
46336:     ){
46337:       goto finished;
46338:     }
46339: 
46340:     /* Verify that the version number on the WAL format is one that
46341:     ** are able to understand */
46342:     version = sqlite3Get4byte(&aBuf[4]);
46343:     if( version!=WAL_MAX_VERSION ){
46344:       rc = SQLITE_CANTOPEN_BKPT;
46345:       goto finished;
46346:     }
46347: 
46348:     /* Malloc a buffer to read frames into. */
46349:     szFrame = szPage + WAL_FRAME_HDRSIZE;
46350:     aFrame = (u8 *)sqlite3_malloc(szFrame);
46351:     if( !aFrame ){
46352:       rc = SQLITE_NOMEM;
46353:       goto recovery_error;
46354:     }
46355:     aData = &aFrame[WAL_FRAME_HDRSIZE];
46356: 
46357:     /* Read all frames from the log file. */
46358:     iFrame = 0;
46359:     for(iOffset=WAL_HDRSIZE; (iOffset+szFrame)<=nSize; iOffset+=szFrame){
46360:       u32 pgno;                   /* Database page number for frame */
46361:       u32 nTruncate;              /* dbsize field from frame header */
46362: 
46363:       /* Read and decode the next log frame. */
46364:       iFrame++;
46365:       rc = sqlite3OsRead(pWal->pWalFd, aFrame, szFrame, iOffset);
46366:       if( rc!=SQLITE_OK ) break;
46367:       isValid = walDecodeFrame(pWal, &pgno, &nTruncate, aData, aFrame);
46368:       if( !isValid ) break;
46369:       rc = walIndexAppend(pWal, iFrame, pgno);
46370:       if( rc!=SQLITE_OK ) break;
46371: 
46372:       /* If nTruncate is non-zero, this is a commit record. */
46373:       if( nTruncate ){
46374:         pWal->hdr.mxFrame = iFrame;
46375:         pWal->hdr.nPage = nTruncate;
46376:         pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16));
46377:         testcase( szPage<=32768 );
46378:         testcase( szPage>=65536 );
46379:         aFrameCksum[0] = pWal->hdr.aFrameCksum[0];
46380:         aFrameCksum[1] = pWal->hdr.aFrameCksum[1];
46381:       }
46382:     }
46383: 
46384:     sqlite3_free(aFrame);
46385:   }
46386: 
46387: finished:
46388:   if( rc==SQLITE_OK ){
46389:     volatile WalCkptInfo *pInfo;
46390:     int i;
46391:     pWal->hdr.aFrameCksum[0] = aFrameCksum[0];
46392:     pWal->hdr.aFrameCksum[1] = aFrameCksum[1];
46393:     walIndexWriteHdr(pWal);
46394: 
46395:     /* Reset the checkpoint-header. This is safe because this thread is 
46396:     ** currently holding locks that exclude all other readers, writers and
46397:     ** checkpointers.
46398:     */
46399:     pInfo = walCkptInfo(pWal);
46400:     pInfo->nBackfill = 0;
46401:     pInfo->aReadMark[0] = 0;
46402:     for(i=1; i<WAL_NREADER; i++) pInfo->aReadMark[i] = READMARK_NOT_USED;
46403: 
46404:     /* If more than one frame was recovered from the log file, report an
46405:     ** event via sqlite3_log(). This is to help with identifying performance
46406:     ** problems caused by applications routinely shutting down without
46407:     ** checkpointing the log file.
46408:     */
46409:     if( pWal->hdr.nPage ){
46410:       sqlite3_log(SQLITE_OK, "Recovered %d frames from WAL file %s",
46411:           pWal->hdr.nPage, pWal->zWalName
46412:       );
46413:     }
46414:   }
46415: 
46416: recovery_error:
46417:   WALTRACE(("WAL%p: recovery %s\n", pWal, rc ? "failed" : "ok"));
46418:   walUnlockExclusive(pWal, iLock, nLock);
46419:   return rc;
46420: }
46421: 
46422: /*
46423: ** Close an open wal-index.
46424: */
46425: static void walIndexClose(Wal *pWal, int isDelete){
46426:   if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
46427:     int i;
46428:     for(i=0; i<pWal->nWiData; i++){
46429:       sqlite3_free((void *)pWal->apWiData[i]);
46430:       pWal->apWiData[i] = 0;
46431:     }
46432:   }else{
46433:     sqlite3OsShmUnmap(pWal->pDbFd, isDelete);
46434:   }
46435: }
46436: 
46437: /* 
46438: ** Open a connection to the WAL file zWalName. The database file must 
46439: ** already be opened on connection pDbFd. The buffer that zWalName points
46440: ** to must remain valid for the lifetime of the returned Wal* handle.
46441: **
46442: ** A SHARED lock should be held on the database file when this function
46443: ** is called. The purpose of this SHARED lock is to prevent any other
46444: ** client from unlinking the WAL or wal-index file. If another process
46445: ** were to do this just after this client opened one of these files, the
46446: ** system would be badly broken.
46447: **
46448: ** If the log file is successfully opened, SQLITE_OK is returned and 
46449: ** *ppWal is set to point to a new WAL handle. If an error occurs,
46450: ** an SQLite error code is returned and *ppWal is left unmodified.
46451: */
46452: SQLITE_PRIVATE int sqlite3WalOpen(
46453:   sqlite3_vfs *pVfs,              /* vfs module to open wal and wal-index */
46454:   sqlite3_file *pDbFd,            /* The open database file */
46455:   const char *zWalName,           /* Name of the WAL file */
46456:   int bNoShm,                     /* True to run in heap-memory mode */
46457:   i64 mxWalSize,                  /* Truncate WAL to this size on reset */
46458:   Wal **ppWal                     /* OUT: Allocated Wal handle */
46459: ){
46460:   int rc;                         /* Return Code */
46461:   Wal *pRet;                      /* Object to allocate and return */
46462:   int flags;                      /* Flags passed to OsOpen() */
46463: 
46464:   assert( zWalName && zWalName[0] );
46465:   assert( pDbFd );
46466: 
46467:   /* In the amalgamation, the os_unix.c and os_win.c source files come before
46468:   ** this source file.  Verify that the #defines of the locking byte offsets
46469:   ** in os_unix.c and os_win.c agree with the WALINDEX_LOCK_OFFSET value.
46470:   */
46471: #ifdef WIN_SHM_BASE
46472:   assert( WIN_SHM_BASE==WALINDEX_LOCK_OFFSET );
46473: #endif
46474: #ifdef UNIX_SHM_BASE
46475:   assert( UNIX_SHM_BASE==WALINDEX_LOCK_OFFSET );
46476: #endif
46477: 
46478: 
46479:   /* Allocate an instance of struct Wal to return. */
46480:   *ppWal = 0;
46481:   pRet = (Wal*)sqlite3MallocZero(sizeof(Wal) + pVfs->szOsFile);
46482:   if( !pRet ){
46483:     return SQLITE_NOMEM;
46484:   }
46485: 
46486:   pRet->pVfs = pVfs;
46487:   pRet->pWalFd = (sqlite3_file *)&pRet[1];
46488:   pRet->pDbFd = pDbFd;
46489:   pRet->readLock = -1;
46490:   pRet->mxWalSize = mxWalSize;
46491:   pRet->zWalName = zWalName;
46492:   pRet->syncHeader = 1;
46493:   pRet->padToSectorBoundary = 1;
46494:   pRet->exclusiveMode = (bNoShm ? WAL_HEAPMEMORY_MODE: WAL_NORMAL_MODE);
46495: 
46496:   /* Open file handle on the write-ahead log file. */
46497:   flags = (SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_WAL);
46498:   rc = sqlite3OsOpen(pVfs, zWalName, pRet->pWalFd, flags, &flags);
46499:   if( rc==SQLITE_OK && flags&SQLITE_OPEN_READONLY ){
46500:     pRet->readOnly = WAL_RDONLY;
46501:   }
46502: 
46503:   if( rc!=SQLITE_OK ){
46504:     walIndexClose(pRet, 0);
46505:     sqlite3OsClose(pRet->pWalFd);
46506:     sqlite3_free(pRet);
46507:   }else{
46508:     int iDC = sqlite3OsDeviceCharacteristics(pRet->pWalFd);
46509:     if( iDC & SQLITE_IOCAP_SEQUENTIAL ){ pRet->syncHeader = 0; }
46510:     if( iDC & SQLITE_IOCAP_POWERSAFE_OVERWRITE ){
46511:       pRet->padToSectorBoundary = 0;
46512:     }
46513:     *ppWal = pRet;
46514:     WALTRACE(("WAL%d: opened\n", pRet));
46515:   }
46516:   return rc;
46517: }
46518: 
46519: /*
46520: ** Change the size to which the WAL file is trucated on each reset.
46521: */
46522: SQLITE_PRIVATE void sqlite3WalLimit(Wal *pWal, i64 iLimit){
46523:   if( pWal ) pWal->mxWalSize = iLimit;
46524: }
46525: 
46526: /*
46527: ** Find the smallest page number out of all pages held in the WAL that
46528: ** has not been returned by any prior invocation of this method on the
46529: ** same WalIterator object.   Write into *piFrame the frame index where
46530: ** that page was last written into the WAL.  Write into *piPage the page
46531: ** number.
46532: **
46533: ** Return 0 on success.  If there are no pages in the WAL with a page
46534: ** number larger than *piPage, then return 1.
46535: */
46536: static int walIteratorNext(
46537:   WalIterator *p,               /* Iterator */
46538:   u32 *piPage,                  /* OUT: The page number of the next page */
46539:   u32 *piFrame                  /* OUT: Wal frame index of next page */
46540: ){
46541:   u32 iMin;                     /* Result pgno must be greater than iMin */
46542:   u32 iRet = 0xFFFFFFFF;        /* 0xffffffff is never a valid page number */
46543:   int i;                        /* For looping through segments */
46544: 
46545:   iMin = p->iPrior;
46546:   assert( iMin<0xffffffff );
46547:   for(i=p->nSegment-1; i>=0; i--){
46548:     struct WalSegment *pSegment = &p->aSegment[i];
46549:     while( pSegment->iNext<pSegment->nEntry ){
46550:       u32 iPg = pSegment->aPgno[pSegment->aIndex[pSegment->iNext]];
46551:       if( iPg>iMin ){
46552:         if( iPg<iRet ){
46553:           iRet = iPg;
46554:           *piFrame = pSegment->iZero + pSegment->aIndex[pSegment->iNext];
46555:         }
46556:         break;
46557:       }
46558:       pSegment->iNext++;
46559:     }
46560:   }
46561: 
46562:   *piPage = p->iPrior = iRet;
46563:   return (iRet==0xFFFFFFFF);
46564: }
46565: 
46566: /*
46567: ** This function merges two sorted lists into a single sorted list.
46568: **
46569: ** aLeft[] and aRight[] are arrays of indices.  The sort key is
46570: ** aContent[aLeft[]] and aContent[aRight[]].  Upon entry, the following
46571: ** is guaranteed for all J<K:
46572: **
46573: **        aContent[aLeft[J]] < aContent[aLeft[K]]
46574: **        aContent[aRight[J]] < aContent[aRight[K]]
46575: **
46576: ** This routine overwrites aRight[] with a new (probably longer) sequence
46577: ** of indices such that the aRight[] contains every index that appears in
46578: ** either aLeft[] or the old aRight[] and such that the second condition
46579: ** above is still met.
46580: **
46581: ** The aContent[aLeft[X]] values will be unique for all X.  And the
46582: ** aContent[aRight[X]] values will be unique too.  But there might be
46583: ** one or more combinations of X and Y such that
46584: **
46585: **      aLeft[X]!=aRight[Y]  &&  aContent[aLeft[X]] == aContent[aRight[Y]]
46586: **
46587: ** When that happens, omit the aLeft[X] and use the aRight[Y] index.
46588: */
46589: static void walMerge(
46590:   const u32 *aContent,            /* Pages in wal - keys for the sort */
46591:   ht_slot *aLeft,                 /* IN: Left hand input list */
46592:   int nLeft,                      /* IN: Elements in array *paLeft */
46593:   ht_slot **paRight,              /* IN/OUT: Right hand input list */
46594:   int *pnRight,                   /* IN/OUT: Elements in *paRight */
46595:   ht_slot *aTmp                   /* Temporary buffer */
46596: ){
46597:   int iLeft = 0;                  /* Current index in aLeft */
46598:   int iRight = 0;                 /* Current index in aRight */
46599:   int iOut = 0;                   /* Current index in output buffer */
46600:   int nRight = *pnRight;
46601:   ht_slot *aRight = *paRight;
46602: 
46603:   assert( nLeft>0 && nRight>0 );
46604:   while( iRight<nRight || iLeft<nLeft ){
46605:     ht_slot logpage;
46606:     Pgno dbpage;
46607: 
46608:     if( (iLeft<nLeft) 
46609:      && (iRight>=nRight || aContent[aLeft[iLeft]]<aContent[aRight[iRight]])
46610:     ){
46611:       logpage = aLeft[iLeft++];
46612:     }else{
46613:       logpage = aRight[iRight++];
46614:     }
46615:     dbpage = aContent[logpage];
46616: 
46617:     aTmp[iOut++] = logpage;
46618:     if( iLeft<nLeft && aContent[aLeft[iLeft]]==dbpage ) iLeft++;
46619: 
46620:     assert( iLeft>=nLeft || aContent[aLeft[iLeft]]>dbpage );
46621:     assert( iRight>=nRight || aContent[aRight[iRight]]>dbpage );
46622:   }
46623: 
46624:   *paRight = aLeft;
46625:   *pnRight = iOut;
46626:   memcpy(aLeft, aTmp, sizeof(aTmp[0])*iOut);
46627: }
46628: 
46629: /*
46630: ** Sort the elements in list aList using aContent[] as the sort key.
46631: ** Remove elements with duplicate keys, preferring to keep the
46632: ** larger aList[] values.
46633: **
46634: ** The aList[] entries are indices into aContent[].  The values in
46635: ** aList[] are to be sorted so that for all J<K:
46636: **
46637: **      aContent[aList[J]] < aContent[aList[K]]
46638: **
46639: ** For any X and Y such that
46640: **
46641: **      aContent[aList[X]] == aContent[aList[Y]]
46642: **
46643: ** Keep the larger of the two values aList[X] and aList[Y] and discard
46644: ** the smaller.
46645: */
46646: static void walMergesort(
46647:   const u32 *aContent,            /* Pages in wal */
46648:   ht_slot *aBuffer,               /* Buffer of at least *pnList items to use */
46649:   ht_slot *aList,                 /* IN/OUT: List to sort */
46650:   int *pnList                     /* IN/OUT: Number of elements in aList[] */
46651: ){
46652:   struct Sublist {
46653:     int nList;                    /* Number of elements in aList */
46654:     ht_slot *aList;               /* Pointer to sub-list content */
46655:   };
46656: 
46657:   const int nList = *pnList;      /* Size of input list */
46658:   int nMerge = 0;                 /* Number of elements in list aMerge */
46659:   ht_slot *aMerge = 0;            /* List to be merged */
46660:   int iList;                      /* Index into input list */
46661:   int iSub = 0;                   /* Index into aSub array */
46662:   struct Sublist aSub[13];        /* Array of sub-lists */
46663: 
46664:   memset(aSub, 0, sizeof(aSub));
46665:   assert( nList<=HASHTABLE_NPAGE && nList>0 );
46666:   assert( HASHTABLE_NPAGE==(1<<(ArraySize(aSub)-1)) );
46667: 
46668:   for(iList=0; iList<nList; iList++){
46669:     nMerge = 1;
46670:     aMerge = &aList[iList];
46671:     for(iSub=0; iList & (1<<iSub); iSub++){
46672:       struct Sublist *p = &aSub[iSub];
46673:       assert( p->aList && p->nList<=(1<<iSub) );
46674:       assert( p->aList==&aList[iList&~((2<<iSub)-1)] );
46675:       walMerge(aContent, p->aList, p->nList, &aMerge, &nMerge, aBuffer);
46676:     }
46677:     aSub[iSub].aList = aMerge;
46678:     aSub[iSub].nList = nMerge;
46679:   }
46680: 
46681:   for(iSub++; iSub<ArraySize(aSub); iSub++){
46682:     if( nList & (1<<iSub) ){
46683:       struct Sublist *p = &aSub[iSub];
46684:       assert( p->nList<=(1<<iSub) );
46685:       assert( p->aList==&aList[nList&~((2<<iSub)-1)] );
46686:       walMerge(aContent, p->aList, p->nList, &aMerge, &nMerge, aBuffer);
46687:     }
46688:   }
46689:   assert( aMerge==aList );
46690:   *pnList = nMerge;
46691: 
46692: #ifdef SQLITE_DEBUG
46693:   {
46694:     int i;
46695:     for(i=1; i<*pnList; i++){
46696:       assert( aContent[aList[i]] > aContent[aList[i-1]] );
46697:     }
46698:   }
46699: #endif
46700: }
46701: 
46702: /* 
46703: ** Free an iterator allocated by walIteratorInit().
46704: */
46705: static void walIteratorFree(WalIterator *p){
46706:   sqlite3ScratchFree(p);
46707: }
46708: 
46709: /*
46710: ** Construct a WalInterator object that can be used to loop over all 
46711: ** pages in the WAL in ascending order. The caller must hold the checkpoint
46712: ** lock.
46713: **
46714: ** On success, make *pp point to the newly allocated WalInterator object
46715: ** return SQLITE_OK. Otherwise, return an error code. If this routine
46716: ** returns an error, the value of *pp is undefined.
46717: **
46718: ** The calling routine should invoke walIteratorFree() to destroy the
46719: ** WalIterator object when it has finished with it.
46720: */
46721: static int walIteratorInit(Wal *pWal, WalIterator **pp){
46722:   WalIterator *p;                 /* Return value */
46723:   int nSegment;                   /* Number of segments to merge */
46724:   u32 iLast;                      /* Last frame in log */
46725:   int nByte;                      /* Number of bytes to allocate */
46726:   int i;                          /* Iterator variable */
46727:   ht_slot *aTmp;                  /* Temp space used by merge-sort */
46728:   int rc = SQLITE_OK;             /* Return Code */
46729: 
46730:   /* This routine only runs while holding the checkpoint lock. And
46731:   ** it only runs if there is actually content in the log (mxFrame>0).
46732:   */
46733:   assert( pWal->ckptLock && pWal->hdr.mxFrame>0 );
46734:   iLast = pWal->hdr.mxFrame;
46735: 
46736:   /* Allocate space for the WalIterator object. */
46737:   nSegment = walFramePage(iLast) + 1;
46738:   nByte = sizeof(WalIterator) 
46739:         + (nSegment-1)*sizeof(struct WalSegment)
46740:         + iLast*sizeof(ht_slot);
46741:   p = (WalIterator *)sqlite3ScratchMalloc(nByte);
46742:   if( !p ){
46743:     return SQLITE_NOMEM;
46744:   }
46745:   memset(p, 0, nByte);
46746:   p->nSegment = nSegment;
46747: 
46748:   /* Allocate temporary space used by the merge-sort routine. This block
46749:   ** of memory will be freed before this function returns.
46750:   */
46751:   aTmp = (ht_slot *)sqlite3ScratchMalloc(
46752:       sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast)
46753:   );
46754:   if( !aTmp ){
46755:     rc = SQLITE_NOMEM;
46756:   }
46757: 
46758:   for(i=0; rc==SQLITE_OK && i<nSegment; i++){
46759:     volatile ht_slot *aHash;
46760:     u32 iZero;
46761:     volatile u32 *aPgno;
46762: 
46763:     rc = walHashGet(pWal, i, &aHash, &aPgno, &iZero);
46764:     if( rc==SQLITE_OK ){
46765:       int j;                      /* Counter variable */
46766:       int nEntry;                 /* Number of entries in this segment */
46767:       ht_slot *aIndex;            /* Sorted index for this segment */
46768: 
46769:       aPgno++;
46770:       if( (i+1)==nSegment ){
46771:         nEntry = (int)(iLast - iZero);
46772:       }else{
46773:         nEntry = (int)((u32*)aHash - (u32*)aPgno);
46774:       }
46775:       aIndex = &((ht_slot *)&p->aSegment[p->nSegment])[iZero];
46776:       iZero++;
46777:   
46778:       for(j=0; j<nEntry; j++){
46779:         aIndex[j] = (ht_slot)j;
46780:       }
46781:       walMergesort((u32 *)aPgno, aTmp, aIndex, &nEntry);
46782:       p->aSegment[i].iZero = iZero;
46783:       p->aSegment[i].nEntry = nEntry;
46784:       p->aSegment[i].aIndex = aIndex;
46785:       p->aSegment[i].aPgno = (u32 *)aPgno;
46786:     }
46787:   }
46788:   sqlite3ScratchFree(aTmp);
46789: 
46790:   if( rc!=SQLITE_OK ){
46791:     walIteratorFree(p);
46792:   }
46793:   *pp = p;
46794:   return rc;
46795: }
46796: 
46797: /*
46798: ** Attempt to obtain the exclusive WAL lock defined by parameters lockIdx and
46799: ** n. If the attempt fails and parameter xBusy is not NULL, then it is a
46800: ** busy-handler function. Invoke it and retry the lock until either the
46801: ** lock is successfully obtained or the busy-handler returns 0.
46802: */
46803: static int walBusyLock(
46804:   Wal *pWal,                      /* WAL connection */
46805:   int (*xBusy)(void*),            /* Function to call when busy */
46806:   void *pBusyArg,                 /* Context argument for xBusyHandler */
46807:   int lockIdx,                    /* Offset of first byte to lock */
46808:   int n                           /* Number of bytes to lock */
46809: ){
46810:   int rc;
46811:   do {
46812:     rc = walLockExclusive(pWal, lockIdx, n);
46813:   }while( xBusy && rc==SQLITE_BUSY && xBusy(pBusyArg) );
46814:   return rc;
46815: }
46816: 
46817: /*
46818: ** The cache of the wal-index header must be valid to call this function.
46819: ** Return the page-size in bytes used by the database.
46820: */
46821: static int walPagesize(Wal *pWal){
46822:   return (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
46823: }
46824: 
46825: /*
46826: ** Copy as much content as we can from the WAL back into the database file
46827: ** in response to an sqlite3_wal_checkpoint() request or the equivalent.
46828: **
46829: ** The amount of information copies from WAL to database might be limited
46830: ** by active readers.  This routine will never overwrite a database page
46831: ** that a concurrent reader might be using.
46832: **
46833: ** All I/O barrier operations (a.k.a fsyncs) occur in this routine when
46834: ** SQLite is in WAL-mode in synchronous=NORMAL.  That means that if 
46835: ** checkpoints are always run by a background thread or background 
46836: ** process, foreground threads will never block on a lengthy fsync call.
46837: **
46838: ** Fsync is called on the WAL before writing content out of the WAL and
46839: ** into the database.  This ensures that if the new content is persistent
46840: ** in the WAL and can be recovered following a power-loss or hard reset.
46841: **
46842: ** Fsync is also called on the database file if (and only if) the entire
46843: ** WAL content is copied into the database file.  This second fsync makes
46844: ** it safe to delete the WAL since the new content will persist in the
46845: ** database file.
46846: **
46847: ** This routine uses and updates the nBackfill field of the wal-index header.
46848: ** This is the only routine tha will increase the value of nBackfill.  
46849: ** (A WAL reset or recovery will revert nBackfill to zero, but not increase
46850: ** its value.)
46851: **
46852: ** The caller must be holding sufficient locks to ensure that no other
46853: ** checkpoint is running (in any other thread or process) at the same
46854: ** time.
46855: */
46856: static int walCheckpoint(
46857:   Wal *pWal,                      /* Wal connection */
46858:   int eMode,                      /* One of PASSIVE, FULL or RESTART */
46859:   int (*xBusyCall)(void*),        /* Function to call when busy */
46860:   void *pBusyArg,                 /* Context argument for xBusyHandler */
46861:   int sync_flags,                 /* Flags for OsSync() (or 0) */
46862:   u8 *zBuf                        /* Temporary buffer to use */
46863: ){
46864:   int rc;                         /* Return code */
46865:   int szPage;                     /* Database page-size */
46866:   WalIterator *pIter = 0;         /* Wal iterator context */
46867:   u32 iDbpage = 0;                /* Next database page to write */
46868:   u32 iFrame = 0;                 /* Wal frame containing data for iDbpage */
46869:   u32 mxSafeFrame;                /* Max frame that can be backfilled */
46870:   u32 mxPage;                     /* Max database page to write */
46871:   int i;                          /* Loop counter */
46872:   volatile WalCkptInfo *pInfo;    /* The checkpoint status information */
46873:   int (*xBusy)(void*) = 0;        /* Function to call when waiting for locks */
46874: 
46875:   szPage = walPagesize(pWal);
46876:   testcase( szPage<=32768 );
46877:   testcase( szPage>=65536 );
46878:   pInfo = walCkptInfo(pWal);
46879:   if( pInfo->nBackfill>=pWal->hdr.mxFrame ) return SQLITE_OK;
46880: 
46881:   /* Allocate the iterator */
46882:   rc = walIteratorInit(pWal, &pIter);
46883:   if( rc!=SQLITE_OK ){
46884:     return rc;
46885:   }
46886:   assert( pIter );
46887: 
46888:   if( eMode!=SQLITE_CHECKPOINT_PASSIVE ) xBusy = xBusyCall;
46889: 
46890:   /* Compute in mxSafeFrame the index of the last frame of the WAL that is
46891:   ** safe to write into the database.  Frames beyond mxSafeFrame might
46892:   ** overwrite database pages that are in use by active readers and thus
46893:   ** cannot be backfilled from the WAL.
46894:   */
46895:   mxSafeFrame = pWal->hdr.mxFrame;
46896:   mxPage = pWal->hdr.nPage;
46897:   for(i=1; i<WAL_NREADER; i++){
46898:     u32 y = pInfo->aReadMark[i];
46899:     if( mxSafeFrame>y ){
46900:       assert( y<=pWal->hdr.mxFrame );
46901:       rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(i), 1);
46902:       if( rc==SQLITE_OK ){
46903:         pInfo->aReadMark[i] = READMARK_NOT_USED;
46904:         walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1);
46905:       }else if( rc==SQLITE_BUSY ){
46906:         mxSafeFrame = y;
46907:         xBusy = 0;
46908:       }else{
46909:         goto walcheckpoint_out;
46910:       }
46911:     }
46912:   }
46913: 
46914:   if( pInfo->nBackfill<mxSafeFrame
46915:    && (rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(0), 1))==SQLITE_OK
46916:   ){
46917:     i64 nSize;                    /* Current size of database file */
46918:     u32 nBackfill = pInfo->nBackfill;
46919: 
46920:     /* Sync the WAL to disk */
46921:     if( sync_flags ){
46922:       rc = sqlite3OsSync(pWal->pWalFd, sync_flags);
46923:     }
46924: 
46925:     /* If the database file may grow as a result of this checkpoint, hint
46926:     ** about the eventual size of the db file to the VFS layer. 
46927:     */
46928:     if( rc==SQLITE_OK ){
46929:       i64 nReq = ((i64)mxPage * szPage);
46930:       rc = sqlite3OsFileSize(pWal->pDbFd, &nSize);
46931:       if( rc==SQLITE_OK && nSize<nReq ){
46932:         sqlite3OsFileControlHint(pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT, &nReq);
46933:       }
46934:     }
46935: 
46936:     /* Iterate through the contents of the WAL, copying data to the db file. */
46937:     while( rc==SQLITE_OK && 0==walIteratorNext(pIter, &iDbpage, &iFrame) ){
46938:       i64 iOffset;
46939:       assert( walFramePgno(pWal, iFrame)==iDbpage );
46940:       if( iFrame<=nBackfill || iFrame>mxSafeFrame || iDbpage>mxPage ) continue;
46941:       iOffset = walFrameOffset(iFrame, szPage) + WAL_FRAME_HDRSIZE;
46942:       /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL file */
46943:       rc = sqlite3OsRead(pWal->pWalFd, zBuf, szPage, iOffset);
46944:       if( rc!=SQLITE_OK ) break;
46945:       iOffset = (iDbpage-1)*(i64)szPage;
46946:       testcase( IS_BIG_INT(iOffset) );
46947:       rc = sqlite3OsWrite(pWal->pDbFd, zBuf, szPage, iOffset);
46948:       if( rc!=SQLITE_OK ) break;
46949:     }
46950: 
46951:     /* If work was actually accomplished... */
46952:     if( rc==SQLITE_OK ){
46953:       if( mxSafeFrame==walIndexHdr(pWal)->mxFrame ){
46954:         i64 szDb = pWal->hdr.nPage*(i64)szPage;
46955:         testcase( IS_BIG_INT(szDb) );
46956:         rc = sqlite3OsTruncate(pWal->pDbFd, szDb);
46957:         if( rc==SQLITE_OK && sync_flags ){
46958:           rc = sqlite3OsSync(pWal->pDbFd, sync_flags);
46959:         }
46960:       }
46961:       if( rc==SQLITE_OK ){
46962:         pInfo->nBackfill = mxSafeFrame;
46963:       }
46964:     }
46965: 
46966:     /* Release the reader lock held while backfilling */
46967:     walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1);
46968:   }
46969: 
46970:   if( rc==SQLITE_BUSY ){
46971:     /* Reset the return code so as not to report a checkpoint failure
46972:     ** just because there are active readers.  */
46973:     rc = SQLITE_OK;
46974:   }
46975: 
46976:   /* If this is an SQLITE_CHECKPOINT_RESTART operation, and the entire wal
46977:   ** file has been copied into the database file, then block until all
46978:   ** readers have finished using the wal file. This ensures that the next
46979:   ** process to write to the database restarts the wal file.
46980:   */
46981:   if( rc==SQLITE_OK && eMode!=SQLITE_CHECKPOINT_PASSIVE ){
46982:     assert( pWal->writeLock );
46983:     if( pInfo->nBackfill<pWal->hdr.mxFrame ){
46984:       rc = SQLITE_BUSY;
46985:     }else if( eMode==SQLITE_CHECKPOINT_RESTART ){
46986:       assert( mxSafeFrame==pWal->hdr.mxFrame );
46987:       rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(1), WAL_NREADER-1);
46988:       if( rc==SQLITE_OK ){
46989:         walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
46990:       }
46991:     }
46992:   }
46993: 
46994:  walcheckpoint_out:
46995:   walIteratorFree(pIter);
46996:   return rc;
46997: }
46998: 
46999: /*
47000: ** If the WAL file is currently larger than nMax bytes in size, truncate
47001: ** it to exactly nMax bytes. If an error occurs while doing so, ignore it.
47002: */
47003: static void walLimitSize(Wal *pWal, i64 nMax){
47004:   i64 sz;
47005:   int rx;
47006:   sqlite3BeginBenignMalloc();
47007:   rx = sqlite3OsFileSize(pWal->pWalFd, &sz);
47008:   if( rx==SQLITE_OK && (sz > nMax ) ){
47009:     rx = sqlite3OsTruncate(pWal->pWalFd, nMax);
47010:   }
47011:   sqlite3EndBenignMalloc();
47012:   if( rx ){
47013:     sqlite3_log(rx, "cannot limit WAL size: %s", pWal->zWalName);
47014:   }
47015: }
47016: 
47017: /*
47018: ** Close a connection to a log file.
47019: */
47020: SQLITE_PRIVATE int sqlite3WalClose(
47021:   Wal *pWal,                      /* Wal to close */
47022:   int sync_flags,                 /* Flags to pass to OsSync() (or 0) */
47023:   int nBuf,
47024:   u8 *zBuf                        /* Buffer of at least nBuf bytes */
47025: ){
47026:   int rc = SQLITE_OK;
47027:   if( pWal ){
47028:     int isDelete = 0;             /* True to unlink wal and wal-index files */
47029: 
47030:     /* If an EXCLUSIVE lock can be obtained on the database file (using the
47031:     ** ordinary, rollback-mode locking methods, this guarantees that the
47032:     ** connection associated with this log file is the only connection to
47033:     ** the database. In this case checkpoint the database and unlink both
47034:     ** the wal and wal-index files.
47035:     **
47036:     ** The EXCLUSIVE lock is not released before returning.
47037:     */
47038:     rc = sqlite3OsLock(pWal->pDbFd, SQLITE_LOCK_EXCLUSIVE);
47039:     if( rc==SQLITE_OK ){
47040:       if( pWal->exclusiveMode==WAL_NORMAL_MODE ){
47041:         pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
47042:       }
47043:       rc = sqlite3WalCheckpoint(
47044:           pWal, SQLITE_CHECKPOINT_PASSIVE, 0, 0, sync_flags, nBuf, zBuf, 0, 0
47045:       );
47046:       if( rc==SQLITE_OK ){
47047:         int bPersist = -1;
47048:         sqlite3OsFileControlHint(
47049:             pWal->pDbFd, SQLITE_FCNTL_PERSIST_WAL, &bPersist
47050:         );
47051:         if( bPersist!=1 ){
47052:           /* Try to delete the WAL file if the checkpoint completed and
47053:           ** fsyned (rc==SQLITE_OK) and if we are not in persistent-wal
47054:           ** mode (!bPersist) */
47055:           isDelete = 1;
47056:         }else if( pWal->mxWalSize>=0 ){
47057:           /* Try to truncate the WAL file to zero bytes if the checkpoint
47058:           ** completed and fsynced (rc==SQLITE_OK) and we are in persistent
47059:           ** WAL mode (bPersist) and if the PRAGMA journal_size_limit is a
47060:           ** non-negative value (pWal->mxWalSize>=0).  Note that we truncate
47061:           ** to zero bytes as truncating to the journal_size_limit might
47062:           ** leave a corrupt WAL file on disk. */
47063:           walLimitSize(pWal, 0);
47064:         }
47065:       }
47066:     }
47067: 
47068:     walIndexClose(pWal, isDelete);
47069:     sqlite3OsClose(pWal->pWalFd);
47070:     if( isDelete ){
47071:       sqlite3BeginBenignMalloc();
47072:       sqlite3OsDelete(pWal->pVfs, pWal->zWalName, 0);
47073:       sqlite3EndBenignMalloc();
47074:     }
47075:     WALTRACE(("WAL%p: closed\n", pWal));
47076:     sqlite3_free((void *)pWal->apWiData);
47077:     sqlite3_free(pWal);
47078:   }
47079:   return rc;
47080: }
47081: 
47082: /*
47083: ** Try to read the wal-index header.  Return 0 on success and 1 if
47084: ** there is a problem.
47085: **
47086: ** The wal-index is in shared memory.  Another thread or process might
47087: ** be writing the header at the same time this procedure is trying to
47088: ** read it, which might result in inconsistency.  A dirty read is detected
47089: ** by verifying that both copies of the header are the same and also by
47090: ** a checksum on the header.
47091: **
47092: ** If and only if the read is consistent and the header is different from
47093: ** pWal->hdr, then pWal->hdr is updated to the content of the new header
47094: ** and *pChanged is set to 1.
47095: **
47096: ** If the checksum cannot be verified return non-zero. If the header
47097: ** is read successfully and the checksum verified, return zero.
47098: */
47099: static int walIndexTryHdr(Wal *pWal, int *pChanged){
47100:   u32 aCksum[2];                  /* Checksum on the header content */
47101:   WalIndexHdr h1, h2;             /* Two copies of the header content */
47102:   WalIndexHdr volatile *aHdr;     /* Header in shared memory */
47103: 
47104:   /* The first page of the wal-index must be mapped at this point. */
47105:   assert( pWal->nWiData>0 && pWal->apWiData[0] );
47106: 
47107:   /* Read the header. This might happen concurrently with a write to the
47108:   ** same area of shared memory on a different CPU in a SMP,
47109:   ** meaning it is possible that an inconsistent snapshot is read
47110:   ** from the file. If this happens, return non-zero.
47111:   **
47112:   ** There are two copies of the header at the beginning of the wal-index.
47113:   ** When reading, read [0] first then [1].  Writes are in the reverse order.
47114:   ** Memory barriers are used to prevent the compiler or the hardware from
47115:   ** reordering the reads and writes.
47116:   */
47117:   aHdr = walIndexHdr(pWal);
47118:   memcpy(&h1, (void *)&aHdr[0], sizeof(h1));
47119:   walShmBarrier(pWal);
47120:   memcpy(&h2, (void *)&aHdr[1], sizeof(h2));
47121: 
47122:   if( memcmp(&h1, &h2, sizeof(h1))!=0 ){
47123:     return 1;   /* Dirty read */
47124:   }  
47125:   if( h1.isInit==0 ){
47126:     return 1;   /* Malformed header - probably all zeros */
47127:   }
47128:   walChecksumBytes(1, (u8*)&h1, sizeof(h1)-sizeof(h1.aCksum), 0, aCksum);
47129:   if( aCksum[0]!=h1.aCksum[0] || aCksum[1]!=h1.aCksum[1] ){
47130:     return 1;   /* Checksum does not match */
47131:   }
47132: 
47133:   if( memcmp(&pWal->hdr, &h1, sizeof(WalIndexHdr)) ){
47134:     *pChanged = 1;
47135:     memcpy(&pWal->hdr, &h1, sizeof(WalIndexHdr));
47136:     pWal->szPage = (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
47137:     testcase( pWal->szPage<=32768 );
47138:     testcase( pWal->szPage>=65536 );
47139:   }
47140: 
47141:   /* The header was successfully read. Return zero. */
47142:   return 0;
47143: }
47144: 
47145: /*
47146: ** Read the wal-index header from the wal-index and into pWal->hdr.
47147: ** If the wal-header appears to be corrupt, try to reconstruct the
47148: ** wal-index from the WAL before returning.
47149: **
47150: ** Set *pChanged to 1 if the wal-index header value in pWal->hdr is
47151: ** changed by this opertion.  If pWal->hdr is unchanged, set *pChanged
47152: ** to 0.
47153: **
47154: ** If the wal-index header is successfully read, return SQLITE_OK. 
47155: ** Otherwise an SQLite error code.
47156: */
47157: static int walIndexReadHdr(Wal *pWal, int *pChanged){
47158:   int rc;                         /* Return code */
47159:   int badHdr;                     /* True if a header read failed */
47160:   volatile u32 *page0;            /* Chunk of wal-index containing header */
47161: 
47162:   /* Ensure that page 0 of the wal-index (the page that contains the 
47163:   ** wal-index header) is mapped. Return early if an error occurs here.
47164:   */
47165:   assert( pChanged );
47166:   rc = walIndexPage(pWal, 0, &page0);
47167:   if( rc!=SQLITE_OK ){
47168:     return rc;
47169:   };
47170:   assert( page0 || pWal->writeLock==0 );
47171: 
47172:   /* If the first page of the wal-index has been mapped, try to read the
47173:   ** wal-index header immediately, without holding any lock. This usually
47174:   ** works, but may fail if the wal-index header is corrupt or currently 
47175:   ** being modified by another thread or process.
47176:   */
47177:   badHdr = (page0 ? walIndexTryHdr(pWal, pChanged) : 1);
47178: 
47179:   /* If the first attempt failed, it might have been due to a race
47180:   ** with a writer.  So get a WRITE lock and try again.
47181:   */
47182:   assert( badHdr==0 || pWal->writeLock==0 );
47183:   if( badHdr ){
47184:     if( pWal->readOnly & WAL_SHM_RDONLY ){
47185:       if( SQLITE_OK==(rc = walLockShared(pWal, WAL_WRITE_LOCK)) ){
47186:         walUnlockShared(pWal, WAL_WRITE_LOCK);
47187:         rc = SQLITE_READONLY_RECOVERY;
47188:       }
47189:     }else if( SQLITE_OK==(rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1)) ){
47190:       pWal->writeLock = 1;
47191:       if( SQLITE_OK==(rc = walIndexPage(pWal, 0, &page0)) ){
47192:         badHdr = walIndexTryHdr(pWal, pChanged);
47193:         if( badHdr ){
47194:           /* If the wal-index header is still malformed even while holding
47195:           ** a WRITE lock, it can only mean that the header is corrupted and
47196:           ** needs to be reconstructed.  So run recovery to do exactly that.
47197:           */
47198:           rc = walIndexRecover(pWal);
47199:           *pChanged = 1;
47200:         }
47201:       }
47202:       pWal->writeLock = 0;
47203:       walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
47204:     }
47205:   }
47206: 
47207:   /* If the header is read successfully, check the version number to make
47208:   ** sure the wal-index was not constructed with some future format that
47209:   ** this version of SQLite cannot understand.
47210:   */
47211:   if( badHdr==0 && pWal->hdr.iVersion!=WALINDEX_MAX_VERSION ){
47212:     rc = SQLITE_CANTOPEN_BKPT;
47213:   }
47214: 
47215:   return rc;
47216: }
47217: 
47218: /*
47219: ** This is the value that walTryBeginRead returns when it needs to
47220: ** be retried.
47221: */
47222: #define WAL_RETRY  (-1)
47223: 
47224: /*
47225: ** Attempt to start a read transaction.  This might fail due to a race or
47226: ** other transient condition.  When that happens, it returns WAL_RETRY to
47227: ** indicate to the caller that it is safe to retry immediately.
47228: **
47229: ** On success return SQLITE_OK.  On a permanent failure (such an
47230: ** I/O error or an SQLITE_BUSY because another process is running
47231: ** recovery) return a positive error code.
47232: **
47233: ** The useWal parameter is true to force the use of the WAL and disable
47234: ** the case where the WAL is bypassed because it has been completely
47235: ** checkpointed.  If useWal==0 then this routine calls walIndexReadHdr() 
47236: ** to make a copy of the wal-index header into pWal->hdr.  If the 
47237: ** wal-index header has changed, *pChanged is set to 1 (as an indication 
47238: ** to the caller that the local paget cache is obsolete and needs to be 
47239: ** flushed.)  When useWal==1, the wal-index header is assumed to already
47240: ** be loaded and the pChanged parameter is unused.
47241: **
47242: ** The caller must set the cnt parameter to the number of prior calls to
47243: ** this routine during the current read attempt that returned WAL_RETRY.
47244: ** This routine will start taking more aggressive measures to clear the
47245: ** race conditions after multiple WAL_RETRY returns, and after an excessive
47246: ** number of errors will ultimately return SQLITE_PROTOCOL.  The
47247: ** SQLITE_PROTOCOL return indicates that some other process has gone rogue
47248: ** and is not honoring the locking protocol.  There is a vanishingly small
47249: ** chance that SQLITE_PROTOCOL could be returned because of a run of really
47250: ** bad luck when there is lots of contention for the wal-index, but that
47251: ** possibility is so small that it can be safely neglected, we believe.
47252: **
47253: ** On success, this routine obtains a read lock on 
47254: ** WAL_READ_LOCK(pWal->readLock).  The pWal->readLock integer is
47255: ** in the range 0 <= pWal->readLock < WAL_NREADER.  If pWal->readLock==(-1)
47256: ** that means the Wal does not hold any read lock.  The reader must not
47257: ** access any database page that is modified by a WAL frame up to and
47258: ** including frame number aReadMark[pWal->readLock].  The reader will
47259: ** use WAL frames up to and including pWal->hdr.mxFrame if pWal->readLock>0
47260: ** Or if pWal->readLock==0, then the reader will ignore the WAL
47261: ** completely and get all content directly from the database file.
47262: ** If the useWal parameter is 1 then the WAL will never be ignored and
47263: ** this routine will always set pWal->readLock>0 on success.
47264: ** When the read transaction is completed, the caller must release the
47265: ** lock on WAL_READ_LOCK(pWal->readLock) and set pWal->readLock to -1.
47266: **
47267: ** This routine uses the nBackfill and aReadMark[] fields of the header
47268: ** to select a particular WAL_READ_LOCK() that strives to let the
47269: ** checkpoint process do as much work as possible.  This routine might
47270: ** update values of the aReadMark[] array in the header, but if it does
47271: ** so it takes care to hold an exclusive lock on the corresponding
47272: ** WAL_READ_LOCK() while changing values.
47273: */
47274: static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
47275:   volatile WalCkptInfo *pInfo;    /* Checkpoint information in wal-index */
47276:   u32 mxReadMark;                 /* Largest aReadMark[] value */
47277:   int mxI;                        /* Index of largest aReadMark[] value */
47278:   int i;                          /* Loop counter */
47279:   int rc = SQLITE_OK;             /* Return code  */
47280: 
47281:   assert( pWal->readLock<0 );     /* Not currently locked */
47282: 
47283:   /* Take steps to avoid spinning forever if there is a protocol error.
47284:   **
47285:   ** Circumstances that cause a RETRY should only last for the briefest
47286:   ** instances of time.  No I/O or other system calls are done while the
47287:   ** locks are held, so the locks should not be held for very long. But 
47288:   ** if we are unlucky, another process that is holding a lock might get
47289:   ** paged out or take a page-fault that is time-consuming to resolve, 
47290:   ** during the few nanoseconds that it is holding the lock.  In that case,
47291:   ** it might take longer than normal for the lock to free.
47292:   **
47293:   ** After 5 RETRYs, we begin calling sqlite3OsSleep().  The first few
47294:   ** calls to sqlite3OsSleep() have a delay of 1 microsecond.  Really this
47295:   ** is more of a scheduler yield than an actual delay.  But on the 10th
47296:   ** an subsequent retries, the delays start becoming longer and longer, 
47297:   ** so that on the 100th (and last) RETRY we delay for 21 milliseconds.
47298:   ** The total delay time before giving up is less than 1 second.
47299:   */
47300:   if( cnt>5 ){
47301:     int nDelay = 1;                      /* Pause time in microseconds */
47302:     if( cnt>100 ){
47303:       VVA_ONLY( pWal->lockError = 1; )
47304:       return SQLITE_PROTOCOL;
47305:     }
47306:     if( cnt>=10 ) nDelay = (cnt-9)*238;  /* Max delay 21ms. Total delay 996ms */
47307:     sqlite3OsSleep(pWal->pVfs, nDelay);
47308:   }
47309: 
47310:   if( !useWal ){
47311:     rc = walIndexReadHdr(pWal, pChanged);
47312:     if( rc==SQLITE_BUSY ){
47313:       /* If there is not a recovery running in another thread or process
47314:       ** then convert BUSY errors to WAL_RETRY.  If recovery is known to
47315:       ** be running, convert BUSY to BUSY_RECOVERY.  There is a race here
47316:       ** which might cause WAL_RETRY to be returned even if BUSY_RECOVERY
47317:       ** would be technically correct.  But the race is benign since with
47318:       ** WAL_RETRY this routine will be called again and will probably be
47319:       ** right on the second iteration.
47320:       */
47321:       if( pWal->apWiData[0]==0 ){
47322:         /* This branch is taken when the xShmMap() method returns SQLITE_BUSY.
47323:         ** We assume this is a transient condition, so return WAL_RETRY. The
47324:         ** xShmMap() implementation used by the default unix and win32 VFS 
47325:         ** modules may return SQLITE_BUSY due to a race condition in the 
47326:         ** code that determines whether or not the shared-memory region 
47327:         ** must be zeroed before the requested page is returned.
47328:         */
47329:         rc = WAL_RETRY;
47330:       }else if( SQLITE_OK==(rc = walLockShared(pWal, WAL_RECOVER_LOCK)) ){
47331:         walUnlockShared(pWal, WAL_RECOVER_LOCK);
47332:         rc = WAL_RETRY;
47333:       }else if( rc==SQLITE_BUSY ){
47334:         rc = SQLITE_BUSY_RECOVERY;
47335:       }
47336:     }
47337:     if( rc!=SQLITE_OK ){
47338:       return rc;
47339:     }
47340:   }
47341: 
47342:   pInfo = walCkptInfo(pWal);
47343:   if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame ){
47344:     /* The WAL has been completely backfilled (or it is empty).
47345:     ** and can be safely ignored.
47346:     */
47347:     rc = walLockShared(pWal, WAL_READ_LOCK(0));
47348:     walShmBarrier(pWal);
47349:     if( rc==SQLITE_OK ){
47350:       if( memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) ){
47351:         /* It is not safe to allow the reader to continue here if frames
47352:         ** may have been appended to the log before READ_LOCK(0) was obtained.
47353:         ** When holding READ_LOCK(0), the reader ignores the entire log file,
47354:         ** which implies that the database file contains a trustworthy
47355:         ** snapshoT. Since holding READ_LOCK(0) prevents a checkpoint from
47356:         ** happening, this is usually correct.
47357:         **
47358:         ** However, if frames have been appended to the log (or if the log 
47359:         ** is wrapped and written for that matter) before the READ_LOCK(0)
47360:         ** is obtained, that is not necessarily true. A checkpointer may
47361:         ** have started to backfill the appended frames but crashed before
47362:         ** it finished. Leaving a corrupt image in the database file.
47363:         */
47364:         walUnlockShared(pWal, WAL_READ_LOCK(0));
47365:         return WAL_RETRY;
47366:       }
47367:       pWal->readLock = 0;
47368:       return SQLITE_OK;
47369:     }else if( rc!=SQLITE_BUSY ){
47370:       return rc;
47371:     }
47372:   }
47373: 
47374:   /* If we get this far, it means that the reader will want to use
47375:   ** the WAL to get at content from recent commits.  The job now is
47376:   ** to select one of the aReadMark[] entries that is closest to
47377:   ** but not exceeding pWal->hdr.mxFrame and lock that entry.
47378:   */
47379:   mxReadMark = 0;
47380:   mxI = 0;
47381:   for(i=1; i<WAL_NREADER; i++){
47382:     u32 thisMark = pInfo->aReadMark[i];
47383:     if( mxReadMark<=thisMark && thisMark<=pWal->hdr.mxFrame ){
47384:       assert( thisMark!=READMARK_NOT_USED );
47385:       mxReadMark = thisMark;
47386:       mxI = i;
47387:     }
47388:   }
47389:   /* There was once an "if" here. The extra "{" is to preserve indentation. */
47390:   {
47391:     if( (pWal->readOnly & WAL_SHM_RDONLY)==0
47392:      && (mxReadMark<pWal->hdr.mxFrame || mxI==0)
47393:     ){
47394:       for(i=1; i<WAL_NREADER; i++){
47395:         rc = walLockExclusive(pWal, WAL_READ_LOCK(i), 1);
47396:         if( rc==SQLITE_OK ){
47397:           mxReadMark = pInfo->aReadMark[i] = pWal->hdr.mxFrame;
47398:           mxI = i;
47399:           walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1);
47400:           break;
47401:         }else if( rc!=SQLITE_BUSY ){
47402:           return rc;
47403:         }
47404:       }
47405:     }
47406:     if( mxI==0 ){
47407:       assert( rc==SQLITE_BUSY || (pWal->readOnly & WAL_SHM_RDONLY)!=0 );
47408:       return rc==SQLITE_BUSY ? WAL_RETRY : SQLITE_READONLY_CANTLOCK;
47409:     }
47410: 
47411:     rc = walLockShared(pWal, WAL_READ_LOCK(mxI));
47412:     if( rc ){
47413:       return rc==SQLITE_BUSY ? WAL_RETRY : rc;
47414:     }
47415:     /* Now that the read-lock has been obtained, check that neither the
47416:     ** value in the aReadMark[] array or the contents of the wal-index
47417:     ** header have changed.
47418:     **
47419:     ** It is necessary to check that the wal-index header did not change
47420:     ** between the time it was read and when the shared-lock was obtained
47421:     ** on WAL_READ_LOCK(mxI) was obtained to account for the possibility
47422:     ** that the log file may have been wrapped by a writer, or that frames
47423:     ** that occur later in the log than pWal->hdr.mxFrame may have been
47424:     ** copied into the database by a checkpointer. If either of these things
47425:     ** happened, then reading the database with the current value of
47426:     ** pWal->hdr.mxFrame risks reading a corrupted snapshot. So, retry
47427:     ** instead.
47428:     **
47429:     ** This does not guarantee that the copy of the wal-index header is up to
47430:     ** date before proceeding. That would not be possible without somehow
47431:     ** blocking writers. It only guarantees that a dangerous checkpoint or 
47432:     ** log-wrap (either of which would require an exclusive lock on
47433:     ** WAL_READ_LOCK(mxI)) has not occurred since the snapshot was valid.
47434:     */
47435:     walShmBarrier(pWal);
47436:     if( pInfo->aReadMark[mxI]!=mxReadMark
47437:      || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr))
47438:     ){
47439:       walUnlockShared(pWal, WAL_READ_LOCK(mxI));
47440:       return WAL_RETRY;
47441:     }else{
47442:       assert( mxReadMark<=pWal->hdr.mxFrame );
47443:       pWal->readLock = (i16)mxI;
47444:     }
47445:   }
47446:   return rc;
47447: }
47448: 
47449: /*
47450: ** Begin a read transaction on the database.
47451: **
47452: ** This routine used to be called sqlite3OpenSnapshot() and with good reason:
47453: ** it takes a snapshot of the state of the WAL and wal-index for the current
47454: ** instant in time.  The current thread will continue to use this snapshot.
47455: ** Other threads might append new content to the WAL and wal-index but
47456: ** that extra content is ignored by the current thread.
47457: **
47458: ** If the database contents have changes since the previous read
47459: ** transaction, then *pChanged is set to 1 before returning.  The
47460: ** Pager layer will use this to know that is cache is stale and
47461: ** needs to be flushed.
47462: */
47463: SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){
47464:   int rc;                         /* Return code */
47465:   int cnt = 0;                    /* Number of TryBeginRead attempts */
47466: 
47467:   do{
47468:     rc = walTryBeginRead(pWal, pChanged, 0, ++cnt);
47469:   }while( rc==WAL_RETRY );
47470:   testcase( (rc&0xff)==SQLITE_BUSY );
47471:   testcase( (rc&0xff)==SQLITE_IOERR );
47472:   testcase( rc==SQLITE_PROTOCOL );
47473:   testcase( rc==SQLITE_OK );
47474:   return rc;
47475: }
47476: 
47477: /*
47478: ** Finish with a read transaction.  All this does is release the
47479: ** read-lock.
47480: */
47481: SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal){
47482:   sqlite3WalEndWriteTransaction(pWal);
47483:   if( pWal->readLock>=0 ){
47484:     walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
47485:     pWal->readLock = -1;
47486:   }
47487: }
47488: 
47489: /*
47490: ** Read a page from the WAL, if it is present in the WAL and if the 
47491: ** current read transaction is configured to use the WAL.  
47492: **
47493: ** The *pInWal is set to 1 if the requested page is in the WAL and
47494: ** has been loaded.  Or *pInWal is set to 0 if the page was not in 
47495: ** the WAL and needs to be read out of the database.
47496: */
47497: SQLITE_PRIVATE int sqlite3WalRead(
47498:   Wal *pWal,                      /* WAL handle */
47499:   Pgno pgno,                      /* Database page number to read data for */
47500:   int *pInWal,                    /* OUT: True if data is read from WAL */
47501:   int nOut,                       /* Size of buffer pOut in bytes */
47502:   u8 *pOut                        /* Buffer to write page data to */
47503: ){
47504:   u32 iRead = 0;                  /* If !=0, WAL frame to return data from */
47505:   u32 iLast = pWal->hdr.mxFrame;  /* Last page in WAL for this reader */
47506:   int iHash;                      /* Used to loop through N hash tables */
47507: 
47508:   /* This routine is only be called from within a read transaction. */
47509:   assert( pWal->readLock>=0 || pWal->lockError );
47510: 
47511:   /* If the "last page" field of the wal-index header snapshot is 0, then
47512:   ** no data will be read from the wal under any circumstances. Return early
47513:   ** in this case as an optimization.  Likewise, if pWal->readLock==0, 
47514:   ** then the WAL is ignored by the reader so return early, as if the 
47515:   ** WAL were empty.
47516:   */
47517:   if( iLast==0 || pWal->readLock==0 ){
47518:     *pInWal = 0;
47519:     return SQLITE_OK;
47520:   }
47521: 
47522:   /* Search the hash table or tables for an entry matching page number
47523:   ** pgno. Each iteration of the following for() loop searches one
47524:   ** hash table (each hash table indexes up to HASHTABLE_NPAGE frames).
47525:   **
47526:   ** This code might run concurrently to the code in walIndexAppend()
47527:   ** that adds entries to the wal-index (and possibly to this hash 
47528:   ** table). This means the value just read from the hash 
47529:   ** slot (aHash[iKey]) may have been added before or after the 
47530:   ** current read transaction was opened. Values added after the
47531:   ** read transaction was opened may have been written incorrectly -
47532:   ** i.e. these slots may contain garbage data. However, we assume
47533:   ** that any slots written before the current read transaction was
47534:   ** opened remain unmodified.
47535:   **
47536:   ** For the reasons above, the if(...) condition featured in the inner
47537:   ** loop of the following block is more stringent that would be required 
47538:   ** if we had exclusive access to the hash-table:
47539:   **
47540:   **   (aPgno[iFrame]==pgno): 
47541:   **     This condition filters out normal hash-table collisions.
47542:   **
47543:   **   (iFrame<=iLast): 
47544:   **     This condition filters out entries that were added to the hash
47545:   **     table after the current read-transaction had started.
47546:   */
47547:   for(iHash=walFramePage(iLast); iHash>=0 && iRead==0; iHash--){
47548:     volatile ht_slot *aHash;      /* Pointer to hash table */
47549:     volatile u32 *aPgno;          /* Pointer to array of page numbers */
47550:     u32 iZero;                    /* Frame number corresponding to aPgno[0] */
47551:     int iKey;                     /* Hash slot index */
47552:     int nCollide;                 /* Number of hash collisions remaining */
47553:     int rc;                       /* Error code */
47554: 
47555:     rc = walHashGet(pWal, iHash, &aHash, &aPgno, &iZero);
47556:     if( rc!=SQLITE_OK ){
47557:       return rc;
47558:     }
47559:     nCollide = HASHTABLE_NSLOT;
47560:     for(iKey=walHash(pgno); aHash[iKey]; iKey=walNextHash(iKey)){
47561:       u32 iFrame = aHash[iKey] + iZero;
47562:       if( iFrame<=iLast && aPgno[aHash[iKey]]==pgno ){
47563:         /* assert( iFrame>iRead ); -- not true if there is corruption */
47564:         iRead = iFrame;
47565:       }
47566:       if( (nCollide--)==0 ){
47567:         return SQLITE_CORRUPT_BKPT;
47568:       }
47569:     }
47570:   }
47571: 
47572: #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
47573:   /* If expensive assert() statements are available, do a linear search
47574:   ** of the wal-index file content. Make sure the results agree with the
47575:   ** result obtained using the hash indexes above.  */
47576:   {
47577:     u32 iRead2 = 0;
47578:     u32 iTest;
47579:     for(iTest=iLast; iTest>0; iTest--){
47580:       if( walFramePgno(pWal, iTest)==pgno ){
47581:         iRead2 = iTest;
47582:         break;
47583:       }
47584:     }
47585:     assert( iRead==iRead2 );
47586:   }
47587: #endif
47588: 
47589:   /* If iRead is non-zero, then it is the log frame number that contains the
47590:   ** required page. Read and return data from the log file.
47591:   */
47592:   if( iRead ){
47593:     int sz;
47594:     i64 iOffset;
47595:     sz = pWal->hdr.szPage;
47596:     sz = (sz&0xfe00) + ((sz&0x0001)<<16);
47597:     testcase( sz<=32768 );
47598:     testcase( sz>=65536 );
47599:     iOffset = walFrameOffset(iRead, sz) + WAL_FRAME_HDRSIZE;
47600:     *pInWal = 1;
47601:     /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL */
47602:     return sqlite3OsRead(pWal->pWalFd, pOut, nOut, iOffset);
47603:   }
47604: 
47605:   *pInWal = 0;
47606:   return SQLITE_OK;
47607: }
47608: 
47609: 
47610: /* 
47611: ** Return the size of the database in pages (or zero, if unknown).
47612: */
47613: SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal){
47614:   if( pWal && ALWAYS(pWal->readLock>=0) ){
47615:     return pWal->hdr.nPage;
47616:   }
47617:   return 0;
47618: }
47619: 
47620: 
47621: /* 
47622: ** This function starts a write transaction on the WAL.
47623: **
47624: ** A read transaction must have already been started by a prior call
47625: ** to sqlite3WalBeginReadTransaction().
47626: **
47627: ** If another thread or process has written into the database since
47628: ** the read transaction was started, then it is not possible for this
47629: ** thread to write as doing so would cause a fork.  So this routine
47630: ** returns SQLITE_BUSY in that case and no write transaction is started.
47631: **
47632: ** There can only be a single writer active at a time.
47633: */
47634: SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal){
47635:   int rc;
47636: 
47637:   /* Cannot start a write transaction without first holding a read
47638:   ** transaction. */
47639:   assert( pWal->readLock>=0 );
47640: 
47641:   if( pWal->readOnly ){
47642:     return SQLITE_READONLY;
47643:   }
47644: 
47645:   /* Only one writer allowed at a time.  Get the write lock.  Return
47646:   ** SQLITE_BUSY if unable.
47647:   */
47648:   rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1);
47649:   if( rc ){
47650:     return rc;
47651:   }
47652:   pWal->writeLock = 1;
47653: 
47654:   /* If another connection has written to the database file since the
47655:   ** time the read transaction on this connection was started, then
47656:   ** the write is disallowed.
47657:   */
47658:   if( memcmp(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr))!=0 ){
47659:     walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
47660:     pWal->writeLock = 0;
47661:     rc = SQLITE_BUSY;
47662:   }
47663: 
47664:   return rc;
47665: }
47666: 
47667: /*
47668: ** End a write transaction.  The commit has already been done.  This
47669: ** routine merely releases the lock.
47670: */
47671: SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal){
47672:   if( pWal->writeLock ){
47673:     walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
47674:     pWal->writeLock = 0;
47675:     pWal->truncateOnCommit = 0;
47676:   }
47677:   return SQLITE_OK;
47678: }
47679: 
47680: /*
47681: ** If any data has been written (but not committed) to the log file, this
47682: ** function moves the write-pointer back to the start of the transaction.
47683: **
47684: ** Additionally, the callback function is invoked for each frame written
47685: ** to the WAL since the start of the transaction. If the callback returns
47686: ** other than SQLITE_OK, it is not invoked again and the error code is
47687: ** returned to the caller.
47688: **
47689: ** Otherwise, if the callback function does not return an error, this
47690: ** function returns SQLITE_OK.
47691: */
47692: SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx){
47693:   int rc = SQLITE_OK;
47694:   if( ALWAYS(pWal->writeLock) ){
47695:     Pgno iMax = pWal->hdr.mxFrame;
47696:     Pgno iFrame;
47697:   
47698:     /* Restore the clients cache of the wal-index header to the state it
47699:     ** was in before the client began writing to the database. 
47700:     */
47701:     memcpy(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr));
47702: 
47703:     for(iFrame=pWal->hdr.mxFrame+1; 
47704:         ALWAYS(rc==SQLITE_OK) && iFrame<=iMax; 
47705:         iFrame++
47706:     ){
47707:       /* This call cannot fail. Unless the page for which the page number
47708:       ** is passed as the second argument is (a) in the cache and 
47709:       ** (b) has an outstanding reference, then xUndo is either a no-op
47710:       ** (if (a) is false) or simply expels the page from the cache (if (b)
47711:       ** is false).
47712:       **
47713:       ** If the upper layer is doing a rollback, it is guaranteed that there
47714:       ** are no outstanding references to any page other than page 1. And
47715:       ** page 1 is never written to the log until the transaction is
47716:       ** committed. As a result, the call to xUndo may not fail.
47717:       */
47718:       assert( walFramePgno(pWal, iFrame)!=1 );
47719:       rc = xUndo(pUndoCtx, walFramePgno(pWal, iFrame));
47720:     }
47721:     walCleanupHash(pWal);
47722:   }
47723:   assert( rc==SQLITE_OK );
47724:   return rc;
47725: }
47726: 
47727: /* 
47728: ** Argument aWalData must point to an array of WAL_SAVEPOINT_NDATA u32 
47729: ** values. This function populates the array with values required to 
47730: ** "rollback" the write position of the WAL handle back to the current 
47731: ** point in the event of a savepoint rollback (via WalSavepointUndo()).
47732: */
47733: SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData){
47734:   assert( pWal->writeLock );
47735:   aWalData[0] = pWal->hdr.mxFrame;
47736:   aWalData[1] = pWal->hdr.aFrameCksum[0];
47737:   aWalData[2] = pWal->hdr.aFrameCksum[1];
47738:   aWalData[3] = pWal->nCkpt;
47739: }
47740: 
47741: /* 
47742: ** Move the write position of the WAL back to the point identified by
47743: ** the values in the aWalData[] array. aWalData must point to an array
47744: ** of WAL_SAVEPOINT_NDATA u32 values that has been previously populated
47745: ** by a call to WalSavepoint().
47746: */
47747: SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){
47748:   int rc = SQLITE_OK;
47749: 
47750:   assert( pWal->writeLock );
47751:   assert( aWalData[3]!=pWal->nCkpt || aWalData[0]<=pWal->hdr.mxFrame );
47752: 
47753:   if( aWalData[3]!=pWal->nCkpt ){
47754:     /* This savepoint was opened immediately after the write-transaction
47755:     ** was started. Right after that, the writer decided to wrap around
47756:     ** to the start of the log. Update the savepoint values to match.
47757:     */
47758:     aWalData[0] = 0;
47759:     aWalData[3] = pWal->nCkpt;
47760:   }
47761: 
47762:   if( aWalData[0]<pWal->hdr.mxFrame ){
47763:     pWal->hdr.mxFrame = aWalData[0];
47764:     pWal->hdr.aFrameCksum[0] = aWalData[1];
47765:     pWal->hdr.aFrameCksum[1] = aWalData[2];
47766:     walCleanupHash(pWal);
47767:   }
47768: 
47769:   return rc;
47770: }
47771: 
47772: 
47773: /*
47774: ** This function is called just before writing a set of frames to the log
47775: ** file (see sqlite3WalFrames()). It checks to see if, instead of appending
47776: ** to the current log file, it is possible to overwrite the start of the
47777: ** existing log file with the new frames (i.e. "reset" the log). If so,
47778: ** it sets pWal->hdr.mxFrame to 0. Otherwise, pWal->hdr.mxFrame is left
47779: ** unchanged.
47780: **
47781: ** SQLITE_OK is returned if no error is encountered (regardless of whether
47782: ** or not pWal->hdr.mxFrame is modified). An SQLite error code is returned
47783: ** if an error occurs.
47784: */
47785: static int walRestartLog(Wal *pWal){
47786:   int rc = SQLITE_OK;
47787:   int cnt;
47788: 
47789:   if( pWal->readLock==0 ){
47790:     volatile WalCkptInfo *pInfo = walCkptInfo(pWal);
47791:     assert( pInfo->nBackfill==pWal->hdr.mxFrame );
47792:     if( pInfo->nBackfill>0 ){
47793:       u32 salt1;
47794:       sqlite3_randomness(4, &salt1);
47795:       rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
47796:       if( rc==SQLITE_OK ){
47797:         /* If all readers are using WAL_READ_LOCK(0) (in other words if no
47798:         ** readers are currently using the WAL), then the transactions
47799:         ** frames will overwrite the start of the existing log. Update the
47800:         ** wal-index header to reflect this.
47801:         **
47802:         ** In theory it would be Ok to update the cache of the header only
47803:         ** at this point. But updating the actual wal-index header is also
47804:         ** safe and means there is no special case for sqlite3WalUndo()
47805:         ** to handle if this transaction is rolled back.
47806:         */
47807:         int i;                    /* Loop counter */
47808:         u32 *aSalt = pWal->hdr.aSalt;       /* Big-endian salt values */
47809: 
47810:         pWal->nCkpt++;
47811:         pWal->hdr.mxFrame = 0;
47812:         sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0]));
47813:         aSalt[1] = salt1;
47814:         walIndexWriteHdr(pWal);
47815:         pInfo->nBackfill = 0;
47816:         for(i=1; i<WAL_NREADER; i++) pInfo->aReadMark[i] = READMARK_NOT_USED;
47817:         assert( pInfo->aReadMark[0]==0 );
47818:         walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
47819:       }else if( rc!=SQLITE_BUSY ){
47820:         return rc;
47821:       }
47822:     }
47823:     walUnlockShared(pWal, WAL_READ_LOCK(0));
47824:     pWal->readLock = -1;
47825:     cnt = 0;
47826:     do{
47827:       int notUsed;
47828:       rc = walTryBeginRead(pWal, &notUsed, 1, ++cnt);
47829:     }while( rc==WAL_RETRY );
47830:     assert( (rc&0xff)!=SQLITE_BUSY ); /* BUSY not possible when useWal==1 */
47831:     testcase( (rc&0xff)==SQLITE_IOERR );
47832:     testcase( rc==SQLITE_PROTOCOL );
47833:     testcase( rc==SQLITE_OK );
47834:   }
47835:   return rc;
47836: }
47837: 
47838: /*
47839: ** Information about the current state of the WAL file and where
47840: ** the next fsync should occur - passed from sqlite3WalFrames() into
47841: ** walWriteToLog().
47842: */
47843: typedef struct WalWriter {
47844:   Wal *pWal;                   /* The complete WAL information */
47845:   sqlite3_file *pFd;           /* The WAL file to which we write */
47846:   sqlite3_int64 iSyncPoint;    /* Fsync at this offset */
47847:   int syncFlags;               /* Flags for the fsync */
47848:   int szPage;                  /* Size of one page */
47849: } WalWriter;
47850: 
47851: /*
47852: ** Write iAmt bytes of content into the WAL file beginning at iOffset.
47853: ** Do a sync when crossing the p->iSyncPoint boundary.
47854: **
47855: ** In other words, if iSyncPoint is in between iOffset and iOffset+iAmt,
47856: ** first write the part before iSyncPoint, then sync, then write the
47857: ** rest.
47858: */
47859: static int walWriteToLog(
47860:   WalWriter *p,              /* WAL to write to */
47861:   void *pContent,            /* Content to be written */
47862:   int iAmt,                  /* Number of bytes to write */
47863:   sqlite3_int64 iOffset      /* Start writing at this offset */
47864: ){
47865:   int rc;
47866:   if( iOffset<p->iSyncPoint && iOffset+iAmt>=p->iSyncPoint ){
47867:     int iFirstAmt = (int)(p->iSyncPoint - iOffset);
47868:     rc = sqlite3OsWrite(p->pFd, pContent, iFirstAmt, iOffset);
47869:     if( rc ) return rc;
47870:     iOffset += iFirstAmt;
47871:     iAmt -= iFirstAmt;
47872:     pContent = (void*)(iFirstAmt + (char*)pContent);
47873:     assert( p->syncFlags & (SQLITE_SYNC_NORMAL|SQLITE_SYNC_FULL) );
47874:     rc = sqlite3OsSync(p->pFd, p->syncFlags);
47875:     if( iAmt==0 || rc ) return rc;
47876:   }
47877:   rc = sqlite3OsWrite(p->pFd, pContent, iAmt, iOffset);
47878:   return rc;
47879: }
47880: 
47881: /*
47882: ** Write out a single frame of the WAL
47883: */
47884: static int walWriteOneFrame(
47885:   WalWriter *p,               /* Where to write the frame */
47886:   PgHdr *pPage,               /* The page of the frame to be written */
47887:   int nTruncate,              /* The commit flag.  Usually 0.  >0 for commit */
47888:   sqlite3_int64 iOffset       /* Byte offset at which to write */
47889: ){
47890:   int rc;                         /* Result code from subfunctions */
47891:   void *pData;                    /* Data actually written */
47892:   u8 aFrame[WAL_FRAME_HDRSIZE];   /* Buffer to assemble frame-header in */
47893: #if defined(SQLITE_HAS_CODEC)
47894:   if( (pData = sqlite3PagerCodec(pPage))==0 ) return SQLITE_NOMEM;
47895: #else
47896:   pData = pPage->pData;
47897: #endif
47898:   walEncodeFrame(p->pWal, pPage->pgno, nTruncate, pData, aFrame);
47899:   rc = walWriteToLog(p, aFrame, sizeof(aFrame), iOffset);
47900:   if( rc ) return rc;
47901:   /* Write the page data */
47902:   rc = walWriteToLog(p, pData, p->szPage, iOffset+sizeof(aFrame));
47903:   return rc;
47904: }
47905: 
47906: /* 
47907: ** Write a set of frames to the log. The caller must hold the write-lock
47908: ** on the log file (obtained using sqlite3WalBeginWriteTransaction()).
47909: */
47910: SQLITE_PRIVATE int sqlite3WalFrames(
47911:   Wal *pWal,                      /* Wal handle to write to */
47912:   int szPage,                     /* Database page-size in bytes */
47913:   PgHdr *pList,                   /* List of dirty pages to write */
47914:   Pgno nTruncate,                 /* Database size after this commit */
47915:   int isCommit,                   /* True if this is a commit */
47916:   int sync_flags                  /* Flags to pass to OsSync() (or 0) */
47917: ){
47918:   int rc;                         /* Used to catch return codes */
47919:   u32 iFrame;                     /* Next frame address */
47920:   PgHdr *p;                       /* Iterator to run through pList with. */
47921:   PgHdr *pLast = 0;               /* Last frame in list */
47922:   int nExtra = 0;                 /* Number of extra copies of last page */
47923:   int szFrame;                    /* The size of a single frame */
47924:   i64 iOffset;                    /* Next byte to write in WAL file */
47925:   WalWriter w;                    /* The writer */
47926: 
47927:   assert( pList );
47928:   assert( pWal->writeLock );
47929: 
47930:   /* If this frame set completes a transaction, then nTruncate>0.  If
47931:   ** nTruncate==0 then this frame set does not complete the transaction. */
47932:   assert( (isCommit!=0)==(nTruncate!=0) );
47933: 
47934: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
47935:   { int cnt; for(cnt=0, p=pList; p; p=p->pDirty, cnt++){}
47936:     WALTRACE(("WAL%p: frame write begin. %d frames. mxFrame=%d. %s\n",
47937:               pWal, cnt, pWal->hdr.mxFrame, isCommit ? "Commit" : "Spill"));
47938:   }
47939: #endif
47940: 
47941:   /* See if it is possible to write these frames into the start of the
47942:   ** log file, instead of appending to it at pWal->hdr.mxFrame.
47943:   */
47944:   if( SQLITE_OK!=(rc = walRestartLog(pWal)) ){
47945:     return rc;
47946:   }
47947: 
47948:   /* If this is the first frame written into the log, write the WAL
47949:   ** header to the start of the WAL file. See comments at the top of
47950:   ** this source file for a description of the WAL header format.
47951:   */
47952:   iFrame = pWal->hdr.mxFrame;
47953:   if( iFrame==0 ){
47954:     u8 aWalHdr[WAL_HDRSIZE];      /* Buffer to assemble wal-header in */
47955:     u32 aCksum[2];                /* Checksum for wal-header */
47956: 
47957:     sqlite3Put4byte(&aWalHdr[0], (WAL_MAGIC | SQLITE_BIGENDIAN));
47958:     sqlite3Put4byte(&aWalHdr[4], WAL_MAX_VERSION);
47959:     sqlite3Put4byte(&aWalHdr[8], szPage);
47960:     sqlite3Put4byte(&aWalHdr[12], pWal->nCkpt);
47961:     if( pWal->nCkpt==0 ) sqlite3_randomness(8, pWal->hdr.aSalt);
47962:     memcpy(&aWalHdr[16], pWal->hdr.aSalt, 8);
47963:     walChecksumBytes(1, aWalHdr, WAL_HDRSIZE-2*4, 0, aCksum);
47964:     sqlite3Put4byte(&aWalHdr[24], aCksum[0]);
47965:     sqlite3Put4byte(&aWalHdr[28], aCksum[1]);
47966:     
47967:     pWal->szPage = szPage;
47968:     pWal->hdr.bigEndCksum = SQLITE_BIGENDIAN;
47969:     pWal->hdr.aFrameCksum[0] = aCksum[0];
47970:     pWal->hdr.aFrameCksum[1] = aCksum[1];
47971:     pWal->truncateOnCommit = 1;
47972: 
47973:     rc = sqlite3OsWrite(pWal->pWalFd, aWalHdr, sizeof(aWalHdr), 0);
47974:     WALTRACE(("WAL%p: wal-header write %s\n", pWal, rc ? "failed" : "ok"));
47975:     if( rc!=SQLITE_OK ){
47976:       return rc;
47977:     }
47978: 
47979:     /* Sync the header (unless SQLITE_IOCAP_SEQUENTIAL is true or unless
47980:     ** all syncing is turned off by PRAGMA synchronous=OFF).  Otherwise
47981:     ** an out-of-order write following a WAL restart could result in
47982:     ** database corruption.  See the ticket:
47983:     **
47984:     **     http://localhost:591/sqlite/info/ff5be73dee
47985:     */
47986:     if( pWal->syncHeader && sync_flags ){
47987:       rc = sqlite3OsSync(pWal->pWalFd, sync_flags & SQLITE_SYNC_MASK);
47988:       if( rc ) return rc;
47989:     }
47990:   }
47991:   assert( (int)pWal->szPage==szPage );
47992: 
47993:   /* Setup information needed to write frames into the WAL */
47994:   w.pWal = pWal;
47995:   w.pFd = pWal->pWalFd;
47996:   w.iSyncPoint = 0;
47997:   w.syncFlags = sync_flags;
47998:   w.szPage = szPage;
47999:   iOffset = walFrameOffset(iFrame+1, szPage);
48000:   szFrame = szPage + WAL_FRAME_HDRSIZE;
48001: 
48002:   /* Write all frames into the log file exactly once */
48003:   for(p=pList; p; p=p->pDirty){
48004:     int nDbSize;   /* 0 normally.  Positive == commit flag */
48005:     iFrame++;
48006:     assert( iOffset==walFrameOffset(iFrame, szPage) );
48007:     nDbSize = (isCommit && p->pDirty==0) ? nTruncate : 0;
48008:     rc = walWriteOneFrame(&w, p, nDbSize, iOffset);
48009:     if( rc ) return rc;
48010:     pLast = p;
48011:     iOffset += szFrame;
48012:   }
48013: 
48014:   /* If this is the end of a transaction, then we might need to pad
48015:   ** the transaction and/or sync the WAL file.
48016:   **
48017:   ** Padding and syncing only occur if this set of frames complete a
48018:   ** transaction and if PRAGMA synchronous=FULL.  If synchronous==NORMAL
48019:   ** or synchonous==OFF, then no padding or syncing are needed.
48020:   **
48021:   ** If SQLITE_IOCAP_POWERSAFE_OVERWRITE is defined, then padding is not
48022:   ** needed and only the sync is done.  If padding is needed, then the
48023:   ** final frame is repeated (with its commit mark) until the next sector
48024:   ** boundary is crossed.  Only the part of the WAL prior to the last
48025:   ** sector boundary is synced; the part of the last frame that extends
48026:   ** past the sector boundary is written after the sync.
48027:   */
48028:   if( isCommit && (sync_flags & WAL_SYNC_TRANSACTIONS)!=0 ){
48029:     if( pWal->padToSectorBoundary ){
48030:       int sectorSize = sqlite3OsSectorSize(pWal->pWalFd);
48031:       w.iSyncPoint = ((iOffset+sectorSize-1)/sectorSize)*sectorSize;
48032:       while( iOffset<w.iSyncPoint ){
48033:         rc = walWriteOneFrame(&w, pLast, nTruncate, iOffset);
48034:         if( rc ) return rc;
48035:         iOffset += szFrame;
48036:         nExtra++;
48037:       }
48038:     }else{
48039:       rc = sqlite3OsSync(w.pFd, sync_flags & SQLITE_SYNC_MASK);
48040:     }
48041:   }
48042: 
48043:   /* If this frame set completes the first transaction in the WAL and
48044:   ** if PRAGMA journal_size_limit is set, then truncate the WAL to the
48045:   ** journal size limit, if possible.
48046:   */
48047:   if( isCommit && pWal->truncateOnCommit && pWal->mxWalSize>=0 ){
48048:     i64 sz = pWal->mxWalSize;
48049:     if( walFrameOffset(iFrame+nExtra+1, szPage)>pWal->mxWalSize ){
48050:       sz = walFrameOffset(iFrame+nExtra+1, szPage);
48051:     }
48052:     walLimitSize(pWal, sz);
48053:     pWal->truncateOnCommit = 0;
48054:   }
48055: 
48056:   /* Append data to the wal-index. It is not necessary to lock the 
48057:   ** wal-index to do this as the SQLITE_SHM_WRITE lock held on the wal-index
48058:   ** guarantees that there are no other writers, and no data that may
48059:   ** be in use by existing readers is being overwritten.
48060:   */
48061:   iFrame = pWal->hdr.mxFrame;
48062:   for(p=pList; p && rc==SQLITE_OK; p=p->pDirty){
48063:     iFrame++;
48064:     rc = walIndexAppend(pWal, iFrame, p->pgno);
48065:   }
48066:   while( rc==SQLITE_OK && nExtra>0 ){
48067:     iFrame++;
48068:     nExtra--;
48069:     rc = walIndexAppend(pWal, iFrame, pLast->pgno);
48070:   }
48071: 
48072:   if( rc==SQLITE_OK ){
48073:     /* Update the private copy of the header. */
48074:     pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16));
48075:     testcase( szPage<=32768 );
48076:     testcase( szPage>=65536 );
48077:     pWal->hdr.mxFrame = iFrame;
48078:     if( isCommit ){
48079:       pWal->hdr.iChange++;
48080:       pWal->hdr.nPage = nTruncate;
48081:     }
48082:     /* If this is a commit, update the wal-index header too. */
48083:     if( isCommit ){
48084:       walIndexWriteHdr(pWal);
48085:       pWal->iCallback = iFrame;
48086:     }
48087:   }
48088: 
48089:   WALTRACE(("WAL%p: frame write %s\n", pWal, rc ? "failed" : "ok"));
48090:   return rc;
48091: }
48092: 
48093: /* 
48094: ** This routine is called to implement sqlite3_wal_checkpoint() and
48095: ** related interfaces.
48096: **
48097: ** Obtain a CHECKPOINT lock and then backfill as much information as
48098: ** we can from WAL into the database.
48099: **
48100: ** If parameter xBusy is not NULL, it is a pointer to a busy-handler
48101: ** callback. In this case this function runs a blocking checkpoint.
48102: */
48103: SQLITE_PRIVATE int sqlite3WalCheckpoint(
48104:   Wal *pWal,                      /* Wal connection */
48105:   int eMode,                      /* PASSIVE, FULL or RESTART */
48106:   int (*xBusy)(void*),            /* Function to call when busy */
48107:   void *pBusyArg,                 /* Context argument for xBusyHandler */
48108:   int sync_flags,                 /* Flags to sync db file with (or 0) */
48109:   int nBuf,                       /* Size of temporary buffer */
48110:   u8 *zBuf,                       /* Temporary buffer to use */
48111:   int *pnLog,                     /* OUT: Number of frames in WAL */
48112:   int *pnCkpt                     /* OUT: Number of backfilled frames in WAL */
48113: ){
48114:   int rc;                         /* Return code */
48115:   int isChanged = 0;              /* True if a new wal-index header is loaded */
48116:   int eMode2 = eMode;             /* Mode to pass to walCheckpoint() */
48117: 
48118:   assert( pWal->ckptLock==0 );
48119:   assert( pWal->writeLock==0 );
48120: 
48121:   if( pWal->readOnly ) return SQLITE_READONLY;
48122:   WALTRACE(("WAL%p: checkpoint begins\n", pWal));
48123:   rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1);
48124:   if( rc ){
48125:     /* Usually this is SQLITE_BUSY meaning that another thread or process
48126:     ** is already running a checkpoint, or maybe a recovery.  But it might
48127:     ** also be SQLITE_IOERR. */
48128:     return rc;
48129:   }
48130:   pWal->ckptLock = 1;
48131: 
48132:   /* If this is a blocking-checkpoint, then obtain the write-lock as well
48133:   ** to prevent any writers from running while the checkpoint is underway.
48134:   ** This has to be done before the call to walIndexReadHdr() below.
48135:   **
48136:   ** If the writer lock cannot be obtained, then a passive checkpoint is
48137:   ** run instead. Since the checkpointer is not holding the writer lock,
48138:   ** there is no point in blocking waiting for any readers. Assuming no 
48139:   ** other error occurs, this function will return SQLITE_BUSY to the caller.
48140:   */
48141:   if( eMode!=SQLITE_CHECKPOINT_PASSIVE ){
48142:     rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_WRITE_LOCK, 1);
48143:     if( rc==SQLITE_OK ){
48144:       pWal->writeLock = 1;
48145:     }else if( rc==SQLITE_BUSY ){
48146:       eMode2 = SQLITE_CHECKPOINT_PASSIVE;
48147:       rc = SQLITE_OK;
48148:     }
48149:   }
48150: 
48151:   /* Read the wal-index header. */
48152:   if( rc==SQLITE_OK ){
48153:     rc = walIndexReadHdr(pWal, &isChanged);
48154:   }
48155: 
48156:   /* Copy data from the log to the database file. */
48157:   if( rc==SQLITE_OK ){
48158:     if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){
48159:       rc = SQLITE_CORRUPT_BKPT;
48160:     }else{
48161:       rc = walCheckpoint(pWal, eMode2, xBusy, pBusyArg, sync_flags, zBuf);
48162:     }
48163: 
48164:     /* If no error occurred, set the output variables. */
48165:     if( rc==SQLITE_OK || rc==SQLITE_BUSY ){
48166:       if( pnLog ) *pnLog = (int)pWal->hdr.mxFrame;
48167:       if( pnCkpt ) *pnCkpt = (int)(walCkptInfo(pWal)->nBackfill);
48168:     }
48169:   }
48170: 
48171:   if( isChanged ){
48172:     /* If a new wal-index header was loaded before the checkpoint was 
48173:     ** performed, then the pager-cache associated with pWal is now
48174:     ** out of date. So zero the cached wal-index header to ensure that
48175:     ** next time the pager opens a snapshot on this database it knows that
48176:     ** the cache needs to be reset.
48177:     */
48178:     memset(&pWal->hdr, 0, sizeof(WalIndexHdr));
48179:   }
48180: 
48181:   /* Release the locks. */
48182:   sqlite3WalEndWriteTransaction(pWal);
48183:   walUnlockExclusive(pWal, WAL_CKPT_LOCK, 1);
48184:   pWal->ckptLock = 0;
48185:   WALTRACE(("WAL%p: checkpoint %s\n", pWal, rc ? "failed" : "ok"));
48186:   return (rc==SQLITE_OK && eMode!=eMode2 ? SQLITE_BUSY : rc);
48187: }
48188: 
48189: /* Return the value to pass to a sqlite3_wal_hook callback, the
48190: ** number of frames in the WAL at the point of the last commit since
48191: ** sqlite3WalCallback() was called.  If no commits have occurred since
48192: ** the last call, then return 0.
48193: */
48194: SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal){
48195:   u32 ret = 0;
48196:   if( pWal ){
48197:     ret = pWal->iCallback;
48198:     pWal->iCallback = 0;
48199:   }
48200:   return (int)ret;
48201: }
48202: 
48203: /*
48204: ** This function is called to change the WAL subsystem into or out
48205: ** of locking_mode=EXCLUSIVE.
48206: **
48207: ** If op is zero, then attempt to change from locking_mode=EXCLUSIVE
48208: ** into locking_mode=NORMAL.  This means that we must acquire a lock
48209: ** on the pWal->readLock byte.  If the WAL is already in locking_mode=NORMAL
48210: ** or if the acquisition of the lock fails, then return 0.  If the
48211: ** transition out of exclusive-mode is successful, return 1.  This
48212: ** operation must occur while the pager is still holding the exclusive
48213: ** lock on the main database file.
48214: **
48215: ** If op is one, then change from locking_mode=NORMAL into 
48216: ** locking_mode=EXCLUSIVE.  This means that the pWal->readLock must
48217: ** be released.  Return 1 if the transition is made and 0 if the
48218: ** WAL is already in exclusive-locking mode - meaning that this
48219: ** routine is a no-op.  The pager must already hold the exclusive lock
48220: ** on the main database file before invoking this operation.
48221: **
48222: ** If op is negative, then do a dry-run of the op==1 case but do
48223: ** not actually change anything. The pager uses this to see if it
48224: ** should acquire the database exclusive lock prior to invoking
48225: ** the op==1 case.
48226: */
48227: SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){
48228:   int rc;
48229:   assert( pWal->writeLock==0 );
48230:   assert( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE || op==-1 );
48231: 
48232:   /* pWal->readLock is usually set, but might be -1 if there was a 
48233:   ** prior error while attempting to acquire are read-lock. This cannot 
48234:   ** happen if the connection is actually in exclusive mode (as no xShmLock
48235:   ** locks are taken in this case). Nor should the pager attempt to
48236:   ** upgrade to exclusive-mode following such an error.
48237:   */
48238:   assert( pWal->readLock>=0 || pWal->lockError );
48239:   assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) );
48240: 
48241:   if( op==0 ){
48242:     if( pWal->exclusiveMode ){
48243:       pWal->exclusiveMode = 0;
48244:       if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){
48245:         pWal->exclusiveMode = 1;
48246:       }
48247:       rc = pWal->exclusiveMode==0;
48248:     }else{
48249:       /* Already in locking_mode=NORMAL */
48250:       rc = 0;
48251:     }
48252:   }else if( op>0 ){
48253:     assert( pWal->exclusiveMode==0 );
48254:     assert( pWal->readLock>=0 );
48255:     walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
48256:     pWal->exclusiveMode = 1;
48257:     rc = 1;
48258:   }else{
48259:     rc = pWal->exclusiveMode==0;
48260:   }
48261:   return rc;
48262: }
48263: 
48264: /* 
48265: ** Return true if the argument is non-NULL and the WAL module is using
48266: ** heap-memory for the wal-index. Otherwise, if the argument is NULL or the
48267: ** WAL module is using shared-memory, return false. 
48268: */
48269: SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal){
48270:   return (pWal && pWal->exclusiveMode==WAL_HEAPMEMORY_MODE );
48271: }
48272: 
48273: #endif /* #ifndef SQLITE_OMIT_WAL */
48274: 
48275: /************** End of wal.c *************************************************/
48276: /************** Begin file btmutex.c *****************************************/
48277: /*
48278: ** 2007 August 27
48279: **
48280: ** The author disclaims copyright to this source code.  In place of
48281: ** a legal notice, here is a blessing:
48282: **
48283: **    May you do good and not evil.
48284: **    May you find forgiveness for yourself and forgive others.
48285: **    May you share freely, never taking more than you give.
48286: **
48287: *************************************************************************
48288: **
48289: ** This file contains code used to implement mutexes on Btree objects.
48290: ** This code really belongs in btree.c.  But btree.c is getting too
48291: ** big and we want to break it down some.  This packaged seemed like
48292: ** a good breakout.
48293: */
48294: /************** Include btreeInt.h in the middle of btmutex.c ****************/
48295: /************** Begin file btreeInt.h ****************************************/
48296: /*
48297: ** 2004 April 6
48298: **
48299: ** The author disclaims copyright to this source code.  In place of
48300: ** a legal notice, here is a blessing:
48301: **
48302: **    May you do good and not evil.
48303: **    May you find forgiveness for yourself and forgive others.
48304: **    May you share freely, never taking more than you give.
48305: **
48306: *************************************************************************
48307: ** This file implements a external (disk-based) database using BTrees.
48308: ** For a detailed discussion of BTrees, refer to
48309: **
48310: **     Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3:
48311: **     "Sorting And Searching", pages 473-480. Addison-Wesley
48312: **     Publishing Company, Reading, Massachusetts.
48313: **
48314: ** The basic idea is that each page of the file contains N database
48315: ** entries and N+1 pointers to subpages.
48316: **
48317: **   ----------------------------------------------------------------
48318: **   |  Ptr(0) | Key(0) | Ptr(1) | Key(1) | ... | Key(N-1) | Ptr(N) |
48319: **   ----------------------------------------------------------------
48320: **
48321: ** All of the keys on the page that Ptr(0) points to have values less
48322: ** than Key(0).  All of the keys on page Ptr(1) and its subpages have
48323: ** values greater than Key(0) and less than Key(1).  All of the keys
48324: ** on Ptr(N) and its subpages have values greater than Key(N-1).  And
48325: ** so forth.
48326: **
48327: ** Finding a particular key requires reading O(log(M)) pages from the 
48328: ** disk where M is the number of entries in the tree.
48329: **
48330: ** In this implementation, a single file can hold one or more separate 
48331: ** BTrees.  Each BTree is identified by the index of its root page.  The
48332: ** key and data for any entry are combined to form the "payload".  A
48333: ** fixed amount of payload can be carried directly on the database
48334: ** page.  If the payload is larger than the preset amount then surplus
48335: ** bytes are stored on overflow pages.  The payload for an entry
48336: ** and the preceding pointer are combined to form a "Cell".  Each 
48337: ** page has a small header which contains the Ptr(N) pointer and other
48338: ** information such as the size of key and data.
48339: **
48340: ** FORMAT DETAILS
48341: **
48342: ** The file is divided into pages.  The first page is called page 1,
48343: ** the second is page 2, and so forth.  A page number of zero indicates
48344: ** "no such page".  The page size can be any power of 2 between 512 and 65536.
48345: ** Each page can be either a btree page, a freelist page, an overflow
48346: ** page, or a pointer-map page.
48347: **
48348: ** The first page is always a btree page.  The first 100 bytes of the first
48349: ** page contain a special header (the "file header") that describes the file.
48350: ** The format of the file header is as follows:
48351: **
48352: **   OFFSET   SIZE    DESCRIPTION
48353: **      0      16     Header string: "SQLite format 3\000"
48354: **     16       2     Page size in bytes.  
48355: **     18       1     File format write version
48356: **     19       1     File format read version
48357: **     20       1     Bytes of unused space at the end of each page
48358: **     21       1     Max embedded payload fraction
48359: **     22       1     Min embedded payload fraction
48360: **     23       1     Min leaf payload fraction
48361: **     24       4     File change counter
48362: **     28       4     Reserved for future use
48363: **     32       4     First freelist page
48364: **     36       4     Number of freelist pages in the file
48365: **     40      60     15 4-byte meta values passed to higher layers
48366: **
48367: **     40       4     Schema cookie
48368: **     44       4     File format of schema layer
48369: **     48       4     Size of page cache
48370: **     52       4     Largest root-page (auto/incr_vacuum)
48371: **     56       4     1=UTF-8 2=UTF16le 3=UTF16be
48372: **     60       4     User version
48373: **     64       4     Incremental vacuum mode
48374: **     68       4     unused
48375: **     72       4     unused
48376: **     76       4     unused
48377: **
48378: ** All of the integer values are big-endian (most significant byte first).
48379: **
48380: ** The file change counter is incremented when the database is changed
48381: ** This counter allows other processes to know when the file has changed
48382: ** and thus when they need to flush their cache.
48383: **
48384: ** The max embedded payload fraction is the amount of the total usable
48385: ** space in a page that can be consumed by a single cell for standard
48386: ** B-tree (non-LEAFDATA) tables.  A value of 255 means 100%.  The default
48387: ** is to limit the maximum cell size so that at least 4 cells will fit
48388: ** on one page.  Thus the default max embedded payload fraction is 64.
48389: **
48390: ** If the payload for a cell is larger than the max payload, then extra
48391: ** payload is spilled to overflow pages.  Once an overflow page is allocated,
48392: ** as many bytes as possible are moved into the overflow pages without letting
48393: ** the cell size drop below the min embedded payload fraction.
48394: **
48395: ** The min leaf payload fraction is like the min embedded payload fraction
48396: ** except that it applies to leaf nodes in a LEAFDATA tree.  The maximum
48397: ** payload fraction for a LEAFDATA tree is always 100% (or 255) and it
48398: ** not specified in the header.
48399: **
48400: ** Each btree pages is divided into three sections:  The header, the
48401: ** cell pointer array, and the cell content area.  Page 1 also has a 100-byte
48402: ** file header that occurs before the page header.
48403: **
48404: **      |----------------|
48405: **      | file header    |   100 bytes.  Page 1 only.
48406: **      |----------------|
48407: **      | page header    |   8 bytes for leaves.  12 bytes for interior nodes
48408: **      |----------------|
48409: **      | cell pointer   |   |  2 bytes per cell.  Sorted order.
48410: **      | array          |   |  Grows downward
48411: **      |                |   v
48412: **      |----------------|
48413: **      | unallocated    |
48414: **      | space          |
48415: **      |----------------|   ^  Grows upwards
48416: **      | cell content   |   |  Arbitrary order interspersed with freeblocks.
48417: **      | area           |   |  and free space fragments.
48418: **      |----------------|
48419: **
48420: ** The page headers looks like this:
48421: **
48422: **   OFFSET   SIZE     DESCRIPTION
48423: **      0       1      Flags. 1: intkey, 2: zerodata, 4: leafdata, 8: leaf
48424: **      1       2      byte offset to the first freeblock
48425: **      3       2      number of cells on this page
48426: **      5       2      first byte of the cell content area
48427: **      7       1      number of fragmented free bytes
48428: **      8       4      Right child (the Ptr(N) value).  Omitted on leaves.
48429: **
48430: ** The flags define the format of this btree page.  The leaf flag means that
48431: ** this page has no children.  The zerodata flag means that this page carries
48432: ** only keys and no data.  The intkey flag means that the key is a integer
48433: ** which is stored in the key size entry of the cell header rather than in
48434: ** the payload area.
48435: **
48436: ** The cell pointer array begins on the first byte after the page header.
48437: ** The cell pointer array contains zero or more 2-byte numbers which are
48438: ** offsets from the beginning of the page to the cell content in the cell
48439: ** content area.  The cell pointers occur in sorted order.  The system strives
48440: ** to keep free space after the last cell pointer so that new cells can
48441: ** be easily added without having to defragment the page.
48442: **
48443: ** Cell content is stored at the very end of the page and grows toward the
48444: ** beginning of the page.
48445: **
48446: ** Unused space within the cell content area is collected into a linked list of
48447: ** freeblocks.  Each freeblock is at least 4 bytes in size.  The byte offset
48448: ** to the first freeblock is given in the header.  Freeblocks occur in
48449: ** increasing order.  Because a freeblock must be at least 4 bytes in size,
48450: ** any group of 3 or fewer unused bytes in the cell content area cannot
48451: ** exist on the freeblock chain.  A group of 3 or fewer free bytes is called
48452: ** a fragment.  The total number of bytes in all fragments is recorded.
48453: ** in the page header at offset 7.
48454: **
48455: **    SIZE    DESCRIPTION
48456: **      2     Byte offset of the next freeblock
48457: **      2     Bytes in this freeblock
48458: **
48459: ** Cells are of variable length.  Cells are stored in the cell content area at
48460: ** the end of the page.  Pointers to the cells are in the cell pointer array
48461: ** that immediately follows the page header.  Cells is not necessarily
48462: ** contiguous or in order, but cell pointers are contiguous and in order.
48463: **
48464: ** Cell content makes use of variable length integers.  A variable
48465: ** length integer is 1 to 9 bytes where the lower 7 bits of each 
48466: ** byte are used.  The integer consists of all bytes that have bit 8 set and
48467: ** the first byte with bit 8 clear.  The most significant byte of the integer
48468: ** appears first.  A variable-length integer may not be more than 9 bytes long.
48469: ** As a special case, all 8 bytes of the 9th byte are used as data.  This
48470: ** allows a 64-bit integer to be encoded in 9 bytes.
48471: **
48472: **    0x00                      becomes  0x00000000
48473: **    0x7f                      becomes  0x0000007f
48474: **    0x81 0x00                 becomes  0x00000080
48475: **    0x82 0x00                 becomes  0x00000100
48476: **    0x80 0x7f                 becomes  0x0000007f
48477: **    0x8a 0x91 0xd1 0xac 0x78  becomes  0x12345678
48478: **    0x81 0x81 0x81 0x81 0x01  becomes  0x10204081
48479: **
48480: ** Variable length integers are used for rowids and to hold the number of
48481: ** bytes of key and data in a btree cell.
48482: **
48483: ** The content of a cell looks like this:
48484: **
48485: **    SIZE    DESCRIPTION
48486: **      4     Page number of the left child. Omitted if leaf flag is set.
48487: **     var    Number of bytes of data. Omitted if the zerodata flag is set.
48488: **     var    Number of bytes of key. Or the key itself if intkey flag is set.
48489: **      *     Payload
48490: **      4     First page of the overflow chain.  Omitted if no overflow
48491: **
48492: ** Overflow pages form a linked list.  Each page except the last is completely
48493: ** filled with data (pagesize - 4 bytes).  The last page can have as little
48494: ** as 1 byte of data.
48495: **
48496: **    SIZE    DESCRIPTION
48497: **      4     Page number of next overflow page
48498: **      *     Data
48499: **
48500: ** Freelist pages come in two subtypes: trunk pages and leaf pages.  The
48501: ** file header points to the first in a linked list of trunk page.  Each trunk
48502: ** page points to multiple leaf pages.  The content of a leaf page is
48503: ** unspecified.  A trunk page looks like this:
48504: **
48505: **    SIZE    DESCRIPTION
48506: **      4     Page number of next trunk page
48507: **      4     Number of leaf pointers on this page
48508: **      *     zero or more pages numbers of leaves
48509: */
48510: 
48511: 
48512: /* The following value is the maximum cell size assuming a maximum page
48513: ** size give above.
48514: */
48515: #define MX_CELL_SIZE(pBt)  ((int)(pBt->pageSize-8))
48516: 
48517: /* The maximum number of cells on a single page of the database.  This
48518: ** assumes a minimum cell size of 6 bytes  (4 bytes for the cell itself
48519: ** plus 2 bytes for the index to the cell in the page header).  Such
48520: ** small cells will be rare, but they are possible.
48521: */
48522: #define MX_CELL(pBt) ((pBt->pageSize-8)/6)
48523: 
48524: /* Forward declarations */
48525: typedef struct MemPage MemPage;
48526: typedef struct BtLock BtLock;
48527: 
48528: /*
48529: ** This is a magic string that appears at the beginning of every
48530: ** SQLite database in order to identify the file as a real database.
48531: **
48532: ** You can change this value at compile-time by specifying a
48533: ** -DSQLITE_FILE_HEADER="..." on the compiler command-line.  The
48534: ** header must be exactly 16 bytes including the zero-terminator so
48535: ** the string itself should be 15 characters long.  If you change
48536: ** the header, then your custom library will not be able to read 
48537: ** databases generated by the standard tools and the standard tools
48538: ** will not be able to read databases created by your custom library.
48539: */
48540: #ifndef SQLITE_FILE_HEADER /* 123456789 123456 */
48541: #  define SQLITE_FILE_HEADER "SQLite format 3"
48542: #endif
48543: 
48544: /*
48545: ** Page type flags.  An ORed combination of these flags appear as the
48546: ** first byte of on-disk image of every BTree page.
48547: */
48548: #define PTF_INTKEY    0x01
48549: #define PTF_ZERODATA  0x02
48550: #define PTF_LEAFDATA  0x04
48551: #define PTF_LEAF      0x08
48552: 
48553: /*
48554: ** As each page of the file is loaded into memory, an instance of the following
48555: ** structure is appended and initialized to zero.  This structure stores
48556: ** information about the page that is decoded from the raw file page.
48557: **
48558: ** The pParent field points back to the parent page.  This allows us to
48559: ** walk up the BTree from any leaf to the root.  Care must be taken to
48560: ** unref() the parent page pointer when this page is no longer referenced.
48561: ** The pageDestructor() routine handles that chore.
48562: **
48563: ** Access to all fields of this structure is controlled by the mutex
48564: ** stored in MemPage.pBt->mutex.
48565: */
48566: struct MemPage {
48567:   u8 isInit;           /* True if previously initialized. MUST BE FIRST! */
48568:   u8 nOverflow;        /* Number of overflow cell bodies in aCell[] */
48569:   u8 intKey;           /* True if intkey flag is set */
48570:   u8 leaf;             /* True if leaf flag is set */
48571:   u8 hasData;          /* True if this page stores data */
48572:   u8 hdrOffset;        /* 100 for page 1.  0 otherwise */
48573:   u8 childPtrSize;     /* 0 if leaf==1.  4 if leaf==0 */
48574:   u8 max1bytePayload;  /* min(maxLocal,127) */
48575:   u16 maxLocal;        /* Copy of BtShared.maxLocal or BtShared.maxLeaf */
48576:   u16 minLocal;        /* Copy of BtShared.minLocal or BtShared.minLeaf */
48577:   u16 cellOffset;      /* Index in aData of first cell pointer */
48578:   u16 nFree;           /* Number of free bytes on the page */
48579:   u16 nCell;           /* Number of cells on this page, local and ovfl */
48580:   u16 maskPage;        /* Mask for page offset */
48581:   struct _OvflCell {   /* Cells that will not fit on aData[] */
48582:     u8 *pCell;          /* Pointers to the body of the overflow cell */
48583:     u16 idx;            /* Insert this cell before idx-th non-overflow cell */
48584:   } aOvfl[5];
48585:   BtShared *pBt;       /* Pointer to BtShared that this page is part of */
48586:   u8 *aData;           /* Pointer to disk image of the page data */
48587:   u8 *aDataEnd;        /* One byte past the end of usable data */
48588:   u8 *aCellIdx;        /* The cell index area */
48589:   DbPage *pDbPage;     /* Pager page handle */
48590:   Pgno pgno;           /* Page number for this page */
48591: };
48592: 
48593: /*
48594: ** The in-memory image of a disk page has the auxiliary information appended
48595: ** to the end.  EXTRA_SIZE is the number of bytes of space needed to hold
48596: ** that extra information.
48597: */
48598: #define EXTRA_SIZE sizeof(MemPage)
48599: 
48600: /*
48601: ** A linked list of the following structures is stored at BtShared.pLock.
48602: ** Locks are added (or upgraded from READ_LOCK to WRITE_LOCK) when a cursor 
48603: ** is opened on the table with root page BtShared.iTable. Locks are removed
48604: ** from this list when a transaction is committed or rolled back, or when
48605: ** a btree handle is closed.
48606: */
48607: struct BtLock {
48608:   Btree *pBtree;        /* Btree handle holding this lock */
48609:   Pgno iTable;          /* Root page of table */
48610:   u8 eLock;             /* READ_LOCK or WRITE_LOCK */
48611:   BtLock *pNext;        /* Next in BtShared.pLock list */
48612: };
48613: 
48614: /* Candidate values for BtLock.eLock */
48615: #define READ_LOCK     1
48616: #define WRITE_LOCK    2
48617: 
48618: /* A Btree handle
48619: **
48620: ** A database connection contains a pointer to an instance of
48621: ** this object for every database file that it has open.  This structure
48622: ** is opaque to the database connection.  The database connection cannot
48623: ** see the internals of this structure and only deals with pointers to
48624: ** this structure.
48625: **
48626: ** For some database files, the same underlying database cache might be 
48627: ** shared between multiple connections.  In that case, each connection
48628: ** has it own instance of this object.  But each instance of this object
48629: ** points to the same BtShared object.  The database cache and the
48630: ** schema associated with the database file are all contained within
48631: ** the BtShared object.
48632: **
48633: ** All fields in this structure are accessed under sqlite3.mutex.
48634: ** The pBt pointer itself may not be changed while there exists cursors 
48635: ** in the referenced BtShared that point back to this Btree since those
48636: ** cursors have to go through this Btree to find their BtShared and
48637: ** they often do so without holding sqlite3.mutex.
48638: */
48639: struct Btree {
48640:   sqlite3 *db;       /* The database connection holding this btree */
48641:   BtShared *pBt;     /* Sharable content of this btree */
48642:   u8 inTrans;        /* TRANS_NONE, TRANS_READ or TRANS_WRITE */
48643:   u8 sharable;       /* True if we can share pBt with another db */
48644:   u8 locked;         /* True if db currently has pBt locked */
48645:   int wantToLock;    /* Number of nested calls to sqlite3BtreeEnter() */
48646:   int nBackup;       /* Number of backup operations reading this btree */
48647:   Btree *pNext;      /* List of other sharable Btrees from the same db */
48648:   Btree *pPrev;      /* Back pointer of the same list */
48649: #ifndef SQLITE_OMIT_SHARED_CACHE
48650:   BtLock lock;       /* Object used to lock page 1 */
48651: #endif
48652: };
48653: 
48654: /*
48655: ** Btree.inTrans may take one of the following values.
48656: **
48657: ** If the shared-data extension is enabled, there may be multiple users
48658: ** of the Btree structure. At most one of these may open a write transaction,
48659: ** but any number may have active read transactions.
48660: */
48661: #define TRANS_NONE  0
48662: #define TRANS_READ  1
48663: #define TRANS_WRITE 2
48664: 
48665: /*
48666: ** An instance of this object represents a single database file.
48667: ** 
48668: ** A single database file can be in use at the same time by two
48669: ** or more database connections.  When two or more connections are
48670: ** sharing the same database file, each connection has it own
48671: ** private Btree object for the file and each of those Btrees points
48672: ** to this one BtShared object.  BtShared.nRef is the number of
48673: ** connections currently sharing this database file.
48674: **
48675: ** Fields in this structure are accessed under the BtShared.mutex
48676: ** mutex, except for nRef and pNext which are accessed under the
48677: ** global SQLITE_MUTEX_STATIC_MASTER mutex.  The pPager field
48678: ** may not be modified once it is initially set as long as nRef>0.
48679: ** The pSchema field may be set once under BtShared.mutex and
48680: ** thereafter is unchanged as long as nRef>0.
48681: **
48682: ** isPending:
48683: **
48684: **   If a BtShared client fails to obtain a write-lock on a database
48685: **   table (because there exists one or more read-locks on the table),
48686: **   the shared-cache enters 'pending-lock' state and isPending is
48687: **   set to true.
48688: **
48689: **   The shared-cache leaves the 'pending lock' state when either of
48690: **   the following occur:
48691: **
48692: **     1) The current writer (BtShared.pWriter) concludes its transaction, OR
48693: **     2) The number of locks held by other connections drops to zero.
48694: **
48695: **   while in the 'pending-lock' state, no connection may start a new
48696: **   transaction.
48697: **
48698: **   This feature is included to help prevent writer-starvation.
48699: */
48700: struct BtShared {
48701:   Pager *pPager;        /* The page cache */
48702:   sqlite3 *db;          /* Database connection currently using this Btree */
48703:   BtCursor *pCursor;    /* A list of all open cursors */
48704:   MemPage *pPage1;      /* First page of the database */
48705:   u8 openFlags;         /* Flags to sqlite3BtreeOpen() */
48706: #ifndef SQLITE_OMIT_AUTOVACUUM
48707:   u8 autoVacuum;        /* True if auto-vacuum is enabled */
48708:   u8 incrVacuum;        /* True if incr-vacuum is enabled */
48709: #endif
48710:   u8 inTransaction;     /* Transaction state */
48711:   u8 max1bytePayload;   /* Maximum first byte of cell for a 1-byte payload */
48712:   u16 btsFlags;         /* Boolean parameters.  See BTS_* macros below */
48713:   u16 maxLocal;         /* Maximum local payload in non-LEAFDATA tables */
48714:   u16 minLocal;         /* Minimum local payload in non-LEAFDATA tables */
48715:   u16 maxLeaf;          /* Maximum local payload in a LEAFDATA table */
48716:   u16 minLeaf;          /* Minimum local payload in a LEAFDATA table */
48717:   u32 pageSize;         /* Total number of bytes on a page */
48718:   u32 usableSize;       /* Number of usable bytes on each page */
48719:   int nTransaction;     /* Number of open transactions (read + write) */
48720:   u32 nPage;            /* Number of pages in the database */
48721:   void *pSchema;        /* Pointer to space allocated by sqlite3BtreeSchema() */
48722:   void (*xFreeSchema)(void*);  /* Destructor for BtShared.pSchema */
48723:   sqlite3_mutex *mutex; /* Non-recursive mutex required to access this object */
48724:   Bitvec *pHasContent;  /* Set of pages moved to free-list this transaction */
48725: #ifndef SQLITE_OMIT_SHARED_CACHE
48726:   int nRef;             /* Number of references to this structure */
48727:   BtShared *pNext;      /* Next on a list of sharable BtShared structs */
48728:   BtLock *pLock;        /* List of locks held on this shared-btree struct */
48729:   Btree *pWriter;       /* Btree with currently open write transaction */
48730: #endif
48731:   u8 *pTmpSpace;        /* BtShared.pageSize bytes of space for tmp use */
48732: };
48733: 
48734: /*
48735: ** Allowed values for BtShared.btsFlags
48736: */
48737: #define BTS_READ_ONLY        0x0001   /* Underlying file is readonly */
48738: #define BTS_PAGESIZE_FIXED   0x0002   /* Page size can no longer be changed */
48739: #define BTS_SECURE_DELETE    0x0004   /* PRAGMA secure_delete is enabled */
48740: #define BTS_INITIALLY_EMPTY  0x0008   /* Database was empty at trans start */
48741: #define BTS_NO_WAL           0x0010   /* Do not open write-ahead-log files */
48742: #define BTS_EXCLUSIVE        0x0020   /* pWriter has an exclusive lock */
48743: #define BTS_PENDING          0x0040   /* Waiting for read-locks to clear */
48744: 
48745: /*
48746: ** An instance of the following structure is used to hold information
48747: ** about a cell.  The parseCellPtr() function fills in this structure
48748: ** based on information extract from the raw disk page.
48749: */
48750: typedef struct CellInfo CellInfo;
48751: struct CellInfo {
48752:   i64 nKey;      /* The key for INTKEY tables, or number of bytes in key */
48753:   u8 *pCell;     /* Pointer to the start of cell content */
48754:   u32 nData;     /* Number of bytes of data */
48755:   u32 nPayload;  /* Total amount of payload */
48756:   u16 nHeader;   /* Size of the cell content header in bytes */
48757:   u16 nLocal;    /* Amount of payload held locally */
48758:   u16 iOverflow; /* Offset to overflow page number.  Zero if no overflow */
48759:   u16 nSize;     /* Size of the cell content on the main b-tree page */
48760: };
48761: 
48762: /*
48763: ** Maximum depth of an SQLite B-Tree structure. Any B-Tree deeper than
48764: ** this will be declared corrupt. This value is calculated based on a
48765: ** maximum database size of 2^31 pages a minimum fanout of 2 for a
48766: ** root-node and 3 for all other internal nodes.
48767: **
48768: ** If a tree that appears to be taller than this is encountered, it is
48769: ** assumed that the database is corrupt.
48770: */
48771: #define BTCURSOR_MAX_DEPTH 20
48772: 
48773: /*
48774: ** A cursor is a pointer to a particular entry within a particular
48775: ** b-tree within a database file.
48776: **
48777: ** The entry is identified by its MemPage and the index in
48778: ** MemPage.aCell[] of the entry.
48779: **
48780: ** A single database file can be shared by two more database connections,
48781: ** but cursors cannot be shared.  Each cursor is associated with a
48782: ** particular database connection identified BtCursor.pBtree.db.
48783: **
48784: ** Fields in this structure are accessed under the BtShared.mutex
48785: ** found at self->pBt->mutex. 
48786: */
48787: struct BtCursor {
48788:   Btree *pBtree;            /* The Btree to which this cursor belongs */
48789:   BtShared *pBt;            /* The BtShared this cursor points to */
48790:   BtCursor *pNext, *pPrev;  /* Forms a linked list of all cursors */
48791:   struct KeyInfo *pKeyInfo; /* Argument passed to comparison function */
48792:   Pgno pgnoRoot;            /* The root page of this tree */
48793:   sqlite3_int64 cachedRowid; /* Next rowid cache.  0 means not valid */
48794:   CellInfo info;            /* A parse of the cell we are pointing at */
48795:   i64 nKey;        /* Size of pKey, or last integer key */
48796:   void *pKey;      /* Saved key that was cursor's last known position */
48797:   int skipNext;    /* Prev() is noop if negative. Next() is noop if positive */
48798:   u8 wrFlag;                /* True if writable */
48799:   u8 atLast;                /* Cursor pointing to the last entry */
48800:   u8 validNKey;             /* True if info.nKey is valid */
48801:   u8 eState;                /* One of the CURSOR_XXX constants (see below) */
48802: #ifndef SQLITE_OMIT_INCRBLOB
48803:   Pgno *aOverflow;          /* Cache of overflow page locations */
48804:   u8 isIncrblobHandle;      /* True if this cursor is an incr. io handle */
48805: #endif
48806:   i16 iPage;                            /* Index of current page in apPage */
48807:   u16 aiIdx[BTCURSOR_MAX_DEPTH];        /* Current index in apPage[i] */
48808:   MemPage *apPage[BTCURSOR_MAX_DEPTH];  /* Pages from root to current page */
48809: };
48810: 
48811: /*
48812: ** Potential values for BtCursor.eState.
48813: **
48814: ** CURSOR_VALID:
48815: **   Cursor points to a valid entry. getPayload() etc. may be called.
48816: **
48817: ** CURSOR_INVALID:
48818: **   Cursor does not point to a valid entry. This can happen (for example) 
48819: **   because the table is empty or because BtreeCursorFirst() has not been
48820: **   called.
48821: **
48822: ** CURSOR_REQUIRESEEK:
48823: **   The table that this cursor was opened on still exists, but has been 
48824: **   modified since the cursor was last used. The cursor position is saved
48825: **   in variables BtCursor.pKey and BtCursor.nKey. When a cursor is in 
48826: **   this state, restoreCursorPosition() can be called to attempt to
48827: **   seek the cursor to the saved position.
48828: **
48829: ** CURSOR_FAULT:
48830: **   A unrecoverable error (an I/O error or a malloc failure) has occurred
48831: **   on a different connection that shares the BtShared cache with this
48832: **   cursor.  The error has left the cache in an inconsistent state.
48833: **   Do nothing else with this cursor.  Any attempt to use the cursor
48834: **   should return the error code stored in BtCursor.skip
48835: */
48836: #define CURSOR_INVALID           0
48837: #define CURSOR_VALID             1
48838: #define CURSOR_REQUIRESEEK       2
48839: #define CURSOR_FAULT             3
48840: 
48841: /* 
48842: ** The database page the PENDING_BYTE occupies. This page is never used.
48843: */
48844: # define PENDING_BYTE_PAGE(pBt) PAGER_MJ_PGNO(pBt)
48845: 
48846: /*
48847: ** These macros define the location of the pointer-map entry for a 
48848: ** database page. The first argument to each is the number of usable
48849: ** bytes on each page of the database (often 1024). The second is the
48850: ** page number to look up in the pointer map.
48851: **
48852: ** PTRMAP_PAGENO returns the database page number of the pointer-map
48853: ** page that stores the required pointer. PTRMAP_PTROFFSET returns
48854: ** the offset of the requested map entry.
48855: **
48856: ** If the pgno argument passed to PTRMAP_PAGENO is a pointer-map page,
48857: ** then pgno is returned. So (pgno==PTRMAP_PAGENO(pgsz, pgno)) can be
48858: ** used to test if pgno is a pointer-map page. PTRMAP_ISPAGE implements
48859: ** this test.
48860: */
48861: #define PTRMAP_PAGENO(pBt, pgno) ptrmapPageno(pBt, pgno)
48862: #define PTRMAP_PTROFFSET(pgptrmap, pgno) (5*(pgno-pgptrmap-1))
48863: #define PTRMAP_ISPAGE(pBt, pgno) (PTRMAP_PAGENO((pBt),(pgno))==(pgno))
48864: 
48865: /*
48866: ** The pointer map is a lookup table that identifies the parent page for
48867: ** each child page in the database file.  The parent page is the page that
48868: ** contains a pointer to the child.  Every page in the database contains
48869: ** 0 or 1 parent pages.  (In this context 'database page' refers
48870: ** to any page that is not part of the pointer map itself.)  Each pointer map
48871: ** entry consists of a single byte 'type' and a 4 byte parent page number.
48872: ** The PTRMAP_XXX identifiers below are the valid types.
48873: **
48874: ** The purpose of the pointer map is to facility moving pages from one
48875: ** position in the file to another as part of autovacuum.  When a page
48876: ** is moved, the pointer in its parent must be updated to point to the
48877: ** new location.  The pointer map is used to locate the parent page quickly.
48878: **
48879: ** PTRMAP_ROOTPAGE: The database page is a root-page. The page-number is not
48880: **                  used in this case.
48881: **
48882: ** PTRMAP_FREEPAGE: The database page is an unused (free) page. The page-number 
48883: **                  is not used in this case.
48884: **
48885: ** PTRMAP_OVERFLOW1: The database page is the first page in a list of 
48886: **                   overflow pages. The page number identifies the page that
48887: **                   contains the cell with a pointer to this overflow page.
48888: **
48889: ** PTRMAP_OVERFLOW2: The database page is the second or later page in a list of
48890: **                   overflow pages. The page-number identifies the previous
48891: **                   page in the overflow page list.
48892: **
48893: ** PTRMAP_BTREE: The database page is a non-root btree page. The page number
48894: **               identifies the parent page in the btree.
48895: */
48896: #define PTRMAP_ROOTPAGE 1
48897: #define PTRMAP_FREEPAGE 2
48898: #define PTRMAP_OVERFLOW1 3
48899: #define PTRMAP_OVERFLOW2 4
48900: #define PTRMAP_BTREE 5
48901: 
48902: /* A bunch of assert() statements to check the transaction state variables
48903: ** of handle p (type Btree*) are internally consistent.
48904: */
48905: #define btreeIntegrity(p) \
48906:   assert( p->pBt->inTransaction!=TRANS_NONE || p->pBt->nTransaction==0 ); \
48907:   assert( p->pBt->inTransaction>=p->inTrans ); 
48908: 
48909: 
48910: /*
48911: ** The ISAUTOVACUUM macro is used within balance_nonroot() to determine
48912: ** if the database supports auto-vacuum or not. Because it is used
48913: ** within an expression that is an argument to another macro 
48914: ** (sqliteMallocRaw), it is not possible to use conditional compilation.
48915: ** So, this macro is defined instead.
48916: */
48917: #ifndef SQLITE_OMIT_AUTOVACUUM
48918: #define ISAUTOVACUUM (pBt->autoVacuum)
48919: #else
48920: #define ISAUTOVACUUM 0
48921: #endif
48922: 
48923: 
48924: /*
48925: ** This structure is passed around through all the sanity checking routines
48926: ** in order to keep track of some global state information.
48927: */
48928: typedef struct IntegrityCk IntegrityCk;
48929: struct IntegrityCk {
48930:   BtShared *pBt;    /* The tree being checked out */
48931:   Pager *pPager;    /* The associated pager.  Also accessible by pBt->pPager */
48932:   Pgno nPage;       /* Number of pages in the database */
48933:   int *anRef;       /* Number of times each page is referenced */
48934:   int mxErr;        /* Stop accumulating errors when this reaches zero */
48935:   int nErr;         /* Number of messages written to zErrMsg so far */
48936:   int mallocFailed; /* A memory allocation error has occurred */
48937:   StrAccum errMsg;  /* Accumulate the error message text here */
48938: };
48939: 
48940: /*
48941: ** Routines to read or write a two- and four-byte big-endian integer values.
48942: */
48943: #define get2byte(x)   ((x)[0]<<8 | (x)[1])
48944: #define put2byte(p,v) ((p)[0] = (u8)((v)>>8), (p)[1] = (u8)(v))
48945: #define get4byte sqlite3Get4byte
48946: #define put4byte sqlite3Put4byte
48947: 
48948: /************** End of btreeInt.h ********************************************/
48949: /************** Continuing where we left off in btmutex.c ********************/
48950: #ifndef SQLITE_OMIT_SHARED_CACHE
48951: #if SQLITE_THREADSAFE
48952: 
48953: /*
48954: ** Obtain the BtShared mutex associated with B-Tree handle p. Also,
48955: ** set BtShared.db to the database handle associated with p and the
48956: ** p->locked boolean to true.
48957: */
48958: static void lockBtreeMutex(Btree *p){
48959:   assert( p->locked==0 );
48960:   assert( sqlite3_mutex_notheld(p->pBt->mutex) );
48961:   assert( sqlite3_mutex_held(p->db->mutex) );
48962: 
48963:   sqlite3_mutex_enter(p->pBt->mutex);
48964:   p->pBt->db = p->db;
48965:   p->locked = 1;
48966: }
48967: 
48968: /*
48969: ** Release the BtShared mutex associated with B-Tree handle p and
48970: ** clear the p->locked boolean.
48971: */
48972: static void unlockBtreeMutex(Btree *p){
48973:   BtShared *pBt = p->pBt;
48974:   assert( p->locked==1 );
48975:   assert( sqlite3_mutex_held(pBt->mutex) );
48976:   assert( sqlite3_mutex_held(p->db->mutex) );
48977:   assert( p->db==pBt->db );
48978: 
48979:   sqlite3_mutex_leave(pBt->mutex);
48980:   p->locked = 0;
48981: }
48982: 
48983: /*
48984: ** Enter a mutex on the given BTree object.
48985: **
48986: ** If the object is not sharable, then no mutex is ever required
48987: ** and this routine is a no-op.  The underlying mutex is non-recursive.
48988: ** But we keep a reference count in Btree.wantToLock so the behavior
48989: ** of this interface is recursive.
48990: **
48991: ** To avoid deadlocks, multiple Btrees are locked in the same order
48992: ** by all database connections.  The p->pNext is a list of other
48993: ** Btrees belonging to the same database connection as the p Btree
48994: ** which need to be locked after p.  If we cannot get a lock on
48995: ** p, then first unlock all of the others on p->pNext, then wait
48996: ** for the lock to become available on p, then relock all of the
48997: ** subsequent Btrees that desire a lock.
48998: */
48999: SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
49000:   Btree *pLater;
49001: 
49002:   /* Some basic sanity checking on the Btree.  The list of Btrees
49003:   ** connected by pNext and pPrev should be in sorted order by
49004:   ** Btree.pBt value. All elements of the list should belong to
49005:   ** the same connection. Only shared Btrees are on the list. */
49006:   assert( p->pNext==0 || p->pNext->pBt>p->pBt );
49007:   assert( p->pPrev==0 || p->pPrev->pBt<p->pBt );
49008:   assert( p->pNext==0 || p->pNext->db==p->db );
49009:   assert( p->pPrev==0 || p->pPrev->db==p->db );
49010:   assert( p->sharable || (p->pNext==0 && p->pPrev==0) );
49011: 
49012:   /* Check for locking consistency */
49013:   assert( !p->locked || p->wantToLock>0 );
49014:   assert( p->sharable || p->wantToLock==0 );
49015: 
49016:   /* We should already hold a lock on the database connection */
49017:   assert( sqlite3_mutex_held(p->db->mutex) );
49018: 
49019:   /* Unless the database is sharable and unlocked, then BtShared.db
49020:   ** should already be set correctly. */
49021:   assert( (p->locked==0 && p->sharable) || p->pBt->db==p->db );
49022: 
49023:   if( !p->sharable ) return;
49024:   p->wantToLock++;
49025:   if( p->locked ) return;
49026: 
49027:   /* In most cases, we should be able to acquire the lock we
49028:   ** want without having to go throught the ascending lock
49029:   ** procedure that follows.  Just be sure not to block.
49030:   */
49031:   if( sqlite3_mutex_try(p->pBt->mutex)==SQLITE_OK ){
49032:     p->pBt->db = p->db;
49033:     p->locked = 1;
49034:     return;
49035:   }
49036: 
49037:   /* To avoid deadlock, first release all locks with a larger
49038:   ** BtShared address.  Then acquire our lock.  Then reacquire
49039:   ** the other BtShared locks that we used to hold in ascending
49040:   ** order.
49041:   */
49042:   for(pLater=p->pNext; pLater; pLater=pLater->pNext){
49043:     assert( pLater->sharable );
49044:     assert( pLater->pNext==0 || pLater->pNext->pBt>pLater->pBt );
49045:     assert( !pLater->locked || pLater->wantToLock>0 );
49046:     if( pLater->locked ){
49047:       unlockBtreeMutex(pLater);
49048:     }
49049:   }
49050:   lockBtreeMutex(p);
49051:   for(pLater=p->pNext; pLater; pLater=pLater->pNext){
49052:     if( pLater->wantToLock ){
49053:       lockBtreeMutex(pLater);
49054:     }
49055:   }
49056: }
49057: 
49058: /*
49059: ** Exit the recursive mutex on a Btree.
49060: */
49061: SQLITE_PRIVATE void sqlite3BtreeLeave(Btree *p){
49062:   if( p->sharable ){
49063:     assert( p->wantToLock>0 );
49064:     p->wantToLock--;
49065:     if( p->wantToLock==0 ){
49066:       unlockBtreeMutex(p);
49067:     }
49068:   }
49069: }
49070: 
49071: #ifndef NDEBUG
49072: /*
49073: ** Return true if the BtShared mutex is held on the btree, or if the
49074: ** B-Tree is not marked as sharable.
49075: **
49076: ** This routine is used only from within assert() statements.
49077: */
49078: SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree *p){
49079:   assert( p->sharable==0 || p->locked==0 || p->wantToLock>0 );
49080:   assert( p->sharable==0 || p->locked==0 || p->db==p->pBt->db );
49081:   assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->pBt->mutex) );
49082:   assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->db->mutex) );
49083: 
49084:   return (p->sharable==0 || p->locked);
49085: }
49086: #endif
49087: 
49088: 
49089: #ifndef SQLITE_OMIT_INCRBLOB
49090: /*
49091: ** Enter and leave a mutex on a Btree given a cursor owned by that
49092: ** Btree.  These entry points are used by incremental I/O and can be
49093: ** omitted if that module is not used.
49094: */
49095: SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor *pCur){
49096:   sqlite3BtreeEnter(pCur->pBtree);
49097: }
49098: SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor *pCur){
49099:   sqlite3BtreeLeave(pCur->pBtree);
49100: }
49101: #endif /* SQLITE_OMIT_INCRBLOB */
49102: 
49103: 
49104: /*
49105: ** Enter the mutex on every Btree associated with a database
49106: ** connection.  This is needed (for example) prior to parsing
49107: ** a statement since we will be comparing table and column names
49108: ** against all schemas and we do not want those schemas being
49109: ** reset out from under us.
49110: **
49111: ** There is a corresponding leave-all procedures.
49112: **
49113: ** Enter the mutexes in accending order by BtShared pointer address
49114: ** to avoid the possibility of deadlock when two threads with
49115: ** two or more btrees in common both try to lock all their btrees
49116: ** at the same instant.
49117: */
49118: SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
49119:   int i;
49120:   Btree *p;
49121:   assert( sqlite3_mutex_held(db->mutex) );
49122:   for(i=0; i<db->nDb; i++){
49123:     p = db->aDb[i].pBt;
49124:     if( p ) sqlite3BtreeEnter(p);
49125:   }
49126: }
49127: SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){
49128:   int i;
49129:   Btree *p;
49130:   assert( sqlite3_mutex_held(db->mutex) );
49131:   for(i=0; i<db->nDb; i++){
49132:     p = db->aDb[i].pBt;
49133:     if( p ) sqlite3BtreeLeave(p);
49134:   }
49135: }
49136: 
49137: /*
49138: ** Return true if a particular Btree requires a lock.  Return FALSE if
49139: ** no lock is ever required since it is not sharable.
49140: */
49141: SQLITE_PRIVATE int sqlite3BtreeSharable(Btree *p){
49142:   return p->sharable;
49143: }
49144: 
49145: #ifndef NDEBUG
49146: /*
49147: ** Return true if the current thread holds the database connection
49148: ** mutex and all required BtShared mutexes.
49149: **
49150: ** This routine is used inside assert() statements only.
49151: */
49152: SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3 *db){
49153:   int i;
49154:   if( !sqlite3_mutex_held(db->mutex) ){
49155:     return 0;
49156:   }
49157:   for(i=0; i<db->nDb; i++){
49158:     Btree *p;
49159:     p = db->aDb[i].pBt;
49160:     if( p && p->sharable &&
49161:          (p->wantToLock==0 || !sqlite3_mutex_held(p->pBt->mutex)) ){
49162:       return 0;
49163:     }
49164:   }
49165:   return 1;
49166: }
49167: #endif /* NDEBUG */
49168: 
49169: #ifndef NDEBUG
49170: /*
49171: ** Return true if the correct mutexes are held for accessing the
49172: ** db->aDb[iDb].pSchema structure.  The mutexes required for schema
49173: ** access are:
49174: **
49175: **   (1) The mutex on db
49176: **   (2) if iDb!=1, then the mutex on db->aDb[iDb].pBt.
49177: **
49178: ** If pSchema is not NULL, then iDb is computed from pSchema and
49179: ** db using sqlite3SchemaToIndex().
49180: */
49181: SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){
49182:   Btree *p;
49183:   assert( db!=0 );
49184:   if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema);
49185:   assert( iDb>=0 && iDb<db->nDb );
49186:   if( !sqlite3_mutex_held(db->mutex) ) return 0;
49187:   if( iDb==1 ) return 1;
49188:   p = db->aDb[iDb].pBt;
49189:   assert( p!=0 );
49190:   return p->sharable==0 || p->locked==1;
49191: }
49192: #endif /* NDEBUG */
49193: 
49194: #else /* SQLITE_THREADSAFE>0 above.  SQLITE_THREADSAFE==0 below */
49195: /*
49196: ** The following are special cases for mutex enter routines for use
49197: ** in single threaded applications that use shared cache.  Except for
49198: ** these two routines, all mutex operations are no-ops in that case and
49199: ** are null #defines in btree.h.
49200: **
49201: ** If shared cache is disabled, then all btree mutex routines, including
49202: ** the ones below, are no-ops and are null #defines in btree.h.
49203: */
49204: 
49205: SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
49206:   p->pBt->db = p->db;
49207: }
49208: SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
49209:   int i;
49210:   for(i=0; i<db->nDb; i++){
49211:     Btree *p = db->aDb[i].pBt;
49212:     if( p ){
49213:       p->pBt->db = p->db;
49214:     }
49215:   }
49216: }
49217: #endif /* if SQLITE_THREADSAFE */
49218: #endif /* ifndef SQLITE_OMIT_SHARED_CACHE */
49219: 
49220: /************** End of btmutex.c *********************************************/
49221: /************** Begin file btree.c *******************************************/
49222: /*
49223: ** 2004 April 6
49224: **
49225: ** The author disclaims copyright to this source code.  In place of
49226: ** a legal notice, here is a blessing:
49227: **
49228: **    May you do good and not evil.
49229: **    May you find forgiveness for yourself and forgive others.
49230: **    May you share freely, never taking more than you give.
49231: **
49232: *************************************************************************
49233: ** This file implements a external (disk-based) database using BTrees.
49234: ** See the header comment on "btreeInt.h" for additional information.
49235: ** Including a description of file format and an overview of operation.
49236: */
49237: 
49238: /*
49239: ** The header string that appears at the beginning of every
49240: ** SQLite database.
49241: */
49242: static const char zMagicHeader[] = SQLITE_FILE_HEADER;
49243: 
49244: /*
49245: ** Set this global variable to 1 to enable tracing using the TRACE
49246: ** macro.
49247: */
49248: #if 0
49249: int sqlite3BtreeTrace=1;  /* True to enable tracing */
49250: # define TRACE(X)  if(sqlite3BtreeTrace){printf X;fflush(stdout);}
49251: #else
49252: # define TRACE(X)
49253: #endif
49254: 
49255: /*
49256: ** Extract a 2-byte big-endian integer from an array of unsigned bytes.
49257: ** But if the value is zero, make it 65536.
49258: **
49259: ** This routine is used to extract the "offset to cell content area" value
49260: ** from the header of a btree page.  If the page size is 65536 and the page
49261: ** is empty, the offset should be 65536, but the 2-byte value stores zero.
49262: ** This routine makes the necessary adjustment to 65536.
49263: */
49264: #define get2byteNotZero(X)  (((((int)get2byte(X))-1)&0xffff)+1)
49265: 
49266: #ifndef SQLITE_OMIT_SHARED_CACHE
49267: /*
49268: ** A list of BtShared objects that are eligible for participation
49269: ** in shared cache.  This variable has file scope during normal builds,
49270: ** but the test harness needs to access it so we make it global for 
49271: ** test builds.
49272: **
49273: ** Access to this variable is protected by SQLITE_MUTEX_STATIC_MASTER.
49274: */
49275: #ifdef SQLITE_TEST
49276: SQLITE_PRIVATE BtShared *SQLITE_WSD sqlite3SharedCacheList = 0;
49277: #else
49278: static BtShared *SQLITE_WSD sqlite3SharedCacheList = 0;
49279: #endif
49280: #endif /* SQLITE_OMIT_SHARED_CACHE */
49281: 
49282: #ifndef SQLITE_OMIT_SHARED_CACHE
49283: /*
49284: ** Enable or disable the shared pager and schema features.
49285: **
49286: ** This routine has no effect on existing database connections.
49287: ** The shared cache setting effects only future calls to
49288: ** sqlite3_open(), sqlite3_open16(), or sqlite3_open_v2().
49289: */
49290: SQLITE_API int sqlite3_enable_shared_cache(int enable){
49291:   sqlite3GlobalConfig.sharedCacheEnabled = enable;
49292:   return SQLITE_OK;
49293: }
49294: #endif
49295: 
49296: 
49297: 
49298: #ifdef SQLITE_OMIT_SHARED_CACHE
49299:   /*
49300:   ** The functions querySharedCacheTableLock(), setSharedCacheTableLock(),
49301:   ** and clearAllSharedCacheTableLocks()
49302:   ** manipulate entries in the BtShared.pLock linked list used to store
49303:   ** shared-cache table level locks. If the library is compiled with the
49304:   ** shared-cache feature disabled, then there is only ever one user
49305:   ** of each BtShared structure and so this locking is not necessary. 
49306:   ** So define the lock related functions as no-ops.
49307:   */
49308:   #define querySharedCacheTableLock(a,b,c) SQLITE_OK
49309:   #define setSharedCacheTableLock(a,b,c) SQLITE_OK
49310:   #define clearAllSharedCacheTableLocks(a)
49311:   #define downgradeAllSharedCacheTableLocks(a)
49312:   #define hasSharedCacheTableLock(a,b,c,d) 1
49313:   #define hasReadConflicts(a, b) 0
49314: #endif
49315: 
49316: #ifndef SQLITE_OMIT_SHARED_CACHE
49317: 
49318: #ifdef SQLITE_DEBUG
49319: /*
49320: **** This function is only used as part of an assert() statement. ***
49321: **
49322: ** Check to see if pBtree holds the required locks to read or write to the 
49323: ** table with root page iRoot.   Return 1 if it does and 0 if not.
49324: **
49325: ** For example, when writing to a table with root-page iRoot via 
49326: ** Btree connection pBtree:
49327: **
49328: **    assert( hasSharedCacheTableLock(pBtree, iRoot, 0, WRITE_LOCK) );
49329: **
49330: ** When writing to an index that resides in a sharable database, the 
49331: ** caller should have first obtained a lock specifying the root page of
49332: ** the corresponding table. This makes things a bit more complicated,
49333: ** as this module treats each table as a separate structure. To determine
49334: ** the table corresponding to the index being written, this
49335: ** function has to search through the database schema.
49336: **
49337: ** Instead of a lock on the table/index rooted at page iRoot, the caller may
49338: ** hold a write-lock on the schema table (root page 1). This is also
49339: ** acceptable.
49340: */
49341: static int hasSharedCacheTableLock(
49342:   Btree *pBtree,         /* Handle that must hold lock */
49343:   Pgno iRoot,            /* Root page of b-tree */
49344:   int isIndex,           /* True if iRoot is the root of an index b-tree */
49345:   int eLockType          /* Required lock type (READ_LOCK or WRITE_LOCK) */
49346: ){
49347:   Schema *pSchema = (Schema *)pBtree->pBt->pSchema;
49348:   Pgno iTab = 0;
49349:   BtLock *pLock;
49350: 
49351:   /* If this database is not shareable, or if the client is reading
49352:   ** and has the read-uncommitted flag set, then no lock is required. 
49353:   ** Return true immediately.
49354:   */
49355:   if( (pBtree->sharable==0)
49356:    || (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommitted))
49357:   ){
49358:     return 1;
49359:   }
49360: 
49361:   /* If the client is reading  or writing an index and the schema is
49362:   ** not loaded, then it is too difficult to actually check to see if
49363:   ** the correct locks are held.  So do not bother - just return true.
49364:   ** This case does not come up very often anyhow.
49365:   */
49366:   if( isIndex && (!pSchema || (pSchema->flags&DB_SchemaLoaded)==0) ){
49367:     return 1;
49368:   }
49369: 
49370:   /* Figure out the root-page that the lock should be held on. For table
49371:   ** b-trees, this is just the root page of the b-tree being read or
49372:   ** written. For index b-trees, it is the root page of the associated
49373:   ** table.  */
49374:   if( isIndex ){
49375:     HashElem *p;
49376:     for(p=sqliteHashFirst(&pSchema->idxHash); p; p=sqliteHashNext(p)){
49377:       Index *pIdx = (Index *)sqliteHashData(p);
49378:       if( pIdx->tnum==(int)iRoot ){
49379:         iTab = pIdx->pTable->tnum;
49380:       }
49381:     }
49382:   }else{
49383:     iTab = iRoot;
49384:   }
49385: 
49386:   /* Search for the required lock. Either a write-lock on root-page iTab, a 
49387:   ** write-lock on the schema table, or (if the client is reading) a
49388:   ** read-lock on iTab will suffice. Return 1 if any of these are found.  */
49389:   for(pLock=pBtree->pBt->pLock; pLock; pLock=pLock->pNext){
49390:     if( pLock->pBtree==pBtree 
49391:      && (pLock->iTable==iTab || (pLock->eLock==WRITE_LOCK && pLock->iTable==1))
49392:      && pLock->eLock>=eLockType 
49393:     ){
49394:       return 1;
49395:     }
49396:   }
49397: 
49398:   /* Failed to find the required lock. */
49399:   return 0;
49400: }
49401: #endif /* SQLITE_DEBUG */
49402: 
49403: #ifdef SQLITE_DEBUG
49404: /*
49405: **** This function may be used as part of assert() statements only. ****
49406: **
49407: ** Return true if it would be illegal for pBtree to write into the
49408: ** table or index rooted at iRoot because other shared connections are
49409: ** simultaneously reading that same table or index.
49410: **
49411: ** It is illegal for pBtree to write if some other Btree object that
49412: ** shares the same BtShared object is currently reading or writing
49413: ** the iRoot table.  Except, if the other Btree object has the
49414: ** read-uncommitted flag set, then it is OK for the other object to
49415: ** have a read cursor.
49416: **
49417: ** For example, before writing to any part of the table or index
49418: ** rooted at page iRoot, one should call:
49419: **
49420: **    assert( !hasReadConflicts(pBtree, iRoot) );
49421: */
49422: static int hasReadConflicts(Btree *pBtree, Pgno iRoot){
49423:   BtCursor *p;
49424:   for(p=pBtree->pBt->pCursor; p; p=p->pNext){
49425:     if( p->pgnoRoot==iRoot 
49426:      && p->pBtree!=pBtree
49427:      && 0==(p->pBtree->db->flags & SQLITE_ReadUncommitted)
49428:     ){
49429:       return 1;
49430:     }
49431:   }
49432:   return 0;
49433: }
49434: #endif    /* #ifdef SQLITE_DEBUG */
49435: 
49436: /*
49437: ** Query to see if Btree handle p may obtain a lock of type eLock 
49438: ** (READ_LOCK or WRITE_LOCK) on the table with root-page iTab. Return
49439: ** SQLITE_OK if the lock may be obtained (by calling
49440: ** setSharedCacheTableLock()), or SQLITE_LOCKED if not.
49441: */
49442: static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){
49443:   BtShared *pBt = p->pBt;
49444:   BtLock *pIter;
49445: 
49446:   assert( sqlite3BtreeHoldsMutex(p) );
49447:   assert( eLock==READ_LOCK || eLock==WRITE_LOCK );
49448:   assert( p->db!=0 );
49449:   assert( !(p->db->flags&SQLITE_ReadUncommitted)||eLock==WRITE_LOCK||iTab==1 );
49450:   
49451:   /* If requesting a write-lock, then the Btree must have an open write
49452:   ** transaction on this file. And, obviously, for this to be so there 
49453:   ** must be an open write transaction on the file itself.
49454:   */
49455:   assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) );
49456:   assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE );
49457:   
49458:   /* This routine is a no-op if the shared-cache is not enabled */
49459:   if( !p->sharable ){
49460:     return SQLITE_OK;
49461:   }
49462: 
49463:   /* If some other connection is holding an exclusive lock, the
49464:   ** requested lock may not be obtained.
49465:   */
49466:   if( pBt->pWriter!=p && (pBt->btsFlags & BTS_EXCLUSIVE)!=0 ){
49467:     sqlite3ConnectionBlocked(p->db, pBt->pWriter->db);
49468:     return SQLITE_LOCKED_SHAREDCACHE;
49469:   }
49470: 
49471:   for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
49472:     /* The condition (pIter->eLock!=eLock) in the following if(...) 
49473:     ** statement is a simplification of:
49474:     **
49475:     **   (eLock==WRITE_LOCK || pIter->eLock==WRITE_LOCK)
49476:     **
49477:     ** since we know that if eLock==WRITE_LOCK, then no other connection
49478:     ** may hold a WRITE_LOCK on any table in this file (since there can
49479:     ** only be a single writer).
49480:     */
49481:     assert( pIter->eLock==READ_LOCK || pIter->eLock==WRITE_LOCK );
49482:     assert( eLock==READ_LOCK || pIter->pBtree==p || pIter->eLock==READ_LOCK);
49483:     if( pIter->pBtree!=p && pIter->iTable==iTab && pIter->eLock!=eLock ){
49484:       sqlite3ConnectionBlocked(p->db, pIter->pBtree->db);
49485:       if( eLock==WRITE_LOCK ){
49486:         assert( p==pBt->pWriter );
49487:         pBt->btsFlags |= BTS_PENDING;
49488:       }
49489:       return SQLITE_LOCKED_SHAREDCACHE;
49490:     }
49491:   }
49492:   return SQLITE_OK;
49493: }
49494: #endif /* !SQLITE_OMIT_SHARED_CACHE */
49495: 
49496: #ifndef SQLITE_OMIT_SHARED_CACHE
49497: /*
49498: ** Add a lock on the table with root-page iTable to the shared-btree used
49499: ** by Btree handle p. Parameter eLock must be either READ_LOCK or 
49500: ** WRITE_LOCK.
49501: **
49502: ** This function assumes the following:
49503: **
49504: **   (a) The specified Btree object p is connected to a sharable
49505: **       database (one with the BtShared.sharable flag set), and
49506: **
49507: **   (b) No other Btree objects hold a lock that conflicts
49508: **       with the requested lock (i.e. querySharedCacheTableLock() has
49509: **       already been called and returned SQLITE_OK).
49510: **
49511: ** SQLITE_OK is returned if the lock is added successfully. SQLITE_NOMEM 
49512: ** is returned if a malloc attempt fails.
49513: */
49514: static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){
49515:   BtShared *pBt = p->pBt;
49516:   BtLock *pLock = 0;
49517:   BtLock *pIter;
49518: 
49519:   assert( sqlite3BtreeHoldsMutex(p) );
49520:   assert( eLock==READ_LOCK || eLock==WRITE_LOCK );
49521:   assert( p->db!=0 );
49522: 
49523:   /* A connection with the read-uncommitted flag set will never try to
49524:   ** obtain a read-lock using this function. The only read-lock obtained
49525:   ** by a connection in read-uncommitted mode is on the sqlite_master 
49526:   ** table, and that lock is obtained in BtreeBeginTrans().  */
49527:   assert( 0==(p->db->flags&SQLITE_ReadUncommitted) || eLock==WRITE_LOCK );
49528: 
49529:   /* This function should only be called on a sharable b-tree after it 
49530:   ** has been determined that no other b-tree holds a conflicting lock.  */
49531:   assert( p->sharable );
49532:   assert( SQLITE_OK==querySharedCacheTableLock(p, iTable, eLock) );
49533: 
49534:   /* First search the list for an existing lock on this table. */
49535:   for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
49536:     if( pIter->iTable==iTable && pIter->pBtree==p ){
49537:       pLock = pIter;
49538:       break;
49539:     }
49540:   }
49541: 
49542:   /* If the above search did not find a BtLock struct associating Btree p
49543:   ** with table iTable, allocate one and link it into the list.
49544:   */
49545:   if( !pLock ){
49546:     pLock = (BtLock *)sqlite3MallocZero(sizeof(BtLock));
49547:     if( !pLock ){
49548:       return SQLITE_NOMEM;
49549:     }
49550:     pLock->iTable = iTable;
49551:     pLock->pBtree = p;
49552:     pLock->pNext = pBt->pLock;
49553:     pBt->pLock = pLock;
49554:   }
49555: 
49556:   /* Set the BtLock.eLock variable to the maximum of the current lock
49557:   ** and the requested lock. This means if a write-lock was already held
49558:   ** and a read-lock requested, we don't incorrectly downgrade the lock.
49559:   */
49560:   assert( WRITE_LOCK>READ_LOCK );
49561:   if( eLock>pLock->eLock ){
49562:     pLock->eLock = eLock;
49563:   }
49564: 
49565:   return SQLITE_OK;
49566: }
49567: #endif /* !SQLITE_OMIT_SHARED_CACHE */
49568: 
49569: #ifndef SQLITE_OMIT_SHARED_CACHE
49570: /*
49571: ** Release all the table locks (locks obtained via calls to
49572: ** the setSharedCacheTableLock() procedure) held by Btree object p.
49573: **
49574: ** This function assumes that Btree p has an open read or write 
49575: ** transaction. If it does not, then the BTS_PENDING flag
49576: ** may be incorrectly cleared.
49577: */
49578: static void clearAllSharedCacheTableLocks(Btree *p){
49579:   BtShared *pBt = p->pBt;
49580:   BtLock **ppIter = &pBt->pLock;
49581: 
49582:   assert( sqlite3BtreeHoldsMutex(p) );
49583:   assert( p->sharable || 0==*ppIter );
49584:   assert( p->inTrans>0 );
49585: 
49586:   while( *ppIter ){
49587:     BtLock *pLock = *ppIter;
49588:     assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree );
49589:     assert( pLock->pBtree->inTrans>=pLock->eLock );
49590:     if( pLock->pBtree==p ){
49591:       *ppIter = pLock->pNext;
49592:       assert( pLock->iTable!=1 || pLock==&p->lock );
49593:       if( pLock->iTable!=1 ){
49594:         sqlite3_free(pLock);
49595:       }
49596:     }else{
49597:       ppIter = &pLock->pNext;
49598:     }
49599:   }
49600: 
49601:   assert( (pBt->btsFlags & BTS_PENDING)==0 || pBt->pWriter );
49602:   if( pBt->pWriter==p ){
49603:     pBt->pWriter = 0;
49604:     pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING);
49605:   }else if( pBt->nTransaction==2 ){
49606:     /* This function is called when Btree p is concluding its 
49607:     ** transaction. If there currently exists a writer, and p is not
49608:     ** that writer, then the number of locks held by connections other
49609:     ** than the writer must be about to drop to zero. In this case
49610:     ** set the BTS_PENDING flag to 0.
49611:     **
49612:     ** If there is not currently a writer, then BTS_PENDING must
49613:     ** be zero already. So this next line is harmless in that case.
49614:     */
49615:     pBt->btsFlags &= ~BTS_PENDING;
49616:   }
49617: }
49618: 
49619: /*
49620: ** This function changes all write-locks held by Btree p into read-locks.
49621: */
49622: static void downgradeAllSharedCacheTableLocks(Btree *p){
49623:   BtShared *pBt = p->pBt;
49624:   if( pBt->pWriter==p ){
49625:     BtLock *pLock;
49626:     pBt->pWriter = 0;
49627:     pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING);
49628:     for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){
49629:       assert( pLock->eLock==READ_LOCK || pLock->pBtree==p );
49630:       pLock->eLock = READ_LOCK;
49631:     }
49632:   }
49633: }
49634: 
49635: #endif /* SQLITE_OMIT_SHARED_CACHE */
49636: 
49637: static void releasePage(MemPage *pPage);  /* Forward reference */
49638: 
49639: /*
49640: ***** This routine is used inside of assert() only ****
49641: **
49642: ** Verify that the cursor holds the mutex on its BtShared
49643: */
49644: #ifdef SQLITE_DEBUG
49645: static int cursorHoldsMutex(BtCursor *p){
49646:   return sqlite3_mutex_held(p->pBt->mutex);
49647: }
49648: #endif
49649: 
49650: 
49651: #ifndef SQLITE_OMIT_INCRBLOB
49652: /*
49653: ** Invalidate the overflow page-list cache for cursor pCur, if any.
49654: */
49655: static void invalidateOverflowCache(BtCursor *pCur){
49656:   assert( cursorHoldsMutex(pCur) );
49657:   sqlite3_free(pCur->aOverflow);
49658:   pCur->aOverflow = 0;
49659: }
49660: 
49661: /*
49662: ** Invalidate the overflow page-list cache for all cursors opened
49663: ** on the shared btree structure pBt.
49664: */
49665: static void invalidateAllOverflowCache(BtShared *pBt){
49666:   BtCursor *p;
49667:   assert( sqlite3_mutex_held(pBt->mutex) );
49668:   for(p=pBt->pCursor; p; p=p->pNext){
49669:     invalidateOverflowCache(p);
49670:   }
49671: }
49672: 
49673: /*
49674: ** This function is called before modifying the contents of a table
49675: ** to invalidate any incrblob cursors that are open on the
49676: ** row or one of the rows being modified.
49677: **
49678: ** If argument isClearTable is true, then the entire contents of the
49679: ** table is about to be deleted. In this case invalidate all incrblob
49680: ** cursors open on any row within the table with root-page pgnoRoot.
49681: **
49682: ** Otherwise, if argument isClearTable is false, then the row with
49683: ** rowid iRow is being replaced or deleted. In this case invalidate
49684: ** only those incrblob cursors open on that specific row.
49685: */
49686: static void invalidateIncrblobCursors(
49687:   Btree *pBtree,          /* The database file to check */
49688:   i64 iRow,               /* The rowid that might be changing */
49689:   int isClearTable        /* True if all rows are being deleted */
49690: ){
49691:   BtCursor *p;
49692:   BtShared *pBt = pBtree->pBt;
49693:   assert( sqlite3BtreeHoldsMutex(pBtree) );
49694:   for(p=pBt->pCursor; p; p=p->pNext){
49695:     if( p->isIncrblobHandle && (isClearTable || p->info.nKey==iRow) ){
49696:       p->eState = CURSOR_INVALID;
49697:     }
49698:   }
49699: }
49700: 
49701: #else
49702:   /* Stub functions when INCRBLOB is omitted */
49703:   #define invalidateOverflowCache(x)
49704:   #define invalidateAllOverflowCache(x)
49705:   #define invalidateIncrblobCursors(x,y,z)
49706: #endif /* SQLITE_OMIT_INCRBLOB */
49707: 
49708: /*
49709: ** Set bit pgno of the BtShared.pHasContent bitvec. This is called 
49710: ** when a page that previously contained data becomes a free-list leaf 
49711: ** page.
49712: **
49713: ** The BtShared.pHasContent bitvec exists to work around an obscure
49714: ** bug caused by the interaction of two useful IO optimizations surrounding
49715: ** free-list leaf pages:
49716: **
49717: **   1) When all data is deleted from a page and the page becomes
49718: **      a free-list leaf page, the page is not written to the database
49719: **      (as free-list leaf pages contain no meaningful data). Sometimes
49720: **      such a page is not even journalled (as it will not be modified,
49721: **      why bother journalling it?).
49722: **
49723: **   2) When a free-list leaf page is reused, its content is not read
49724: **      from the database or written to the journal file (why should it
49725: **      be, if it is not at all meaningful?).
49726: **
49727: ** By themselves, these optimizations work fine and provide a handy
49728: ** performance boost to bulk delete or insert operations. However, if
49729: ** a page is moved to the free-list and then reused within the same
49730: ** transaction, a problem comes up. If the page is not journalled when
49731: ** it is moved to the free-list and it is also not journalled when it
49732: ** is extracted from the free-list and reused, then the original data
49733: ** may be lost. In the event of a rollback, it may not be possible
49734: ** to restore the database to its original configuration.
49735: **
49736: ** The solution is the BtShared.pHasContent bitvec. Whenever a page is 
49737: ** moved to become a free-list leaf page, the corresponding bit is
49738: ** set in the bitvec. Whenever a leaf page is extracted from the free-list,
49739: ** optimization 2 above is omitted if the corresponding bit is already
49740: ** set in BtShared.pHasContent. The contents of the bitvec are cleared
49741: ** at the end of every transaction.
49742: */
49743: static int btreeSetHasContent(BtShared *pBt, Pgno pgno){
49744:   int rc = SQLITE_OK;
49745:   if( !pBt->pHasContent ){
49746:     assert( pgno<=pBt->nPage );
49747:     pBt->pHasContent = sqlite3BitvecCreate(pBt->nPage);
49748:     if( !pBt->pHasContent ){
49749:       rc = SQLITE_NOMEM;
49750:     }
49751:   }
49752:   if( rc==SQLITE_OK && pgno<=sqlite3BitvecSize(pBt->pHasContent) ){
49753:     rc = sqlite3BitvecSet(pBt->pHasContent, pgno);
49754:   }
49755:   return rc;
49756: }
49757: 
49758: /*
49759: ** Query the BtShared.pHasContent vector.
49760: **
49761: ** This function is called when a free-list leaf page is removed from the
49762: ** free-list for reuse. It returns false if it is safe to retrieve the
49763: ** page from the pager layer with the 'no-content' flag set. True otherwise.
49764: */
49765: static int btreeGetHasContent(BtShared *pBt, Pgno pgno){
49766:   Bitvec *p = pBt->pHasContent;
49767:   return (p && (pgno>sqlite3BitvecSize(p) || sqlite3BitvecTest(p, pgno)));
49768: }
49769: 
49770: /*
49771: ** Clear (destroy) the BtShared.pHasContent bitvec. This should be
49772: ** invoked at the conclusion of each write-transaction.
49773: */
49774: static void btreeClearHasContent(BtShared *pBt){
49775:   sqlite3BitvecDestroy(pBt->pHasContent);
49776:   pBt->pHasContent = 0;
49777: }
49778: 
49779: /*
49780: ** Save the current cursor position in the variables BtCursor.nKey 
49781: ** and BtCursor.pKey. The cursor's state is set to CURSOR_REQUIRESEEK.
49782: **
49783: ** The caller must ensure that the cursor is valid (has eState==CURSOR_VALID)
49784: ** prior to calling this routine.  
49785: */
49786: static int saveCursorPosition(BtCursor *pCur){
49787:   int rc;
49788: 
49789:   assert( CURSOR_VALID==pCur->eState );
49790:   assert( 0==pCur->pKey );
49791:   assert( cursorHoldsMutex(pCur) );
49792: 
49793:   rc = sqlite3BtreeKeySize(pCur, &pCur->nKey);
49794:   assert( rc==SQLITE_OK );  /* KeySize() cannot fail */
49795: 
49796:   /* If this is an intKey table, then the above call to BtreeKeySize()
49797:   ** stores the integer key in pCur->nKey. In this case this value is
49798:   ** all that is required. Otherwise, if pCur is not open on an intKey
49799:   ** table, then malloc space for and store the pCur->nKey bytes of key 
49800:   ** data.
49801:   */
49802:   if( 0==pCur->apPage[0]->intKey ){
49803:     void *pKey = sqlite3Malloc( (int)pCur->nKey );
49804:     if( pKey ){
49805:       rc = sqlite3BtreeKey(pCur, 0, (int)pCur->nKey, pKey);
49806:       if( rc==SQLITE_OK ){
49807:         pCur->pKey = pKey;
49808:       }else{
49809:         sqlite3_free(pKey);
49810:       }
49811:     }else{
49812:       rc = SQLITE_NOMEM;
49813:     }
49814:   }
49815:   assert( !pCur->apPage[0]->intKey || !pCur->pKey );
49816: 
49817:   if( rc==SQLITE_OK ){
49818:     int i;
49819:     for(i=0; i<=pCur->iPage; i++){
49820:       releasePage(pCur->apPage[i]);
49821:       pCur->apPage[i] = 0;
49822:     }
49823:     pCur->iPage = -1;
49824:     pCur->eState = CURSOR_REQUIRESEEK;
49825:   }
49826: 
49827:   invalidateOverflowCache(pCur);
49828:   return rc;
49829: }
49830: 
49831: /*
49832: ** Save the positions of all cursors (except pExcept) that are open on
49833: ** the table  with root-page iRoot. Usually, this is called just before cursor
49834: ** pExcept is used to modify the table (BtreeDelete() or BtreeInsert()).
49835: */
49836: static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
49837:   BtCursor *p;
49838:   assert( sqlite3_mutex_held(pBt->mutex) );
49839:   assert( pExcept==0 || pExcept->pBt==pBt );
49840:   for(p=pBt->pCursor; p; p=p->pNext){
49841:     if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) && 
49842:         p->eState==CURSOR_VALID ){
49843:       int rc = saveCursorPosition(p);
49844:       if( SQLITE_OK!=rc ){
49845:         return rc;
49846:       }
49847:     }
49848:   }
49849:   return SQLITE_OK;
49850: }
49851: 
49852: /*
49853: ** Clear the current cursor position.
49854: */
49855: SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *pCur){
49856:   assert( cursorHoldsMutex(pCur) );
49857:   sqlite3_free(pCur->pKey);
49858:   pCur->pKey = 0;
49859:   pCur->eState = CURSOR_INVALID;
49860: }
49861: 
49862: /*
49863: ** In this version of BtreeMoveto, pKey is a packed index record
49864: ** such as is generated by the OP_MakeRecord opcode.  Unpack the
49865: ** record and then call BtreeMovetoUnpacked() to do the work.
49866: */
49867: static int btreeMoveto(
49868:   BtCursor *pCur,     /* Cursor open on the btree to be searched */
49869:   const void *pKey,   /* Packed key if the btree is an index */
49870:   i64 nKey,           /* Integer key for tables.  Size of pKey for indices */
49871:   int bias,           /* Bias search to the high end */
49872:   int *pRes           /* Write search results here */
49873: ){
49874:   int rc;                    /* Status code */
49875:   UnpackedRecord *pIdxKey;   /* Unpacked index key */
49876:   char aSpace[150];          /* Temp space for pIdxKey - to avoid a malloc */
49877:   char *pFree = 0;
49878: 
49879:   if( pKey ){
49880:     assert( nKey==(i64)(int)nKey );
49881:     pIdxKey = sqlite3VdbeAllocUnpackedRecord(
49882:         pCur->pKeyInfo, aSpace, sizeof(aSpace), &pFree
49883:     );
49884:     if( pIdxKey==0 ) return SQLITE_NOMEM;
49885:     sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey, pIdxKey);
49886:   }else{
49887:     pIdxKey = 0;
49888:   }
49889:   rc = sqlite3BtreeMovetoUnpacked(pCur, pIdxKey, nKey, bias, pRes);
49890:   if( pFree ){
49891:     sqlite3DbFree(pCur->pKeyInfo->db, pFree);
49892:   }
49893:   return rc;
49894: }
49895: 
49896: /*
49897: ** Restore the cursor to the position it was in (or as close to as possible)
49898: ** when saveCursorPosition() was called. Note that this call deletes the 
49899: ** saved position info stored by saveCursorPosition(), so there can be
49900: ** at most one effective restoreCursorPosition() call after each 
49901: ** saveCursorPosition().
49902: */
49903: static int btreeRestoreCursorPosition(BtCursor *pCur){
49904:   int rc;
49905:   assert( cursorHoldsMutex(pCur) );
49906:   assert( pCur->eState>=CURSOR_REQUIRESEEK );
49907:   if( pCur->eState==CURSOR_FAULT ){
49908:     return pCur->skipNext;
49909:   }
49910:   pCur->eState = CURSOR_INVALID;
49911:   rc = btreeMoveto(pCur, pCur->pKey, pCur->nKey, 0, &pCur->skipNext);
49912:   if( rc==SQLITE_OK ){
49913:     sqlite3_free(pCur->pKey);
49914:     pCur->pKey = 0;
49915:     assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_INVALID );
49916:   }
49917:   return rc;
49918: }
49919: 
49920: #define restoreCursorPosition(p) \
49921:   (p->eState>=CURSOR_REQUIRESEEK ? \
49922:          btreeRestoreCursorPosition(p) : \
49923:          SQLITE_OK)
49924: 
49925: /*
49926: ** Determine whether or not a cursor has moved from the position it
49927: ** was last placed at.  Cursors can move when the row they are pointing
49928: ** at is deleted out from under them.
49929: **
49930: ** This routine returns an error code if something goes wrong.  The
49931: ** integer *pHasMoved is set to one if the cursor has moved and 0 if not.
49932: */
49933: SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur, int *pHasMoved){
49934:   int rc;
49935: 
49936:   rc = restoreCursorPosition(pCur);
49937:   if( rc ){
49938:     *pHasMoved = 1;
49939:     return rc;
49940:   }
49941:   if( pCur->eState!=CURSOR_VALID || pCur->skipNext!=0 ){
49942:     *pHasMoved = 1;
49943:   }else{
49944:     *pHasMoved = 0;
49945:   }
49946:   return SQLITE_OK;
49947: }
49948: 
49949: #ifndef SQLITE_OMIT_AUTOVACUUM
49950: /*
49951: ** Given a page number of a regular database page, return the page
49952: ** number for the pointer-map page that contains the entry for the
49953: ** input page number.
49954: **
49955: ** Return 0 (not a valid page) for pgno==1 since there is
49956: ** no pointer map associated with page 1.  The integrity_check logic
49957: ** requires that ptrmapPageno(*,1)!=1.
49958: */
49959: static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){
49960:   int nPagesPerMapPage;
49961:   Pgno iPtrMap, ret;
49962:   assert( sqlite3_mutex_held(pBt->mutex) );
49963:   if( pgno<2 ) return 0;
49964:   nPagesPerMapPage = (pBt->usableSize/5)+1;
49965:   iPtrMap = (pgno-2)/nPagesPerMapPage;
49966:   ret = (iPtrMap*nPagesPerMapPage) + 2; 
49967:   if( ret==PENDING_BYTE_PAGE(pBt) ){
49968:     ret++;
49969:   }
49970:   return ret;
49971: }
49972: 
49973: /*
49974: ** Write an entry into the pointer map.
49975: **
49976: ** This routine updates the pointer map entry for page number 'key'
49977: ** so that it maps to type 'eType' and parent page number 'pgno'.
49978: **
49979: ** If *pRC is initially non-zero (non-SQLITE_OK) then this routine is
49980: ** a no-op.  If an error occurs, the appropriate error code is written
49981: ** into *pRC.
49982: */
49983: static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, int *pRC){
49984:   DbPage *pDbPage;  /* The pointer map page */
49985:   u8 *pPtrmap;      /* The pointer map data */
49986:   Pgno iPtrmap;     /* The pointer map page number */
49987:   int offset;       /* Offset in pointer map page */
49988:   int rc;           /* Return code from subfunctions */
49989: 
49990:   if( *pRC ) return;
49991: 
49992:   assert( sqlite3_mutex_held(pBt->mutex) );
49993:   /* The master-journal page number must never be used as a pointer map page */
49994:   assert( 0==PTRMAP_ISPAGE(pBt, PENDING_BYTE_PAGE(pBt)) );
49995: 
49996:   assert( pBt->autoVacuum );
49997:   if( key==0 ){
49998:     *pRC = SQLITE_CORRUPT_BKPT;
49999:     return;
50000:   }
50001:   iPtrmap = PTRMAP_PAGENO(pBt, key);
50002:   rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage);
50003:   if( rc!=SQLITE_OK ){
50004:     *pRC = rc;
50005:     return;
50006:   }
50007:   offset = PTRMAP_PTROFFSET(iPtrmap, key);
50008:   if( offset<0 ){
50009:     *pRC = SQLITE_CORRUPT_BKPT;
50010:     goto ptrmap_exit;
50011:   }
50012:   assert( offset <= (int)pBt->usableSize-5 );
50013:   pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage);
50014: 
50015:   if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){
50016:     TRACE(("PTRMAP_UPDATE: %d->(%d,%d)\n", key, eType, parent));
50017:     *pRC= rc = sqlite3PagerWrite(pDbPage);
50018:     if( rc==SQLITE_OK ){
50019:       pPtrmap[offset] = eType;
50020:       put4byte(&pPtrmap[offset+1], parent);
50021:     }
50022:   }
50023: 
50024: ptrmap_exit:
50025:   sqlite3PagerUnref(pDbPage);
50026: }
50027: 
50028: /*
50029: ** Read an entry from the pointer map.
50030: **
50031: ** This routine retrieves the pointer map entry for page 'key', writing
50032: ** the type and parent page number to *pEType and *pPgno respectively.
50033: ** An error code is returned if something goes wrong, otherwise SQLITE_OK.
50034: */
50035: static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){
50036:   DbPage *pDbPage;   /* The pointer map page */
50037:   int iPtrmap;       /* Pointer map page index */
50038:   u8 *pPtrmap;       /* Pointer map page data */
50039:   int offset;        /* Offset of entry in pointer map */
50040:   int rc;
50041: 
50042:   assert( sqlite3_mutex_held(pBt->mutex) );
50043: 
50044:   iPtrmap = PTRMAP_PAGENO(pBt, key);
50045:   rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage);
50046:   if( rc!=0 ){
50047:     return rc;
50048:   }
50049:   pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage);
50050: 
50051:   offset = PTRMAP_PTROFFSET(iPtrmap, key);
50052:   if( offset<0 ){
50053:     sqlite3PagerUnref(pDbPage);
50054:     return SQLITE_CORRUPT_BKPT;
50055:   }
50056:   assert( offset <= (int)pBt->usableSize-5 );
50057:   assert( pEType!=0 );
50058:   *pEType = pPtrmap[offset];
50059:   if( pPgno ) *pPgno = get4byte(&pPtrmap[offset+1]);
50060: 
50061:   sqlite3PagerUnref(pDbPage);
50062:   if( *pEType<1 || *pEType>5 ) return SQLITE_CORRUPT_BKPT;
50063:   return SQLITE_OK;
50064: }
50065: 
50066: #else /* if defined SQLITE_OMIT_AUTOVACUUM */
50067:   #define ptrmapPut(w,x,y,z,rc)
50068:   #define ptrmapGet(w,x,y,z) SQLITE_OK
50069:   #define ptrmapPutOvflPtr(x, y, rc)
50070: #endif
50071: 
50072: /*
50073: ** Given a btree page and a cell index (0 means the first cell on
50074: ** the page, 1 means the second cell, and so forth) return a pointer
50075: ** to the cell content.
50076: **
50077: ** This routine works only for pages that do not contain overflow cells.
50078: */
50079: #define findCell(P,I) \
50080:   ((P)->aData + ((P)->maskPage & get2byte(&(P)->aCellIdx[2*(I)])))
50081: #define findCellv2(D,M,O,I) (D+(M&get2byte(D+(O+2*(I)))))
50082: 
50083: 
50084: /*
50085: ** This a more complex version of findCell() that works for
50086: ** pages that do contain overflow cells.
50087: */
50088: static u8 *findOverflowCell(MemPage *pPage, int iCell){
50089:   int i;
50090:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50091:   for(i=pPage->nOverflow-1; i>=0; i--){
50092:     int k;
50093:     struct _OvflCell *pOvfl;
50094:     pOvfl = &pPage->aOvfl[i];
50095:     k = pOvfl->idx;
50096:     if( k<=iCell ){
50097:       if( k==iCell ){
50098:         return pOvfl->pCell;
50099:       }
50100:       iCell--;
50101:     }
50102:   }
50103:   return findCell(pPage, iCell);
50104: }
50105: 
50106: /*
50107: ** Parse a cell content block and fill in the CellInfo structure.  There
50108: ** are two versions of this function.  btreeParseCell() takes a 
50109: ** cell index as the second argument and btreeParseCellPtr() 
50110: ** takes a pointer to the body of the cell as its second argument.
50111: **
50112: ** Within this file, the parseCell() macro can be called instead of
50113: ** btreeParseCellPtr(). Using some compilers, this will be faster.
50114: */
50115: static void btreeParseCellPtr(
50116:   MemPage *pPage,         /* Page containing the cell */
50117:   u8 *pCell,              /* Pointer to the cell text. */
50118:   CellInfo *pInfo         /* Fill in this structure */
50119: ){
50120:   u16 n;                  /* Number bytes in cell content header */
50121:   u32 nPayload;           /* Number of bytes of cell payload */
50122: 
50123:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50124: 
50125:   pInfo->pCell = pCell;
50126:   assert( pPage->leaf==0 || pPage->leaf==1 );
50127:   n = pPage->childPtrSize;
50128:   assert( n==4-4*pPage->leaf );
50129:   if( pPage->intKey ){
50130:     if( pPage->hasData ){
50131:       n += getVarint32(&pCell[n], nPayload);
50132:     }else{
50133:       nPayload = 0;
50134:     }
50135:     n += getVarint(&pCell[n], (u64*)&pInfo->nKey);
50136:     pInfo->nData = nPayload;
50137:   }else{
50138:     pInfo->nData = 0;
50139:     n += getVarint32(&pCell[n], nPayload);
50140:     pInfo->nKey = nPayload;
50141:   }
50142:   pInfo->nPayload = nPayload;
50143:   pInfo->nHeader = n;
50144:   testcase( nPayload==pPage->maxLocal );
50145:   testcase( nPayload==pPage->maxLocal+1 );
50146:   if( likely(nPayload<=pPage->maxLocal) ){
50147:     /* This is the (easy) common case where the entire payload fits
50148:     ** on the local page.  No overflow is required.
50149:     */
50150:     if( (pInfo->nSize = (u16)(n+nPayload))<4 ) pInfo->nSize = 4;
50151:     pInfo->nLocal = (u16)nPayload;
50152:     pInfo->iOverflow = 0;
50153:   }else{
50154:     /* If the payload will not fit completely on the local page, we have
50155:     ** to decide how much to store locally and how much to spill onto
50156:     ** overflow pages.  The strategy is to minimize the amount of unused
50157:     ** space on overflow pages while keeping the amount of local storage
50158:     ** in between minLocal and maxLocal.
50159:     **
50160:     ** Warning:  changing the way overflow payload is distributed in any
50161:     ** way will result in an incompatible file format.
50162:     */
50163:     int minLocal;  /* Minimum amount of payload held locally */
50164:     int maxLocal;  /* Maximum amount of payload held locally */
50165:     int surplus;   /* Overflow payload available for local storage */
50166: 
50167:     minLocal = pPage->minLocal;
50168:     maxLocal = pPage->maxLocal;
50169:     surplus = minLocal + (nPayload - minLocal)%(pPage->pBt->usableSize - 4);
50170:     testcase( surplus==maxLocal );
50171:     testcase( surplus==maxLocal+1 );
50172:     if( surplus <= maxLocal ){
50173:       pInfo->nLocal = (u16)surplus;
50174:     }else{
50175:       pInfo->nLocal = (u16)minLocal;
50176:     }
50177:     pInfo->iOverflow = (u16)(pInfo->nLocal + n);
50178:     pInfo->nSize = pInfo->iOverflow + 4;
50179:   }
50180: }
50181: #define parseCell(pPage, iCell, pInfo) \
50182:   btreeParseCellPtr((pPage), findCell((pPage), (iCell)), (pInfo))
50183: static void btreeParseCell(
50184:   MemPage *pPage,         /* Page containing the cell */
50185:   int iCell,              /* The cell index.  First cell is 0 */
50186:   CellInfo *pInfo         /* Fill in this structure */
50187: ){
50188:   parseCell(pPage, iCell, pInfo);
50189: }
50190: 
50191: /*
50192: ** Compute the total number of bytes that a Cell needs in the cell
50193: ** data area of the btree-page.  The return number includes the cell
50194: ** data header and the local payload, but not any overflow page or
50195: ** the space used by the cell pointer.
50196: */
50197: static u16 cellSizePtr(MemPage *pPage, u8 *pCell){
50198:   u8 *pIter = &pCell[pPage->childPtrSize];
50199:   u32 nSize;
50200: 
50201: #ifdef SQLITE_DEBUG
50202:   /* The value returned by this function should always be the same as
50203:   ** the (CellInfo.nSize) value found by doing a full parse of the
50204:   ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of
50205:   ** this function verifies that this invariant is not violated. */
50206:   CellInfo debuginfo;
50207:   btreeParseCellPtr(pPage, pCell, &debuginfo);
50208: #endif
50209: 
50210:   if( pPage->intKey ){
50211:     u8 *pEnd;
50212:     if( pPage->hasData ){
50213:       pIter += getVarint32(pIter, nSize);
50214:     }else{
50215:       nSize = 0;
50216:     }
50217: 
50218:     /* pIter now points at the 64-bit integer key value, a variable length 
50219:     ** integer. The following block moves pIter to point at the first byte
50220:     ** past the end of the key value. */
50221:     pEnd = &pIter[9];
50222:     while( (*pIter++)&0x80 && pIter<pEnd );
50223:   }else{
50224:     pIter += getVarint32(pIter, nSize);
50225:   }
50226: 
50227:   testcase( nSize==pPage->maxLocal );
50228:   testcase( nSize==pPage->maxLocal+1 );
50229:   if( nSize>pPage->maxLocal ){
50230:     int minLocal = pPage->minLocal;
50231:     nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4);
50232:     testcase( nSize==pPage->maxLocal );
50233:     testcase( nSize==pPage->maxLocal+1 );
50234:     if( nSize>pPage->maxLocal ){
50235:       nSize = minLocal;
50236:     }
50237:     nSize += 4;
50238:   }
50239:   nSize += (u32)(pIter - pCell);
50240: 
50241:   /* The minimum size of any cell is 4 bytes. */
50242:   if( nSize<4 ){
50243:     nSize = 4;
50244:   }
50245: 
50246:   assert( nSize==debuginfo.nSize );
50247:   return (u16)nSize;
50248: }
50249: 
50250: #ifdef SQLITE_DEBUG
50251: /* This variation on cellSizePtr() is used inside of assert() statements
50252: ** only. */
50253: static u16 cellSize(MemPage *pPage, int iCell){
50254:   return cellSizePtr(pPage, findCell(pPage, iCell));
50255: }
50256: #endif
50257: 
50258: #ifndef SQLITE_OMIT_AUTOVACUUM
50259: /*
50260: ** If the cell pCell, part of page pPage contains a pointer
50261: ** to an overflow page, insert an entry into the pointer-map
50262: ** for the overflow page.
50263: */
50264: static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){
50265:   CellInfo info;
50266:   if( *pRC ) return;
50267:   assert( pCell!=0 );
50268:   btreeParseCellPtr(pPage, pCell, &info);
50269:   assert( (info.nData+(pPage->intKey?0:info.nKey))==info.nPayload );
50270:   if( info.iOverflow ){
50271:     Pgno ovfl = get4byte(&pCell[info.iOverflow]);
50272:     ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC);
50273:   }
50274: }
50275: #endif
50276: 
50277: 
50278: /*
50279: ** Defragment the page given.  All Cells are moved to the
50280: ** end of the page and all free space is collected into one
50281: ** big FreeBlk that occurs in between the header and cell
50282: ** pointer array and the cell content area.
50283: */
50284: static int defragmentPage(MemPage *pPage){
50285:   int i;                     /* Loop counter */
50286:   int pc;                    /* Address of a i-th cell */
50287:   int hdr;                   /* Offset to the page header */
50288:   int size;                  /* Size of a cell */
50289:   int usableSize;            /* Number of usable bytes on a page */
50290:   int cellOffset;            /* Offset to the cell pointer array */
50291:   int cbrk;                  /* Offset to the cell content area */
50292:   int nCell;                 /* Number of cells on the page */
50293:   unsigned char *data;       /* The page data */
50294:   unsigned char *temp;       /* Temp area for cell content */
50295:   int iCellFirst;            /* First allowable cell index */
50296:   int iCellLast;             /* Last possible cell index */
50297: 
50298: 
50299:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50300:   assert( pPage->pBt!=0 );
50301:   assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );
50302:   assert( pPage->nOverflow==0 );
50303:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50304:   temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
50305:   data = pPage->aData;
50306:   hdr = pPage->hdrOffset;
50307:   cellOffset = pPage->cellOffset;
50308:   nCell = pPage->nCell;
50309:   assert( nCell==get2byte(&data[hdr+3]) );
50310:   usableSize = pPage->pBt->usableSize;
50311:   cbrk = get2byte(&data[hdr+5]);
50312:   memcpy(&temp[cbrk], &data[cbrk], usableSize - cbrk);
50313:   cbrk = usableSize;
50314:   iCellFirst = cellOffset + 2*nCell;
50315:   iCellLast = usableSize - 4;
50316:   for(i=0; i<nCell; i++){
50317:     u8 *pAddr;     /* The i-th cell pointer */
50318:     pAddr = &data[cellOffset + i*2];
50319:     pc = get2byte(pAddr);
50320:     testcase( pc==iCellFirst );
50321:     testcase( pc==iCellLast );
50322: #if !defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
50323:     /* These conditions have already been verified in btreeInitPage()
50324:     ** if SQLITE_ENABLE_OVERSIZE_CELL_CHECK is defined 
50325:     */
50326:     if( pc<iCellFirst || pc>iCellLast ){
50327:       return SQLITE_CORRUPT_BKPT;
50328:     }
50329: #endif
50330:     assert( pc>=iCellFirst && pc<=iCellLast );
50331:     size = cellSizePtr(pPage, &temp[pc]);
50332:     cbrk -= size;
50333: #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
50334:     if( cbrk<iCellFirst ){
50335:       return SQLITE_CORRUPT_BKPT;
50336:     }
50337: #else
50338:     if( cbrk<iCellFirst || pc+size>usableSize ){
50339:       return SQLITE_CORRUPT_BKPT;
50340:     }
50341: #endif
50342:     assert( cbrk+size<=usableSize && cbrk>=iCellFirst );
50343:     testcase( cbrk+size==usableSize );
50344:     testcase( pc+size==usableSize );
50345:     memcpy(&data[cbrk], &temp[pc], size);
50346:     put2byte(pAddr, cbrk);
50347:   }
50348:   assert( cbrk>=iCellFirst );
50349:   put2byte(&data[hdr+5], cbrk);
50350:   data[hdr+1] = 0;
50351:   data[hdr+2] = 0;
50352:   data[hdr+7] = 0;
50353:   memset(&data[iCellFirst], 0, cbrk-iCellFirst);
50354:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50355:   if( cbrk-iCellFirst!=pPage->nFree ){
50356:     return SQLITE_CORRUPT_BKPT;
50357:   }
50358:   return SQLITE_OK;
50359: }
50360: 
50361: /*
50362: ** Allocate nByte bytes of space from within the B-Tree page passed
50363: ** as the first argument. Write into *pIdx the index into pPage->aData[]
50364: ** of the first byte of allocated space. Return either SQLITE_OK or
50365: ** an error code (usually SQLITE_CORRUPT).
50366: **
50367: ** The caller guarantees that there is sufficient space to make the
50368: ** allocation.  This routine might need to defragment in order to bring
50369: ** all the space together, however.  This routine will avoid using
50370: ** the first two bytes past the cell pointer area since presumably this
50371: ** allocation is being made in order to insert a new cell, so we will
50372: ** also end up needing a new cell pointer.
50373: */
50374: static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
50375:   const int hdr = pPage->hdrOffset;    /* Local cache of pPage->hdrOffset */
50376:   u8 * const data = pPage->aData;      /* Local cache of pPage->aData */
50377:   int nFrag;                           /* Number of fragmented bytes on pPage */
50378:   int top;                             /* First byte of cell content area */
50379:   int gap;        /* First byte of gap between cell pointers and cell content */
50380:   int rc;         /* Integer return code */
50381:   int usableSize; /* Usable size of the page */
50382:   
50383:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50384:   assert( pPage->pBt );
50385:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50386:   assert( nByte>=0 );  /* Minimum cell size is 4 */
50387:   assert( pPage->nFree>=nByte );
50388:   assert( pPage->nOverflow==0 );
50389:   usableSize = pPage->pBt->usableSize;
50390:   assert( nByte < usableSize-8 );
50391: 
50392:   nFrag = data[hdr+7];
50393:   assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf );
50394:   gap = pPage->cellOffset + 2*pPage->nCell;
50395:   top = get2byteNotZero(&data[hdr+5]);
50396:   if( gap>top ) return SQLITE_CORRUPT_BKPT;
50397:   testcase( gap+2==top );
50398:   testcase( gap+1==top );
50399:   testcase( gap==top );
50400: 
50401:   if( nFrag>=60 ){
50402:     /* Always defragment highly fragmented pages */
50403:     rc = defragmentPage(pPage);
50404:     if( rc ) return rc;
50405:     top = get2byteNotZero(&data[hdr+5]);
50406:   }else if( gap+2<=top ){
50407:     /* Search the freelist looking for a free slot big enough to satisfy 
50408:     ** the request. The allocation is made from the first free slot in 
50409:     ** the list that is large enough to accomadate it.
50410:     */
50411:     int pc, addr;
50412:     for(addr=hdr+1; (pc = get2byte(&data[addr]))>0; addr=pc){
50413:       int size;            /* Size of the free slot */
50414:       if( pc>usableSize-4 || pc<addr+4 ){
50415:         return SQLITE_CORRUPT_BKPT;
50416:       }
50417:       size = get2byte(&data[pc+2]);
50418:       if( size>=nByte ){
50419:         int x = size - nByte;
50420:         testcase( x==4 );
50421:         testcase( x==3 );
50422:         if( x<4 ){
50423:           /* Remove the slot from the free-list. Update the number of
50424:           ** fragmented bytes within the page. */
50425:           memcpy(&data[addr], &data[pc], 2);
50426:           data[hdr+7] = (u8)(nFrag + x);
50427:         }else if( size+pc > usableSize ){
50428:           return SQLITE_CORRUPT_BKPT;
50429:         }else{
50430:           /* The slot remains on the free-list. Reduce its size to account
50431:           ** for the portion used by the new allocation. */
50432:           put2byte(&data[pc+2], x);
50433:         }
50434:         *pIdx = pc + x;
50435:         return SQLITE_OK;
50436:       }
50437:     }
50438:   }
50439: 
50440:   /* Check to make sure there is enough space in the gap to satisfy
50441:   ** the allocation.  If not, defragment.
50442:   */
50443:   testcase( gap+2+nByte==top );
50444:   if( gap+2+nByte>top ){
50445:     rc = defragmentPage(pPage);
50446:     if( rc ) return rc;
50447:     top = get2byteNotZero(&data[hdr+5]);
50448:     assert( gap+nByte<=top );
50449:   }
50450: 
50451: 
50452:   /* Allocate memory from the gap in between the cell pointer array
50453:   ** and the cell content area.  The btreeInitPage() call has already
50454:   ** validated the freelist.  Given that the freelist is valid, there
50455:   ** is no way that the allocation can extend off the end of the page.
50456:   ** The assert() below verifies the previous sentence.
50457:   */
50458:   top -= nByte;
50459:   put2byte(&data[hdr+5], top);
50460:   assert( top+nByte <= (int)pPage->pBt->usableSize );
50461:   *pIdx = top;
50462:   return SQLITE_OK;
50463: }
50464: 
50465: /*
50466: ** Return a section of the pPage->aData to the freelist.
50467: ** The first byte of the new free block is pPage->aDisk[start]
50468: ** and the size of the block is "size" bytes.
50469: **
50470: ** Most of the effort here is involved in coalesing adjacent
50471: ** free blocks into a single big free block.
50472: */
50473: static int freeSpace(MemPage *pPage, int start, int size){
50474:   int addr, pbegin, hdr;
50475:   int iLast;                        /* Largest possible freeblock offset */
50476:   unsigned char *data = pPage->aData;
50477: 
50478:   assert( pPage->pBt!=0 );
50479:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50480:   assert( start>=pPage->hdrOffset+6+pPage->childPtrSize );
50481:   assert( (start + size) <= (int)pPage->pBt->usableSize );
50482:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50483:   assert( size>=0 );   /* Minimum cell size is 4 */
50484: 
50485:   if( pPage->pBt->btsFlags & BTS_SECURE_DELETE ){
50486:     /* Overwrite deleted information with zeros when the secure_delete
50487:     ** option is enabled */
50488:     memset(&data[start], 0, size);
50489:   }
50490: 
50491:   /* Add the space back into the linked list of freeblocks.  Note that
50492:   ** even though the freeblock list was checked by btreeInitPage(),
50493:   ** btreeInitPage() did not detect overlapping cells or
50494:   ** freeblocks that overlapped cells.   Nor does it detect when the
50495:   ** cell content area exceeds the value in the page header.  If these
50496:   ** situations arise, then subsequent insert operations might corrupt
50497:   ** the freelist.  So we do need to check for corruption while scanning
50498:   ** the freelist.
50499:   */
50500:   hdr = pPage->hdrOffset;
50501:   addr = hdr + 1;
50502:   iLast = pPage->pBt->usableSize - 4;
50503:   assert( start<=iLast );
50504:   while( (pbegin = get2byte(&data[addr]))<start && pbegin>0 ){
50505:     if( pbegin<addr+4 ){
50506:       return SQLITE_CORRUPT_BKPT;
50507:     }
50508:     addr = pbegin;
50509:   }
50510:   if( pbegin>iLast ){
50511:     return SQLITE_CORRUPT_BKPT;
50512:   }
50513:   assert( pbegin>addr || pbegin==0 );
50514:   put2byte(&data[addr], start);
50515:   put2byte(&data[start], pbegin);
50516:   put2byte(&data[start+2], size);
50517:   pPage->nFree = pPage->nFree + (u16)size;
50518: 
50519:   /* Coalesce adjacent free blocks */
50520:   addr = hdr + 1;
50521:   while( (pbegin = get2byte(&data[addr]))>0 ){
50522:     int pnext, psize, x;
50523:     assert( pbegin>addr );
50524:     assert( pbegin <= (int)pPage->pBt->usableSize-4 );
50525:     pnext = get2byte(&data[pbegin]);
50526:     psize = get2byte(&data[pbegin+2]);
50527:     if( pbegin + psize + 3 >= pnext && pnext>0 ){
50528:       int frag = pnext - (pbegin+psize);
50529:       if( (frag<0) || (frag>(int)data[hdr+7]) ){
50530:         return SQLITE_CORRUPT_BKPT;
50531:       }
50532:       data[hdr+7] -= (u8)frag;
50533:       x = get2byte(&data[pnext]);
50534:       put2byte(&data[pbegin], x);
50535:       x = pnext + get2byte(&data[pnext+2]) - pbegin;
50536:       put2byte(&data[pbegin+2], x);
50537:     }else{
50538:       addr = pbegin;
50539:     }
50540:   }
50541: 
50542:   /* If the cell content area begins with a freeblock, remove it. */
50543:   if( data[hdr+1]==data[hdr+5] && data[hdr+2]==data[hdr+6] ){
50544:     int top;
50545:     pbegin = get2byte(&data[hdr+1]);
50546:     memcpy(&data[hdr+1], &data[pbegin], 2);
50547:     top = get2byte(&data[hdr+5]) + get2byte(&data[pbegin+2]);
50548:     put2byte(&data[hdr+5], top);
50549:   }
50550:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50551:   return SQLITE_OK;
50552: }
50553: 
50554: /*
50555: ** Decode the flags byte (the first byte of the header) for a page
50556: ** and initialize fields of the MemPage structure accordingly.
50557: **
50558: ** Only the following combinations are supported.  Anything different
50559: ** indicates a corrupt database files:
50560: **
50561: **         PTF_ZERODATA
50562: **         PTF_ZERODATA | PTF_LEAF
50563: **         PTF_LEAFDATA | PTF_INTKEY
50564: **         PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF
50565: */
50566: static int decodeFlags(MemPage *pPage, int flagByte){
50567:   BtShared *pBt;     /* A copy of pPage->pBt */
50568: 
50569:   assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) );
50570:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50571:   pPage->leaf = (u8)(flagByte>>3);  assert( PTF_LEAF == 1<<3 );
50572:   flagByte &= ~PTF_LEAF;
50573:   pPage->childPtrSize = 4-4*pPage->leaf;
50574:   pBt = pPage->pBt;
50575:   if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
50576:     pPage->intKey = 1;
50577:     pPage->hasData = pPage->leaf;
50578:     pPage->maxLocal = pBt->maxLeaf;
50579:     pPage->minLocal = pBt->minLeaf;
50580:   }else if( flagByte==PTF_ZERODATA ){
50581:     pPage->intKey = 0;
50582:     pPage->hasData = 0;
50583:     pPage->maxLocal = pBt->maxLocal;
50584:     pPage->minLocal = pBt->minLocal;
50585:   }else{
50586:     return SQLITE_CORRUPT_BKPT;
50587:   }
50588:   pPage->max1bytePayload = pBt->max1bytePayload;
50589:   return SQLITE_OK;
50590: }
50591: 
50592: /*
50593: ** Initialize the auxiliary information for a disk block.
50594: **
50595: ** Return SQLITE_OK on success.  If we see that the page does
50596: ** not contain a well-formed database page, then return 
50597: ** SQLITE_CORRUPT.  Note that a return of SQLITE_OK does not
50598: ** guarantee that the page is well-formed.  It only shows that
50599: ** we failed to detect any corruption.
50600: */
50601: static int btreeInitPage(MemPage *pPage){
50602: 
50603:   assert( pPage->pBt!=0 );
50604:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50605:   assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) );
50606:   assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) );
50607:   assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) );
50608: 
50609:   if( !pPage->isInit ){
50610:     u16 pc;            /* Address of a freeblock within pPage->aData[] */
50611:     u8 hdr;            /* Offset to beginning of page header */
50612:     u8 *data;          /* Equal to pPage->aData */
50613:     BtShared *pBt;        /* The main btree structure */
50614:     int usableSize;    /* Amount of usable space on each page */
50615:     u16 cellOffset;    /* Offset from start of page to first cell pointer */
50616:     int nFree;         /* Number of unused bytes on the page */
50617:     int top;           /* First byte of the cell content area */
50618:     int iCellFirst;    /* First allowable cell or freeblock offset */
50619:     int iCellLast;     /* Last possible cell or freeblock offset */
50620: 
50621:     pBt = pPage->pBt;
50622: 
50623:     hdr = pPage->hdrOffset;
50624:     data = pPage->aData;
50625:     if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT;
50626:     assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
50627:     pPage->maskPage = (u16)(pBt->pageSize - 1);
50628:     pPage->nOverflow = 0;
50629:     usableSize = pBt->usableSize;
50630:     pPage->cellOffset = cellOffset = hdr + 12 - 4*pPage->leaf;
50631:     pPage->aDataEnd = &data[usableSize];
50632:     pPage->aCellIdx = &data[cellOffset];
50633:     top = get2byteNotZero(&data[hdr+5]);
50634:     pPage->nCell = get2byte(&data[hdr+3]);
50635:     if( pPage->nCell>MX_CELL(pBt) ){
50636:       /* To many cells for a single page.  The page must be corrupt */
50637:       return SQLITE_CORRUPT_BKPT;
50638:     }
50639:     testcase( pPage->nCell==MX_CELL(pBt) );
50640: 
50641:     /* A malformed database page might cause us to read past the end
50642:     ** of page when parsing a cell.  
50643:     **
50644:     ** The following block of code checks early to see if a cell extends
50645:     ** past the end of a page boundary and causes SQLITE_CORRUPT to be 
50646:     ** returned if it does.
50647:     */
50648:     iCellFirst = cellOffset + 2*pPage->nCell;
50649:     iCellLast = usableSize - 4;
50650: #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
50651:     {
50652:       int i;            /* Index into the cell pointer array */
50653:       int sz;           /* Size of a cell */
50654: 
50655:       if( !pPage->leaf ) iCellLast--;
50656:       for(i=0; i<pPage->nCell; i++){
50657:         pc = get2byte(&data[cellOffset+i*2]);
50658:         testcase( pc==iCellFirst );
50659:         testcase( pc==iCellLast );
50660:         if( pc<iCellFirst || pc>iCellLast ){
50661:           return SQLITE_CORRUPT_BKPT;
50662:         }
50663:         sz = cellSizePtr(pPage, &data[pc]);
50664:         testcase( pc+sz==usableSize );
50665:         if( pc+sz>usableSize ){
50666:           return SQLITE_CORRUPT_BKPT;
50667:         }
50668:       }
50669:       if( !pPage->leaf ) iCellLast++;
50670:     }  
50671: #endif
50672: 
50673:     /* Compute the total free space on the page */
50674:     pc = get2byte(&data[hdr+1]);
50675:     nFree = data[hdr+7] + top;
50676:     while( pc>0 ){
50677:       u16 next, size;
50678:       if( pc<iCellFirst || pc>iCellLast ){
50679:         /* Start of free block is off the page */
50680:         return SQLITE_CORRUPT_BKPT; 
50681:       }
50682:       next = get2byte(&data[pc]);
50683:       size = get2byte(&data[pc+2]);
50684:       if( (next>0 && next<=pc+size+3) || pc+size>usableSize ){
50685:         /* Free blocks must be in ascending order. And the last byte of
50686: 	** the free-block must lie on the database page.  */
50687:         return SQLITE_CORRUPT_BKPT; 
50688:       }
50689:       nFree = nFree + size;
50690:       pc = next;
50691:     }
50692: 
50693:     /* At this point, nFree contains the sum of the offset to the start
50694:     ** of the cell-content area plus the number of free bytes within
50695:     ** the cell-content area. If this is greater than the usable-size
50696:     ** of the page, then the page must be corrupted. This check also
50697:     ** serves to verify that the offset to the start of the cell-content
50698:     ** area, according to the page header, lies within the page.
50699:     */
50700:     if( nFree>usableSize ){
50701:       return SQLITE_CORRUPT_BKPT; 
50702:     }
50703:     pPage->nFree = (u16)(nFree - iCellFirst);
50704:     pPage->isInit = 1;
50705:   }
50706:   return SQLITE_OK;
50707: }
50708: 
50709: /*
50710: ** Set up a raw page so that it looks like a database page holding
50711: ** no entries.
50712: */
50713: static void zeroPage(MemPage *pPage, int flags){
50714:   unsigned char *data = pPage->aData;
50715:   BtShared *pBt = pPage->pBt;
50716:   u8 hdr = pPage->hdrOffset;
50717:   u16 first;
50718: 
50719:   assert( sqlite3PagerPagenumber(pPage->pDbPage)==pPage->pgno );
50720:   assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
50721:   assert( sqlite3PagerGetData(pPage->pDbPage) == data );
50722:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50723:   assert( sqlite3_mutex_held(pBt->mutex) );
50724:   if( pBt->btsFlags & BTS_SECURE_DELETE ){
50725:     memset(&data[hdr], 0, pBt->usableSize - hdr);
50726:   }
50727:   data[hdr] = (char)flags;
50728:   first = hdr + 8 + 4*((flags&PTF_LEAF)==0 ?1:0);
50729:   memset(&data[hdr+1], 0, 4);
50730:   data[hdr+7] = 0;
50731:   put2byte(&data[hdr+5], pBt->usableSize);
50732:   pPage->nFree = (u16)(pBt->usableSize - first);
50733:   decodeFlags(pPage, flags);
50734:   pPage->hdrOffset = hdr;
50735:   pPage->cellOffset = first;
50736:   pPage->aDataEnd = &data[pBt->usableSize];
50737:   pPage->aCellIdx = &data[first];
50738:   pPage->nOverflow = 0;
50739:   assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
50740:   pPage->maskPage = (u16)(pBt->pageSize - 1);
50741:   pPage->nCell = 0;
50742:   pPage->isInit = 1;
50743: }
50744: 
50745: 
50746: /*
50747: ** Convert a DbPage obtained from the pager into a MemPage used by
50748: ** the btree layer.
50749: */
50750: static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared *pBt){
50751:   MemPage *pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage);
50752:   pPage->aData = sqlite3PagerGetData(pDbPage);
50753:   pPage->pDbPage = pDbPage;
50754:   pPage->pBt = pBt;
50755:   pPage->pgno = pgno;
50756:   pPage->hdrOffset = pPage->pgno==1 ? 100 : 0;
50757:   return pPage; 
50758: }
50759: 
50760: /*
50761: ** Get a page from the pager.  Initialize the MemPage.pBt and
50762: ** MemPage.aData elements if needed.
50763: **
50764: ** If the noContent flag is set, it means that we do not care about
50765: ** the content of the page at this time.  So do not go to the disk
50766: ** to fetch the content.  Just fill in the content with zeros for now.
50767: ** If in the future we call sqlite3PagerWrite() on this page, that
50768: ** means we have started to be concerned about content and the disk
50769: ** read should occur at that point.
50770: */
50771: static int btreeGetPage(
50772:   BtShared *pBt,       /* The btree */
50773:   Pgno pgno,           /* Number of the page to fetch */
50774:   MemPage **ppPage,    /* Return the page in this parameter */
50775:   int noContent        /* Do not load page content if true */
50776: ){
50777:   int rc;
50778:   DbPage *pDbPage;
50779: 
50780:   assert( sqlite3_mutex_held(pBt->mutex) );
50781:   rc = sqlite3PagerAcquire(pBt->pPager, pgno, (DbPage**)&pDbPage, noContent);
50782:   if( rc ) return rc;
50783:   *ppPage = btreePageFromDbPage(pDbPage, pgno, pBt);
50784:   return SQLITE_OK;
50785: }
50786: 
50787: /*
50788: ** Retrieve a page from the pager cache. If the requested page is not
50789: ** already in the pager cache return NULL. Initialize the MemPage.pBt and
50790: ** MemPage.aData elements if needed.
50791: */
50792: static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){
50793:   DbPage *pDbPage;
50794:   assert( sqlite3_mutex_held(pBt->mutex) );
50795:   pDbPage = sqlite3PagerLookup(pBt->pPager, pgno);
50796:   if( pDbPage ){
50797:     return btreePageFromDbPage(pDbPage, pgno, pBt);
50798:   }
50799:   return 0;
50800: }
50801: 
50802: /*
50803: ** Return the size of the database file in pages. If there is any kind of
50804: ** error, return ((unsigned int)-1).
50805: */
50806: static Pgno btreePagecount(BtShared *pBt){
50807:   return pBt->nPage;
50808: }
50809: SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree *p){
50810:   assert( sqlite3BtreeHoldsMutex(p) );
50811:   assert( ((p->pBt->nPage)&0x8000000)==0 );
50812:   return (int)btreePagecount(p->pBt);
50813: }
50814: 
50815: /*
50816: ** Get a page from the pager and initialize it.  This routine is just a
50817: ** convenience wrapper around separate calls to btreeGetPage() and 
50818: ** btreeInitPage().
50819: **
50820: ** If an error occurs, then the value *ppPage is set to is undefined. It
50821: ** may remain unchanged, or it may be set to an invalid value.
50822: */
50823: static int getAndInitPage(
50824:   BtShared *pBt,          /* The database file */
50825:   Pgno pgno,           /* Number of the page to get */
50826:   MemPage **ppPage     /* Write the page pointer here */
50827: ){
50828:   int rc;
50829:   assert( sqlite3_mutex_held(pBt->mutex) );
50830: 
50831:   if( pgno>btreePagecount(pBt) ){
50832:     rc = SQLITE_CORRUPT_BKPT;
50833:   }else{
50834:     rc = btreeGetPage(pBt, pgno, ppPage, 0);
50835:     if( rc==SQLITE_OK ){
50836:       rc = btreeInitPage(*ppPage);
50837:       if( rc!=SQLITE_OK ){
50838:         releasePage(*ppPage);
50839:       }
50840:     }
50841:   }
50842: 
50843:   testcase( pgno==0 );
50844:   assert( pgno!=0 || rc==SQLITE_CORRUPT );
50845:   return rc;
50846: }
50847: 
50848: /*
50849: ** Release a MemPage.  This should be called once for each prior
50850: ** call to btreeGetPage.
50851: */
50852: static void releasePage(MemPage *pPage){
50853:   if( pPage ){
50854:     assert( pPage->aData );
50855:     assert( pPage->pBt );
50856:     assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
50857:     assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData );
50858:     assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50859:     sqlite3PagerUnref(pPage->pDbPage);
50860:   }
50861: }
50862: 
50863: /*
50864: ** During a rollback, when the pager reloads information into the cache
50865: ** so that the cache is restored to its original state at the start of
50866: ** the transaction, for each page restored this routine is called.
50867: **
50868: ** This routine needs to reset the extra data section at the end of the
50869: ** page to agree with the restored data.
50870: */
50871: static void pageReinit(DbPage *pData){
50872:   MemPage *pPage;
50873:   pPage = (MemPage *)sqlite3PagerGetExtra(pData);
50874:   assert( sqlite3PagerPageRefcount(pData)>0 );
50875:   if( pPage->isInit ){
50876:     assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50877:     pPage->isInit = 0;
50878:     if( sqlite3PagerPageRefcount(pData)>1 ){
50879:       /* pPage might not be a btree page;  it might be an overflow page
50880:       ** or ptrmap page or a free page.  In those cases, the following
50881:       ** call to btreeInitPage() will likely return SQLITE_CORRUPT.
50882:       ** But no harm is done by this.  And it is very important that
50883:       ** btreeInitPage() be called on every btree page so we make
50884:       ** the call for every page that comes in for re-initing. */
50885:       btreeInitPage(pPage);
50886:     }
50887:   }
50888: }
50889: 
50890: /*
50891: ** Invoke the busy handler for a btree.
50892: */
50893: static int btreeInvokeBusyHandler(void *pArg){
50894:   BtShared *pBt = (BtShared*)pArg;
50895:   assert( pBt->db );
50896:   assert( sqlite3_mutex_held(pBt->db->mutex) );
50897:   return sqlite3InvokeBusyHandler(&pBt->db->busyHandler);
50898: }
50899: 
50900: /*
50901: ** Open a database file.
50902: ** 
50903: ** zFilename is the name of the database file.  If zFilename is NULL
50904: ** then an ephemeral database is created.  The ephemeral database might
50905: ** be exclusively in memory, or it might use a disk-based memory cache.
50906: ** Either way, the ephemeral database will be automatically deleted 
50907: ** when sqlite3BtreeClose() is called.
50908: **
50909: ** If zFilename is ":memory:" then an in-memory database is created
50910: ** that is automatically destroyed when it is closed.
50911: **
50912: ** The "flags" parameter is a bitmask that might contain bits
50913: ** BTREE_OMIT_JOURNAL and/or BTREE_NO_READLOCK.  The BTREE_NO_READLOCK
50914: ** bit is also set if the SQLITE_NoReadlock flags is set in db->flags.
50915: ** These flags are passed through into sqlite3PagerOpen() and must
50916: ** be the same values as PAGER_OMIT_JOURNAL and PAGER_NO_READLOCK.
50917: **
50918: ** If the database is already opened in the same database connection
50919: ** and we are in shared cache mode, then the open will fail with an
50920: ** SQLITE_CONSTRAINT error.  We cannot allow two or more BtShared
50921: ** objects in the same database connection since doing so will lead
50922: ** to problems with locking.
50923: */
50924: SQLITE_PRIVATE int sqlite3BtreeOpen(
50925:   sqlite3_vfs *pVfs,      /* VFS to use for this b-tree */
50926:   const char *zFilename,  /* Name of the file containing the BTree database */
50927:   sqlite3 *db,            /* Associated database handle */
50928:   Btree **ppBtree,        /* Pointer to new Btree object written here */
50929:   int flags,              /* Options */
50930:   int vfsFlags            /* Flags passed through to sqlite3_vfs.xOpen() */
50931: ){
50932:   BtShared *pBt = 0;             /* Shared part of btree structure */
50933:   Btree *p;                      /* Handle to return */
50934:   sqlite3_mutex *mutexOpen = 0;  /* Prevents a race condition. Ticket #3537 */
50935:   int rc = SQLITE_OK;            /* Result code from this function */
50936:   u8 nReserve;                   /* Byte of unused space on each page */
50937:   unsigned char zDbHeader[100];  /* Database header content */
50938: 
50939:   /* True if opening an ephemeral, temporary database */
50940:   const int isTempDb = zFilename==0 || zFilename[0]==0;
50941: 
50942:   /* Set the variable isMemdb to true for an in-memory database, or 
50943:   ** false for a file-based database.
50944:   */
50945: #ifdef SQLITE_OMIT_MEMORYDB
50946:   const int isMemdb = 0;
50947: #else
50948:   const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0)
50949:                        || (isTempDb && sqlite3TempInMemory(db));
50950: #endif
50951: 
50952:   assert( db!=0 );
50953:   assert( pVfs!=0 );
50954:   assert( sqlite3_mutex_held(db->mutex) );
50955:   assert( (flags&0xff)==flags );   /* flags fit in 8 bits */
50956: 
50957:   /* Only a BTREE_SINGLE database can be BTREE_UNORDERED */
50958:   assert( (flags & BTREE_UNORDERED)==0 || (flags & BTREE_SINGLE)!=0 );
50959: 
50960:   /* A BTREE_SINGLE database is always a temporary and/or ephemeral */
50961:   assert( (flags & BTREE_SINGLE)==0 || isTempDb );
50962: 
50963:   if( db->flags & SQLITE_NoReadlock ){
50964:     flags |= BTREE_NO_READLOCK;
50965:   }
50966:   if( isMemdb ){
50967:     flags |= BTREE_MEMORY;
50968:   }
50969:   if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (isMemdb || isTempDb) ){
50970:     vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB;
50971:   }
50972:   p = sqlite3MallocZero(sizeof(Btree));
50973:   if( !p ){
50974:     return SQLITE_NOMEM;
50975:   }
50976:   p->inTrans = TRANS_NONE;
50977:   p->db = db;
50978: #ifndef SQLITE_OMIT_SHARED_CACHE
50979:   p->lock.pBtree = p;
50980:   p->lock.iTable = 1;
50981: #endif
50982: 
50983: #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
50984:   /*
50985:   ** If this Btree is a candidate for shared cache, try to find an
50986:   ** existing BtShared object that we can share with
50987:   */
50988:   if( isMemdb==0 && isTempDb==0 ){
50989:     if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){
50990:       int nFullPathname = pVfs->mxPathname+1;
50991:       char *zFullPathname = sqlite3Malloc(nFullPathname);
50992:       MUTEX_LOGIC( sqlite3_mutex *mutexShared; )
50993:       p->sharable = 1;
50994:       if( !zFullPathname ){
50995:         sqlite3_free(p);
50996:         return SQLITE_NOMEM;
50997:       }
50998:       rc = sqlite3OsFullPathname(pVfs, zFilename, nFullPathname, zFullPathname);
50999:       if( rc ){
51000:         sqlite3_free(zFullPathname);
51001:         sqlite3_free(p);
51002:         return rc;
51003:       }
51004: #if SQLITE_THREADSAFE
51005:       mutexOpen = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_OPEN);
51006:       sqlite3_mutex_enter(mutexOpen);
51007:       mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
51008:       sqlite3_mutex_enter(mutexShared);
51009: #endif
51010:       for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){
51011:         assert( pBt->nRef>0 );
51012:         if( 0==strcmp(zFullPathname, sqlite3PagerFilename(pBt->pPager))
51013:                  && sqlite3PagerVfs(pBt->pPager)==pVfs ){
51014:           int iDb;
51015:           for(iDb=db->nDb-1; iDb>=0; iDb--){
51016:             Btree *pExisting = db->aDb[iDb].pBt;
51017:             if( pExisting && pExisting->pBt==pBt ){
51018:               sqlite3_mutex_leave(mutexShared);
51019:               sqlite3_mutex_leave(mutexOpen);
51020:               sqlite3_free(zFullPathname);
51021:               sqlite3_free(p);
51022:               return SQLITE_CONSTRAINT;
51023:             }
51024:           }
51025:           p->pBt = pBt;
51026:           pBt->nRef++;
51027:           break;
51028:         }
51029:       }
51030:       sqlite3_mutex_leave(mutexShared);
51031:       sqlite3_free(zFullPathname);
51032:     }
51033: #ifdef SQLITE_DEBUG
51034:     else{
51035:       /* In debug mode, we mark all persistent databases as sharable
51036:       ** even when they are not.  This exercises the locking code and
51037:       ** gives more opportunity for asserts(sqlite3_mutex_held())
51038:       ** statements to find locking problems.
51039:       */
51040:       p->sharable = 1;
51041:     }
51042: #endif
51043:   }
51044: #endif
51045:   if( pBt==0 ){
51046:     /*
51047:     ** The following asserts make sure that structures used by the btree are
51048:     ** the right size.  This is to guard against size changes that result
51049:     ** when compiling on a different architecture.
51050:     */
51051:     assert( sizeof(i64)==8 || sizeof(i64)==4 );
51052:     assert( sizeof(u64)==8 || sizeof(u64)==4 );
51053:     assert( sizeof(u32)==4 );
51054:     assert( sizeof(u16)==2 );
51055:     assert( sizeof(Pgno)==4 );
51056:   
51057:     pBt = sqlite3MallocZero( sizeof(*pBt) );
51058:     if( pBt==0 ){
51059:       rc = SQLITE_NOMEM;
51060:       goto btree_open_out;
51061:     }
51062:     rc = sqlite3PagerOpen(pVfs, &pBt->pPager, zFilename,
51063:                           EXTRA_SIZE, flags, vfsFlags, pageReinit);
51064:     if( rc==SQLITE_OK ){
51065:       rc = sqlite3PagerReadFileheader(pBt->pPager,sizeof(zDbHeader),zDbHeader);
51066:     }
51067:     if( rc!=SQLITE_OK ){
51068:       goto btree_open_out;
51069:     }
51070:     pBt->openFlags = (u8)flags;
51071:     pBt->db = db;
51072:     sqlite3PagerSetBusyhandler(pBt->pPager, btreeInvokeBusyHandler, pBt);
51073:     p->pBt = pBt;
51074:   
51075:     pBt->pCursor = 0;
51076:     pBt->pPage1 = 0;
51077:     if( sqlite3PagerIsreadonly(pBt->pPager) ) pBt->btsFlags |= BTS_READ_ONLY;
51078: #ifdef SQLITE_SECURE_DELETE
51079:     pBt->btsFlags |= BTS_SECURE_DELETE;
51080: #endif
51081:     pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16);
51082:     if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE
51083:          || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){
51084:       pBt->pageSize = 0;
51085: #ifndef SQLITE_OMIT_AUTOVACUUM
51086:       /* If the magic name ":memory:" will create an in-memory database, then
51087:       ** leave the autoVacuum mode at 0 (do not auto-vacuum), even if
51088:       ** SQLITE_DEFAULT_AUTOVACUUM is true. On the other hand, if
51089:       ** SQLITE_OMIT_MEMORYDB has been defined, then ":memory:" is just a
51090:       ** regular file-name. In this case the auto-vacuum applies as per normal.
51091:       */
51092:       if( zFilename && !isMemdb ){
51093:         pBt->autoVacuum = (SQLITE_DEFAULT_AUTOVACUUM ? 1 : 0);
51094:         pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0);
51095:       }
51096: #endif
51097:       nReserve = 0;
51098:     }else{
51099:       nReserve = zDbHeader[20];
51100:       pBt->btsFlags |= BTS_PAGESIZE_FIXED;
51101: #ifndef SQLITE_OMIT_AUTOVACUUM
51102:       pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0);
51103:       pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0);
51104: #endif
51105:     }
51106:     rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve);
51107:     if( rc ) goto btree_open_out;
51108:     pBt->usableSize = pBt->pageSize - nReserve;
51109:     assert( (pBt->pageSize & 7)==0 );  /* 8-byte alignment of pageSize */
51110:    
51111: #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
51112:     /* Add the new BtShared object to the linked list sharable BtShareds.
51113:     */
51114:     if( p->sharable ){
51115:       MUTEX_LOGIC( sqlite3_mutex *mutexShared; )
51116:       pBt->nRef = 1;
51117:       MUTEX_LOGIC( mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);)
51118:       if( SQLITE_THREADSAFE && sqlite3GlobalConfig.bCoreMutex ){
51119:         pBt->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_FAST);
51120:         if( pBt->mutex==0 ){
51121:           rc = SQLITE_NOMEM;
51122:           db->mallocFailed = 0;
51123:           goto btree_open_out;
51124:         }
51125:       }
51126:       sqlite3_mutex_enter(mutexShared);
51127:       pBt->pNext = GLOBAL(BtShared*,sqlite3SharedCacheList);
51128:       GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt;
51129:       sqlite3_mutex_leave(mutexShared);
51130:     }
51131: #endif
51132:   }
51133: 
51134: #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
51135:   /* If the new Btree uses a sharable pBtShared, then link the new
51136:   ** Btree into the list of all sharable Btrees for the same connection.
51137:   ** The list is kept in ascending order by pBt address.
51138:   */
51139:   if( p->sharable ){
51140:     int i;
51141:     Btree *pSib;
51142:     for(i=0; i<db->nDb; i++){
51143:       if( (pSib = db->aDb[i].pBt)!=0 && pSib->sharable ){
51144:         while( pSib->pPrev ){ pSib = pSib->pPrev; }
51145:         if( p->pBt<pSib->pBt ){
51146:           p->pNext = pSib;
51147:           p->pPrev = 0;
51148:           pSib->pPrev = p;
51149:         }else{
51150:           while( pSib->pNext && pSib->pNext->pBt<p->pBt ){
51151:             pSib = pSib->pNext;
51152:           }
51153:           p->pNext = pSib->pNext;
51154:           p->pPrev = pSib;
51155:           if( p->pNext ){
51156:             p->pNext->pPrev = p;
51157:           }
51158:           pSib->pNext = p;
51159:         }
51160:         break;
51161:       }
51162:     }
51163:   }
51164: #endif
51165:   *ppBtree = p;
51166: 
51167: btree_open_out:
51168:   if( rc!=SQLITE_OK ){
51169:     if( pBt && pBt->pPager ){
51170:       sqlite3PagerClose(pBt->pPager);
51171:     }
51172:     sqlite3_free(pBt);
51173:     sqlite3_free(p);
51174:     *ppBtree = 0;
51175:   }else{
51176:     /* If the B-Tree was successfully opened, set the pager-cache size to the
51177:     ** default value. Except, when opening on an existing shared pager-cache,
51178:     ** do not change the pager-cache size.
51179:     */
51180:     if( sqlite3BtreeSchema(p, 0, 0)==0 ){
51181:       sqlite3PagerSetCachesize(p->pBt->pPager, SQLITE_DEFAULT_CACHE_SIZE);
51182:     }
51183:   }
51184:   if( mutexOpen ){
51185:     assert( sqlite3_mutex_held(mutexOpen) );
51186:     sqlite3_mutex_leave(mutexOpen);
51187:   }
51188:   return rc;
51189: }
51190: 
51191: /*
51192: ** Decrement the BtShared.nRef counter.  When it reaches zero,
51193: ** remove the BtShared structure from the sharing list.  Return
51194: ** true if the BtShared.nRef counter reaches zero and return
51195: ** false if it is still positive.
51196: */
51197: static int removeFromSharingList(BtShared *pBt){
51198: #ifndef SQLITE_OMIT_SHARED_CACHE
51199:   MUTEX_LOGIC( sqlite3_mutex *pMaster; )
51200:   BtShared *pList;
51201:   int removed = 0;
51202: 
51203:   assert( sqlite3_mutex_notheld(pBt->mutex) );
51204:   MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
51205:   sqlite3_mutex_enter(pMaster);
51206:   pBt->nRef--;
51207:   if( pBt->nRef<=0 ){
51208:     if( GLOBAL(BtShared*,sqlite3SharedCacheList)==pBt ){
51209:       GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt->pNext;
51210:     }else{
51211:       pList = GLOBAL(BtShared*,sqlite3SharedCacheList);
51212:       while( ALWAYS(pList) && pList->pNext!=pBt ){
51213:         pList=pList->pNext;
51214:       }
51215:       if( ALWAYS(pList) ){
51216:         pList->pNext = pBt->pNext;
51217:       }
51218:     }
51219:     if( SQLITE_THREADSAFE ){
51220:       sqlite3_mutex_free(pBt->mutex);
51221:     }
51222:     removed = 1;
51223:   }
51224:   sqlite3_mutex_leave(pMaster);
51225:   return removed;
51226: #else
51227:   return 1;
51228: #endif
51229: }
51230: 
51231: /*
51232: ** Make sure pBt->pTmpSpace points to an allocation of 
51233: ** MX_CELL_SIZE(pBt) bytes.
51234: */
51235: static void allocateTempSpace(BtShared *pBt){
51236:   if( !pBt->pTmpSpace ){
51237:     pBt->pTmpSpace = sqlite3PageMalloc( pBt->pageSize );
51238:   }
51239: }
51240: 
51241: /*
51242: ** Free the pBt->pTmpSpace allocation
51243: */
51244: static void freeTempSpace(BtShared *pBt){
51245:   sqlite3PageFree( pBt->pTmpSpace);
51246:   pBt->pTmpSpace = 0;
51247: }
51248: 
51249: /*
51250: ** Close an open database and invalidate all cursors.
51251: */
51252: SQLITE_PRIVATE int sqlite3BtreeClose(Btree *p){
51253:   BtShared *pBt = p->pBt;
51254:   BtCursor *pCur;
51255: 
51256:   /* Close all cursors opened via this handle.  */
51257:   assert( sqlite3_mutex_held(p->db->mutex) );
51258:   sqlite3BtreeEnter(p);
51259:   pCur = pBt->pCursor;
51260:   while( pCur ){
51261:     BtCursor *pTmp = pCur;
51262:     pCur = pCur->pNext;
51263:     if( pTmp->pBtree==p ){
51264:       sqlite3BtreeCloseCursor(pTmp);
51265:     }
51266:   }
51267: 
51268:   /* Rollback any active transaction and free the handle structure.
51269:   ** The call to sqlite3BtreeRollback() drops any table-locks held by
51270:   ** this handle.
51271:   */
51272:   sqlite3BtreeRollback(p);
51273:   sqlite3BtreeLeave(p);
51274: 
51275:   /* If there are still other outstanding references to the shared-btree
51276:   ** structure, return now. The remainder of this procedure cleans 
51277:   ** up the shared-btree.
51278:   */
51279:   assert( p->wantToLock==0 && p->locked==0 );
51280:   if( !p->sharable || removeFromSharingList(pBt) ){
51281:     /* The pBt is no longer on the sharing list, so we can access
51282:     ** it without having to hold the mutex.
51283:     **
51284:     ** Clean out and delete the BtShared object.
51285:     */
51286:     assert( !pBt->pCursor );
51287:     sqlite3PagerClose(pBt->pPager);
51288:     if( pBt->xFreeSchema && pBt->pSchema ){
51289:       pBt->xFreeSchema(pBt->pSchema);
51290:     }
51291:     sqlite3DbFree(0, pBt->pSchema);
51292:     freeTempSpace(pBt);
51293:     sqlite3_free(pBt);
51294:   }
51295: 
51296: #ifndef SQLITE_OMIT_SHARED_CACHE
51297:   assert( p->wantToLock==0 );
51298:   assert( p->locked==0 );
51299:   if( p->pPrev ) p->pPrev->pNext = p->pNext;
51300:   if( p->pNext ) p->pNext->pPrev = p->pPrev;
51301: #endif
51302: 
51303:   sqlite3_free(p);
51304:   return SQLITE_OK;
51305: }
51306: 
51307: /*
51308: ** Change the limit on the number of pages allowed in the cache.
51309: **
51310: ** The maximum number of cache pages is set to the absolute
51311: ** value of mxPage.  If mxPage is negative, the pager will
51312: ** operate asynchronously - it will not stop to do fsync()s
51313: ** to insure data is written to the disk surface before
51314: ** continuing.  Transactions still work if synchronous is off,
51315: ** and the database cannot be corrupted if this program
51316: ** crashes.  But if the operating system crashes or there is
51317: ** an abrupt power failure when synchronous is off, the database
51318: ** could be left in an inconsistent and unrecoverable state.
51319: ** Synchronous is on by default so database corruption is not
51320: ** normally a worry.
51321: */
51322: SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){
51323:   BtShared *pBt = p->pBt;
51324:   assert( sqlite3_mutex_held(p->db->mutex) );
51325:   sqlite3BtreeEnter(p);
51326:   sqlite3PagerSetCachesize(pBt->pPager, mxPage);
51327:   sqlite3BtreeLeave(p);
51328:   return SQLITE_OK;
51329: }
51330: 
51331: /*
51332: ** Change the way data is synced to disk in order to increase or decrease
51333: ** how well the database resists damage due to OS crashes and power
51334: ** failures.  Level 1 is the same as asynchronous (no syncs() occur and
51335: ** there is a high probability of damage)  Level 2 is the default.  There
51336: ** is a very low but non-zero probability of damage.  Level 3 reduces the
51337: ** probability of damage to near zero but with a write performance reduction.
51338: */
51339: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
51340: SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(
51341:   Btree *p,              /* The btree to set the safety level on */
51342:   int level,             /* PRAGMA synchronous.  1=OFF, 2=NORMAL, 3=FULL */
51343:   int fullSync,          /* PRAGMA fullfsync. */
51344:   int ckptFullSync       /* PRAGMA checkpoint_fullfync */
51345: ){
51346:   BtShared *pBt = p->pBt;
51347:   assert( sqlite3_mutex_held(p->db->mutex) );
51348:   assert( level>=1 && level<=3 );
51349:   sqlite3BtreeEnter(p);
51350:   sqlite3PagerSetSafetyLevel(pBt->pPager, level, fullSync, ckptFullSync);
51351:   sqlite3BtreeLeave(p);
51352:   return SQLITE_OK;
51353: }
51354: #endif
51355: 
51356: /*
51357: ** Return TRUE if the given btree is set to safety level 1.  In other
51358: ** words, return TRUE if no sync() occurs on the disk files.
51359: */
51360: SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree *p){
51361:   BtShared *pBt = p->pBt;
51362:   int rc;
51363:   assert( sqlite3_mutex_held(p->db->mutex) );  
51364:   sqlite3BtreeEnter(p);
51365:   assert( pBt && pBt->pPager );
51366:   rc = sqlite3PagerNosync(pBt->pPager);
51367:   sqlite3BtreeLeave(p);
51368:   return rc;
51369: }
51370: 
51371: /*
51372: ** Change the default pages size and the number of reserved bytes per page.
51373: ** Or, if the page size has already been fixed, return SQLITE_READONLY 
51374: ** without changing anything.
51375: **
51376: ** The page size must be a power of 2 between 512 and 65536.  If the page
51377: ** size supplied does not meet this constraint then the page size is not
51378: ** changed.
51379: **
51380: ** Page sizes are constrained to be a power of two so that the region
51381: ** of the database file used for locking (beginning at PENDING_BYTE,
51382: ** the first byte past the 1GB boundary, 0x40000000) needs to occur
51383: ** at the beginning of a page.
51384: **
51385: ** If parameter nReserve is less than zero, then the number of reserved
51386: ** bytes per page is left unchanged.
51387: **
51388: ** If the iFix!=0 then the BTS_PAGESIZE_FIXED flag is set so that the page size
51389: ** and autovacuum mode can no longer be changed.
51390: */
51391: SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve, int iFix){
51392:   int rc = SQLITE_OK;
51393:   BtShared *pBt = p->pBt;
51394:   assert( nReserve>=-1 && nReserve<=255 );
51395:   sqlite3BtreeEnter(p);
51396:   if( pBt->btsFlags & BTS_PAGESIZE_FIXED ){
51397:     sqlite3BtreeLeave(p);
51398:     return SQLITE_READONLY;
51399:   }
51400:   if( nReserve<0 ){
51401:     nReserve = pBt->pageSize - pBt->usableSize;
51402:   }
51403:   assert( nReserve>=0 && nReserve<=255 );
51404:   if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE &&
51405:         ((pageSize-1)&pageSize)==0 ){
51406:     assert( (pageSize & 7)==0 );
51407:     assert( !pBt->pPage1 && !pBt->pCursor );
51408:     pBt->pageSize = (u32)pageSize;
51409:     freeTempSpace(pBt);
51410:   }
51411:   rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve);
51412:   pBt->usableSize = pBt->pageSize - (u16)nReserve;
51413:   if( iFix ) pBt->btsFlags |= BTS_PAGESIZE_FIXED;
51414:   sqlite3BtreeLeave(p);
51415:   return rc;
51416: }
51417: 
51418: /*
51419: ** Return the currently defined page size
51420: */
51421: SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree *p){
51422:   return p->pBt->pageSize;
51423: }
51424: 
51425: #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM)
51426: /*
51427: ** Return the number of bytes of space at the end of every page that
51428: ** are intentually left unused.  This is the "reserved" space that is
51429: ** sometimes used by extensions.
51430: */
51431: SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree *p){
51432:   int n;
51433:   sqlite3BtreeEnter(p);
51434:   n = p->pBt->pageSize - p->pBt->usableSize;
51435:   sqlite3BtreeLeave(p);
51436:   return n;
51437: }
51438: 
51439: /*
51440: ** Set the maximum page count for a database if mxPage is positive.
51441: ** No changes are made if mxPage is 0 or negative.
51442: ** Regardless of the value of mxPage, return the maximum page count.
51443: */
51444: SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){
51445:   int n;
51446:   sqlite3BtreeEnter(p);
51447:   n = sqlite3PagerMaxPageCount(p->pBt->pPager, mxPage);
51448:   sqlite3BtreeLeave(p);
51449:   return n;
51450: }
51451: 
51452: /*
51453: ** Set the BTS_SECURE_DELETE flag if newFlag is 0 or 1.  If newFlag is -1,
51454: ** then make no changes.  Always return the value of the BTS_SECURE_DELETE
51455: ** setting after the change.
51456: */
51457: SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree *p, int newFlag){
51458:   int b;
51459:   if( p==0 ) return 0;
51460:   sqlite3BtreeEnter(p);
51461:   if( newFlag>=0 ){
51462:     p->pBt->btsFlags &= ~BTS_SECURE_DELETE;
51463:     if( newFlag ) p->pBt->btsFlags |= BTS_SECURE_DELETE;
51464:   } 
51465:   b = (p->pBt->btsFlags & BTS_SECURE_DELETE)!=0;
51466:   sqlite3BtreeLeave(p);
51467:   return b;
51468: }
51469: #endif /* !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM) */
51470: 
51471: /*
51472: ** Change the 'auto-vacuum' property of the database. If the 'autoVacuum'
51473: ** parameter is non-zero, then auto-vacuum mode is enabled. If zero, it
51474: ** is disabled. The default value for the auto-vacuum property is 
51475: ** determined by the SQLITE_DEFAULT_AUTOVACUUM macro.
51476: */
51477: SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *p, int autoVacuum){
51478: #ifdef SQLITE_OMIT_AUTOVACUUM
51479:   return SQLITE_READONLY;
51480: #else
51481:   BtShared *pBt = p->pBt;
51482:   int rc = SQLITE_OK;
51483:   u8 av = (u8)autoVacuum;
51484: 
51485:   sqlite3BtreeEnter(p);
51486:   if( (pBt->btsFlags & BTS_PAGESIZE_FIXED)!=0 && (av ?1:0)!=pBt->autoVacuum ){
51487:     rc = SQLITE_READONLY;
51488:   }else{
51489:     pBt->autoVacuum = av ?1:0;
51490:     pBt->incrVacuum = av==2 ?1:0;
51491:   }
51492:   sqlite3BtreeLeave(p);
51493:   return rc;
51494: #endif
51495: }
51496: 
51497: /*
51498: ** Return the value of the 'auto-vacuum' property. If auto-vacuum is 
51499: ** enabled 1 is returned. Otherwise 0.
51500: */
51501: SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){
51502: #ifdef SQLITE_OMIT_AUTOVACUUM
51503:   return BTREE_AUTOVACUUM_NONE;
51504: #else
51505:   int rc;
51506:   sqlite3BtreeEnter(p);
51507:   rc = (
51508:     (!p->pBt->autoVacuum)?BTREE_AUTOVACUUM_NONE:
51509:     (!p->pBt->incrVacuum)?BTREE_AUTOVACUUM_FULL:
51510:     BTREE_AUTOVACUUM_INCR
51511:   );
51512:   sqlite3BtreeLeave(p);
51513:   return rc;
51514: #endif
51515: }
51516: 
51517: 
51518: /*
51519: ** Get a reference to pPage1 of the database file.  This will
51520: ** also acquire a readlock on that file.
51521: **
51522: ** SQLITE_OK is returned on success.  If the file is not a
51523: ** well-formed database file, then SQLITE_CORRUPT is returned.
51524: ** SQLITE_BUSY is returned if the database is locked.  SQLITE_NOMEM
51525: ** is returned if we run out of memory. 
51526: */
51527: static int lockBtree(BtShared *pBt){
51528:   int rc;              /* Result code from subfunctions */
51529:   MemPage *pPage1;     /* Page 1 of the database file */
51530:   int nPage;           /* Number of pages in the database */
51531:   int nPageFile = 0;   /* Number of pages in the database file */
51532:   int nPageHeader;     /* Number of pages in the database according to hdr */
51533: 
51534:   assert( sqlite3_mutex_held(pBt->mutex) );
51535:   assert( pBt->pPage1==0 );
51536:   rc = sqlite3PagerSharedLock(pBt->pPager);
51537:   if( rc!=SQLITE_OK ) return rc;
51538:   rc = btreeGetPage(pBt, 1, &pPage1, 0);
51539:   if( rc!=SQLITE_OK ) return rc;
51540: 
51541:   /* Do some checking to help insure the file we opened really is
51542:   ** a valid database file. 
51543:   */
51544:   nPage = nPageHeader = get4byte(28+(u8*)pPage1->aData);
51545:   sqlite3PagerPagecount(pBt->pPager, &nPageFile);
51546:   if( nPage==0 || memcmp(24+(u8*)pPage1->aData, 92+(u8*)pPage1->aData,4)!=0 ){
51547:     nPage = nPageFile;
51548:   }
51549:   if( nPage>0 ){
51550:     u32 pageSize;
51551:     u32 usableSize;
51552:     u8 *page1 = pPage1->aData;
51553:     rc = SQLITE_NOTADB;
51554:     if( memcmp(page1, zMagicHeader, 16)!=0 ){
51555:       goto page1_init_failed;
51556:     }
51557: 
51558: #ifdef SQLITE_OMIT_WAL
51559:     if( page1[18]>1 ){
51560:       pBt->btsFlags |= BTS_READ_ONLY;
51561:     }
51562:     if( page1[19]>1 ){
51563:       goto page1_init_failed;
51564:     }
51565: #else
51566:     if( page1[18]>2 ){
51567:       pBt->btsFlags |= BTS_READ_ONLY;
51568:     }
51569:     if( page1[19]>2 ){
51570:       goto page1_init_failed;
51571:     }
51572: 
51573:     /* If the write version is set to 2, this database should be accessed
51574:     ** in WAL mode. If the log is not already open, open it now. Then 
51575:     ** return SQLITE_OK and return without populating BtShared.pPage1.
51576:     ** The caller detects this and calls this function again. This is
51577:     ** required as the version of page 1 currently in the page1 buffer
51578:     ** may not be the latest version - there may be a newer one in the log
51579:     ** file.
51580:     */
51581:     if( page1[19]==2 && (pBt->btsFlags & BTS_NO_WAL)==0 ){
51582:       int isOpen = 0;
51583:       rc = sqlite3PagerOpenWal(pBt->pPager, &isOpen);
51584:       if( rc!=SQLITE_OK ){
51585:         goto page1_init_failed;
51586:       }else if( isOpen==0 ){
51587:         releasePage(pPage1);
51588:         return SQLITE_OK;
51589:       }
51590:       rc = SQLITE_NOTADB;
51591:     }
51592: #endif
51593: 
51594:     /* The maximum embedded fraction must be exactly 25%.  And the minimum
51595:     ** embedded fraction must be 12.5% for both leaf-data and non-leaf-data.
51596:     ** The original design allowed these amounts to vary, but as of
51597:     ** version 3.6.0, we require them to be fixed.
51598:     */
51599:     if( memcmp(&page1[21], "\100\040\040",3)!=0 ){
51600:       goto page1_init_failed;
51601:     }
51602:     pageSize = (page1[16]<<8) | (page1[17]<<16);
51603:     if( ((pageSize-1)&pageSize)!=0
51604:      || pageSize>SQLITE_MAX_PAGE_SIZE 
51605:      || pageSize<=256 
51606:     ){
51607:       goto page1_init_failed;
51608:     }
51609:     assert( (pageSize & 7)==0 );
51610:     usableSize = pageSize - page1[20];
51611:     if( (u32)pageSize!=pBt->pageSize ){
51612:       /* After reading the first page of the database assuming a page size
51613:       ** of BtShared.pageSize, we have discovered that the page-size is
51614:       ** actually pageSize. Unlock the database, leave pBt->pPage1 at
51615:       ** zero and return SQLITE_OK. The caller will call this function
51616:       ** again with the correct page-size.
51617:       */
51618:       releasePage(pPage1);
51619:       pBt->usableSize = usableSize;
51620:       pBt->pageSize = pageSize;
51621:       freeTempSpace(pBt);
51622:       rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize,
51623:                                    pageSize-usableSize);
51624:       return rc;
51625:     }
51626:     if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPage>nPageFile ){
51627:       rc = SQLITE_CORRUPT_BKPT;
51628:       goto page1_init_failed;
51629:     }
51630:     if( usableSize<480 ){
51631:       goto page1_init_failed;
51632:     }
51633:     pBt->pageSize = pageSize;
51634:     pBt->usableSize = usableSize;
51635: #ifndef SQLITE_OMIT_AUTOVACUUM
51636:     pBt->autoVacuum = (get4byte(&page1[36 + 4*4])?1:0);
51637:     pBt->incrVacuum = (get4byte(&page1[36 + 7*4])?1:0);
51638: #endif
51639:   }
51640: 
51641:   /* maxLocal is the maximum amount of payload to store locally for
51642:   ** a cell.  Make sure it is small enough so that at least minFanout
51643:   ** cells can will fit on one page.  We assume a 10-byte page header.
51644:   ** Besides the payload, the cell must store:
51645:   **     2-byte pointer to the cell
51646:   **     4-byte child pointer
51647:   **     9-byte nKey value
51648:   **     4-byte nData value
51649:   **     4-byte overflow page pointer
51650:   ** So a cell consists of a 2-byte pointer, a header which is as much as
51651:   ** 17 bytes long, 0 to N bytes of payload, and an optional 4 byte overflow
51652:   ** page pointer.
51653:   */
51654:   pBt->maxLocal = (u16)((pBt->usableSize-12)*64/255 - 23);
51655:   pBt->minLocal = (u16)((pBt->usableSize-12)*32/255 - 23);
51656:   pBt->maxLeaf = (u16)(pBt->usableSize - 35);
51657:   pBt->minLeaf = (u16)((pBt->usableSize-12)*32/255 - 23);
51658:   if( pBt->maxLocal>127 ){
51659:     pBt->max1bytePayload = 127;
51660:   }else{
51661:     pBt->max1bytePayload = (u8)pBt->maxLocal;
51662:   }
51663:   assert( pBt->maxLeaf + 23 <= MX_CELL_SIZE(pBt) );
51664:   pBt->pPage1 = pPage1;
51665:   pBt->nPage = nPage;
51666:   return SQLITE_OK;
51667: 
51668: page1_init_failed:
51669:   releasePage(pPage1);
51670:   pBt->pPage1 = 0;
51671:   return rc;
51672: }
51673: 
51674: /*
51675: ** If there are no outstanding cursors and we are not in the middle
51676: ** of a transaction but there is a read lock on the database, then
51677: ** this routine unrefs the first page of the database file which 
51678: ** has the effect of releasing the read lock.
51679: **
51680: ** If there is a transaction in progress, this routine is a no-op.
51681: */
51682: static void unlockBtreeIfUnused(BtShared *pBt){
51683:   assert( sqlite3_mutex_held(pBt->mutex) );
51684:   assert( pBt->pCursor==0 || pBt->inTransaction>TRANS_NONE );
51685:   if( pBt->inTransaction==TRANS_NONE && pBt->pPage1!=0 ){
51686:     assert( pBt->pPage1->aData );
51687:     assert( sqlite3PagerRefcount(pBt->pPager)==1 );
51688:     assert( pBt->pPage1->aData );
51689:     releasePage(pBt->pPage1);
51690:     pBt->pPage1 = 0;
51691:   }
51692: }
51693: 
51694: /*
51695: ** If pBt points to an empty file then convert that empty file
51696: ** into a new empty database by initializing the first page of
51697: ** the database.
51698: */
51699: static int newDatabase(BtShared *pBt){
51700:   MemPage *pP1;
51701:   unsigned char *data;
51702:   int rc;
51703: 
51704:   assert( sqlite3_mutex_held(pBt->mutex) );
51705:   if( pBt->nPage>0 ){
51706:     return SQLITE_OK;
51707:   }
51708:   pP1 = pBt->pPage1;
51709:   assert( pP1!=0 );
51710:   data = pP1->aData;
51711:   rc = sqlite3PagerWrite(pP1->pDbPage);
51712:   if( rc ) return rc;
51713:   memcpy(data, zMagicHeader, sizeof(zMagicHeader));
51714:   assert( sizeof(zMagicHeader)==16 );
51715:   data[16] = (u8)((pBt->pageSize>>8)&0xff);
51716:   data[17] = (u8)((pBt->pageSize>>16)&0xff);
51717:   data[18] = 1;
51718:   data[19] = 1;
51719:   assert( pBt->usableSize<=pBt->pageSize && pBt->usableSize+255>=pBt->pageSize);
51720:   data[20] = (u8)(pBt->pageSize - pBt->usableSize);
51721:   data[21] = 64;
51722:   data[22] = 32;
51723:   data[23] = 32;
51724:   memset(&data[24], 0, 100-24);
51725:   zeroPage(pP1, PTF_INTKEY|PTF_LEAF|PTF_LEAFDATA );
51726:   pBt->btsFlags |= BTS_PAGESIZE_FIXED;
51727: #ifndef SQLITE_OMIT_AUTOVACUUM
51728:   assert( pBt->autoVacuum==1 || pBt->autoVacuum==0 );
51729:   assert( pBt->incrVacuum==1 || pBt->incrVacuum==0 );
51730:   put4byte(&data[36 + 4*4], pBt->autoVacuum);
51731:   put4byte(&data[36 + 7*4], pBt->incrVacuum);
51732: #endif
51733:   pBt->nPage = 1;
51734:   data[31] = 1;
51735:   return SQLITE_OK;
51736: }
51737: 
51738: /*
51739: ** Attempt to start a new transaction. A write-transaction
51740: ** is started if the second argument is nonzero, otherwise a read-
51741: ** transaction.  If the second argument is 2 or more and exclusive
51742: ** transaction is started, meaning that no other process is allowed
51743: ** to access the database.  A preexisting transaction may not be
51744: ** upgraded to exclusive by calling this routine a second time - the
51745: ** exclusivity flag only works for a new transaction.
51746: **
51747: ** A write-transaction must be started before attempting any 
51748: ** changes to the database.  None of the following routines 
51749: ** will work unless a transaction is started first:
51750: **
51751: **      sqlite3BtreeCreateTable()
51752: **      sqlite3BtreeCreateIndex()
51753: **      sqlite3BtreeClearTable()
51754: **      sqlite3BtreeDropTable()
51755: **      sqlite3BtreeInsert()
51756: **      sqlite3BtreeDelete()
51757: **      sqlite3BtreeUpdateMeta()
51758: **
51759: ** If an initial attempt to acquire the lock fails because of lock contention
51760: ** and the database was previously unlocked, then invoke the busy handler
51761: ** if there is one.  But if there was previously a read-lock, do not
51762: ** invoke the busy handler - just return SQLITE_BUSY.  SQLITE_BUSY is 
51763: ** returned when there is already a read-lock in order to avoid a deadlock.
51764: **
51765: ** Suppose there are two processes A and B.  A has a read lock and B has
51766: ** a reserved lock.  B tries to promote to exclusive but is blocked because
51767: ** of A's read lock.  A tries to promote to reserved but is blocked by B.
51768: ** One or the other of the two processes must give way or there can be
51769: ** no progress.  By returning SQLITE_BUSY and not invoking the busy callback
51770: ** when A already has a read lock, we encourage A to give up and let B
51771: ** proceed.
51772: */
51773: SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag){
51774:   sqlite3 *pBlock = 0;
51775:   BtShared *pBt = p->pBt;
51776:   int rc = SQLITE_OK;
51777: 
51778:   sqlite3BtreeEnter(p);
51779:   btreeIntegrity(p);
51780: 
51781:   /* If the btree is already in a write-transaction, or it
51782:   ** is already in a read-transaction and a read-transaction
51783:   ** is requested, this is a no-op.
51784:   */
51785:   if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){
51786:     goto trans_begun;
51787:   }
51788: 
51789:   /* Write transactions are not possible on a read-only database */
51790:   if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){
51791:     rc = SQLITE_READONLY;
51792:     goto trans_begun;
51793:   }
51794: 
51795: #ifndef SQLITE_OMIT_SHARED_CACHE
51796:   /* If another database handle has already opened a write transaction 
51797:   ** on this shared-btree structure and a second write transaction is
51798:   ** requested, return SQLITE_LOCKED.
51799:   */
51800:   if( (wrflag && pBt->inTransaction==TRANS_WRITE)
51801:    || (pBt->btsFlags & BTS_PENDING)!=0
51802:   ){
51803:     pBlock = pBt->pWriter->db;
51804:   }else if( wrflag>1 ){
51805:     BtLock *pIter;
51806:     for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
51807:       if( pIter->pBtree!=p ){
51808:         pBlock = pIter->pBtree->db;
51809:         break;
51810:       }
51811:     }
51812:   }
51813:   if( pBlock ){
51814:     sqlite3ConnectionBlocked(p->db, pBlock);
51815:     rc = SQLITE_LOCKED_SHAREDCACHE;
51816:     goto trans_begun;
51817:   }
51818: #endif
51819: 
51820:   /* Any read-only or read-write transaction implies a read-lock on 
51821:   ** page 1. So if some other shared-cache client already has a write-lock 
51822:   ** on page 1, the transaction cannot be opened. */
51823:   rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK);
51824:   if( SQLITE_OK!=rc ) goto trans_begun;
51825: 
51826:   pBt->btsFlags &= ~BTS_INITIALLY_EMPTY;
51827:   if( pBt->nPage==0 ) pBt->btsFlags |= BTS_INITIALLY_EMPTY;
51828:   do {
51829:     /* Call lockBtree() until either pBt->pPage1 is populated or
51830:     ** lockBtree() returns something other than SQLITE_OK. lockBtree()
51831:     ** may return SQLITE_OK but leave pBt->pPage1 set to 0 if after
51832:     ** reading page 1 it discovers that the page-size of the database 
51833:     ** file is not pBt->pageSize. In this case lockBtree() will update
51834:     ** pBt->pageSize to the page-size of the file on disk.
51835:     */
51836:     while( pBt->pPage1==0 && SQLITE_OK==(rc = lockBtree(pBt)) );
51837: 
51838:     if( rc==SQLITE_OK && wrflag ){
51839:       if( (pBt->btsFlags & BTS_READ_ONLY)!=0 ){
51840:         rc = SQLITE_READONLY;
51841:       }else{
51842:         rc = sqlite3PagerBegin(pBt->pPager,wrflag>1,sqlite3TempInMemory(p->db));
51843:         if( rc==SQLITE_OK ){
51844:           rc = newDatabase(pBt);
51845:         }
51846:       }
51847:     }
51848:   
51849:     if( rc!=SQLITE_OK ){
51850:       unlockBtreeIfUnused(pBt);
51851:     }
51852:   }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE &&
51853:           btreeInvokeBusyHandler(pBt) );
51854: 
51855:   if( rc==SQLITE_OK ){
51856:     if( p->inTrans==TRANS_NONE ){
51857:       pBt->nTransaction++;
51858: #ifndef SQLITE_OMIT_SHARED_CACHE
51859:       if( p->sharable ){
51860: 	assert( p->lock.pBtree==p && p->lock.iTable==1 );
51861:         p->lock.eLock = READ_LOCK;
51862:         p->lock.pNext = pBt->pLock;
51863:         pBt->pLock = &p->lock;
51864:       }
51865: #endif
51866:     }
51867:     p->inTrans = (wrflag?TRANS_WRITE:TRANS_READ);
51868:     if( p->inTrans>pBt->inTransaction ){
51869:       pBt->inTransaction = p->inTrans;
51870:     }
51871:     if( wrflag ){
51872:       MemPage *pPage1 = pBt->pPage1;
51873: #ifndef SQLITE_OMIT_SHARED_CACHE
51874:       assert( !pBt->pWriter );
51875:       pBt->pWriter = p;
51876:       pBt->btsFlags &= ~BTS_EXCLUSIVE;
51877:       if( wrflag>1 ) pBt->btsFlags |= BTS_EXCLUSIVE;
51878: #endif
51879: 
51880:       /* If the db-size header field is incorrect (as it may be if an old
51881:       ** client has been writing the database file), update it now. Doing
51882:       ** this sooner rather than later means the database size can safely 
51883:       ** re-read the database size from page 1 if a savepoint or transaction
51884:       ** rollback occurs within the transaction.
51885:       */
51886:       if( pBt->nPage!=get4byte(&pPage1->aData[28]) ){
51887:         rc = sqlite3PagerWrite(pPage1->pDbPage);
51888:         if( rc==SQLITE_OK ){
51889:           put4byte(&pPage1->aData[28], pBt->nPage);
51890:         }
51891:       }
51892:     }
51893:   }
51894: 
51895: 
51896: trans_begun:
51897:   if( rc==SQLITE_OK && wrflag ){
51898:     /* This call makes sure that the pager has the correct number of
51899:     ** open savepoints. If the second parameter is greater than 0 and
51900:     ** the sub-journal is not already open, then it will be opened here.
51901:     */
51902:     rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint);
51903:   }
51904: 
51905:   btreeIntegrity(p);
51906:   sqlite3BtreeLeave(p);
51907:   return rc;
51908: }
51909: 
51910: #ifndef SQLITE_OMIT_AUTOVACUUM
51911: 
51912: /*
51913: ** Set the pointer-map entries for all children of page pPage. Also, if
51914: ** pPage contains cells that point to overflow pages, set the pointer
51915: ** map entries for the overflow pages as well.
51916: */
51917: static int setChildPtrmaps(MemPage *pPage){
51918:   int i;                             /* Counter variable */
51919:   int nCell;                         /* Number of cells in page pPage */
51920:   int rc;                            /* Return code */
51921:   BtShared *pBt = pPage->pBt;
51922:   u8 isInitOrig = pPage->isInit;
51923:   Pgno pgno = pPage->pgno;
51924: 
51925:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
51926:   rc = btreeInitPage(pPage);
51927:   if( rc!=SQLITE_OK ){
51928:     goto set_child_ptrmaps_out;
51929:   }
51930:   nCell = pPage->nCell;
51931: 
51932:   for(i=0; i<nCell; i++){
51933:     u8 *pCell = findCell(pPage, i);
51934: 
51935:     ptrmapPutOvflPtr(pPage, pCell, &rc);
51936: 
51937:     if( !pPage->leaf ){
51938:       Pgno childPgno = get4byte(pCell);
51939:       ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc);
51940:     }
51941:   }
51942: 
51943:   if( !pPage->leaf ){
51944:     Pgno childPgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
51945:     ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc);
51946:   }
51947: 
51948: set_child_ptrmaps_out:
51949:   pPage->isInit = isInitOrig;
51950:   return rc;
51951: }
51952: 
51953: /*
51954: ** Somewhere on pPage is a pointer to page iFrom.  Modify this pointer so
51955: ** that it points to iTo. Parameter eType describes the type of pointer to
51956: ** be modified, as  follows:
51957: **
51958: ** PTRMAP_BTREE:     pPage is a btree-page. The pointer points at a child 
51959: **                   page of pPage.
51960: **
51961: ** PTRMAP_OVERFLOW1: pPage is a btree-page. The pointer points at an overflow
51962: **                   page pointed to by one of the cells on pPage.
51963: **
51964: ** PTRMAP_OVERFLOW2: pPage is an overflow-page. The pointer points at the next
51965: **                   overflow page in the list.
51966: */
51967: static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){
51968:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
51969:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
51970:   if( eType==PTRMAP_OVERFLOW2 ){
51971:     /* The pointer is always the first 4 bytes of the page in this case.  */
51972:     if( get4byte(pPage->aData)!=iFrom ){
51973:       return SQLITE_CORRUPT_BKPT;
51974:     }
51975:     put4byte(pPage->aData, iTo);
51976:   }else{
51977:     u8 isInitOrig = pPage->isInit;
51978:     int i;
51979:     int nCell;
51980: 
51981:     btreeInitPage(pPage);
51982:     nCell = pPage->nCell;
51983: 
51984:     for(i=0; i<nCell; i++){
51985:       u8 *pCell = findCell(pPage, i);
51986:       if( eType==PTRMAP_OVERFLOW1 ){
51987:         CellInfo info;
51988:         btreeParseCellPtr(pPage, pCell, &info);
51989:         if( info.iOverflow
51990:          && pCell+info.iOverflow+3<=pPage->aData+pPage->maskPage
51991:          && iFrom==get4byte(&pCell[info.iOverflow])
51992:         ){
51993:           put4byte(&pCell[info.iOverflow], iTo);
51994:           break;
51995:         }
51996:       }else{
51997:         if( get4byte(pCell)==iFrom ){
51998:           put4byte(pCell, iTo);
51999:           break;
52000:         }
52001:       }
52002:     }
52003:   
52004:     if( i==nCell ){
52005:       if( eType!=PTRMAP_BTREE || 
52006:           get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){
52007:         return SQLITE_CORRUPT_BKPT;
52008:       }
52009:       put4byte(&pPage->aData[pPage->hdrOffset+8], iTo);
52010:     }
52011: 
52012:     pPage->isInit = isInitOrig;
52013:   }
52014:   return SQLITE_OK;
52015: }
52016: 
52017: 
52018: /*
52019: ** Move the open database page pDbPage to location iFreePage in the 
52020: ** database. The pDbPage reference remains valid.
52021: **
52022: ** The isCommit flag indicates that there is no need to remember that
52023: ** the journal needs to be sync()ed before database page pDbPage->pgno 
52024: ** can be written to. The caller has already promised not to write to that
52025: ** page.
52026: */
52027: static int relocatePage(
52028:   BtShared *pBt,           /* Btree */
52029:   MemPage *pDbPage,        /* Open page to move */
52030:   u8 eType,                /* Pointer map 'type' entry for pDbPage */
52031:   Pgno iPtrPage,           /* Pointer map 'page-no' entry for pDbPage */
52032:   Pgno iFreePage,          /* The location to move pDbPage to */
52033:   int isCommit             /* isCommit flag passed to sqlite3PagerMovepage */
52034: ){
52035:   MemPage *pPtrPage;   /* The page that contains a pointer to pDbPage */
52036:   Pgno iDbPage = pDbPage->pgno;
52037:   Pager *pPager = pBt->pPager;
52038:   int rc;
52039: 
52040:   assert( eType==PTRMAP_OVERFLOW2 || eType==PTRMAP_OVERFLOW1 || 
52041:       eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE );
52042:   assert( sqlite3_mutex_held(pBt->mutex) );
52043:   assert( pDbPage->pBt==pBt );
52044: 
52045:   /* Move page iDbPage from its current location to page number iFreePage */
52046:   TRACE(("AUTOVACUUM: Moving %d to free page %d (ptr page %d type %d)\n", 
52047:       iDbPage, iFreePage, iPtrPage, eType));
52048:   rc = sqlite3PagerMovepage(pPager, pDbPage->pDbPage, iFreePage, isCommit);
52049:   if( rc!=SQLITE_OK ){
52050:     return rc;
52051:   }
52052:   pDbPage->pgno = iFreePage;
52053: 
52054:   /* If pDbPage was a btree-page, then it may have child pages and/or cells
52055:   ** that point to overflow pages. The pointer map entries for all these
52056:   ** pages need to be changed.
52057:   **
52058:   ** If pDbPage is an overflow page, then the first 4 bytes may store a
52059:   ** pointer to a subsequent overflow page. If this is the case, then
52060:   ** the pointer map needs to be updated for the subsequent overflow page.
52061:   */
52062:   if( eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ){
52063:     rc = setChildPtrmaps(pDbPage);
52064:     if( rc!=SQLITE_OK ){
52065:       return rc;
52066:     }
52067:   }else{
52068:     Pgno nextOvfl = get4byte(pDbPage->aData);
52069:     if( nextOvfl!=0 ){
52070:       ptrmapPut(pBt, nextOvfl, PTRMAP_OVERFLOW2, iFreePage, &rc);
52071:       if( rc!=SQLITE_OK ){
52072:         return rc;
52073:       }
52074:     }
52075:   }
52076: 
52077:   /* Fix the database pointer on page iPtrPage that pointed at iDbPage so
52078:   ** that it points at iFreePage. Also fix the pointer map entry for
52079:   ** iPtrPage.
52080:   */
52081:   if( eType!=PTRMAP_ROOTPAGE ){
52082:     rc = btreeGetPage(pBt, iPtrPage, &pPtrPage, 0);
52083:     if( rc!=SQLITE_OK ){
52084:       return rc;
52085:     }
52086:     rc = sqlite3PagerWrite(pPtrPage->pDbPage);
52087:     if( rc!=SQLITE_OK ){
52088:       releasePage(pPtrPage);
52089:       return rc;
52090:     }
52091:     rc = modifyPagePointer(pPtrPage, iDbPage, iFreePage, eType);
52092:     releasePage(pPtrPage);
52093:     if( rc==SQLITE_OK ){
52094:       ptrmapPut(pBt, iFreePage, eType, iPtrPage, &rc);
52095:     }
52096:   }
52097:   return rc;
52098: }
52099: 
52100: /* Forward declaration required by incrVacuumStep(). */
52101: static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8);
52102: 
52103: /*
52104: ** Perform a single step of an incremental-vacuum. If successful,
52105: ** return SQLITE_OK. If there is no work to do (and therefore no
52106: ** point in calling this function again), return SQLITE_DONE.
52107: **
52108: ** More specificly, this function attempts to re-organize the 
52109: ** database so that the last page of the file currently in use
52110: ** is no longer in use.
52111: **
52112: ** If the nFin parameter is non-zero, this function assumes
52113: ** that the caller will keep calling incrVacuumStep() until
52114: ** it returns SQLITE_DONE or an error, and that nFin is the
52115: ** number of pages the database file will contain after this 
52116: ** process is complete.  If nFin is zero, it is assumed that
52117: ** incrVacuumStep() will be called a finite amount of times
52118: ** which may or may not empty the freelist.  A full autovacuum
52119: ** has nFin>0.  A "PRAGMA incremental_vacuum" has nFin==0.
52120: */
52121: static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg){
52122:   Pgno nFreeList;           /* Number of pages still on the free-list */
52123:   int rc;
52124: 
52125:   assert( sqlite3_mutex_held(pBt->mutex) );
52126:   assert( iLastPg>nFin );
52127: 
52128:   if( !PTRMAP_ISPAGE(pBt, iLastPg) && iLastPg!=PENDING_BYTE_PAGE(pBt) ){
52129:     u8 eType;
52130:     Pgno iPtrPage;
52131: 
52132:     nFreeList = get4byte(&pBt->pPage1->aData[36]);
52133:     if( nFreeList==0 ){
52134:       return SQLITE_DONE;
52135:     }
52136: 
52137:     rc = ptrmapGet(pBt, iLastPg, &eType, &iPtrPage);
52138:     if( rc!=SQLITE_OK ){
52139:       return rc;
52140:     }
52141:     if( eType==PTRMAP_ROOTPAGE ){
52142:       return SQLITE_CORRUPT_BKPT;
52143:     }
52144: 
52145:     if( eType==PTRMAP_FREEPAGE ){
52146:       if( nFin==0 ){
52147:         /* Remove the page from the files free-list. This is not required
52148:         ** if nFin is non-zero. In that case, the free-list will be
52149:         ** truncated to zero after this function returns, so it doesn't 
52150:         ** matter if it still contains some garbage entries.
52151:         */
52152:         Pgno iFreePg;
52153:         MemPage *pFreePg;
52154:         rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, 1);
52155:         if( rc!=SQLITE_OK ){
52156:           return rc;
52157:         }
52158:         assert( iFreePg==iLastPg );
52159:         releasePage(pFreePg);
52160:       }
52161:     } else {
52162:       Pgno iFreePg;             /* Index of free page to move pLastPg to */
52163:       MemPage *pLastPg;
52164: 
52165:       rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0);
52166:       if( rc!=SQLITE_OK ){
52167:         return rc;
52168:       }
52169: 
52170:       /* If nFin is zero, this loop runs exactly once and page pLastPg
52171:       ** is swapped with the first free page pulled off the free list.
52172:       **
52173:       ** On the other hand, if nFin is greater than zero, then keep
52174:       ** looping until a free-page located within the first nFin pages
52175:       ** of the file is found.
52176:       */
52177:       do {
52178:         MemPage *pFreePg;
52179:         rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, 0, 0);
52180:         if( rc!=SQLITE_OK ){
52181:           releasePage(pLastPg);
52182:           return rc;
52183:         }
52184:         releasePage(pFreePg);
52185:       }while( nFin!=0 && iFreePg>nFin );
52186:       assert( iFreePg<iLastPg );
52187:       
52188:       rc = sqlite3PagerWrite(pLastPg->pDbPage);
52189:       if( rc==SQLITE_OK ){
52190:         rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, nFin!=0);
52191:       }
52192:       releasePage(pLastPg);
52193:       if( rc!=SQLITE_OK ){
52194:         return rc;
52195:       }
52196:     }
52197:   }
52198: 
52199:   if( nFin==0 ){
52200:     iLastPg--;
52201:     while( iLastPg==PENDING_BYTE_PAGE(pBt)||PTRMAP_ISPAGE(pBt, iLastPg) ){
52202:       if( PTRMAP_ISPAGE(pBt, iLastPg) ){
52203:         MemPage *pPg;
52204:         rc = btreeGetPage(pBt, iLastPg, &pPg, 0);
52205:         if( rc!=SQLITE_OK ){
52206:           return rc;
52207:         }
52208:         rc = sqlite3PagerWrite(pPg->pDbPage);
52209:         releasePage(pPg);
52210:         if( rc!=SQLITE_OK ){
52211:           return rc;
52212:         }
52213:       }
52214:       iLastPg--;
52215:     }
52216:     sqlite3PagerTruncateImage(pBt->pPager, iLastPg);
52217:     pBt->nPage = iLastPg;
52218:   }
52219:   return SQLITE_OK;
52220: }
52221: 
52222: /*
52223: ** A write-transaction must be opened before calling this function.
52224: ** It performs a single unit of work towards an incremental vacuum.
52225: **
52226: ** If the incremental vacuum is finished after this function has run,
52227: ** SQLITE_DONE is returned. If it is not finished, but no error occurred,
52228: ** SQLITE_OK is returned. Otherwise an SQLite error code. 
52229: */
52230: SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *p){
52231:   int rc;
52232:   BtShared *pBt = p->pBt;
52233: 
52234:   sqlite3BtreeEnter(p);
52235:   assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE );
52236:   if( !pBt->autoVacuum ){
52237:     rc = SQLITE_DONE;
52238:   }else{
52239:     invalidateAllOverflowCache(pBt);
52240:     rc = incrVacuumStep(pBt, 0, btreePagecount(pBt));
52241:     if( rc==SQLITE_OK ){
52242:       rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
52243:       put4byte(&pBt->pPage1->aData[28], pBt->nPage);
52244:     }
52245:   }
52246:   sqlite3BtreeLeave(p);
52247:   return rc;
52248: }
52249: 
52250: /*
52251: ** This routine is called prior to sqlite3PagerCommit when a transaction
52252: ** is commited for an auto-vacuum database.
52253: **
52254: ** If SQLITE_OK is returned, then *pnTrunc is set to the number of pages
52255: ** the database file should be truncated to during the commit process. 
52256: ** i.e. the database has been reorganized so that only the first *pnTrunc
52257: ** pages are in use.
52258: */
52259: static int autoVacuumCommit(BtShared *pBt){
52260:   int rc = SQLITE_OK;
52261:   Pager *pPager = pBt->pPager;
52262:   VVA_ONLY( int nRef = sqlite3PagerRefcount(pPager) );
52263: 
52264:   assert( sqlite3_mutex_held(pBt->mutex) );
52265:   invalidateAllOverflowCache(pBt);
52266:   assert(pBt->autoVacuum);
52267:   if( !pBt->incrVacuum ){
52268:     Pgno nFin;         /* Number of pages in database after autovacuuming */
52269:     Pgno nFree;        /* Number of pages on the freelist initially */
52270:     Pgno nPtrmap;      /* Number of PtrMap pages to be freed */
52271:     Pgno iFree;        /* The next page to be freed */
52272:     int nEntry;        /* Number of entries on one ptrmap page */
52273:     Pgno nOrig;        /* Database size before freeing */
52274: 
52275:     nOrig = btreePagecount(pBt);
52276:     if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){
52277:       /* It is not possible to create a database for which the final page
52278:       ** is either a pointer-map page or the pending-byte page. If one
52279:       ** is encountered, this indicates corruption.
52280:       */
52281:       return SQLITE_CORRUPT_BKPT;
52282:     }
52283: 
52284:     nFree = get4byte(&pBt->pPage1->aData[36]);
52285:     nEntry = pBt->usableSize/5;
52286:     nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry;
52287:     nFin = nOrig - nFree - nPtrmap;
52288:     if( nOrig>PENDING_BYTE_PAGE(pBt) && nFin<PENDING_BYTE_PAGE(pBt) ){
52289:       nFin--;
52290:     }
52291:     while( PTRMAP_ISPAGE(pBt, nFin) || nFin==PENDING_BYTE_PAGE(pBt) ){
52292:       nFin--;
52293:     }
52294:     if( nFin>nOrig ) return SQLITE_CORRUPT_BKPT;
52295: 
52296:     for(iFree=nOrig; iFree>nFin && rc==SQLITE_OK; iFree--){
52297:       rc = incrVacuumStep(pBt, nFin, iFree);
52298:     }
52299:     if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){
52300:       rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
52301:       put4byte(&pBt->pPage1->aData[32], 0);
52302:       put4byte(&pBt->pPage1->aData[36], 0);
52303:       put4byte(&pBt->pPage1->aData[28], nFin);
52304:       sqlite3PagerTruncateImage(pBt->pPager, nFin);
52305:       pBt->nPage = nFin;
52306:     }
52307:     if( rc!=SQLITE_OK ){
52308:       sqlite3PagerRollback(pPager);
52309:     }
52310:   }
52311: 
52312:   assert( nRef==sqlite3PagerRefcount(pPager) );
52313:   return rc;
52314: }
52315: 
52316: #else /* ifndef SQLITE_OMIT_AUTOVACUUM */
52317: # define setChildPtrmaps(x) SQLITE_OK
52318: #endif
52319: 
52320: /*
52321: ** This routine does the first phase of a two-phase commit.  This routine
52322: ** causes a rollback journal to be created (if it does not already exist)
52323: ** and populated with enough information so that if a power loss occurs
52324: ** the database can be restored to its original state by playing back
52325: ** the journal.  Then the contents of the journal are flushed out to
52326: ** the disk.  After the journal is safely on oxide, the changes to the
52327: ** database are written into the database file and flushed to oxide.
52328: ** At the end of this call, the rollback journal still exists on the
52329: ** disk and we are still holding all locks, so the transaction has not
52330: ** committed.  See sqlite3BtreeCommitPhaseTwo() for the second phase of the
52331: ** commit process.
52332: **
52333: ** This call is a no-op if no write-transaction is currently active on pBt.
52334: **
52335: ** Otherwise, sync the database file for the btree pBt. zMaster points to
52336: ** the name of a master journal file that should be written into the
52337: ** individual journal file, or is NULL, indicating no master journal file 
52338: ** (single database transaction).
52339: **
52340: ** When this is called, the master journal should already have been
52341: ** created, populated with this journal pointer and synced to disk.
52342: **
52343: ** Once this is routine has returned, the only thing required to commit
52344: ** the write-transaction for this database file is to delete the journal.
52345: */
52346: SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree *p, const char *zMaster){
52347:   int rc = SQLITE_OK;
52348:   if( p->inTrans==TRANS_WRITE ){
52349:     BtShared *pBt = p->pBt;
52350:     sqlite3BtreeEnter(p);
52351: #ifndef SQLITE_OMIT_AUTOVACUUM
52352:     if( pBt->autoVacuum ){
52353:       rc = autoVacuumCommit(pBt);
52354:       if( rc!=SQLITE_OK ){
52355:         sqlite3BtreeLeave(p);
52356:         return rc;
52357:       }
52358:     }
52359: #endif
52360:     rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zMaster, 0);
52361:     sqlite3BtreeLeave(p);
52362:   }
52363:   return rc;
52364: }
52365: 
52366: /*
52367: ** This function is called from both BtreeCommitPhaseTwo() and BtreeRollback()
52368: ** at the conclusion of a transaction.
52369: */
52370: static void btreeEndTransaction(Btree *p){
52371:   BtShared *pBt = p->pBt;
52372:   assert( sqlite3BtreeHoldsMutex(p) );
52373: 
52374:   btreeClearHasContent(pBt);
52375:   if( p->inTrans>TRANS_NONE && p->db->activeVdbeCnt>1 ){
52376:     /* If there are other active statements that belong to this database
52377:     ** handle, downgrade to a read-only transaction. The other statements
52378:     ** may still be reading from the database.  */
52379:     downgradeAllSharedCacheTableLocks(p);
52380:     p->inTrans = TRANS_READ;
52381:   }else{
52382:     /* If the handle had any kind of transaction open, decrement the 
52383:     ** transaction count of the shared btree. If the transaction count 
52384:     ** reaches 0, set the shared state to TRANS_NONE. The unlockBtreeIfUnused()
52385:     ** call below will unlock the pager.  */
52386:     if( p->inTrans!=TRANS_NONE ){
52387:       clearAllSharedCacheTableLocks(p);
52388:       pBt->nTransaction--;
52389:       if( 0==pBt->nTransaction ){
52390:         pBt->inTransaction = TRANS_NONE;
52391:       }
52392:     }
52393: 
52394:     /* Set the current transaction state to TRANS_NONE and unlock the 
52395:     ** pager if this call closed the only read or write transaction.  */
52396:     p->inTrans = TRANS_NONE;
52397:     unlockBtreeIfUnused(pBt);
52398:   }
52399: 
52400:   btreeIntegrity(p);
52401: }
52402: 
52403: /*
52404: ** Commit the transaction currently in progress.
52405: **
52406: ** This routine implements the second phase of a 2-phase commit.  The
52407: ** sqlite3BtreeCommitPhaseOne() routine does the first phase and should
52408: ** be invoked prior to calling this routine.  The sqlite3BtreeCommitPhaseOne()
52409: ** routine did all the work of writing information out to disk and flushing the
52410: ** contents so that they are written onto the disk platter.  All this
52411: ** routine has to do is delete or truncate or zero the header in the
52412: ** the rollback journal (which causes the transaction to commit) and
52413: ** drop locks.
52414: **
52415: ** Normally, if an error occurs while the pager layer is attempting to 
52416: ** finalize the underlying journal file, this function returns an error and
52417: ** the upper layer will attempt a rollback. However, if the second argument
52418: ** is non-zero then this b-tree transaction is part of a multi-file 
52419: ** transaction. In this case, the transaction has already been committed 
52420: ** (by deleting a master journal file) and the caller will ignore this 
52421: ** functions return code. So, even if an error occurs in the pager layer,
52422: ** reset the b-tree objects internal state to indicate that the write
52423: ** transaction has been closed. This is quite safe, as the pager will have
52424: ** transitioned to the error state.
52425: **
52426: ** This will release the write lock on the database file.  If there
52427: ** are no active cursors, it also releases the read lock.
52428: */
52429: SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){
52430: 
52431:   if( p->inTrans==TRANS_NONE ) return SQLITE_OK;
52432:   sqlite3BtreeEnter(p);
52433:   btreeIntegrity(p);
52434: 
52435:   /* If the handle has a write-transaction open, commit the shared-btrees 
52436:   ** transaction and set the shared state to TRANS_READ.
52437:   */
52438:   if( p->inTrans==TRANS_WRITE ){
52439:     int rc;
52440:     BtShared *pBt = p->pBt;
52441:     assert( pBt->inTransaction==TRANS_WRITE );
52442:     assert( pBt->nTransaction>0 );
52443:     rc = sqlite3PagerCommitPhaseTwo(pBt->pPager);
52444:     if( rc!=SQLITE_OK && bCleanup==0 ){
52445:       sqlite3BtreeLeave(p);
52446:       return rc;
52447:     }
52448:     pBt->inTransaction = TRANS_READ;
52449:   }
52450: 
52451:   btreeEndTransaction(p);
52452:   sqlite3BtreeLeave(p);
52453:   return SQLITE_OK;
52454: }
52455: 
52456: /*
52457: ** Do both phases of a commit.
52458: */
52459: SQLITE_PRIVATE int sqlite3BtreeCommit(Btree *p){
52460:   int rc;
52461:   sqlite3BtreeEnter(p);
52462:   rc = sqlite3BtreeCommitPhaseOne(p, 0);
52463:   if( rc==SQLITE_OK ){
52464:     rc = sqlite3BtreeCommitPhaseTwo(p, 0);
52465:   }
52466:   sqlite3BtreeLeave(p);
52467:   return rc;
52468: }
52469: 
52470: #ifndef NDEBUG
52471: /*
52472: ** Return the number of write-cursors open on this handle. This is for use
52473: ** in assert() expressions, so it is only compiled if NDEBUG is not
52474: ** defined.
52475: **
52476: ** For the purposes of this routine, a write-cursor is any cursor that
52477: ** is capable of writing to the databse.  That means the cursor was
52478: ** originally opened for writing and the cursor has not be disabled
52479: ** by having its state changed to CURSOR_FAULT.
52480: */
52481: static int countWriteCursors(BtShared *pBt){
52482:   BtCursor *pCur;
52483:   int r = 0;
52484:   for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){
52485:     if( pCur->wrFlag && pCur->eState!=CURSOR_FAULT ) r++; 
52486:   }
52487:   return r;
52488: }
52489: #endif
52490: 
52491: /*
52492: ** This routine sets the state to CURSOR_FAULT and the error
52493: ** code to errCode for every cursor on BtShared that pBtree
52494: ** references.
52495: **
52496: ** Every cursor is tripped, including cursors that belong
52497: ** to other database connections that happen to be sharing
52498: ** the cache with pBtree.
52499: **
52500: ** This routine gets called when a rollback occurs.
52501: ** All cursors using the same cache must be tripped
52502: ** to prevent them from trying to use the btree after
52503: ** the rollback.  The rollback may have deleted tables
52504: ** or moved root pages, so it is not sufficient to
52505: ** save the state of the cursor.  The cursor must be
52506: ** invalidated.
52507: */
52508: SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode){
52509:   BtCursor *p;
52510:   sqlite3BtreeEnter(pBtree);
52511:   for(p=pBtree->pBt->pCursor; p; p=p->pNext){
52512:     int i;
52513:     sqlite3BtreeClearCursor(p);
52514:     p->eState = CURSOR_FAULT;
52515:     p->skipNext = errCode;
52516:     for(i=0; i<=p->iPage; i++){
52517:       releasePage(p->apPage[i]);
52518:       p->apPage[i] = 0;
52519:     }
52520:   }
52521:   sqlite3BtreeLeave(pBtree);
52522: }
52523: 
52524: /*
52525: ** Rollback the transaction in progress.  All cursors will be
52526: ** invalided by this operation.  Any attempt to use a cursor
52527: ** that was open at the beginning of this operation will result
52528: ** in an error.
52529: **
52530: ** This will release the write lock on the database file.  If there
52531: ** are no active cursors, it also releases the read lock.
52532: */
52533: SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p){
52534:   int rc;
52535:   BtShared *pBt = p->pBt;
52536:   MemPage *pPage1;
52537: 
52538:   sqlite3BtreeEnter(p);
52539:   rc = saveAllCursors(pBt, 0, 0);
52540: #ifndef SQLITE_OMIT_SHARED_CACHE
52541:   if( rc!=SQLITE_OK ){
52542:     /* This is a horrible situation. An IO or malloc() error occurred whilst
52543:     ** trying to save cursor positions. If this is an automatic rollback (as
52544:     ** the result of a constraint, malloc() failure or IO error) then 
52545:     ** the cache may be internally inconsistent (not contain valid trees) so
52546:     ** we cannot simply return the error to the caller. Instead, abort 
52547:     ** all queries that may be using any of the cursors that failed to save.
52548:     */
52549:     sqlite3BtreeTripAllCursors(p, rc);
52550:   }
52551: #endif
52552:   btreeIntegrity(p);
52553: 
52554:   if( p->inTrans==TRANS_WRITE ){
52555:     int rc2;
52556: 
52557:     assert( TRANS_WRITE==pBt->inTransaction );
52558:     rc2 = sqlite3PagerRollback(pBt->pPager);
52559:     if( rc2!=SQLITE_OK ){
52560:       rc = rc2;
52561:     }
52562: 
52563:     /* The rollback may have destroyed the pPage1->aData value.  So
52564:     ** call btreeGetPage() on page 1 again to make
52565:     ** sure pPage1->aData is set correctly. */
52566:     if( btreeGetPage(pBt, 1, &pPage1, 0)==SQLITE_OK ){
52567:       int nPage = get4byte(28+(u8*)pPage1->aData);
52568:       testcase( nPage==0 );
52569:       if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage);
52570:       testcase( pBt->nPage!=nPage );
52571:       pBt->nPage = nPage;
52572:       releasePage(pPage1);
52573:     }
52574:     assert( countWriteCursors(pBt)==0 );
52575:     pBt->inTransaction = TRANS_READ;
52576:   }
52577: 
52578:   btreeEndTransaction(p);
52579:   sqlite3BtreeLeave(p);
52580:   return rc;
52581: }
52582: 
52583: /*
52584: ** Start a statement subtransaction. The subtransaction can can be rolled
52585: ** back independently of the main transaction. You must start a transaction 
52586: ** before starting a subtransaction. The subtransaction is ended automatically 
52587: ** if the main transaction commits or rolls back.
52588: **
52589: ** Statement subtransactions are used around individual SQL statements
52590: ** that are contained within a BEGIN...COMMIT block.  If a constraint
52591: ** error occurs within the statement, the effect of that one statement
52592: ** can be rolled back without having to rollback the entire transaction.
52593: **
52594: ** A statement sub-transaction is implemented as an anonymous savepoint. The
52595: ** value passed as the second parameter is the total number of savepoints,
52596: ** including the new anonymous savepoint, open on the B-Tree. i.e. if there
52597: ** are no active savepoints and no other statement-transactions open,
52598: ** iStatement is 1. This anonymous savepoint can be released or rolled back
52599: ** using the sqlite3BtreeSavepoint() function.
52600: */
52601: SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree *p, int iStatement){
52602:   int rc;
52603:   BtShared *pBt = p->pBt;
52604:   sqlite3BtreeEnter(p);
52605:   assert( p->inTrans==TRANS_WRITE );
52606:   assert( (pBt->btsFlags & BTS_READ_ONLY)==0 );
52607:   assert( iStatement>0 );
52608:   assert( iStatement>p->db->nSavepoint );
52609:   assert( pBt->inTransaction==TRANS_WRITE );
52610:   /* At the pager level, a statement transaction is a savepoint with
52611:   ** an index greater than all savepoints created explicitly using
52612:   ** SQL statements. It is illegal to open, release or rollback any
52613:   ** such savepoints while the statement transaction savepoint is active.
52614:   */
52615:   rc = sqlite3PagerOpenSavepoint(pBt->pPager, iStatement);
52616:   sqlite3BtreeLeave(p);
52617:   return rc;
52618: }
52619: 
52620: /*
52621: ** The second argument to this function, op, is always SAVEPOINT_ROLLBACK
52622: ** or SAVEPOINT_RELEASE. This function either releases or rolls back the
52623: ** savepoint identified by parameter iSavepoint, depending on the value 
52624: ** of op.
52625: **
52626: ** Normally, iSavepoint is greater than or equal to zero. However, if op is
52627: ** SAVEPOINT_ROLLBACK, then iSavepoint may also be -1. In this case the 
52628: ** contents of the entire transaction are rolled back. This is different
52629: ** from a normal transaction rollback, as no locks are released and the
52630: ** transaction remains open.
52631: */
52632: SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){
52633:   int rc = SQLITE_OK;
52634:   if( p && p->inTrans==TRANS_WRITE ){
52635:     BtShared *pBt = p->pBt;
52636:     assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK );
52637:     assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) );
52638:     sqlite3BtreeEnter(p);
52639:     rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint);
52640:     if( rc==SQLITE_OK ){
52641:       if( iSavepoint<0 && (pBt->btsFlags & BTS_INITIALLY_EMPTY)!=0 ){
52642:         pBt->nPage = 0;
52643:       }
52644:       rc = newDatabase(pBt);
52645:       pBt->nPage = get4byte(28 + pBt->pPage1->aData);
52646: 
52647:       /* The database size was written into the offset 28 of the header
52648:       ** when the transaction started, so we know that the value at offset
52649:       ** 28 is nonzero. */
52650:       assert( pBt->nPage>0 );
52651:     }
52652:     sqlite3BtreeLeave(p);
52653:   }
52654:   return rc;
52655: }
52656: 
52657: /*
52658: ** Create a new cursor for the BTree whose root is on the page
52659: ** iTable. If a read-only cursor is requested, it is assumed that
52660: ** the caller already has at least a read-only transaction open
52661: ** on the database already. If a write-cursor is requested, then
52662: ** the caller is assumed to have an open write transaction.
52663: **
52664: ** If wrFlag==0, then the cursor can only be used for reading.
52665: ** If wrFlag==1, then the cursor can be used for reading or for
52666: ** writing if other conditions for writing are also met.  These
52667: ** are the conditions that must be met in order for writing to
52668: ** be allowed:
52669: **
52670: ** 1:  The cursor must have been opened with wrFlag==1
52671: **
52672: ** 2:  Other database connections that share the same pager cache
52673: **     but which are not in the READ_UNCOMMITTED state may not have
52674: **     cursors open with wrFlag==0 on the same table.  Otherwise
52675: **     the changes made by this write cursor would be visible to
52676: **     the read cursors in the other database connection.
52677: **
52678: ** 3:  The database must be writable (not on read-only media)
52679: **
52680: ** 4:  There must be an active transaction.
52681: **
52682: ** No checking is done to make sure that page iTable really is the
52683: ** root page of a b-tree.  If it is not, then the cursor acquired
52684: ** will not work correctly.
52685: **
52686: ** It is assumed that the sqlite3BtreeCursorZero() has been called
52687: ** on pCur to initialize the memory space prior to invoking this routine.
52688: */
52689: static int btreeCursor(
52690:   Btree *p,                              /* The btree */
52691:   int iTable,                            /* Root page of table to open */
52692:   int wrFlag,                            /* 1 to write. 0 read-only */
52693:   struct KeyInfo *pKeyInfo,              /* First arg to comparison function */
52694:   BtCursor *pCur                         /* Space for new cursor */
52695: ){
52696:   BtShared *pBt = p->pBt;                /* Shared b-tree handle */
52697: 
52698:   assert( sqlite3BtreeHoldsMutex(p) );
52699:   assert( wrFlag==0 || wrFlag==1 );
52700: 
52701:   /* The following assert statements verify that if this is a sharable 
52702:   ** b-tree database, the connection is holding the required table locks, 
52703:   ** and that no other connection has any open cursor that conflicts with 
52704:   ** this lock.  */
52705:   assert( hasSharedCacheTableLock(p, iTable, pKeyInfo!=0, wrFlag+1) );
52706:   assert( wrFlag==0 || !hasReadConflicts(p, iTable) );
52707: 
52708:   /* Assert that the caller has opened the required transaction. */
52709:   assert( p->inTrans>TRANS_NONE );
52710:   assert( wrFlag==0 || p->inTrans==TRANS_WRITE );
52711:   assert( pBt->pPage1 && pBt->pPage1->aData );
52712: 
52713:   if( NEVER(wrFlag && (pBt->btsFlags & BTS_READ_ONLY)!=0) ){
52714:     return SQLITE_READONLY;
52715:   }
52716:   if( iTable==1 && btreePagecount(pBt)==0 ){
52717:     assert( wrFlag==0 );
52718:     iTable = 0;
52719:   }
52720: 
52721:   /* Now that no other errors can occur, finish filling in the BtCursor
52722:   ** variables and link the cursor into the BtShared list.  */
52723:   pCur->pgnoRoot = (Pgno)iTable;
52724:   pCur->iPage = -1;
52725:   pCur->pKeyInfo = pKeyInfo;
52726:   pCur->pBtree = p;
52727:   pCur->pBt = pBt;
52728:   pCur->wrFlag = (u8)wrFlag;
52729:   pCur->pNext = pBt->pCursor;
52730:   if( pCur->pNext ){
52731:     pCur->pNext->pPrev = pCur;
52732:   }
52733:   pBt->pCursor = pCur;
52734:   pCur->eState = CURSOR_INVALID;
52735:   pCur->cachedRowid = 0;
52736:   return SQLITE_OK;
52737: }
52738: SQLITE_PRIVATE int sqlite3BtreeCursor(
52739:   Btree *p,                                   /* The btree */
52740:   int iTable,                                 /* Root page of table to open */
52741:   int wrFlag,                                 /* 1 to write. 0 read-only */
52742:   struct KeyInfo *pKeyInfo,                   /* First arg to xCompare() */
52743:   BtCursor *pCur                              /* Write new cursor here */
52744: ){
52745:   int rc;
52746:   sqlite3BtreeEnter(p);
52747:   rc = btreeCursor(p, iTable, wrFlag, pKeyInfo, pCur);
52748:   sqlite3BtreeLeave(p);
52749:   return rc;
52750: }
52751: 
52752: /*
52753: ** Return the size of a BtCursor object in bytes.
52754: **
52755: ** This interfaces is needed so that users of cursors can preallocate
52756: ** sufficient storage to hold a cursor.  The BtCursor object is opaque
52757: ** to users so they cannot do the sizeof() themselves - they must call
52758: ** this routine.
52759: */
52760: SQLITE_PRIVATE int sqlite3BtreeCursorSize(void){
52761:   return ROUND8(sizeof(BtCursor));
52762: }
52763: 
52764: /*
52765: ** Initialize memory that will be converted into a BtCursor object.
52766: **
52767: ** The simple approach here would be to memset() the entire object
52768: ** to zero.  But it turns out that the apPage[] and aiIdx[] arrays
52769: ** do not need to be zeroed and they are large, so we can save a lot
52770: ** of run-time by skipping the initialization of those elements.
52771: */
52772: SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor *p){
52773:   memset(p, 0, offsetof(BtCursor, iPage));
52774: }
52775: 
52776: /*
52777: ** Set the cached rowid value of every cursor in the same database file
52778: ** as pCur and having the same root page number as pCur.  The value is
52779: ** set to iRowid.
52780: **
52781: ** Only positive rowid values are considered valid for this cache.
52782: ** The cache is initialized to zero, indicating an invalid cache.
52783: ** A btree will work fine with zero or negative rowids.  We just cannot
52784: ** cache zero or negative rowids, which means tables that use zero or
52785: ** negative rowids might run a little slower.  But in practice, zero
52786: ** or negative rowids are very uncommon so this should not be a problem.
52787: */
52788: SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor *pCur, sqlite3_int64 iRowid){
52789:   BtCursor *p;
52790:   for(p=pCur->pBt->pCursor; p; p=p->pNext){
52791:     if( p->pgnoRoot==pCur->pgnoRoot ) p->cachedRowid = iRowid;
52792:   }
52793:   assert( pCur->cachedRowid==iRowid );
52794: }
52795: 
52796: /*
52797: ** Return the cached rowid for the given cursor.  A negative or zero
52798: ** return value indicates that the rowid cache is invalid and should be
52799: ** ignored.  If the rowid cache has never before been set, then a
52800: ** zero is returned.
52801: */
52802: SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor *pCur){
52803:   return pCur->cachedRowid;
52804: }
52805: 
52806: /*
52807: ** Close a cursor.  The read lock on the database file is released
52808: ** when the last cursor is closed.
52809: */
52810: SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
52811:   Btree *pBtree = pCur->pBtree;
52812:   if( pBtree ){
52813:     int i;
52814:     BtShared *pBt = pCur->pBt;
52815:     sqlite3BtreeEnter(pBtree);
52816:     sqlite3BtreeClearCursor(pCur);
52817:     if( pCur->pPrev ){
52818:       pCur->pPrev->pNext = pCur->pNext;
52819:     }else{
52820:       pBt->pCursor = pCur->pNext;
52821:     }
52822:     if( pCur->pNext ){
52823:       pCur->pNext->pPrev = pCur->pPrev;
52824:     }
52825:     for(i=0; i<=pCur->iPage; i++){
52826:       releasePage(pCur->apPage[i]);
52827:     }
52828:     unlockBtreeIfUnused(pBt);
52829:     invalidateOverflowCache(pCur);
52830:     /* sqlite3_free(pCur); */
52831:     sqlite3BtreeLeave(pBtree);
52832:   }
52833:   return SQLITE_OK;
52834: }
52835: 
52836: /*
52837: ** Make sure the BtCursor* given in the argument has a valid
52838: ** BtCursor.info structure.  If it is not already valid, call
52839: ** btreeParseCell() to fill it in.
52840: **
52841: ** BtCursor.info is a cache of the information in the current cell.
52842: ** Using this cache reduces the number of calls to btreeParseCell().
52843: **
52844: ** 2007-06-25:  There is a bug in some versions of MSVC that cause the
52845: ** compiler to crash when getCellInfo() is implemented as a macro.
52846: ** But there is a measureable speed advantage to using the macro on gcc
52847: ** (when less compiler optimizations like -Os or -O0 are used and the
52848: ** compiler is not doing agressive inlining.)  So we use a real function
52849: ** for MSVC and a macro for everything else.  Ticket #2457.
52850: */
52851: #ifndef NDEBUG
52852:   static void assertCellInfo(BtCursor *pCur){
52853:     CellInfo info;
52854:     int iPage = pCur->iPage;
52855:     memset(&info, 0, sizeof(info));
52856:     btreeParseCell(pCur->apPage[iPage], pCur->aiIdx[iPage], &info);
52857:     assert( memcmp(&info, &pCur->info, sizeof(info))==0 );
52858:   }
52859: #else
52860:   #define assertCellInfo(x)
52861: #endif
52862: #ifdef _MSC_VER
52863:   /* Use a real function in MSVC to work around bugs in that compiler. */
52864:   static void getCellInfo(BtCursor *pCur){
52865:     if( pCur->info.nSize==0 ){
52866:       int iPage = pCur->iPage;
52867:       btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info);
52868:       pCur->validNKey = 1;
52869:     }else{
52870:       assertCellInfo(pCur);
52871:     }
52872:   }
52873: #else /* if not _MSC_VER */
52874:   /* Use a macro in all other compilers so that the function is inlined */
52875: #define getCellInfo(pCur)                                                      \
52876:   if( pCur->info.nSize==0 ){                                                   \
52877:     int iPage = pCur->iPage;                                                   \
52878:     btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info); \
52879:     pCur->validNKey = 1;                                                       \
52880:   }else{                                                                       \
52881:     assertCellInfo(pCur);                                                      \
52882:   }
52883: #endif /* _MSC_VER */
52884: 
52885: #ifndef NDEBUG  /* The next routine used only within assert() statements */
52886: /*
52887: ** Return true if the given BtCursor is valid.  A valid cursor is one
52888: ** that is currently pointing to a row in a (non-empty) table.
52889: ** This is a verification routine is used only within assert() statements.
52890: */
52891: SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor *pCur){
52892:   return pCur && pCur->eState==CURSOR_VALID;
52893: }
52894: #endif /* NDEBUG */
52895: 
52896: /*
52897: ** Set *pSize to the size of the buffer needed to hold the value of
52898: ** the key for the current entry.  If the cursor is not pointing
52899: ** to a valid entry, *pSize is set to 0. 
52900: **
52901: ** For a table with the INTKEY flag set, this routine returns the key
52902: ** itself, not the number of bytes in the key.
52903: **
52904: ** The caller must position the cursor prior to invoking this routine.
52905: ** 
52906: ** This routine cannot fail.  It always returns SQLITE_OK.  
52907: */
52908: SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor *pCur, i64 *pSize){
52909:   assert( cursorHoldsMutex(pCur) );
52910:   assert( pCur->eState==CURSOR_INVALID || pCur->eState==CURSOR_VALID );
52911:   if( pCur->eState!=CURSOR_VALID ){
52912:     *pSize = 0;
52913:   }else{
52914:     getCellInfo(pCur);
52915:     *pSize = pCur->info.nKey;
52916:   }
52917:   return SQLITE_OK;
52918: }
52919: 
52920: /*
52921: ** Set *pSize to the number of bytes of data in the entry the
52922: ** cursor currently points to.
52923: **
52924: ** The caller must guarantee that the cursor is pointing to a non-NULL
52925: ** valid entry.  In other words, the calling procedure must guarantee
52926: ** that the cursor has Cursor.eState==CURSOR_VALID.
52927: **
52928: ** Failure is not possible.  This function always returns SQLITE_OK.
52929: ** It might just as well be a procedure (returning void) but we continue
52930: ** to return an integer result code for historical reasons.
52931: */
52932: SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor *pCur, u32 *pSize){
52933:   assert( cursorHoldsMutex(pCur) );
52934:   assert( pCur->eState==CURSOR_VALID );
52935:   getCellInfo(pCur);
52936:   *pSize = pCur->info.nData;
52937:   return SQLITE_OK;
52938: }
52939: 
52940: /*
52941: ** Given the page number of an overflow page in the database (parameter
52942: ** ovfl), this function finds the page number of the next page in the 
52943: ** linked list of overflow pages. If possible, it uses the auto-vacuum
52944: ** pointer-map data instead of reading the content of page ovfl to do so. 
52945: **
52946: ** If an error occurs an SQLite error code is returned. Otherwise:
52947: **
52948: ** The page number of the next overflow page in the linked list is 
52949: ** written to *pPgnoNext. If page ovfl is the last page in its linked 
52950: ** list, *pPgnoNext is set to zero. 
52951: **
52952: ** If ppPage is not NULL, and a reference to the MemPage object corresponding
52953: ** to page number pOvfl was obtained, then *ppPage is set to point to that
52954: ** reference. It is the responsibility of the caller to call releasePage()
52955: ** on *ppPage to free the reference. In no reference was obtained (because
52956: ** the pointer-map was used to obtain the value for *pPgnoNext), then
52957: ** *ppPage is set to zero.
52958: */
52959: static int getOverflowPage(
52960:   BtShared *pBt,               /* The database file */
52961:   Pgno ovfl,                   /* Current overflow page number */
52962:   MemPage **ppPage,            /* OUT: MemPage handle (may be NULL) */
52963:   Pgno *pPgnoNext              /* OUT: Next overflow page number */
52964: ){
52965:   Pgno next = 0;
52966:   MemPage *pPage = 0;
52967:   int rc = SQLITE_OK;
52968: 
52969:   assert( sqlite3_mutex_held(pBt->mutex) );
52970:   assert(pPgnoNext);
52971: 
52972: #ifndef SQLITE_OMIT_AUTOVACUUM
52973:   /* Try to find the next page in the overflow list using the
52974:   ** autovacuum pointer-map pages. Guess that the next page in 
52975:   ** the overflow list is page number (ovfl+1). If that guess turns 
52976:   ** out to be wrong, fall back to loading the data of page 
52977:   ** number ovfl to determine the next page number.
52978:   */
52979:   if( pBt->autoVacuum ){
52980:     Pgno pgno;
52981:     Pgno iGuess = ovfl+1;
52982:     u8 eType;
52983: 
52984:     while( PTRMAP_ISPAGE(pBt, iGuess) || iGuess==PENDING_BYTE_PAGE(pBt) ){
52985:       iGuess++;
52986:     }
52987: 
52988:     if( iGuess<=btreePagecount(pBt) ){
52989:       rc = ptrmapGet(pBt, iGuess, &eType, &pgno);
52990:       if( rc==SQLITE_OK && eType==PTRMAP_OVERFLOW2 && pgno==ovfl ){
52991:         next = iGuess;
52992:         rc = SQLITE_DONE;
52993:       }
52994:     }
52995:   }
52996: #endif
52997: 
52998:   assert( next==0 || rc==SQLITE_DONE );
52999:   if( rc==SQLITE_OK ){
53000:     rc = btreeGetPage(pBt, ovfl, &pPage, 0);
53001:     assert( rc==SQLITE_OK || pPage==0 );
53002:     if( rc==SQLITE_OK ){
53003:       next = get4byte(pPage->aData);
53004:     }
53005:   }
53006: 
53007:   *pPgnoNext = next;
53008:   if( ppPage ){
53009:     *ppPage = pPage;
53010:   }else{
53011:     releasePage(pPage);
53012:   }
53013:   return (rc==SQLITE_DONE ? SQLITE_OK : rc);
53014: }
53015: 
53016: /*
53017: ** Copy data from a buffer to a page, or from a page to a buffer.
53018: **
53019: ** pPayload is a pointer to data stored on database page pDbPage.
53020: ** If argument eOp is false, then nByte bytes of data are copied
53021: ** from pPayload to the buffer pointed at by pBuf. If eOp is true,
53022: ** then sqlite3PagerWrite() is called on pDbPage and nByte bytes
53023: ** of data are copied from the buffer pBuf to pPayload.
53024: **
53025: ** SQLITE_OK is returned on success, otherwise an error code.
53026: */
53027: static int copyPayload(
53028:   void *pPayload,           /* Pointer to page data */
53029:   void *pBuf,               /* Pointer to buffer */
53030:   int nByte,                /* Number of bytes to copy */
53031:   int eOp,                  /* 0 -> copy from page, 1 -> copy to page */
53032:   DbPage *pDbPage           /* Page containing pPayload */
53033: ){
53034:   if( eOp ){
53035:     /* Copy data from buffer to page (a write operation) */
53036:     int rc = sqlite3PagerWrite(pDbPage);
53037:     if( rc!=SQLITE_OK ){
53038:       return rc;
53039:     }
53040:     memcpy(pPayload, pBuf, nByte);
53041:   }else{
53042:     /* Copy data from page to buffer (a read operation) */
53043:     memcpy(pBuf, pPayload, nByte);
53044:   }
53045:   return SQLITE_OK;
53046: }
53047: 
53048: /*
53049: ** This function is used to read or overwrite payload information
53050: ** for the entry that the pCur cursor is pointing to. If the eOp
53051: ** parameter is 0, this is a read operation (data copied into
53052: ** buffer pBuf). If it is non-zero, a write (data copied from
53053: ** buffer pBuf).
53054: **
53055: ** A total of "amt" bytes are read or written beginning at "offset".
53056: ** Data is read to or from the buffer pBuf.
53057: **
53058: ** The content being read or written might appear on the main page
53059: ** or be scattered out on multiple overflow pages.
53060: **
53061: ** If the BtCursor.isIncrblobHandle flag is set, and the current
53062: ** cursor entry uses one or more overflow pages, this function
53063: ** allocates space for and lazily popluates the overflow page-list 
53064: ** cache array (BtCursor.aOverflow). Subsequent calls use this
53065: ** cache to make seeking to the supplied offset more efficient.
53066: **
53067: ** Once an overflow page-list cache has been allocated, it may be
53068: ** invalidated if some other cursor writes to the same table, or if
53069: ** the cursor is moved to a different row. Additionally, in auto-vacuum
53070: ** mode, the following events may invalidate an overflow page-list cache.
53071: **
53072: **   * An incremental vacuum,
53073: **   * A commit in auto_vacuum="full" mode,
53074: **   * Creating a table (may require moving an overflow page).
53075: */
53076: static int accessPayload(
53077:   BtCursor *pCur,      /* Cursor pointing to entry to read from */
53078:   u32 offset,          /* Begin reading this far into payload */
53079:   u32 amt,             /* Read this many bytes */
53080:   unsigned char *pBuf, /* Write the bytes into this buffer */ 
53081:   int eOp              /* zero to read. non-zero to write. */
53082: ){
53083:   unsigned char *aPayload;
53084:   int rc = SQLITE_OK;
53085:   u32 nKey;
53086:   int iIdx = 0;
53087:   MemPage *pPage = pCur->apPage[pCur->iPage]; /* Btree page of current entry */
53088:   BtShared *pBt = pCur->pBt;                  /* Btree this cursor belongs to */
53089: 
53090:   assert( pPage );
53091:   assert( pCur->eState==CURSOR_VALID );
53092:   assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
53093:   assert( cursorHoldsMutex(pCur) );
53094: 
53095:   getCellInfo(pCur);
53096:   aPayload = pCur->info.pCell + pCur->info.nHeader;
53097:   nKey = (pPage->intKey ? 0 : (int)pCur->info.nKey);
53098: 
53099:   if( NEVER(offset+amt > nKey+pCur->info.nData) 
53100:    || &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize]
53101:   ){
53102:     /* Trying to read or write past the end of the data is an error */
53103:     return SQLITE_CORRUPT_BKPT;
53104:   }
53105: 
53106:   /* Check if data must be read/written to/from the btree page itself. */
53107:   if( offset<pCur->info.nLocal ){
53108:     int a = amt;
53109:     if( a+offset>pCur->info.nLocal ){
53110:       a = pCur->info.nLocal - offset;
53111:     }
53112:     rc = copyPayload(&aPayload[offset], pBuf, a, eOp, pPage->pDbPage);
53113:     offset = 0;
53114:     pBuf += a;
53115:     amt -= a;
53116:   }else{
53117:     offset -= pCur->info.nLocal;
53118:   }
53119: 
53120:   if( rc==SQLITE_OK && amt>0 ){
53121:     const u32 ovflSize = pBt->usableSize - 4;  /* Bytes content per ovfl page */
53122:     Pgno nextPage;
53123: 
53124:     nextPage = get4byte(&aPayload[pCur->info.nLocal]);
53125: 
53126: #ifndef SQLITE_OMIT_INCRBLOB
53127:     /* If the isIncrblobHandle flag is set and the BtCursor.aOverflow[]
53128:     ** has not been allocated, allocate it now. The array is sized at
53129:     ** one entry for each overflow page in the overflow chain. The
53130:     ** page number of the first overflow page is stored in aOverflow[0],
53131:     ** etc. A value of 0 in the aOverflow[] array means "not yet known"
53132:     ** (the cache is lazily populated).
53133:     */
53134:     if( pCur->isIncrblobHandle && !pCur->aOverflow ){
53135:       int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize;
53136:       pCur->aOverflow = (Pgno *)sqlite3MallocZero(sizeof(Pgno)*nOvfl);
53137:       /* nOvfl is always positive.  If it were zero, fetchPayload would have
53138:       ** been used instead of this routine. */
53139:       if( ALWAYS(nOvfl) && !pCur->aOverflow ){
53140:         rc = SQLITE_NOMEM;
53141:       }
53142:     }
53143: 
53144:     /* If the overflow page-list cache has been allocated and the
53145:     ** entry for the first required overflow page is valid, skip
53146:     ** directly to it.
53147:     */
53148:     if( pCur->aOverflow && pCur->aOverflow[offset/ovflSize] ){
53149:       iIdx = (offset/ovflSize);
53150:       nextPage = pCur->aOverflow[iIdx];
53151:       offset = (offset%ovflSize);
53152:     }
53153: #endif
53154: 
53155:     for( ; rc==SQLITE_OK && amt>0 && nextPage; iIdx++){
53156: 
53157: #ifndef SQLITE_OMIT_INCRBLOB
53158:       /* If required, populate the overflow page-list cache. */
53159:       if( pCur->aOverflow ){
53160:         assert(!pCur->aOverflow[iIdx] || pCur->aOverflow[iIdx]==nextPage);
53161:         pCur->aOverflow[iIdx] = nextPage;
53162:       }
53163: #endif
53164: 
53165:       if( offset>=ovflSize ){
53166:         /* The only reason to read this page is to obtain the page
53167:         ** number for the next page in the overflow chain. The page
53168:         ** data is not required. So first try to lookup the overflow
53169:         ** page-list cache, if any, then fall back to the getOverflowPage()
53170:         ** function.
53171:         */
53172: #ifndef SQLITE_OMIT_INCRBLOB
53173:         if( pCur->aOverflow && pCur->aOverflow[iIdx+1] ){
53174:           nextPage = pCur->aOverflow[iIdx+1];
53175:         } else 
53176: #endif
53177:           rc = getOverflowPage(pBt, nextPage, 0, &nextPage);
53178:         offset -= ovflSize;
53179:       }else{
53180:         /* Need to read this page properly. It contains some of the
53181:         ** range of data that is being read (eOp==0) or written (eOp!=0).
53182:         */
53183: #ifdef SQLITE_DIRECT_OVERFLOW_READ
53184:         sqlite3_file *fd;
53185: #endif
53186:         int a = amt;
53187:         if( a + offset > ovflSize ){
53188:           a = ovflSize - offset;
53189:         }
53190: 
53191: #ifdef SQLITE_DIRECT_OVERFLOW_READ
53192:         /* If all the following are true:
53193:         **
53194:         **   1) this is a read operation, and 
53195:         **   2) data is required from the start of this overflow page, and
53196:         **   3) the database is file-backed, and
53197:         **   4) there is no open write-transaction, and
53198:         **   5) the database is not a WAL database,
53199:         **
53200:         ** then data can be read directly from the database file into the
53201:         ** output buffer, bypassing the page-cache altogether. This speeds
53202:         ** up loading large records that span many overflow pages.
53203:         */
53204:         if( eOp==0                                             /* (1) */
53205:          && offset==0                                          /* (2) */
53206:          && pBt->inTransaction==TRANS_READ                     /* (4) */
53207:          && (fd = sqlite3PagerFile(pBt->pPager))->pMethods     /* (3) */
53208:          && pBt->pPage1->aData[19]==0x01                       /* (5) */
53209:         ){
53210:           u8 aSave[4];
53211:           u8 *aWrite = &pBuf[-4];
53212:           memcpy(aSave, aWrite, 4);
53213:           rc = sqlite3OsRead(fd, aWrite, a+4, (i64)pBt->pageSize*(nextPage-1));
53214:           nextPage = get4byte(aWrite);
53215:           memcpy(aWrite, aSave, 4);
53216:         }else
53217: #endif
53218: 
53219:         {
53220:           DbPage *pDbPage;
53221:           rc = sqlite3PagerGet(pBt->pPager, nextPage, &pDbPage);
53222:           if( rc==SQLITE_OK ){
53223:             aPayload = sqlite3PagerGetData(pDbPage);
53224:             nextPage = get4byte(aPayload);
53225:             rc = copyPayload(&aPayload[offset+4], pBuf, a, eOp, pDbPage);
53226:             sqlite3PagerUnref(pDbPage);
53227:             offset = 0;
53228:           }
53229:         }
53230:         amt -= a;
53231:         pBuf += a;
53232:       }
53233:     }
53234:   }
53235: 
53236:   if( rc==SQLITE_OK && amt>0 ){
53237:     return SQLITE_CORRUPT_BKPT;
53238:   }
53239:   return rc;
53240: }
53241: 
53242: /*
53243: ** Read part of the key associated with cursor pCur.  Exactly
53244: ** "amt" bytes will be transfered into pBuf[].  The transfer
53245: ** begins at "offset".
53246: **
53247: ** The caller must ensure that pCur is pointing to a valid row
53248: ** in the table.
53249: **
53250: ** Return SQLITE_OK on success or an error code if anything goes
53251: ** wrong.  An error is returned if "offset+amt" is larger than
53252: ** the available payload.
53253: */
53254: SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
53255:   assert( cursorHoldsMutex(pCur) );
53256:   assert( pCur->eState==CURSOR_VALID );
53257:   assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
53258:   assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
53259:   return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0);
53260: }
53261: 
53262: /*
53263: ** Read part of the data associated with cursor pCur.  Exactly
53264: ** "amt" bytes will be transfered into pBuf[].  The transfer
53265: ** begins at "offset".
53266: **
53267: ** Return SQLITE_OK on success or an error code if anything goes
53268: ** wrong.  An error is returned if "offset+amt" is larger than
53269: ** the available payload.
53270: */
53271: SQLITE_PRIVATE int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
53272:   int rc;
53273: 
53274: #ifndef SQLITE_OMIT_INCRBLOB
53275:   if ( pCur->eState==CURSOR_INVALID ){
53276:     return SQLITE_ABORT;
53277:   }
53278: #endif
53279: 
53280:   assert( cursorHoldsMutex(pCur) );
53281:   rc = restoreCursorPosition(pCur);
53282:   if( rc==SQLITE_OK ){
53283:     assert( pCur->eState==CURSOR_VALID );
53284:     assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
53285:     assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
53286:     rc = accessPayload(pCur, offset, amt, pBuf, 0);
53287:   }
53288:   return rc;
53289: }
53290: 
53291: /*
53292: ** Return a pointer to payload information from the entry that the 
53293: ** pCur cursor is pointing to.  The pointer is to the beginning of
53294: ** the key if skipKey==0 and it points to the beginning of data if
53295: ** skipKey==1.  The number of bytes of available key/data is written
53296: ** into *pAmt.  If *pAmt==0, then the value returned will not be
53297: ** a valid pointer.
53298: **
53299: ** This routine is an optimization.  It is common for the entire key
53300: ** and data to fit on the local page and for there to be no overflow
53301: ** pages.  When that is so, this routine can be used to access the
53302: ** key and data without making a copy.  If the key and/or data spills
53303: ** onto overflow pages, then accessPayload() must be used to reassemble
53304: ** the key/data and copy it into a preallocated buffer.
53305: **
53306: ** The pointer returned by this routine looks directly into the cached
53307: ** page of the database.  The data might change or move the next time
53308: ** any btree routine is called.
53309: */
53310: static const unsigned char *fetchPayload(
53311:   BtCursor *pCur,      /* Cursor pointing to entry to read from */
53312:   int *pAmt,           /* Write the number of available bytes here */
53313:   int skipKey          /* read beginning at data if this is true */
53314: ){
53315:   unsigned char *aPayload;
53316:   MemPage *pPage;
53317:   u32 nKey;
53318:   u32 nLocal;
53319: 
53320:   assert( pCur!=0 && pCur->iPage>=0 && pCur->apPage[pCur->iPage]);
53321:   assert( pCur->eState==CURSOR_VALID );
53322:   assert( cursorHoldsMutex(pCur) );
53323:   pPage = pCur->apPage[pCur->iPage];
53324:   assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
53325:   if( NEVER(pCur->info.nSize==0) ){
53326:     btreeParseCell(pCur->apPage[pCur->iPage], pCur->aiIdx[pCur->iPage],
53327:                    &pCur->info);
53328:   }
53329:   aPayload = pCur->info.pCell;
53330:   aPayload += pCur->info.nHeader;
53331:   if( pPage->intKey ){
53332:     nKey = 0;
53333:   }else{
53334:     nKey = (int)pCur->info.nKey;
53335:   }
53336:   if( skipKey ){
53337:     aPayload += nKey;
53338:     nLocal = pCur->info.nLocal - nKey;
53339:   }else{
53340:     nLocal = pCur->info.nLocal;
53341:     assert( nLocal<=nKey );
53342:   }
53343:   *pAmt = nLocal;
53344:   return aPayload;
53345: }
53346: 
53347: 
53348: /*
53349: ** For the entry that cursor pCur is point to, return as
53350: ** many bytes of the key or data as are available on the local
53351: ** b-tree page.  Write the number of available bytes into *pAmt.
53352: **
53353: ** The pointer returned is ephemeral.  The key/data may move
53354: ** or be destroyed on the next call to any Btree routine,
53355: ** including calls from other threads against the same cache.
53356: ** Hence, a mutex on the BtShared should be held prior to calling
53357: ** this routine.
53358: **
53359: ** These routines is used to get quick access to key and data
53360: ** in the common case where no overflow pages are used.
53361: */
53362: SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor *pCur, int *pAmt){
53363:   const void *p = 0;
53364:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
53365:   assert( cursorHoldsMutex(pCur) );
53366:   if( ALWAYS(pCur->eState==CURSOR_VALID) ){
53367:     p = (const void*)fetchPayload(pCur, pAmt, 0);
53368:   }
53369:   return p;
53370: }
53371: SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor *pCur, int *pAmt){
53372:   const void *p = 0;
53373:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
53374:   assert( cursorHoldsMutex(pCur) );
53375:   if( ALWAYS(pCur->eState==CURSOR_VALID) ){
53376:     p = (const void*)fetchPayload(pCur, pAmt, 1);
53377:   }
53378:   return p;
53379: }
53380: 
53381: 
53382: /*
53383: ** Move the cursor down to a new child page.  The newPgno argument is the
53384: ** page number of the child page to move to.
53385: **
53386: ** This function returns SQLITE_CORRUPT if the page-header flags field of
53387: ** the new child page does not match the flags field of the parent (i.e.
53388: ** if an intkey page appears to be the parent of a non-intkey page, or
53389: ** vice-versa).
53390: */
53391: static int moveToChild(BtCursor *pCur, u32 newPgno){
53392:   int rc;
53393:   int i = pCur->iPage;
53394:   MemPage *pNewPage;
53395:   BtShared *pBt = pCur->pBt;
53396: 
53397:   assert( cursorHoldsMutex(pCur) );
53398:   assert( pCur->eState==CURSOR_VALID );
53399:   assert( pCur->iPage<BTCURSOR_MAX_DEPTH );
53400:   if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){
53401:     return SQLITE_CORRUPT_BKPT;
53402:   }
53403:   rc = getAndInitPage(pBt, newPgno, &pNewPage);
53404:   if( rc ) return rc;
53405:   pCur->apPage[i+1] = pNewPage;
53406:   pCur->aiIdx[i+1] = 0;
53407:   pCur->iPage++;
53408: 
53409:   pCur->info.nSize = 0;
53410:   pCur->validNKey = 0;
53411:   if( pNewPage->nCell<1 || pNewPage->intKey!=pCur->apPage[i]->intKey ){
53412:     return SQLITE_CORRUPT_BKPT;
53413:   }
53414:   return SQLITE_OK;
53415: }
53416: 
53417: #if 0
53418: /*
53419: ** Page pParent is an internal (non-leaf) tree page. This function 
53420: ** asserts that page number iChild is the left-child if the iIdx'th
53421: ** cell in page pParent. Or, if iIdx is equal to the total number of
53422: ** cells in pParent, that page number iChild is the right-child of
53423: ** the page.
53424: */
53425: static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){
53426:   assert( iIdx<=pParent->nCell );
53427:   if( iIdx==pParent->nCell ){
53428:     assert( get4byte(&pParent->aData[pParent->hdrOffset+8])==iChild );
53429:   }else{
53430:     assert( get4byte(findCell(pParent, iIdx))==iChild );
53431:   }
53432: }
53433: #else
53434: #  define assertParentIndex(x,y,z) 
53435: #endif
53436: 
53437: /*
53438: ** Move the cursor up to the parent page.
53439: **
53440: ** pCur->idx is set to the cell index that contains the pointer
53441: ** to the page we are coming from.  If we are coming from the
53442: ** right-most child page then pCur->idx is set to one more than
53443: ** the largest cell index.
53444: */
53445: static void moveToParent(BtCursor *pCur){
53446:   assert( cursorHoldsMutex(pCur) );
53447:   assert( pCur->eState==CURSOR_VALID );
53448:   assert( pCur->iPage>0 );
53449:   assert( pCur->apPage[pCur->iPage] );
53450: 
53451:   /* UPDATE: It is actually possible for the condition tested by the assert
53452:   ** below to be untrue if the database file is corrupt. This can occur if
53453:   ** one cursor has modified page pParent while a reference to it is held 
53454:   ** by a second cursor. Which can only happen if a single page is linked
53455:   ** into more than one b-tree structure in a corrupt database.  */
53456: #if 0
53457:   assertParentIndex(
53458:     pCur->apPage[pCur->iPage-1], 
53459:     pCur->aiIdx[pCur->iPage-1], 
53460:     pCur->apPage[pCur->iPage]->pgno
53461:   );
53462: #endif
53463:   testcase( pCur->aiIdx[pCur->iPage-1] > pCur->apPage[pCur->iPage-1]->nCell );
53464: 
53465:   releasePage(pCur->apPage[pCur->iPage]);
53466:   pCur->iPage--;
53467:   pCur->info.nSize = 0;
53468:   pCur->validNKey = 0;
53469: }
53470: 
53471: /*
53472: ** Move the cursor to point to the root page of its b-tree structure.
53473: **
53474: ** If the table has a virtual root page, then the cursor is moved to point
53475: ** to the virtual root page instead of the actual root page. A table has a
53476: ** virtual root page when the actual root page contains no cells and a 
53477: ** single child page. This can only happen with the table rooted at page 1.
53478: **
53479: ** If the b-tree structure is empty, the cursor state is set to 
53480: ** CURSOR_INVALID. Otherwise, the cursor is set to point to the first
53481: ** cell located on the root (or virtual root) page and the cursor state
53482: ** is set to CURSOR_VALID.
53483: **
53484: ** If this function returns successfully, it may be assumed that the
53485: ** page-header flags indicate that the [virtual] root-page is the expected 
53486: ** kind of b-tree page (i.e. if when opening the cursor the caller did not
53487: ** specify a KeyInfo structure the flags byte is set to 0x05 or 0x0D,
53488: ** indicating a table b-tree, or if the caller did specify a KeyInfo 
53489: ** structure the flags byte is set to 0x02 or 0x0A, indicating an index
53490: ** b-tree).
53491: */
53492: static int moveToRoot(BtCursor *pCur){
53493:   MemPage *pRoot;
53494:   int rc = SQLITE_OK;
53495:   Btree *p = pCur->pBtree;
53496:   BtShared *pBt = p->pBt;
53497: 
53498:   assert( cursorHoldsMutex(pCur) );
53499:   assert( CURSOR_INVALID < CURSOR_REQUIRESEEK );
53500:   assert( CURSOR_VALID   < CURSOR_REQUIRESEEK );
53501:   assert( CURSOR_FAULT   > CURSOR_REQUIRESEEK );
53502:   if( pCur->eState>=CURSOR_REQUIRESEEK ){
53503:     if( pCur->eState==CURSOR_FAULT ){
53504:       assert( pCur->skipNext!=SQLITE_OK );
53505:       return pCur->skipNext;
53506:     }
53507:     sqlite3BtreeClearCursor(pCur);
53508:   }
53509: 
53510:   if( pCur->iPage>=0 ){
53511:     int i;
53512:     for(i=1; i<=pCur->iPage; i++){
53513:       releasePage(pCur->apPage[i]);
53514:     }
53515:     pCur->iPage = 0;
53516:   }else if( pCur->pgnoRoot==0 ){
53517:     pCur->eState = CURSOR_INVALID;
53518:     return SQLITE_OK;
53519:   }else{
53520:     rc = getAndInitPage(pBt, pCur->pgnoRoot, &pCur->apPage[0]);
53521:     if( rc!=SQLITE_OK ){
53522:       pCur->eState = CURSOR_INVALID;
53523:       return rc;
53524:     }
53525:     pCur->iPage = 0;
53526: 
53527:     /* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor
53528:     ** expected to open it on an index b-tree. Otherwise, if pKeyInfo is
53529:     ** NULL, the caller expects a table b-tree. If this is not the case,
53530:     ** return an SQLITE_CORRUPT error.  */
53531:     assert( pCur->apPage[0]->intKey==1 || pCur->apPage[0]->intKey==0 );
53532:     if( (pCur->pKeyInfo==0)!=pCur->apPage[0]->intKey ){
53533:       return SQLITE_CORRUPT_BKPT;
53534:     }
53535:   }
53536: 
53537:   /* Assert that the root page is of the correct type. This must be the
53538:   ** case as the call to this function that loaded the root-page (either
53539:   ** this call or a previous invocation) would have detected corruption 
53540:   ** if the assumption were not true, and it is not possible for the flags 
53541:   ** byte to have been modified while this cursor is holding a reference
53542:   ** to the page.  */
53543:   pRoot = pCur->apPage[0];
53544:   assert( pRoot->pgno==pCur->pgnoRoot );
53545:   assert( pRoot->isInit && (pCur->pKeyInfo==0)==pRoot->intKey );
53546: 
53547:   pCur->aiIdx[0] = 0;
53548:   pCur->info.nSize = 0;
53549:   pCur->atLast = 0;
53550:   pCur->validNKey = 0;
53551: 
53552:   if( pRoot->nCell==0 && !pRoot->leaf ){
53553:     Pgno subpage;
53554:     if( pRoot->pgno!=1 ) return SQLITE_CORRUPT_BKPT;
53555:     subpage = get4byte(&pRoot->aData[pRoot->hdrOffset+8]);
53556:     pCur->eState = CURSOR_VALID;
53557:     rc = moveToChild(pCur, subpage);
53558:   }else{
53559:     pCur->eState = ((pRoot->nCell>0)?CURSOR_VALID:CURSOR_INVALID);
53560:   }
53561:   return rc;
53562: }
53563: 
53564: /*
53565: ** Move the cursor down to the left-most leaf entry beneath the
53566: ** entry to which it is currently pointing.
53567: **
53568: ** The left-most leaf is the one with the smallest key - the first
53569: ** in ascending order.
53570: */
53571: static int moveToLeftmost(BtCursor *pCur){
53572:   Pgno pgno;
53573:   int rc = SQLITE_OK;
53574:   MemPage *pPage;
53575: 
53576:   assert( cursorHoldsMutex(pCur) );
53577:   assert( pCur->eState==CURSOR_VALID );
53578:   while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
53579:     assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
53580:     pgno = get4byte(findCell(pPage, pCur->aiIdx[pCur->iPage]));
53581:     rc = moveToChild(pCur, pgno);
53582:   }
53583:   return rc;
53584: }
53585: 
53586: /*
53587: ** Move the cursor down to the right-most leaf entry beneath the
53588: ** page to which it is currently pointing.  Notice the difference
53589: ** between moveToLeftmost() and moveToRightmost().  moveToLeftmost()
53590: ** finds the left-most entry beneath the *entry* whereas moveToRightmost()
53591: ** finds the right-most entry beneath the *page*.
53592: **
53593: ** The right-most entry is the one with the largest key - the last
53594: ** key in ascending order.
53595: */
53596: static int moveToRightmost(BtCursor *pCur){
53597:   Pgno pgno;
53598:   int rc = SQLITE_OK;
53599:   MemPage *pPage = 0;
53600: 
53601:   assert( cursorHoldsMutex(pCur) );
53602:   assert( pCur->eState==CURSOR_VALID );
53603:   while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
53604:     pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
53605:     pCur->aiIdx[pCur->iPage] = pPage->nCell;
53606:     rc = moveToChild(pCur, pgno);
53607:   }
53608:   if( rc==SQLITE_OK ){
53609:     pCur->aiIdx[pCur->iPage] = pPage->nCell-1;
53610:     pCur->info.nSize = 0;
53611:     pCur->validNKey = 0;
53612:   }
53613:   return rc;
53614: }
53615: 
53616: /* Move the cursor to the first entry in the table.  Return SQLITE_OK
53617: ** on success.  Set *pRes to 0 if the cursor actually points to something
53618: ** or set *pRes to 1 if the table is empty.
53619: */
53620: SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
53621:   int rc;
53622: 
53623:   assert( cursorHoldsMutex(pCur) );
53624:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
53625:   rc = moveToRoot(pCur);
53626:   if( rc==SQLITE_OK ){
53627:     if( pCur->eState==CURSOR_INVALID ){
53628:       assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
53629:       *pRes = 1;
53630:     }else{
53631:       assert( pCur->apPage[pCur->iPage]->nCell>0 );
53632:       *pRes = 0;
53633:       rc = moveToLeftmost(pCur);
53634:     }
53635:   }
53636:   return rc;
53637: }
53638: 
53639: /* Move the cursor to the last entry in the table.  Return SQLITE_OK
53640: ** on success.  Set *pRes to 0 if the cursor actually points to something
53641: ** or set *pRes to 1 if the table is empty.
53642: */
53643: SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
53644:   int rc;
53645:  
53646:   assert( cursorHoldsMutex(pCur) );
53647:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
53648: 
53649:   /* If the cursor already points to the last entry, this is a no-op. */
53650:   if( CURSOR_VALID==pCur->eState && pCur->atLast ){
53651: #ifdef SQLITE_DEBUG
53652:     /* This block serves to assert() that the cursor really does point 
53653:     ** to the last entry in the b-tree. */
53654:     int ii;
53655:     for(ii=0; ii<pCur->iPage; ii++){
53656:       assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell );
53657:     }
53658:     assert( pCur->aiIdx[pCur->iPage]==pCur->apPage[pCur->iPage]->nCell-1 );
53659:     assert( pCur->apPage[pCur->iPage]->leaf );
53660: #endif
53661:     return SQLITE_OK;
53662:   }
53663: 
53664:   rc = moveToRoot(pCur);
53665:   if( rc==SQLITE_OK ){
53666:     if( CURSOR_INVALID==pCur->eState ){
53667:       assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
53668:       *pRes = 1;
53669:     }else{
53670:       assert( pCur->eState==CURSOR_VALID );
53671:       *pRes = 0;
53672:       rc = moveToRightmost(pCur);
53673:       pCur->atLast = rc==SQLITE_OK ?1:0;
53674:     }
53675:   }
53676:   return rc;
53677: }
53678: 
53679: /* Move the cursor so that it points to an entry near the key 
53680: ** specified by pIdxKey or intKey.   Return a success code.
53681: **
53682: ** For INTKEY tables, the intKey parameter is used.  pIdxKey 
53683: ** must be NULL.  For index tables, pIdxKey is used and intKey
53684: ** is ignored.
53685: **
53686: ** If an exact match is not found, then the cursor is always
53687: ** left pointing at a leaf page which would hold the entry if it
53688: ** were present.  The cursor might point to an entry that comes
53689: ** before or after the key.
53690: **
53691: ** An integer is written into *pRes which is the result of
53692: ** comparing the key with the entry to which the cursor is 
53693: ** pointing.  The meaning of the integer written into
53694: ** *pRes is as follows:
53695: **
53696: **     *pRes<0      The cursor is left pointing at an entry that
53697: **                  is smaller than intKey/pIdxKey or if the table is empty
53698: **                  and the cursor is therefore left point to nothing.
53699: **
53700: **     *pRes==0     The cursor is left pointing at an entry that
53701: **                  exactly matches intKey/pIdxKey.
53702: **
53703: **     *pRes>0      The cursor is left pointing at an entry that
53704: **                  is larger than intKey/pIdxKey.
53705: **
53706: */
53707: SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
53708:   BtCursor *pCur,          /* The cursor to be moved */
53709:   UnpackedRecord *pIdxKey, /* Unpacked index key */
53710:   i64 intKey,              /* The table key */
53711:   int biasRight,           /* If true, bias the search to the high end */
53712:   int *pRes                /* Write search results here */
53713: ){
53714:   int rc;
53715: 
53716:   assert( cursorHoldsMutex(pCur) );
53717:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
53718:   assert( pRes );
53719:   assert( (pIdxKey==0)==(pCur->pKeyInfo==0) );
53720: 
53721:   /* If the cursor is already positioned at the point we are trying
53722:   ** to move to, then just return without doing any work */
53723:   if( pCur->eState==CURSOR_VALID && pCur->validNKey 
53724:    && pCur->apPage[0]->intKey 
53725:   ){
53726:     if( pCur->info.nKey==intKey ){
53727:       *pRes = 0;
53728:       return SQLITE_OK;
53729:     }
53730:     if( pCur->atLast && pCur->info.nKey<intKey ){
53731:       *pRes = -1;
53732:       return SQLITE_OK;
53733:     }
53734:   }
53735: 
53736:   rc = moveToRoot(pCur);
53737:   if( rc ){
53738:     return rc;
53739:   }
53740:   assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage] );
53741:   assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->isInit );
53742:   assert( pCur->eState==CURSOR_INVALID || pCur->apPage[pCur->iPage]->nCell>0 );
53743:   if( pCur->eState==CURSOR_INVALID ){
53744:     *pRes = -1;
53745:     assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
53746:     return SQLITE_OK;
53747:   }
53748:   assert( pCur->apPage[0]->intKey || pIdxKey );
53749:   for(;;){
53750:     int lwr, upr, idx;
53751:     Pgno chldPg;
53752:     MemPage *pPage = pCur->apPage[pCur->iPage];
53753:     int c;
53754: 
53755:     /* pPage->nCell must be greater than zero. If this is the root-page
53756:     ** the cursor would have been INVALID above and this for(;;) loop
53757:     ** not run. If this is not the root-page, then the moveToChild() routine
53758:     ** would have already detected db corruption. Similarly, pPage must
53759:     ** be the right kind (index or table) of b-tree page. Otherwise
53760:     ** a moveToChild() or moveToRoot() call would have detected corruption.  */
53761:     assert( pPage->nCell>0 );
53762:     assert( pPage->intKey==(pIdxKey==0) );
53763:     lwr = 0;
53764:     upr = pPage->nCell-1;
53765:     if( biasRight ){
53766:       pCur->aiIdx[pCur->iPage] = (u16)(idx = upr);
53767:     }else{
53768:       pCur->aiIdx[pCur->iPage] = (u16)(idx = (upr+lwr)/2);
53769:     }
53770:     for(;;){
53771:       u8 *pCell;                          /* Pointer to current cell in pPage */
53772: 
53773:       assert( idx==pCur->aiIdx[pCur->iPage] );
53774:       pCur->info.nSize = 0;
53775:       pCell = findCell(pPage, idx) + pPage->childPtrSize;
53776:       if( pPage->intKey ){
53777:         i64 nCellKey;
53778:         if( pPage->hasData ){
53779:           u32 dummy;
53780:           pCell += getVarint32(pCell, dummy);
53781:         }
53782:         getVarint(pCell, (u64*)&nCellKey);
53783:         if( nCellKey==intKey ){
53784:           c = 0;
53785:         }else if( nCellKey<intKey ){
53786:           c = -1;
53787:         }else{
53788:           assert( nCellKey>intKey );
53789:           c = +1;
53790:         }
53791:         pCur->validNKey = 1;
53792:         pCur->info.nKey = nCellKey;
53793:       }else{
53794:         /* The maximum supported page-size is 65536 bytes. This means that
53795:         ** the maximum number of record bytes stored on an index B-Tree
53796:         ** page is less than 16384 bytes and may be stored as a 2-byte
53797:         ** varint. This information is used to attempt to avoid parsing 
53798:         ** the entire cell by checking for the cases where the record is 
53799:         ** stored entirely within the b-tree page by inspecting the first 
53800:         ** 2 bytes of the cell.
53801:         */
53802:         int nCell = pCell[0];
53803:         if( nCell<=pPage->max1bytePayload
53804:          /* && (pCell+nCell)<pPage->aDataEnd */
53805:         ){
53806:           /* This branch runs if the record-size field of the cell is a
53807:           ** single byte varint and the record fits entirely on the main
53808:           ** b-tree page.  */
53809:           testcase( pCell+nCell+1==pPage->aDataEnd );
53810:           c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[1], pIdxKey);
53811:         }else if( !(pCell[1] & 0x80) 
53812:           && (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal
53813:           /* && (pCell+nCell+2)<=pPage->aDataEnd */
53814:         ){
53815:           /* The record-size field is a 2 byte varint and the record 
53816:           ** fits entirely on the main b-tree page.  */
53817:           testcase( pCell+nCell+2==pPage->aDataEnd );
53818:           c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[2], pIdxKey);
53819:         }else{
53820:           /* The record flows over onto one or more overflow pages. In
53821:           ** this case the whole cell needs to be parsed, a buffer allocated
53822:           ** and accessPayload() used to retrieve the record into the
53823:           ** buffer before VdbeRecordCompare() can be called. */
53824:           void *pCellKey;
53825:           u8 * const pCellBody = pCell - pPage->childPtrSize;
53826:           btreeParseCellPtr(pPage, pCellBody, &pCur->info);
53827:           nCell = (int)pCur->info.nKey;
53828:           pCellKey = sqlite3Malloc( nCell );
53829:           if( pCellKey==0 ){
53830:             rc = SQLITE_NOMEM;
53831:             goto moveto_finish;
53832:           }
53833:           rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0);
53834:           if( rc ){
53835:             sqlite3_free(pCellKey);
53836:             goto moveto_finish;
53837:           }
53838:           c = sqlite3VdbeRecordCompare(nCell, pCellKey, pIdxKey);
53839:           sqlite3_free(pCellKey);
53840:         }
53841:       }
53842:       if( c==0 ){
53843:         if( pPage->intKey && !pPage->leaf ){
53844:           lwr = idx;
53845:           break;
53846:         }else{
53847:           *pRes = 0;
53848:           rc = SQLITE_OK;
53849:           goto moveto_finish;
53850:         }
53851:       }
53852:       if( c<0 ){
53853:         lwr = idx+1;
53854:       }else{
53855:         upr = idx-1;
53856:       }
53857:       if( lwr>upr ){
53858:         break;
53859:       }
53860:       pCur->aiIdx[pCur->iPage] = (u16)(idx = (lwr+upr)/2);
53861:     }
53862:     assert( lwr==upr+1 || (pPage->intKey && !pPage->leaf) );
53863:     assert( pPage->isInit );
53864:     if( pPage->leaf ){
53865:       chldPg = 0;
53866:     }else if( lwr>=pPage->nCell ){
53867:       chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]);
53868:     }else{
53869:       chldPg = get4byte(findCell(pPage, lwr));
53870:     }
53871:     if( chldPg==0 ){
53872:       assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
53873:       *pRes = c;
53874:       rc = SQLITE_OK;
53875:       goto moveto_finish;
53876:     }
53877:     pCur->aiIdx[pCur->iPage] = (u16)lwr;
53878:     pCur->info.nSize = 0;
53879:     pCur->validNKey = 0;
53880:     rc = moveToChild(pCur, chldPg);
53881:     if( rc ) goto moveto_finish;
53882:   }
53883: moveto_finish:
53884:   return rc;
53885: }
53886: 
53887: 
53888: /*
53889: ** Return TRUE if the cursor is not pointing at an entry of the table.
53890: **
53891: ** TRUE will be returned after a call to sqlite3BtreeNext() moves
53892: ** past the last entry in the table or sqlite3BtreePrev() moves past
53893: ** the first entry.  TRUE is also returned if the table is empty.
53894: */
53895: SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){
53896:   /* TODO: What if the cursor is in CURSOR_REQUIRESEEK but all table entries
53897:   ** have been deleted? This API will need to change to return an error code
53898:   ** as well as the boolean result value.
53899:   */
53900:   return (CURSOR_VALID!=pCur->eState);
53901: }
53902: 
53903: /*
53904: ** Advance the cursor to the next entry in the database.  If
53905: ** successful then set *pRes=0.  If the cursor
53906: ** was already pointing to the last entry in the database before
53907: ** this routine was called, then set *pRes=1.
53908: */
53909: SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
53910:   int rc;
53911:   int idx;
53912:   MemPage *pPage;
53913: 
53914:   assert( cursorHoldsMutex(pCur) );
53915:   rc = restoreCursorPosition(pCur);
53916:   if( rc!=SQLITE_OK ){
53917:     return rc;
53918:   }
53919:   assert( pRes!=0 );
53920:   if( CURSOR_INVALID==pCur->eState ){
53921:     *pRes = 1;
53922:     return SQLITE_OK;
53923:   }
53924:   if( pCur->skipNext>0 ){
53925:     pCur->skipNext = 0;
53926:     *pRes = 0;
53927:     return SQLITE_OK;
53928:   }
53929:   pCur->skipNext = 0;
53930: 
53931:   pPage = pCur->apPage[pCur->iPage];
53932:   idx = ++pCur->aiIdx[pCur->iPage];
53933:   assert( pPage->isInit );
53934: 
53935:   /* If the database file is corrupt, it is possible for the value of idx 
53936:   ** to be invalid here. This can only occur if a second cursor modifies
53937:   ** the page while cursor pCur is holding a reference to it. Which can
53938:   ** only happen if the database is corrupt in such a way as to link the
53939:   ** page into more than one b-tree structure. */
53940:   testcase( idx>pPage->nCell );
53941: 
53942:   pCur->info.nSize = 0;
53943:   pCur->validNKey = 0;
53944:   if( idx>=pPage->nCell ){
53945:     if( !pPage->leaf ){
53946:       rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));
53947:       if( rc ) return rc;
53948:       rc = moveToLeftmost(pCur);
53949:       *pRes = 0;
53950:       return rc;
53951:     }
53952:     do{
53953:       if( pCur->iPage==0 ){
53954:         *pRes = 1;
53955:         pCur->eState = CURSOR_INVALID;
53956:         return SQLITE_OK;
53957:       }
53958:       moveToParent(pCur);
53959:       pPage = pCur->apPage[pCur->iPage];
53960:     }while( pCur->aiIdx[pCur->iPage]>=pPage->nCell );
53961:     *pRes = 0;
53962:     if( pPage->intKey ){
53963:       rc = sqlite3BtreeNext(pCur, pRes);
53964:     }else{
53965:       rc = SQLITE_OK;
53966:     }
53967:     return rc;
53968:   }
53969:   *pRes = 0;
53970:   if( pPage->leaf ){
53971:     return SQLITE_OK;
53972:   }
53973:   rc = moveToLeftmost(pCur);
53974:   return rc;
53975: }
53976: 
53977: 
53978: /*
53979: ** Step the cursor to the back to the previous entry in the database.  If
53980: ** successful then set *pRes=0.  If the cursor
53981: ** was already pointing to the first entry in the database before
53982: ** this routine was called, then set *pRes=1.
53983: */
53984: SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
53985:   int rc;
53986:   MemPage *pPage;
53987: 
53988:   assert( cursorHoldsMutex(pCur) );
53989:   rc = restoreCursorPosition(pCur);
53990:   if( rc!=SQLITE_OK ){
53991:     return rc;
53992:   }
53993:   pCur->atLast = 0;
53994:   if( CURSOR_INVALID==pCur->eState ){
53995:     *pRes = 1;
53996:     return SQLITE_OK;
53997:   }
53998:   if( pCur->skipNext<0 ){
53999:     pCur->skipNext = 0;
54000:     *pRes = 0;
54001:     return SQLITE_OK;
54002:   }
54003:   pCur->skipNext = 0;
54004: 
54005:   pPage = pCur->apPage[pCur->iPage];
54006:   assert( pPage->isInit );
54007:   if( !pPage->leaf ){
54008:     int idx = pCur->aiIdx[pCur->iPage];
54009:     rc = moveToChild(pCur, get4byte(findCell(pPage, idx)));
54010:     if( rc ){
54011:       return rc;
54012:     }
54013:     rc = moveToRightmost(pCur);
54014:   }else{
54015:     while( pCur->aiIdx[pCur->iPage]==0 ){
54016:       if( pCur->iPage==0 ){
54017:         pCur->eState = CURSOR_INVALID;
54018:         *pRes = 1;
54019:         return SQLITE_OK;
54020:       }
54021:       moveToParent(pCur);
54022:     }
54023:     pCur->info.nSize = 0;
54024:     pCur->validNKey = 0;
54025: 
54026:     pCur->aiIdx[pCur->iPage]--;
54027:     pPage = pCur->apPage[pCur->iPage];
54028:     if( pPage->intKey && !pPage->leaf ){
54029:       rc = sqlite3BtreePrevious(pCur, pRes);
54030:     }else{
54031:       rc = SQLITE_OK;
54032:     }
54033:   }
54034:   *pRes = 0;
54035:   return rc;
54036: }
54037: 
54038: /*
54039: ** Allocate a new page from the database file.
54040: **
54041: ** The new page is marked as dirty.  (In other words, sqlite3PagerWrite()
54042: ** has already been called on the new page.)  The new page has also
54043: ** been referenced and the calling routine is responsible for calling
54044: ** sqlite3PagerUnref() on the new page when it is done.
54045: **
54046: ** SQLITE_OK is returned on success.  Any other return value indicates
54047: ** an error.  *ppPage and *pPgno are undefined in the event of an error.
54048: ** Do not invoke sqlite3PagerUnref() on *ppPage if an error is returned.
54049: **
54050: ** If the "nearby" parameter is not 0, then a (feeble) effort is made to 
54051: ** locate a page close to the page number "nearby".  This can be used in an
54052: ** attempt to keep related pages close to each other in the database file,
54053: ** which in turn can make database access faster.
54054: **
54055: ** If the "exact" parameter is not 0, and the page-number nearby exists 
54056: ** anywhere on the free-list, then it is guarenteed to be returned. This
54057: ** is only used by auto-vacuum databases when allocating a new table.
54058: */
54059: static int allocateBtreePage(
54060:   BtShared *pBt, 
54061:   MemPage **ppPage, 
54062:   Pgno *pPgno, 
54063:   Pgno nearby,
54064:   u8 exact
54065: ){
54066:   MemPage *pPage1;
54067:   int rc;
54068:   u32 n;     /* Number of pages on the freelist */
54069:   u32 k;     /* Number of leaves on the trunk of the freelist */
54070:   MemPage *pTrunk = 0;
54071:   MemPage *pPrevTrunk = 0;
54072:   Pgno mxPage;     /* Total size of the database file */
54073: 
54074:   assert( sqlite3_mutex_held(pBt->mutex) );
54075:   pPage1 = pBt->pPage1;
54076:   mxPage = btreePagecount(pBt);
54077:   n = get4byte(&pPage1->aData[36]);
54078:   testcase( n==mxPage-1 );
54079:   if( n>=mxPage ){
54080:     return SQLITE_CORRUPT_BKPT;
54081:   }
54082:   if( n>0 ){
54083:     /* There are pages on the freelist.  Reuse one of those pages. */
54084:     Pgno iTrunk;
54085:     u8 searchList = 0; /* If the free-list must be searched for 'nearby' */
54086:     
54087:     /* If the 'exact' parameter was true and a query of the pointer-map
54088:     ** shows that the page 'nearby' is somewhere on the free-list, then
54089:     ** the entire-list will be searched for that page.
54090:     */
54091: #ifndef SQLITE_OMIT_AUTOVACUUM
54092:     if( exact && nearby<=mxPage ){
54093:       u8 eType;
54094:       assert( nearby>0 );
54095:       assert( pBt->autoVacuum );
54096:       rc = ptrmapGet(pBt, nearby, &eType, 0);
54097:       if( rc ) return rc;
54098:       if( eType==PTRMAP_FREEPAGE ){
54099:         searchList = 1;
54100:       }
54101:       *pPgno = nearby;
54102:     }
54103: #endif
54104: 
54105:     /* Decrement the free-list count by 1. Set iTrunk to the index of the
54106:     ** first free-list trunk page. iPrevTrunk is initially 1.
54107:     */
54108:     rc = sqlite3PagerWrite(pPage1->pDbPage);
54109:     if( rc ) return rc;
54110:     put4byte(&pPage1->aData[36], n-1);
54111: 
54112:     /* The code within this loop is run only once if the 'searchList' variable
54113:     ** is not true. Otherwise, it runs once for each trunk-page on the
54114:     ** free-list until the page 'nearby' is located.
54115:     */
54116:     do {
54117:       pPrevTrunk = pTrunk;
54118:       if( pPrevTrunk ){
54119:         iTrunk = get4byte(&pPrevTrunk->aData[0]);
54120:       }else{
54121:         iTrunk = get4byte(&pPage1->aData[32]);
54122:       }
54123:       testcase( iTrunk==mxPage );
54124:       if( iTrunk>mxPage ){
54125:         rc = SQLITE_CORRUPT_BKPT;
54126:       }else{
54127:         rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0);
54128:       }
54129:       if( rc ){
54130:         pTrunk = 0;
54131:         goto end_allocate_page;
54132:       }
54133:       assert( pTrunk!=0 );
54134:       assert( pTrunk->aData!=0 );
54135: 
54136:       k = get4byte(&pTrunk->aData[4]); /* # of leaves on this trunk page */
54137:       if( k==0 && !searchList ){
54138:         /* The trunk has no leaves and the list is not being searched. 
54139:         ** So extract the trunk page itself and use it as the newly 
54140:         ** allocated page */
54141:         assert( pPrevTrunk==0 );
54142:         rc = sqlite3PagerWrite(pTrunk->pDbPage);
54143:         if( rc ){
54144:           goto end_allocate_page;
54145:         }
54146:         *pPgno = iTrunk;
54147:         memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4);
54148:         *ppPage = pTrunk;
54149:         pTrunk = 0;
54150:         TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1));
54151:       }else if( k>(u32)(pBt->usableSize/4 - 2) ){
54152:         /* Value of k is out of range.  Database corruption */
54153:         rc = SQLITE_CORRUPT_BKPT;
54154:         goto end_allocate_page;
54155: #ifndef SQLITE_OMIT_AUTOVACUUM
54156:       }else if( searchList && nearby==iTrunk ){
54157:         /* The list is being searched and this trunk page is the page
54158:         ** to allocate, regardless of whether it has leaves.
54159:         */
54160:         assert( *pPgno==iTrunk );
54161:         *ppPage = pTrunk;
54162:         searchList = 0;
54163:         rc = sqlite3PagerWrite(pTrunk->pDbPage);
54164:         if( rc ){
54165:           goto end_allocate_page;
54166:         }
54167:         if( k==0 ){
54168:           if( !pPrevTrunk ){
54169:             memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4);
54170:           }else{
54171:             rc = sqlite3PagerWrite(pPrevTrunk->pDbPage);
54172:             if( rc!=SQLITE_OK ){
54173:               goto end_allocate_page;
54174:             }
54175:             memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4);
54176:           }
54177:         }else{
54178:           /* The trunk page is required by the caller but it contains 
54179:           ** pointers to free-list leaves. The first leaf becomes a trunk
54180:           ** page in this case.
54181:           */
54182:           MemPage *pNewTrunk;
54183:           Pgno iNewTrunk = get4byte(&pTrunk->aData[8]);
54184:           if( iNewTrunk>mxPage ){ 
54185:             rc = SQLITE_CORRUPT_BKPT;
54186:             goto end_allocate_page;
54187:           }
54188:           testcase( iNewTrunk==mxPage );
54189:           rc = btreeGetPage(pBt, iNewTrunk, &pNewTrunk, 0);
54190:           if( rc!=SQLITE_OK ){
54191:             goto end_allocate_page;
54192:           }
54193:           rc = sqlite3PagerWrite(pNewTrunk->pDbPage);
54194:           if( rc!=SQLITE_OK ){
54195:             releasePage(pNewTrunk);
54196:             goto end_allocate_page;
54197:           }
54198:           memcpy(&pNewTrunk->aData[0], &pTrunk->aData[0], 4);
54199:           put4byte(&pNewTrunk->aData[4], k-1);
54200:           memcpy(&pNewTrunk->aData[8], &pTrunk->aData[12], (k-1)*4);
54201:           releasePage(pNewTrunk);
54202:           if( !pPrevTrunk ){
54203:             assert( sqlite3PagerIswriteable(pPage1->pDbPage) );
54204:             put4byte(&pPage1->aData[32], iNewTrunk);
54205:           }else{
54206:             rc = sqlite3PagerWrite(pPrevTrunk->pDbPage);
54207:             if( rc ){
54208:               goto end_allocate_page;
54209:             }
54210:             put4byte(&pPrevTrunk->aData[0], iNewTrunk);
54211:           }
54212:         }
54213:         pTrunk = 0;
54214:         TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1));
54215: #endif
54216:       }else if( k>0 ){
54217:         /* Extract a leaf from the trunk */
54218:         u32 closest;
54219:         Pgno iPage;
54220:         unsigned char *aData = pTrunk->aData;
54221:         if( nearby>0 ){
54222:           u32 i;
54223:           int dist;
54224:           closest = 0;
54225:           dist = sqlite3AbsInt32(get4byte(&aData[8]) - nearby);
54226:           for(i=1; i<k; i++){
54227:             int d2 = sqlite3AbsInt32(get4byte(&aData[8+i*4]) - nearby);
54228:             if( d2<dist ){
54229:               closest = i;
54230:               dist = d2;
54231:             }
54232:           }
54233:         }else{
54234:           closest = 0;
54235:         }
54236: 
54237:         iPage = get4byte(&aData[8+closest*4]);
54238:         testcase( iPage==mxPage );
54239:         if( iPage>mxPage ){
54240:           rc = SQLITE_CORRUPT_BKPT;
54241:           goto end_allocate_page;
54242:         }
54243:         testcase( iPage==mxPage );
54244:         if( !searchList || iPage==nearby ){
54245:           int noContent;
54246:           *pPgno = iPage;
54247:           TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d"
54248:                  ": %d more free pages\n",
54249:                  *pPgno, closest+1, k, pTrunk->pgno, n-1));
54250:           rc = sqlite3PagerWrite(pTrunk->pDbPage);
54251:           if( rc ) goto end_allocate_page;
54252:           if( closest<k-1 ){
54253:             memcpy(&aData[8+closest*4], &aData[4+k*4], 4);
54254:           }
54255:           put4byte(&aData[4], k-1);
54256:           noContent = !btreeGetHasContent(pBt, *pPgno);
54257:           rc = btreeGetPage(pBt, *pPgno, ppPage, noContent);
54258:           if( rc==SQLITE_OK ){
54259:             rc = sqlite3PagerWrite((*ppPage)->pDbPage);
54260:             if( rc!=SQLITE_OK ){
54261:               releasePage(*ppPage);
54262:             }
54263:           }
54264:           searchList = 0;
54265:         }
54266:       }
54267:       releasePage(pPrevTrunk);
54268:       pPrevTrunk = 0;
54269:     }while( searchList );
54270:   }else{
54271:     /* There are no pages on the freelist, so create a new page at the
54272:     ** end of the file */
54273:     rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
54274:     if( rc ) return rc;
54275:     pBt->nPage++;
54276:     if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++;
54277: 
54278: #ifndef SQLITE_OMIT_AUTOVACUUM
54279:     if( pBt->autoVacuum && PTRMAP_ISPAGE(pBt, pBt->nPage) ){
54280:       /* If *pPgno refers to a pointer-map page, allocate two new pages
54281:       ** at the end of the file instead of one. The first allocated page
54282:       ** becomes a new pointer-map page, the second is used by the caller.
54283:       */
54284:       MemPage *pPg = 0;
54285:       TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage));
54286:       assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) );
54287:       rc = btreeGetPage(pBt, pBt->nPage, &pPg, 1);
54288:       if( rc==SQLITE_OK ){
54289:         rc = sqlite3PagerWrite(pPg->pDbPage);
54290:         releasePage(pPg);
54291:       }
54292:       if( rc ) return rc;
54293:       pBt->nPage++;
54294:       if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ){ pBt->nPage++; }
54295:     }
54296: #endif
54297:     put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage);
54298:     *pPgno = pBt->nPage;
54299: 
54300:     assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
54301:     rc = btreeGetPage(pBt, *pPgno, ppPage, 1);
54302:     if( rc ) return rc;
54303:     rc = sqlite3PagerWrite((*ppPage)->pDbPage);
54304:     if( rc!=SQLITE_OK ){
54305:       releasePage(*ppPage);
54306:     }
54307:     TRACE(("ALLOCATE: %d from end of file\n", *pPgno));
54308:   }
54309: 
54310:   assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
54311: 
54312: end_allocate_page:
54313:   releasePage(pTrunk);
54314:   releasePage(pPrevTrunk);
54315:   if( rc==SQLITE_OK ){
54316:     if( sqlite3PagerPageRefcount((*ppPage)->pDbPage)>1 ){
54317:       releasePage(*ppPage);
54318:       return SQLITE_CORRUPT_BKPT;
54319:     }
54320:     (*ppPage)->isInit = 0;
54321:   }else{
54322:     *ppPage = 0;
54323:   }
54324:   assert( rc!=SQLITE_OK || sqlite3PagerIswriteable((*ppPage)->pDbPage) );
54325:   return rc;
54326: }
54327: 
54328: /*
54329: ** This function is used to add page iPage to the database file free-list. 
54330: ** It is assumed that the page is not already a part of the free-list.
54331: **
54332: ** The value passed as the second argument to this function is optional.
54333: ** If the caller happens to have a pointer to the MemPage object 
54334: ** corresponding to page iPage handy, it may pass it as the second value. 
54335: ** Otherwise, it may pass NULL.
54336: **
54337: ** If a pointer to a MemPage object is passed as the second argument,
54338: ** its reference count is not altered by this function.
54339: */
54340: static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){
54341:   MemPage *pTrunk = 0;                /* Free-list trunk page */
54342:   Pgno iTrunk = 0;                    /* Page number of free-list trunk page */ 
54343:   MemPage *pPage1 = pBt->pPage1;      /* Local reference to page 1 */
54344:   MemPage *pPage;                     /* Page being freed. May be NULL. */
54345:   int rc;                             /* Return Code */
54346:   int nFree;                          /* Initial number of pages on free-list */
54347: 
54348:   assert( sqlite3_mutex_held(pBt->mutex) );
54349:   assert( iPage>1 );
54350:   assert( !pMemPage || pMemPage->pgno==iPage );
54351: 
54352:   if( pMemPage ){
54353:     pPage = pMemPage;
54354:     sqlite3PagerRef(pPage->pDbPage);
54355:   }else{
54356:     pPage = btreePageLookup(pBt, iPage);
54357:   }
54358: 
54359:   /* Increment the free page count on pPage1 */
54360:   rc = sqlite3PagerWrite(pPage1->pDbPage);
54361:   if( rc ) goto freepage_out;
54362:   nFree = get4byte(&pPage1->aData[36]);
54363:   put4byte(&pPage1->aData[36], nFree+1);
54364: 
54365:   if( pBt->btsFlags & BTS_SECURE_DELETE ){
54366:     /* If the secure_delete option is enabled, then
54367:     ** always fully overwrite deleted information with zeros.
54368:     */
54369:     if( (!pPage && ((rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0) )
54370:      ||            ((rc = sqlite3PagerWrite(pPage->pDbPage))!=0)
54371:     ){
54372:       goto freepage_out;
54373:     }
54374:     memset(pPage->aData, 0, pPage->pBt->pageSize);
54375:   }
54376: 
54377:   /* If the database supports auto-vacuum, write an entry in the pointer-map
54378:   ** to indicate that the page is free.
54379:   */
54380:   if( ISAUTOVACUUM ){
54381:     ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc);
54382:     if( rc ) goto freepage_out;
54383:   }
54384: 
54385:   /* Now manipulate the actual database free-list structure. There are two
54386:   ** possibilities. If the free-list is currently empty, or if the first
54387:   ** trunk page in the free-list is full, then this page will become a
54388:   ** new free-list trunk page. Otherwise, it will become a leaf of the
54389:   ** first trunk page in the current free-list. This block tests if it
54390:   ** is possible to add the page as a new free-list leaf.
54391:   */
54392:   if( nFree!=0 ){
54393:     u32 nLeaf;                /* Initial number of leaf cells on trunk page */
54394: 
54395:     iTrunk = get4byte(&pPage1->aData[32]);
54396:     rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0);
54397:     if( rc!=SQLITE_OK ){
54398:       goto freepage_out;
54399:     }
54400: 
54401:     nLeaf = get4byte(&pTrunk->aData[4]);
54402:     assert( pBt->usableSize>32 );
54403:     if( nLeaf > (u32)pBt->usableSize/4 - 2 ){
54404:       rc = SQLITE_CORRUPT_BKPT;
54405:       goto freepage_out;
54406:     }
54407:     if( nLeaf < (u32)pBt->usableSize/4 - 8 ){
54408:       /* In this case there is room on the trunk page to insert the page
54409:       ** being freed as a new leaf.
54410:       **
54411:       ** Note that the trunk page is not really full until it contains
54412:       ** usableSize/4 - 2 entries, not usableSize/4 - 8 entries as we have
54413:       ** coded.  But due to a coding error in versions of SQLite prior to
54414:       ** 3.6.0, databases with freelist trunk pages holding more than
54415:       ** usableSize/4 - 8 entries will be reported as corrupt.  In order
54416:       ** to maintain backwards compatibility with older versions of SQLite,
54417:       ** we will continue to restrict the number of entries to usableSize/4 - 8
54418:       ** for now.  At some point in the future (once everyone has upgraded
54419:       ** to 3.6.0 or later) we should consider fixing the conditional above
54420:       ** to read "usableSize/4-2" instead of "usableSize/4-8".
54421:       */
54422:       rc = sqlite3PagerWrite(pTrunk->pDbPage);
54423:       if( rc==SQLITE_OK ){
54424:         put4byte(&pTrunk->aData[4], nLeaf+1);
54425:         put4byte(&pTrunk->aData[8+nLeaf*4], iPage);
54426:         if( pPage && (pBt->btsFlags & BTS_SECURE_DELETE)==0 ){
54427:           sqlite3PagerDontWrite(pPage->pDbPage);
54428:         }
54429:         rc = btreeSetHasContent(pBt, iPage);
54430:       }
54431:       TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno));
54432:       goto freepage_out;
54433:     }
54434:   }
54435: 
54436:   /* If control flows to this point, then it was not possible to add the
54437:   ** the page being freed as a leaf page of the first trunk in the free-list.
54438:   ** Possibly because the free-list is empty, or possibly because the 
54439:   ** first trunk in the free-list is full. Either way, the page being freed
54440:   ** will become the new first trunk page in the free-list.
54441:   */
54442:   if( pPage==0 && SQLITE_OK!=(rc = btreeGetPage(pBt, iPage, &pPage, 0)) ){
54443:     goto freepage_out;
54444:   }
54445:   rc = sqlite3PagerWrite(pPage->pDbPage);
54446:   if( rc!=SQLITE_OK ){
54447:     goto freepage_out;
54448:   }
54449:   put4byte(pPage->aData, iTrunk);
54450:   put4byte(&pPage->aData[4], 0);
54451:   put4byte(&pPage1->aData[32], iPage);
54452:   TRACE(("FREE-PAGE: %d new trunk page replacing %d\n", pPage->pgno, iTrunk));
54453: 
54454: freepage_out:
54455:   if( pPage ){
54456:     pPage->isInit = 0;
54457:   }
54458:   releasePage(pPage);
54459:   releasePage(pTrunk);
54460:   return rc;
54461: }
54462: static void freePage(MemPage *pPage, int *pRC){
54463:   if( (*pRC)==SQLITE_OK ){
54464:     *pRC = freePage2(pPage->pBt, pPage, pPage->pgno);
54465:   }
54466: }
54467: 
54468: /*
54469: ** Free any overflow pages associated with the given Cell.
54470: */
54471: static int clearCell(MemPage *pPage, unsigned char *pCell){
54472:   BtShared *pBt = pPage->pBt;
54473:   CellInfo info;
54474:   Pgno ovflPgno;
54475:   int rc;
54476:   int nOvfl;
54477:   u32 ovflPageSize;
54478: 
54479:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54480:   btreeParseCellPtr(pPage, pCell, &info);
54481:   if( info.iOverflow==0 ){
54482:     return SQLITE_OK;  /* No overflow pages. Return without doing anything */
54483:   }
54484:   if( pCell+info.iOverflow+3 > pPage->aData+pPage->maskPage ){
54485:     return SQLITE_CORRUPT;  /* Cell extends past end of page */
54486:   }
54487:   ovflPgno = get4byte(&pCell[info.iOverflow]);
54488:   assert( pBt->usableSize > 4 );
54489:   ovflPageSize = pBt->usableSize - 4;
54490:   nOvfl = (info.nPayload - info.nLocal + ovflPageSize - 1)/ovflPageSize;
54491:   assert( ovflPgno==0 || nOvfl>0 );
54492:   while( nOvfl-- ){
54493:     Pgno iNext = 0;
54494:     MemPage *pOvfl = 0;
54495:     if( ovflPgno<2 || ovflPgno>btreePagecount(pBt) ){
54496:       /* 0 is not a legal page number and page 1 cannot be an 
54497:       ** overflow page. Therefore if ovflPgno<2 or past the end of the 
54498:       ** file the database must be corrupt. */
54499:       return SQLITE_CORRUPT_BKPT;
54500:     }
54501:     if( nOvfl ){
54502:       rc = getOverflowPage(pBt, ovflPgno, &pOvfl, &iNext);
54503:       if( rc ) return rc;
54504:     }
54505: 
54506:     if( ( pOvfl || ((pOvfl = btreePageLookup(pBt, ovflPgno))!=0) )
54507:      && sqlite3PagerPageRefcount(pOvfl->pDbPage)!=1
54508:     ){
54509:       /* There is no reason any cursor should have an outstanding reference 
54510:       ** to an overflow page belonging to a cell that is being deleted/updated.
54511:       ** So if there exists more than one reference to this page, then it 
54512:       ** must not really be an overflow page and the database must be corrupt. 
54513:       ** It is helpful to detect this before calling freePage2(), as 
54514:       ** freePage2() may zero the page contents if secure-delete mode is
54515:       ** enabled. If this 'overflow' page happens to be a page that the
54516:       ** caller is iterating through or using in some other way, this
54517:       ** can be problematic.
54518:       */
54519:       rc = SQLITE_CORRUPT_BKPT;
54520:     }else{
54521:       rc = freePage2(pBt, pOvfl, ovflPgno);
54522:     }
54523: 
54524:     if( pOvfl ){
54525:       sqlite3PagerUnref(pOvfl->pDbPage);
54526:     }
54527:     if( rc ) return rc;
54528:     ovflPgno = iNext;
54529:   }
54530:   return SQLITE_OK;
54531: }
54532: 
54533: /*
54534: ** Create the byte sequence used to represent a cell on page pPage
54535: ** and write that byte sequence into pCell[].  Overflow pages are
54536: ** allocated and filled in as necessary.  The calling procedure
54537: ** is responsible for making sure sufficient space has been allocated
54538: ** for pCell[].
54539: **
54540: ** Note that pCell does not necessary need to point to the pPage->aData
54541: ** area.  pCell might point to some temporary storage.  The cell will
54542: ** be constructed in this temporary area then copied into pPage->aData
54543: ** later.
54544: */
54545: static int fillInCell(
54546:   MemPage *pPage,                /* The page that contains the cell */
54547:   unsigned char *pCell,          /* Complete text of the cell */
54548:   const void *pKey, i64 nKey,    /* The key */
54549:   const void *pData,int nData,   /* The data */
54550:   int nZero,                     /* Extra zero bytes to append to pData */
54551:   int *pnSize                    /* Write cell size here */
54552: ){
54553:   int nPayload;
54554:   const u8 *pSrc;
54555:   int nSrc, n, rc;
54556:   int spaceLeft;
54557:   MemPage *pOvfl = 0;
54558:   MemPage *pToRelease = 0;
54559:   unsigned char *pPrior;
54560:   unsigned char *pPayload;
54561:   BtShared *pBt = pPage->pBt;
54562:   Pgno pgnoOvfl = 0;
54563:   int nHeader;
54564:   CellInfo info;
54565: 
54566:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54567: 
54568:   /* pPage is not necessarily writeable since pCell might be auxiliary
54569:   ** buffer space that is separate from the pPage buffer area */
54570:   assert( pCell<pPage->aData || pCell>=&pPage->aData[pBt->pageSize]
54571:             || sqlite3PagerIswriteable(pPage->pDbPage) );
54572: 
54573:   /* Fill in the header. */
54574:   nHeader = 0;
54575:   if( !pPage->leaf ){
54576:     nHeader += 4;
54577:   }
54578:   if( pPage->hasData ){
54579:     nHeader += putVarint(&pCell[nHeader], nData+nZero);
54580:   }else{
54581:     nData = nZero = 0;
54582:   }
54583:   nHeader += putVarint(&pCell[nHeader], *(u64*)&nKey);
54584:   btreeParseCellPtr(pPage, pCell, &info);
54585:   assert( info.nHeader==nHeader );
54586:   assert( info.nKey==nKey );
54587:   assert( info.nData==(u32)(nData+nZero) );
54588:   
54589:   /* Fill in the payload */
54590:   nPayload = nData + nZero;
54591:   if( pPage->intKey ){
54592:     pSrc = pData;
54593:     nSrc = nData;
54594:     nData = 0;
54595:   }else{ 
54596:     if( NEVER(nKey>0x7fffffff || pKey==0) ){
54597:       return SQLITE_CORRUPT_BKPT;
54598:     }
54599:     nPayload += (int)nKey;
54600:     pSrc = pKey;
54601:     nSrc = (int)nKey;
54602:   }
54603:   *pnSize = info.nSize;
54604:   spaceLeft = info.nLocal;
54605:   pPayload = &pCell[nHeader];
54606:   pPrior = &pCell[info.iOverflow];
54607: 
54608:   while( nPayload>0 ){
54609:     if( spaceLeft==0 ){
54610: #ifndef SQLITE_OMIT_AUTOVACUUM
54611:       Pgno pgnoPtrmap = pgnoOvfl; /* Overflow page pointer-map entry page */
54612:       if( pBt->autoVacuum ){
54613:         do{
54614:           pgnoOvfl++;
54615:         } while( 
54616:           PTRMAP_ISPAGE(pBt, pgnoOvfl) || pgnoOvfl==PENDING_BYTE_PAGE(pBt) 
54617:         );
54618:       }
54619: #endif
54620:       rc = allocateBtreePage(pBt, &pOvfl, &pgnoOvfl, pgnoOvfl, 0);
54621: #ifndef SQLITE_OMIT_AUTOVACUUM
54622:       /* If the database supports auto-vacuum, and the second or subsequent
54623:       ** overflow page is being allocated, add an entry to the pointer-map
54624:       ** for that page now. 
54625:       **
54626:       ** If this is the first overflow page, then write a partial entry 
54627:       ** to the pointer-map. If we write nothing to this pointer-map slot,
54628:       ** then the optimistic overflow chain processing in clearCell()
54629:       ** may misinterpret the uninitialised values and delete the
54630:       ** wrong pages from the database.
54631:       */
54632:       if( pBt->autoVacuum && rc==SQLITE_OK ){
54633:         u8 eType = (pgnoPtrmap?PTRMAP_OVERFLOW2:PTRMAP_OVERFLOW1);
54634:         ptrmapPut(pBt, pgnoOvfl, eType, pgnoPtrmap, &rc);
54635:         if( rc ){
54636:           releasePage(pOvfl);
54637:         }
54638:       }
54639: #endif
54640:       if( rc ){
54641:         releasePage(pToRelease);
54642:         return rc;
54643:       }
54644: 
54645:       /* If pToRelease is not zero than pPrior points into the data area
54646:       ** of pToRelease.  Make sure pToRelease is still writeable. */
54647:       assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
54648: 
54649:       /* If pPrior is part of the data area of pPage, then make sure pPage
54650:       ** is still writeable */
54651:       assert( pPrior<pPage->aData || pPrior>=&pPage->aData[pBt->pageSize]
54652:             || sqlite3PagerIswriteable(pPage->pDbPage) );
54653: 
54654:       put4byte(pPrior, pgnoOvfl);
54655:       releasePage(pToRelease);
54656:       pToRelease = pOvfl;
54657:       pPrior = pOvfl->aData;
54658:       put4byte(pPrior, 0);
54659:       pPayload = &pOvfl->aData[4];
54660:       spaceLeft = pBt->usableSize - 4;
54661:     }
54662:     n = nPayload;
54663:     if( n>spaceLeft ) n = spaceLeft;
54664: 
54665:     /* If pToRelease is not zero than pPayload points into the data area
54666:     ** of pToRelease.  Make sure pToRelease is still writeable. */
54667:     assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
54668: 
54669:     /* If pPayload is part of the data area of pPage, then make sure pPage
54670:     ** is still writeable */
54671:     assert( pPayload<pPage->aData || pPayload>=&pPage->aData[pBt->pageSize]
54672:             || sqlite3PagerIswriteable(pPage->pDbPage) );
54673: 
54674:     if( nSrc>0 ){
54675:       if( n>nSrc ) n = nSrc;
54676:       assert( pSrc );
54677:       memcpy(pPayload, pSrc, n);
54678:     }else{
54679:       memset(pPayload, 0, n);
54680:     }
54681:     nPayload -= n;
54682:     pPayload += n;
54683:     pSrc += n;
54684:     nSrc -= n;
54685:     spaceLeft -= n;
54686:     if( nSrc==0 ){
54687:       nSrc = nData;
54688:       pSrc = pData;
54689:     }
54690:   }
54691:   releasePage(pToRelease);
54692:   return SQLITE_OK;
54693: }
54694: 
54695: /*
54696: ** Remove the i-th cell from pPage.  This routine effects pPage only.
54697: ** The cell content is not freed or deallocated.  It is assumed that
54698: ** the cell content has been copied someplace else.  This routine just
54699: ** removes the reference to the cell from pPage.
54700: **
54701: ** "sz" must be the number of bytes in the cell.
54702: */
54703: static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
54704:   u32 pc;         /* Offset to cell content of cell being deleted */
54705:   u8 *data;       /* pPage->aData */
54706:   u8 *ptr;        /* Used to move bytes around within data[] */
54707:   u8 *endPtr;     /* End of loop */
54708:   int rc;         /* The return code */
54709:   int hdr;        /* Beginning of the header.  0 most pages.  100 page 1 */
54710: 
54711:   if( *pRC ) return;
54712: 
54713:   assert( idx>=0 && idx<pPage->nCell );
54714:   assert( sz==cellSize(pPage, idx) );
54715:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
54716:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54717:   data = pPage->aData;
54718:   ptr = &pPage->aCellIdx[2*idx];
54719:   pc = get2byte(ptr);
54720:   hdr = pPage->hdrOffset;
54721:   testcase( pc==get2byte(&data[hdr+5]) );
54722:   testcase( pc+sz==pPage->pBt->usableSize );
54723:   if( pc < (u32)get2byte(&data[hdr+5]) || pc+sz > pPage->pBt->usableSize ){
54724:     *pRC = SQLITE_CORRUPT_BKPT;
54725:     return;
54726:   }
54727:   rc = freeSpace(pPage, pc, sz);
54728:   if( rc ){
54729:     *pRC = rc;
54730:     return;
54731:   }
54732:   endPtr = &pPage->aCellIdx[2*pPage->nCell - 2];
54733:   assert( (SQLITE_PTR_TO_INT(ptr)&1)==0 );  /* ptr is always 2-byte aligned */
54734:   while( ptr<endPtr ){
54735:     *(u16*)ptr = *(u16*)&ptr[2];
54736:     ptr += 2;
54737:   }
54738:   pPage->nCell--;
54739:   put2byte(&data[hdr+3], pPage->nCell);
54740:   pPage->nFree += 2;
54741: }
54742: 
54743: /*
54744: ** Insert a new cell on pPage at cell index "i".  pCell points to the
54745: ** content of the cell.
54746: **
54747: ** If the cell content will fit on the page, then put it there.  If it
54748: ** will not fit, then make a copy of the cell content into pTemp if
54749: ** pTemp is not null.  Regardless of pTemp, allocate a new entry
54750: ** in pPage->aOvfl[] and make it point to the cell content (either
54751: ** in pTemp or the original pCell) and also record its index. 
54752: ** Allocating a new entry in pPage->aCell[] implies that 
54753: ** pPage->nOverflow is incremented.
54754: **
54755: ** If nSkip is non-zero, then do not copy the first nSkip bytes of the
54756: ** cell. The caller will overwrite them after this function returns. If
54757: ** nSkip is non-zero, then pCell may not point to an invalid memory location 
54758: ** (but pCell+nSkip is always valid).
54759: */
54760: static void insertCell(
54761:   MemPage *pPage,   /* Page into which we are copying */
54762:   int i,            /* New cell becomes the i-th cell of the page */
54763:   u8 *pCell,        /* Content of the new cell */
54764:   int sz,           /* Bytes of content in pCell */
54765:   u8 *pTemp,        /* Temp storage space for pCell, if needed */
54766:   Pgno iChild,      /* If non-zero, replace first 4 bytes with this value */
54767:   int *pRC          /* Read and write return code from here */
54768: ){
54769:   int idx = 0;      /* Where to write new cell content in data[] */
54770:   int j;            /* Loop counter */
54771:   int end;          /* First byte past the last cell pointer in data[] */
54772:   int ins;          /* Index in data[] where new cell pointer is inserted */
54773:   int cellOffset;   /* Address of first cell pointer in data[] */
54774:   u8 *data;         /* The content of the whole page */
54775:   u8 *ptr;          /* Used for moving information around in data[] */
54776:   u8 *endPtr;       /* End of the loop */
54777: 
54778:   int nSkip = (iChild ? 4 : 0);
54779: 
54780:   if( *pRC ) return;
54781: 
54782:   assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );
54783:   assert( pPage->nCell<=MX_CELL(pPage->pBt) && MX_CELL(pPage->pBt)<=10921 );
54784:   assert( pPage->nOverflow<=ArraySize(pPage->aOvfl) );
54785:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54786:   /* The cell should normally be sized correctly.  However, when moving a
54787:   ** malformed cell from a leaf page to an interior page, if the cell size
54788:   ** wanted to be less than 4 but got rounded up to 4 on the leaf, then size
54789:   ** might be less than 8 (leaf-size + pointer) on the interior node.  Hence
54790:   ** the term after the || in the following assert(). */
54791:   assert( sz==cellSizePtr(pPage, pCell) || (sz==8 && iChild>0) );
54792:   if( pPage->nOverflow || sz+2>pPage->nFree ){
54793:     if( pTemp ){
54794:       memcpy(pTemp+nSkip, pCell+nSkip, sz-nSkip);
54795:       pCell = pTemp;
54796:     }
54797:     if( iChild ){
54798:       put4byte(pCell, iChild);
54799:     }
54800:     j = pPage->nOverflow++;
54801:     assert( j<(int)(sizeof(pPage->aOvfl)/sizeof(pPage->aOvfl[0])) );
54802:     pPage->aOvfl[j].pCell = pCell;
54803:     pPage->aOvfl[j].idx = (u16)i;
54804:   }else{
54805:     int rc = sqlite3PagerWrite(pPage->pDbPage);
54806:     if( rc!=SQLITE_OK ){
54807:       *pRC = rc;
54808:       return;
54809:     }
54810:     assert( sqlite3PagerIswriteable(pPage->pDbPage) );
54811:     data = pPage->aData;
54812:     cellOffset = pPage->cellOffset;
54813:     end = cellOffset + 2*pPage->nCell;
54814:     ins = cellOffset + 2*i;
54815:     rc = allocateSpace(pPage, sz, &idx);
54816:     if( rc ){ *pRC = rc; return; }
54817:     /* The allocateSpace() routine guarantees the following two properties
54818:     ** if it returns success */
54819:     assert( idx >= end+2 );
54820:     assert( idx+sz <= (int)pPage->pBt->usableSize );
54821:     pPage->nCell++;
54822:     pPage->nFree -= (u16)(2 + sz);
54823:     memcpy(&data[idx+nSkip], pCell+nSkip, sz-nSkip);
54824:     if( iChild ){
54825:       put4byte(&data[idx], iChild);
54826:     }
54827:     ptr = &data[end];
54828:     endPtr = &data[ins];
54829:     assert( (SQLITE_PTR_TO_INT(ptr)&1)==0 );  /* ptr is always 2-byte aligned */
54830:     while( ptr>endPtr ){
54831:       *(u16*)ptr = *(u16*)&ptr[-2];
54832:       ptr -= 2;
54833:     }
54834:     put2byte(&data[ins], idx);
54835:     put2byte(&data[pPage->hdrOffset+3], pPage->nCell);
54836: #ifndef SQLITE_OMIT_AUTOVACUUM
54837:     if( pPage->pBt->autoVacuum ){
54838:       /* The cell may contain a pointer to an overflow page. If so, write
54839:       ** the entry for the overflow page into the pointer map.
54840:       */
54841:       ptrmapPutOvflPtr(pPage, pCell, pRC);
54842:     }
54843: #endif
54844:   }
54845: }
54846: 
54847: /*
54848: ** Add a list of cells to a page.  The page should be initially empty.
54849: ** The cells are guaranteed to fit on the page.
54850: */
54851: static void assemblePage(
54852:   MemPage *pPage,   /* The page to be assemblied */
54853:   int nCell,        /* The number of cells to add to this page */
54854:   u8 **apCell,      /* Pointers to cell bodies */
54855:   u16 *aSize        /* Sizes of the cells */
54856: ){
54857:   int i;            /* Loop counter */
54858:   u8 *pCellptr;     /* Address of next cell pointer */
54859:   int cellbody;     /* Address of next cell body */
54860:   u8 * const data = pPage->aData;             /* Pointer to data for pPage */
54861:   const int hdr = pPage->hdrOffset;           /* Offset of header on pPage */
54862:   const int nUsable = pPage->pBt->usableSize; /* Usable size of page */
54863: 
54864:   assert( pPage->nOverflow==0 );
54865:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54866:   assert( nCell>=0 && nCell<=(int)MX_CELL(pPage->pBt)
54867:             && (int)MX_CELL(pPage->pBt)<=10921);
54868:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
54869: 
54870:   /* Check that the page has just been zeroed by zeroPage() */
54871:   assert( pPage->nCell==0 );
54872:   assert( get2byteNotZero(&data[hdr+5])==nUsable );
54873: 
54874:   pCellptr = &pPage->aCellIdx[nCell*2];
54875:   cellbody = nUsable;
54876:   for(i=nCell-1; i>=0; i--){
54877:     u16 sz = aSize[i];
54878:     pCellptr -= 2;
54879:     cellbody -= sz;
54880:     put2byte(pCellptr, cellbody);
54881:     memcpy(&data[cellbody], apCell[i], sz);
54882:   }
54883:   put2byte(&data[hdr+3], nCell);
54884:   put2byte(&data[hdr+5], cellbody);
54885:   pPage->nFree -= (nCell*2 + nUsable - cellbody);
54886:   pPage->nCell = (u16)nCell;
54887: }
54888: 
54889: /*
54890: ** The following parameters determine how many adjacent pages get involved
54891: ** in a balancing operation.  NN is the number of neighbors on either side
54892: ** of the page that participate in the balancing operation.  NB is the
54893: ** total number of pages that participate, including the target page and
54894: ** NN neighbors on either side.
54895: **
54896: ** The minimum value of NN is 1 (of course).  Increasing NN above 1
54897: ** (to 2 or 3) gives a modest improvement in SELECT and DELETE performance
54898: ** in exchange for a larger degradation in INSERT and UPDATE performance.
54899: ** The value of NN appears to give the best results overall.
54900: */
54901: #define NN 1             /* Number of neighbors on either side of pPage */
54902: #define NB (NN*2+1)      /* Total pages involved in the balance */
54903: 
54904: 
54905: #ifndef SQLITE_OMIT_QUICKBALANCE
54906: /*
54907: ** This version of balance() handles the common special case where
54908: ** a new entry is being inserted on the extreme right-end of the
54909: ** tree, in other words, when the new entry will become the largest
54910: ** entry in the tree.
54911: **
54912: ** Instead of trying to balance the 3 right-most leaf pages, just add
54913: ** a new page to the right-hand side and put the one new entry in
54914: ** that page.  This leaves the right side of the tree somewhat
54915: ** unbalanced.  But odds are that we will be inserting new entries
54916: ** at the end soon afterwards so the nearly empty page will quickly
54917: ** fill up.  On average.
54918: **
54919: ** pPage is the leaf page which is the right-most page in the tree.
54920: ** pParent is its parent.  pPage must have a single overflow entry
54921: ** which is also the right-most entry on the page.
54922: **
54923: ** The pSpace buffer is used to store a temporary copy of the divider
54924: ** cell that will be inserted into pParent. Such a cell consists of a 4
54925: ** byte page number followed by a variable length integer. In other
54926: ** words, at most 13 bytes. Hence the pSpace buffer must be at
54927: ** least 13 bytes in size.
54928: */
54929: static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){
54930:   BtShared *const pBt = pPage->pBt;    /* B-Tree Database */
54931:   MemPage *pNew;                       /* Newly allocated page */
54932:   int rc;                              /* Return Code */
54933:   Pgno pgnoNew;                        /* Page number of pNew */
54934: 
54935:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54936:   assert( sqlite3PagerIswriteable(pParent->pDbPage) );
54937:   assert( pPage->nOverflow==1 );
54938: 
54939:   /* This error condition is now caught prior to reaching this function */
54940:   if( pPage->nCell<=0 ) return SQLITE_CORRUPT_BKPT;
54941: 
54942:   /* Allocate a new page. This page will become the right-sibling of 
54943:   ** pPage. Make the parent page writable, so that the new divider cell
54944:   ** may be inserted. If both these operations are successful, proceed.
54945:   */
54946:   rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0);
54947: 
54948:   if( rc==SQLITE_OK ){
54949: 
54950:     u8 *pOut = &pSpace[4];
54951:     u8 *pCell = pPage->aOvfl[0].pCell;
54952:     u16 szCell = cellSizePtr(pPage, pCell);
54953:     u8 *pStop;
54954: 
54955:     assert( sqlite3PagerIswriteable(pNew->pDbPage) );
54956:     assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) );
54957:     zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF);
54958:     assemblePage(pNew, 1, &pCell, &szCell);
54959: 
54960:     /* If this is an auto-vacuum database, update the pointer map
54961:     ** with entries for the new page, and any pointer from the 
54962:     ** cell on the page to an overflow page. If either of these
54963:     ** operations fails, the return code is set, but the contents
54964:     ** of the parent page are still manipulated by thh code below.
54965:     ** That is Ok, at this point the parent page is guaranteed to
54966:     ** be marked as dirty. Returning an error code will cause a
54967:     ** rollback, undoing any changes made to the parent page.
54968:     */
54969:     if( ISAUTOVACUUM ){
54970:       ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno, &rc);
54971:       if( szCell>pNew->minLocal ){
54972:         ptrmapPutOvflPtr(pNew, pCell, &rc);
54973:       }
54974:     }
54975:   
54976:     /* Create a divider cell to insert into pParent. The divider cell
54977:     ** consists of a 4-byte page number (the page number of pPage) and
54978:     ** a variable length key value (which must be the same value as the
54979:     ** largest key on pPage).
54980:     **
54981:     ** To find the largest key value on pPage, first find the right-most 
54982:     ** cell on pPage. The first two fields of this cell are the 
54983:     ** record-length (a variable length integer at most 32-bits in size)
54984:     ** and the key value (a variable length integer, may have any value).
54985:     ** The first of the while(...) loops below skips over the record-length
54986:     ** field. The second while(...) loop copies the key value from the
54987:     ** cell on pPage into the pSpace buffer.
54988:     */
54989:     pCell = findCell(pPage, pPage->nCell-1);
54990:     pStop = &pCell[9];
54991:     while( (*(pCell++)&0x80) && pCell<pStop );
54992:     pStop = &pCell[9];
54993:     while( ((*(pOut++) = *(pCell++))&0x80) && pCell<pStop );
54994: 
54995:     /* Insert the new divider cell into pParent. */
54996:     insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace),
54997:                0, pPage->pgno, &rc);
54998: 
54999:     /* Set the right-child pointer of pParent to point to the new page. */
55000:     put4byte(&pParent->aData[pParent->hdrOffset+8], pgnoNew);
55001:   
55002:     /* Release the reference to the new page. */
55003:     releasePage(pNew);
55004:   }
55005: 
55006:   return rc;
55007: }
55008: #endif /* SQLITE_OMIT_QUICKBALANCE */
55009: 
55010: #if 0
55011: /*
55012: ** This function does not contribute anything to the operation of SQLite.
55013: ** it is sometimes activated temporarily while debugging code responsible 
55014: ** for setting pointer-map entries.
55015: */
55016: static int ptrmapCheckPages(MemPage **apPage, int nPage){
55017:   int i, j;
55018:   for(i=0; i<nPage; i++){
55019:     Pgno n;
55020:     u8 e;
55021:     MemPage *pPage = apPage[i];
55022:     BtShared *pBt = pPage->pBt;
55023:     assert( pPage->isInit );
55024: 
55025:     for(j=0; j<pPage->nCell; j++){
55026:       CellInfo info;
55027:       u8 *z;
55028:      
55029:       z = findCell(pPage, j);
55030:       btreeParseCellPtr(pPage, z, &info);
55031:       if( info.iOverflow ){
55032:         Pgno ovfl = get4byte(&z[info.iOverflow]);
55033:         ptrmapGet(pBt, ovfl, &e, &n);
55034:         assert( n==pPage->pgno && e==PTRMAP_OVERFLOW1 );
55035:       }
55036:       if( !pPage->leaf ){
55037:         Pgno child = get4byte(z);
55038:         ptrmapGet(pBt, child, &e, &n);
55039:         assert( n==pPage->pgno && e==PTRMAP_BTREE );
55040:       }
55041:     }
55042:     if( !pPage->leaf ){
55043:       Pgno child = get4byte(&pPage->aData[pPage->hdrOffset+8]);
55044:       ptrmapGet(pBt, child, &e, &n);
55045:       assert( n==pPage->pgno && e==PTRMAP_BTREE );
55046:     }
55047:   }
55048:   return 1;
55049: }
55050: #endif
55051: 
55052: /*
55053: ** This function is used to copy the contents of the b-tree node stored 
55054: ** on page pFrom to page pTo. If page pFrom was not a leaf page, then
55055: ** the pointer-map entries for each child page are updated so that the
55056: ** parent page stored in the pointer map is page pTo. If pFrom contained
55057: ** any cells with overflow page pointers, then the corresponding pointer
55058: ** map entries are also updated so that the parent page is page pTo.
55059: **
55060: ** If pFrom is currently carrying any overflow cells (entries in the
55061: ** MemPage.aOvfl[] array), they are not copied to pTo. 
55062: **
55063: ** Before returning, page pTo is reinitialized using btreeInitPage().
55064: **
55065: ** The performance of this function is not critical. It is only used by 
55066: ** the balance_shallower() and balance_deeper() procedures, neither of
55067: ** which are called often under normal circumstances.
55068: */
55069: static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){
55070:   if( (*pRC)==SQLITE_OK ){
55071:     BtShared * const pBt = pFrom->pBt;
55072:     u8 * const aFrom = pFrom->aData;
55073:     u8 * const aTo = pTo->aData;
55074:     int const iFromHdr = pFrom->hdrOffset;
55075:     int const iToHdr = ((pTo->pgno==1) ? 100 : 0);
55076:     int rc;
55077:     int iData;
55078:   
55079:   
55080:     assert( pFrom->isInit );
55081:     assert( pFrom->nFree>=iToHdr );
55082:     assert( get2byte(&aFrom[iFromHdr+5]) <= (int)pBt->usableSize );
55083:   
55084:     /* Copy the b-tree node content from page pFrom to page pTo. */
55085:     iData = get2byte(&aFrom[iFromHdr+5]);
55086:     memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData);
55087:     memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell);
55088:   
55089:     /* Reinitialize page pTo so that the contents of the MemPage structure
55090:     ** match the new data. The initialization of pTo can actually fail under
55091:     ** fairly obscure circumstances, even though it is a copy of initialized 
55092:     ** page pFrom.
55093:     */
55094:     pTo->isInit = 0;
55095:     rc = btreeInitPage(pTo);
55096:     if( rc!=SQLITE_OK ){
55097:       *pRC = rc;
55098:       return;
55099:     }
55100:   
55101:     /* If this is an auto-vacuum database, update the pointer-map entries
55102:     ** for any b-tree or overflow pages that pTo now contains the pointers to.
55103:     */
55104:     if( ISAUTOVACUUM ){
55105:       *pRC = setChildPtrmaps(pTo);
55106:     }
55107:   }
55108: }
55109: 
55110: /*
55111: ** This routine redistributes cells on the iParentIdx'th child of pParent
55112: ** (hereafter "the page") and up to 2 siblings so that all pages have about the
55113: ** same amount of free space. Usually a single sibling on either side of the
55114: ** page are used in the balancing, though both siblings might come from one
55115: ** side if the page is the first or last child of its parent. If the page 
55116: ** has fewer than 2 siblings (something which can only happen if the page
55117: ** is a root page or a child of a root page) then all available siblings
55118: ** participate in the balancing.
55119: **
55120: ** The number of siblings of the page might be increased or decreased by 
55121: ** one or two in an effort to keep pages nearly full but not over full. 
55122: **
55123: ** Note that when this routine is called, some of the cells on the page
55124: ** might not actually be stored in MemPage.aData[]. This can happen
55125: ** if the page is overfull. This routine ensures that all cells allocated
55126: ** to the page and its siblings fit into MemPage.aData[] before returning.
55127: **
55128: ** In the course of balancing the page and its siblings, cells may be
55129: ** inserted into or removed from the parent page (pParent). Doing so
55130: ** may cause the parent page to become overfull or underfull. If this
55131: ** happens, it is the responsibility of the caller to invoke the correct
55132: ** balancing routine to fix this problem (see the balance() routine). 
55133: **
55134: ** If this routine fails for any reason, it might leave the database
55135: ** in a corrupted state. So if this routine fails, the database should
55136: ** be rolled back.
55137: **
55138: ** The third argument to this function, aOvflSpace, is a pointer to a
55139: ** buffer big enough to hold one page. If while inserting cells into the parent
55140: ** page (pParent) the parent page becomes overfull, this buffer is
55141: ** used to store the parent's overflow cells. Because this function inserts
55142: ** a maximum of four divider cells into the parent page, and the maximum
55143: ** size of a cell stored within an internal node is always less than 1/4
55144: ** of the page-size, the aOvflSpace[] buffer is guaranteed to be large
55145: ** enough for all overflow cells.
55146: **
55147: ** If aOvflSpace is set to a null pointer, this function returns 
55148: ** SQLITE_NOMEM.
55149: */
55150: static int balance_nonroot(
55151:   MemPage *pParent,               /* Parent page of siblings being balanced */
55152:   int iParentIdx,                 /* Index of "the page" in pParent */
55153:   u8 *aOvflSpace,                 /* page-size bytes of space for parent ovfl */
55154:   int isRoot                      /* True if pParent is a root-page */
55155: ){
55156:   BtShared *pBt;               /* The whole database */
55157:   int nCell = 0;               /* Number of cells in apCell[] */
55158:   int nMaxCells = 0;           /* Allocated size of apCell, szCell, aFrom. */
55159:   int nNew = 0;                /* Number of pages in apNew[] */
55160:   int nOld;                    /* Number of pages in apOld[] */
55161:   int i, j, k;                 /* Loop counters */
55162:   int nxDiv;                   /* Next divider slot in pParent->aCell[] */
55163:   int rc = SQLITE_OK;          /* The return code */
55164:   u16 leafCorrection;          /* 4 if pPage is a leaf.  0 if not */
55165:   int leafData;                /* True if pPage is a leaf of a LEAFDATA tree */
55166:   int usableSpace;             /* Bytes in pPage beyond the header */
55167:   int pageFlags;               /* Value of pPage->aData[0] */
55168:   int subtotal;                /* Subtotal of bytes in cells on one page */
55169:   int iSpace1 = 0;             /* First unused byte of aSpace1[] */
55170:   int iOvflSpace = 0;          /* First unused byte of aOvflSpace[] */
55171:   int szScratch;               /* Size of scratch memory requested */
55172:   MemPage *apOld[NB];          /* pPage and up to two siblings */
55173:   MemPage *apCopy[NB];         /* Private copies of apOld[] pages */
55174:   MemPage *apNew[NB+2];        /* pPage and up to NB siblings after balancing */
55175:   u8 *pRight;                  /* Location in parent of right-sibling pointer */
55176:   u8 *apDiv[NB-1];             /* Divider cells in pParent */
55177:   int cntNew[NB+2];            /* Index in aCell[] of cell after i-th page */
55178:   int szNew[NB+2];             /* Combined size of cells place on i-th page */
55179:   u8 **apCell = 0;             /* All cells begin balanced */
55180:   u16 *szCell;                 /* Local size of all cells in apCell[] */
55181:   u8 *aSpace1;                 /* Space for copies of dividers cells */
55182:   Pgno pgno;                   /* Temp var to store a page number in */
55183: 
55184:   pBt = pParent->pBt;
55185:   assert( sqlite3_mutex_held(pBt->mutex) );
55186:   assert( sqlite3PagerIswriteable(pParent->pDbPage) );
55187: 
55188: #if 0
55189:   TRACE(("BALANCE: begin page %d child of %d\n", pPage->pgno, pParent->pgno));
55190: #endif
55191: 
55192:   /* At this point pParent may have at most one overflow cell. And if
55193:   ** this overflow cell is present, it must be the cell with 
55194:   ** index iParentIdx. This scenario comes about when this function
55195:   ** is called (indirectly) from sqlite3BtreeDelete().
55196:   */
55197:   assert( pParent->nOverflow==0 || pParent->nOverflow==1 );
55198:   assert( pParent->nOverflow==0 || pParent->aOvfl[0].idx==iParentIdx );
55199: 
55200:   if( !aOvflSpace ){
55201:     return SQLITE_NOMEM;
55202:   }
55203: 
55204:   /* Find the sibling pages to balance. Also locate the cells in pParent 
55205:   ** that divide the siblings. An attempt is made to find NN siblings on 
55206:   ** either side of pPage. More siblings are taken from one side, however, 
55207:   ** if there are fewer than NN siblings on the other side. If pParent
55208:   ** has NB or fewer children then all children of pParent are taken.  
55209:   **
55210:   ** This loop also drops the divider cells from the parent page. This
55211:   ** way, the remainder of the function does not have to deal with any
55212:   ** overflow cells in the parent page, since if any existed they will
55213:   ** have already been removed.
55214:   */
55215:   i = pParent->nOverflow + pParent->nCell;
55216:   if( i<2 ){
55217:     nxDiv = 0;
55218:     nOld = i+1;
55219:   }else{
55220:     nOld = 3;
55221:     if( iParentIdx==0 ){                 
55222:       nxDiv = 0;
55223:     }else if( iParentIdx==i ){
55224:       nxDiv = i-2;
55225:     }else{
55226:       nxDiv = iParentIdx-1;
55227:     }
55228:     i = 2;
55229:   }
55230:   if( (i+nxDiv-pParent->nOverflow)==pParent->nCell ){
55231:     pRight = &pParent->aData[pParent->hdrOffset+8];
55232:   }else{
55233:     pRight = findCell(pParent, i+nxDiv-pParent->nOverflow);
55234:   }
55235:   pgno = get4byte(pRight);
55236:   while( 1 ){
55237:     rc = getAndInitPage(pBt, pgno, &apOld[i]);
55238:     if( rc ){
55239:       memset(apOld, 0, (i+1)*sizeof(MemPage*));
55240:       goto balance_cleanup;
55241:     }
55242:     nMaxCells += 1+apOld[i]->nCell+apOld[i]->nOverflow;
55243:     if( (i--)==0 ) break;
55244: 
55245:     if( i+nxDiv==pParent->aOvfl[0].idx && pParent->nOverflow ){
55246:       apDiv[i] = pParent->aOvfl[0].pCell;
55247:       pgno = get4byte(apDiv[i]);
55248:       szNew[i] = cellSizePtr(pParent, apDiv[i]);
55249:       pParent->nOverflow = 0;
55250:     }else{
55251:       apDiv[i] = findCell(pParent, i+nxDiv-pParent->nOverflow);
55252:       pgno = get4byte(apDiv[i]);
55253:       szNew[i] = cellSizePtr(pParent, apDiv[i]);
55254: 
55255:       /* Drop the cell from the parent page. apDiv[i] still points to
55256:       ** the cell within the parent, even though it has been dropped.
55257:       ** This is safe because dropping a cell only overwrites the first
55258:       ** four bytes of it, and this function does not need the first
55259:       ** four bytes of the divider cell. So the pointer is safe to use
55260:       ** later on.  
55261:       **
55262:       ** But not if we are in secure-delete mode. In secure-delete mode,
55263:       ** the dropCell() routine will overwrite the entire cell with zeroes.
55264:       ** In this case, temporarily copy the cell into the aOvflSpace[]
55265:       ** buffer. It will be copied out again as soon as the aSpace[] buffer
55266:       ** is allocated.  */
55267:       if( pBt->btsFlags & BTS_SECURE_DELETE ){
55268:         int iOff;
55269: 
55270:         iOff = SQLITE_PTR_TO_INT(apDiv[i]) - SQLITE_PTR_TO_INT(pParent->aData);
55271:         if( (iOff+szNew[i])>(int)pBt->usableSize ){
55272:           rc = SQLITE_CORRUPT_BKPT;
55273:           memset(apOld, 0, (i+1)*sizeof(MemPage*));
55274:           goto balance_cleanup;
55275:         }else{
55276:           memcpy(&aOvflSpace[iOff], apDiv[i], szNew[i]);
55277:           apDiv[i] = &aOvflSpace[apDiv[i]-pParent->aData];
55278:         }
55279:       }
55280:       dropCell(pParent, i+nxDiv-pParent->nOverflow, szNew[i], &rc);
55281:     }
55282:   }
55283: 
55284:   /* Make nMaxCells a multiple of 4 in order to preserve 8-byte
55285:   ** alignment */
55286:   nMaxCells = (nMaxCells + 3)&~3;
55287: 
55288:   /*
55289:   ** Allocate space for memory structures
55290:   */
55291:   k = pBt->pageSize + ROUND8(sizeof(MemPage));
55292:   szScratch =
55293:        nMaxCells*sizeof(u8*)                       /* apCell */
55294:      + nMaxCells*sizeof(u16)                       /* szCell */
55295:      + pBt->pageSize                               /* aSpace1 */
55296:      + k*nOld;                                     /* Page copies (apCopy) */
55297:   apCell = sqlite3ScratchMalloc( szScratch ); 
55298:   if( apCell==0 ){
55299:     rc = SQLITE_NOMEM;
55300:     goto balance_cleanup;
55301:   }
55302:   szCell = (u16*)&apCell[nMaxCells];
55303:   aSpace1 = (u8*)&szCell[nMaxCells];
55304:   assert( EIGHT_BYTE_ALIGNMENT(aSpace1) );
55305: 
55306:   /*
55307:   ** Load pointers to all cells on sibling pages and the divider cells
55308:   ** into the local apCell[] array.  Make copies of the divider cells
55309:   ** into space obtained from aSpace1[] and remove the the divider Cells
55310:   ** from pParent.
55311:   **
55312:   ** If the siblings are on leaf pages, then the child pointers of the
55313:   ** divider cells are stripped from the cells before they are copied
55314:   ** into aSpace1[].  In this way, all cells in apCell[] are without
55315:   ** child pointers.  If siblings are not leaves, then all cell in
55316:   ** apCell[] include child pointers.  Either way, all cells in apCell[]
55317:   ** are alike.
55318:   **
55319:   ** leafCorrection:  4 if pPage is a leaf.  0 if pPage is not a leaf.
55320:   **       leafData:  1 if pPage holds key+data and pParent holds only keys.
55321:   */
55322:   leafCorrection = apOld[0]->leaf*4;
55323:   leafData = apOld[0]->hasData;
55324:   for(i=0; i<nOld; i++){
55325:     int limit;
55326:     
55327:     /* Before doing anything else, take a copy of the i'th original sibling
55328:     ** The rest of this function will use data from the copies rather
55329:     ** that the original pages since the original pages will be in the
55330:     ** process of being overwritten.  */
55331:     MemPage *pOld = apCopy[i] = (MemPage*)&aSpace1[pBt->pageSize + k*i];
55332:     memcpy(pOld, apOld[i], sizeof(MemPage));
55333:     pOld->aData = (void*)&pOld[1];
55334:     memcpy(pOld->aData, apOld[i]->aData, pBt->pageSize);
55335: 
55336:     limit = pOld->nCell+pOld->nOverflow;
55337:     if( pOld->nOverflow>0 ){
55338:       for(j=0; j<limit; j++){
55339:         assert( nCell<nMaxCells );
55340:         apCell[nCell] = findOverflowCell(pOld, j);
55341:         szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
55342:         nCell++;
55343:       }
55344:     }else{
55345:       u8 *aData = pOld->aData;
55346:       u16 maskPage = pOld->maskPage;
55347:       u16 cellOffset = pOld->cellOffset;
55348:       for(j=0; j<limit; j++){
55349:         assert( nCell<nMaxCells );
55350:         apCell[nCell] = findCellv2(aData, maskPage, cellOffset, j);
55351:         szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
55352:         nCell++;
55353:       }
55354:     }       
55355:     if( i<nOld-1 && !leafData){
55356:       u16 sz = (u16)szNew[i];
55357:       u8 *pTemp;
55358:       assert( nCell<nMaxCells );
55359:       szCell[nCell] = sz;
55360:       pTemp = &aSpace1[iSpace1];
55361:       iSpace1 += sz;
55362:       assert( sz<=pBt->maxLocal+23 );
55363:       assert( iSpace1 <= (int)pBt->pageSize );
55364:       memcpy(pTemp, apDiv[i], sz);
55365:       apCell[nCell] = pTemp+leafCorrection;
55366:       assert( leafCorrection==0 || leafCorrection==4 );
55367:       szCell[nCell] = szCell[nCell] - leafCorrection;
55368:       if( !pOld->leaf ){
55369:         assert( leafCorrection==0 );
55370:         assert( pOld->hdrOffset==0 );
55371:         /* The right pointer of the child page pOld becomes the left
55372:         ** pointer of the divider cell */
55373:         memcpy(apCell[nCell], &pOld->aData[8], 4);
55374:       }else{
55375:         assert( leafCorrection==4 );
55376:         if( szCell[nCell]<4 ){
55377:           /* Do not allow any cells smaller than 4 bytes. */
55378:           szCell[nCell] = 4;
55379:         }
55380:       }
55381:       nCell++;
55382:     }
55383:   }
55384: 
55385:   /*
55386:   ** Figure out the number of pages needed to hold all nCell cells.
55387:   ** Store this number in "k".  Also compute szNew[] which is the total
55388:   ** size of all cells on the i-th page and cntNew[] which is the index
55389:   ** in apCell[] of the cell that divides page i from page i+1.  
55390:   ** cntNew[k] should equal nCell.
55391:   **
55392:   ** Values computed by this block:
55393:   **
55394:   **           k: The total number of sibling pages
55395:   **    szNew[i]: Spaced used on the i-th sibling page.
55396:   **   cntNew[i]: Index in apCell[] and szCell[] for the first cell to
55397:   **              the right of the i-th sibling page.
55398:   ** usableSpace: Number of bytes of space available on each sibling.
55399:   ** 
55400:   */
55401:   usableSpace = pBt->usableSize - 12 + leafCorrection;
55402:   for(subtotal=k=i=0; i<nCell; i++){
55403:     assert( i<nMaxCells );
55404:     subtotal += szCell[i] + 2;
55405:     if( subtotal > usableSpace ){
55406:       szNew[k] = subtotal - szCell[i];
55407:       cntNew[k] = i;
55408:       if( leafData ){ i--; }
55409:       subtotal = 0;
55410:       k++;
55411:       if( k>NB+1 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; }
55412:     }
55413:   }
55414:   szNew[k] = subtotal;
55415:   cntNew[k] = nCell;
55416:   k++;
55417: 
55418:   /*
55419:   ** The packing computed by the previous block is biased toward the siblings
55420:   ** on the left side.  The left siblings are always nearly full, while the
55421:   ** right-most sibling might be nearly empty.  This block of code attempts
55422:   ** to adjust the packing of siblings to get a better balance.
55423:   **
55424:   ** This adjustment is more than an optimization.  The packing above might
55425:   ** be so out of balance as to be illegal.  For example, the right-most
55426:   ** sibling might be completely empty.  This adjustment is not optional.
55427:   */
55428:   for(i=k-1; i>0; i--){
55429:     int szRight = szNew[i];  /* Size of sibling on the right */
55430:     int szLeft = szNew[i-1]; /* Size of sibling on the left */
55431:     int r;              /* Index of right-most cell in left sibling */
55432:     int d;              /* Index of first cell to the left of right sibling */
55433: 
55434:     r = cntNew[i-1] - 1;
55435:     d = r + 1 - leafData;
55436:     assert( d<nMaxCells );
55437:     assert( r<nMaxCells );
55438:     while( szRight==0 || szRight+szCell[d]+2<=szLeft-(szCell[r]+2) ){
55439:       szRight += szCell[d] + 2;
55440:       szLeft -= szCell[r] + 2;
55441:       cntNew[i-1]--;
55442:       r = cntNew[i-1] - 1;
55443:       d = r + 1 - leafData;
55444:     }
55445:     szNew[i] = szRight;
55446:     szNew[i-1] = szLeft;
55447:   }
55448: 
55449:   /* Either we found one or more cells (cntnew[0])>0) or pPage is
55450:   ** a virtual root page.  A virtual root page is when the real root
55451:   ** page is page 1 and we are the only child of that page.
55452:   **
55453:   ** UPDATE:  The assert() below is not necessarily true if the database
55454:   ** file is corrupt.  The corruption will be detected and reported later
55455:   ** in this procedure so there is no need to act upon it now.
55456:   */
55457: #if 0
55458:   assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) );
55459: #endif
55460: 
55461:   TRACE(("BALANCE: old: %d %d %d  ",
55462:     apOld[0]->pgno, 
55463:     nOld>=2 ? apOld[1]->pgno : 0,
55464:     nOld>=3 ? apOld[2]->pgno : 0
55465:   ));
55466: 
55467:   /*
55468:   ** Allocate k new pages.  Reuse old pages where possible.
55469:   */
55470:   if( apOld[0]->pgno<=1 ){
55471:     rc = SQLITE_CORRUPT_BKPT;
55472:     goto balance_cleanup;
55473:   }
55474:   pageFlags = apOld[0]->aData[0];
55475:   for(i=0; i<k; i++){
55476:     MemPage *pNew;
55477:     if( i<nOld ){
55478:       pNew = apNew[i] = apOld[i];
55479:       apOld[i] = 0;
55480:       rc = sqlite3PagerWrite(pNew->pDbPage);
55481:       nNew++;
55482:       if( rc ) goto balance_cleanup;
55483:     }else{
55484:       assert( i>0 );
55485:       rc = allocateBtreePage(pBt, &pNew, &pgno, pgno, 0);
55486:       if( rc ) goto balance_cleanup;
55487:       apNew[i] = pNew;
55488:       nNew++;
55489: 
55490:       /* Set the pointer-map entry for the new sibling page. */
55491:       if( ISAUTOVACUUM ){
55492:         ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc);
55493:         if( rc!=SQLITE_OK ){
55494:           goto balance_cleanup;
55495:         }
55496:       }
55497:     }
55498:   }
55499: 
55500:   /* Free any old pages that were not reused as new pages.
55501:   */
55502:   while( i<nOld ){
55503:     freePage(apOld[i], &rc);
55504:     if( rc ) goto balance_cleanup;
55505:     releasePage(apOld[i]);
55506:     apOld[i] = 0;
55507:     i++;
55508:   }
55509: 
55510:   /*
55511:   ** Put the new pages in accending order.  This helps to
55512:   ** keep entries in the disk file in order so that a scan
55513:   ** of the table is a linear scan through the file.  That
55514:   ** in turn helps the operating system to deliver pages
55515:   ** from the disk more rapidly.
55516:   **
55517:   ** An O(n^2) insertion sort algorithm is used, but since
55518:   ** n is never more than NB (a small constant), that should
55519:   ** not be a problem.
55520:   **
55521:   ** When NB==3, this one optimization makes the database
55522:   ** about 25% faster for large insertions and deletions.
55523:   */
55524:   for(i=0; i<k-1; i++){
55525:     int minV = apNew[i]->pgno;
55526:     int minI = i;
55527:     for(j=i+1; j<k; j++){
55528:       if( apNew[j]->pgno<(unsigned)minV ){
55529:         minI = j;
55530:         minV = apNew[j]->pgno;
55531:       }
55532:     }
55533:     if( minI>i ){
55534:       MemPage *pT;
55535:       pT = apNew[i];
55536:       apNew[i] = apNew[minI];
55537:       apNew[minI] = pT;
55538:     }
55539:   }
55540:   TRACE(("new: %d(%d) %d(%d) %d(%d) %d(%d) %d(%d)\n",
55541:     apNew[0]->pgno, szNew[0],
55542:     nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0,
55543:     nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0,
55544:     nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0,
55545:     nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0));
55546: 
55547:   assert( sqlite3PagerIswriteable(pParent->pDbPage) );
55548:   put4byte(pRight, apNew[nNew-1]->pgno);
55549: 
55550:   /*
55551:   ** Evenly distribute the data in apCell[] across the new pages.
55552:   ** Insert divider cells into pParent as necessary.
55553:   */
55554:   j = 0;
55555:   for(i=0; i<nNew; i++){
55556:     /* Assemble the new sibling page. */
55557:     MemPage *pNew = apNew[i];
55558:     assert( j<nMaxCells );
55559:     zeroPage(pNew, pageFlags);
55560:     assemblePage(pNew, cntNew[i]-j, &apCell[j], &szCell[j]);
55561:     assert( pNew->nCell>0 || (nNew==1 && cntNew[0]==0) );
55562:     assert( pNew->nOverflow==0 );
55563: 
55564:     j = cntNew[i];
55565: 
55566:     /* If the sibling page assembled above was not the right-most sibling,
55567:     ** insert a divider cell into the parent page.
55568:     */
55569:     assert( i<nNew-1 || j==nCell );
55570:     if( j<nCell ){
55571:       u8 *pCell;
55572:       u8 *pTemp;
55573:       int sz;
55574: 
55575:       assert( j<nMaxCells );
55576:       pCell = apCell[j];
55577:       sz = szCell[j] + leafCorrection;
55578:       pTemp = &aOvflSpace[iOvflSpace];
55579:       if( !pNew->leaf ){
55580:         memcpy(&pNew->aData[8], pCell, 4);
55581:       }else if( leafData ){
55582:         /* If the tree is a leaf-data tree, and the siblings are leaves, 
55583:         ** then there is no divider cell in apCell[]. Instead, the divider 
55584:         ** cell consists of the integer key for the right-most cell of 
55585:         ** the sibling-page assembled above only.
55586:         */
55587:         CellInfo info;
55588:         j--;
55589:         btreeParseCellPtr(pNew, apCell[j], &info);
55590:         pCell = pTemp;
55591:         sz = 4 + putVarint(&pCell[4], info.nKey);
55592:         pTemp = 0;
55593:       }else{
55594:         pCell -= 4;
55595:         /* Obscure case for non-leaf-data trees: If the cell at pCell was
55596:         ** previously stored on a leaf node, and its reported size was 4
55597:         ** bytes, then it may actually be smaller than this 
55598:         ** (see btreeParseCellPtr(), 4 bytes is the minimum size of
55599:         ** any cell). But it is important to pass the correct size to 
55600:         ** insertCell(), so reparse the cell now.
55601:         **
55602:         ** Note that this can never happen in an SQLite data file, as all
55603:         ** cells are at least 4 bytes. It only happens in b-trees used
55604:         ** to evaluate "IN (SELECT ...)" and similar clauses.
55605:         */
55606:         if( szCell[j]==4 ){
55607:           assert(leafCorrection==4);
55608:           sz = cellSizePtr(pParent, pCell);
55609:         }
55610:       }
55611:       iOvflSpace += sz;
55612:       assert( sz<=pBt->maxLocal+23 );
55613:       assert( iOvflSpace <= (int)pBt->pageSize );
55614:       insertCell(pParent, nxDiv, pCell, sz, pTemp, pNew->pgno, &rc);
55615:       if( rc!=SQLITE_OK ) goto balance_cleanup;
55616:       assert( sqlite3PagerIswriteable(pParent->pDbPage) );
55617: 
55618:       j++;
55619:       nxDiv++;
55620:     }
55621:   }
55622:   assert( j==nCell );
55623:   assert( nOld>0 );
55624:   assert( nNew>0 );
55625:   if( (pageFlags & PTF_LEAF)==0 ){
55626:     u8 *zChild = &apCopy[nOld-1]->aData[8];
55627:     memcpy(&apNew[nNew-1]->aData[8], zChild, 4);
55628:   }
55629: 
55630:   if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){
55631:     /* The root page of the b-tree now contains no cells. The only sibling
55632:     ** page is the right-child of the parent. Copy the contents of the
55633:     ** child page into the parent, decreasing the overall height of the
55634:     ** b-tree structure by one. This is described as the "balance-shallower"
55635:     ** sub-algorithm in some documentation.
55636:     **
55637:     ** If this is an auto-vacuum database, the call to copyNodeContent() 
55638:     ** sets all pointer-map entries corresponding to database image pages 
55639:     ** for which the pointer is stored within the content being copied.
55640:     **
55641:     ** The second assert below verifies that the child page is defragmented
55642:     ** (it must be, as it was just reconstructed using assemblePage()). This
55643:     ** is important if the parent page happens to be page 1 of the database
55644:     ** image.  */
55645:     assert( nNew==1 );
55646:     assert( apNew[0]->nFree == 
55647:         (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2) 
55648:     );
55649:     copyNodeContent(apNew[0], pParent, &rc);
55650:     freePage(apNew[0], &rc);
55651:   }else if( ISAUTOVACUUM ){
55652:     /* Fix the pointer-map entries for all the cells that were shifted around. 
55653:     ** There are several different types of pointer-map entries that need to
55654:     ** be dealt with by this routine. Some of these have been set already, but
55655:     ** many have not. The following is a summary:
55656:     **
55657:     **   1) The entries associated with new sibling pages that were not
55658:     **      siblings when this function was called. These have already
55659:     **      been set. We don't need to worry about old siblings that were
55660:     **      moved to the free-list - the freePage() code has taken care
55661:     **      of those.
55662:     **
55663:     **   2) The pointer-map entries associated with the first overflow
55664:     **      page in any overflow chains used by new divider cells. These 
55665:     **      have also already been taken care of by the insertCell() code.
55666:     **
55667:     **   3) If the sibling pages are not leaves, then the child pages of
55668:     **      cells stored on the sibling pages may need to be updated.
55669:     **
55670:     **   4) If the sibling pages are not internal intkey nodes, then any
55671:     **      overflow pages used by these cells may need to be updated
55672:     **      (internal intkey nodes never contain pointers to overflow pages).
55673:     **
55674:     **   5) If the sibling pages are not leaves, then the pointer-map
55675:     **      entries for the right-child pages of each sibling may need
55676:     **      to be updated.
55677:     **
55678:     ** Cases 1 and 2 are dealt with above by other code. The next
55679:     ** block deals with cases 3 and 4 and the one after that, case 5. Since
55680:     ** setting a pointer map entry is a relatively expensive operation, this
55681:     ** code only sets pointer map entries for child or overflow pages that have
55682:     ** actually moved between pages.  */
55683:     MemPage *pNew = apNew[0];
55684:     MemPage *pOld = apCopy[0];
55685:     int nOverflow = pOld->nOverflow;
55686:     int iNextOld = pOld->nCell + nOverflow;
55687:     int iOverflow = (nOverflow ? pOld->aOvfl[0].idx : -1);
55688:     j = 0;                             /* Current 'old' sibling page */
55689:     k = 0;                             /* Current 'new' sibling page */
55690:     for(i=0; i<nCell; i++){
55691:       int isDivider = 0;
55692:       while( i==iNextOld ){
55693:         /* Cell i is the cell immediately following the last cell on old
55694:         ** sibling page j. If the siblings are not leaf pages of an
55695:         ** intkey b-tree, then cell i was a divider cell. */
55696:         assert( j+1 < ArraySize(apCopy) );
55697:         pOld = apCopy[++j];
55698:         iNextOld = i + !leafData + pOld->nCell + pOld->nOverflow;
55699:         if( pOld->nOverflow ){
55700:           nOverflow = pOld->nOverflow;
55701:           iOverflow = i + !leafData + pOld->aOvfl[0].idx;
55702:         }
55703:         isDivider = !leafData;  
55704:       }
55705: 
55706:       assert(nOverflow>0 || iOverflow<i );
55707:       assert(nOverflow<2 || pOld->aOvfl[0].idx==pOld->aOvfl[1].idx-1);
55708:       assert(nOverflow<3 || pOld->aOvfl[1].idx==pOld->aOvfl[2].idx-1);
55709:       if( i==iOverflow ){
55710:         isDivider = 1;
55711:         if( (--nOverflow)>0 ){
55712:           iOverflow++;
55713:         }
55714:       }
55715: 
55716:       if( i==cntNew[k] ){
55717:         /* Cell i is the cell immediately following the last cell on new
55718:         ** sibling page k. If the siblings are not leaf pages of an
55719:         ** intkey b-tree, then cell i is a divider cell.  */
55720:         pNew = apNew[++k];
55721:         if( !leafData ) continue;
55722:       }
55723:       assert( j<nOld );
55724:       assert( k<nNew );
55725: 
55726:       /* If the cell was originally divider cell (and is not now) or
55727:       ** an overflow cell, or if the cell was located on a different sibling
55728:       ** page before the balancing, then the pointer map entries associated
55729:       ** with any child or overflow pages need to be updated.  */
55730:       if( isDivider || pOld->pgno!=pNew->pgno ){
55731:         if( !leafCorrection ){
55732:           ptrmapPut(pBt, get4byte(apCell[i]), PTRMAP_BTREE, pNew->pgno, &rc);
55733:         }
55734:         if( szCell[i]>pNew->minLocal ){
55735:           ptrmapPutOvflPtr(pNew, apCell[i], &rc);
55736:         }
55737:       }
55738:     }
55739: 
55740:     if( !leafCorrection ){
55741:       for(i=0; i<nNew; i++){
55742:         u32 key = get4byte(&apNew[i]->aData[8]);
55743:         ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc);
55744:       }
55745:     }
55746: 
55747: #if 0
55748:     /* The ptrmapCheckPages() contains assert() statements that verify that
55749:     ** all pointer map pages are set correctly. This is helpful while 
55750:     ** debugging. This is usually disabled because a corrupt database may
55751:     ** cause an assert() statement to fail.  */
55752:     ptrmapCheckPages(apNew, nNew);
55753:     ptrmapCheckPages(&pParent, 1);
55754: #endif
55755:   }
55756: 
55757:   assert( pParent->isInit );
55758:   TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n",
55759:           nOld, nNew, nCell));
55760: 
55761:   /*
55762:   ** Cleanup before returning.
55763:   */
55764: balance_cleanup:
55765:   sqlite3ScratchFree(apCell);
55766:   for(i=0; i<nOld; i++){
55767:     releasePage(apOld[i]);
55768:   }
55769:   for(i=0; i<nNew; i++){
55770:     releasePage(apNew[i]);
55771:   }
55772: 
55773:   return rc;
55774: }
55775: 
55776: 
55777: /*
55778: ** This function is called when the root page of a b-tree structure is
55779: ** overfull (has one or more overflow pages).
55780: **
55781: ** A new child page is allocated and the contents of the current root
55782: ** page, including overflow cells, are copied into the child. The root
55783: ** page is then overwritten to make it an empty page with the right-child 
55784: ** pointer pointing to the new page.
55785: **
55786: ** Before returning, all pointer-map entries corresponding to pages 
55787: ** that the new child-page now contains pointers to are updated. The
55788: ** entry corresponding to the new right-child pointer of the root
55789: ** page is also updated.
55790: **
55791: ** If successful, *ppChild is set to contain a reference to the child 
55792: ** page and SQLITE_OK is returned. In this case the caller is required
55793: ** to call releasePage() on *ppChild exactly once. If an error occurs,
55794: ** an error code is returned and *ppChild is set to 0.
55795: */
55796: static int balance_deeper(MemPage *pRoot, MemPage **ppChild){
55797:   int rc;                        /* Return value from subprocedures */
55798:   MemPage *pChild = 0;           /* Pointer to a new child page */
55799:   Pgno pgnoChild = 0;            /* Page number of the new child page */
55800:   BtShared *pBt = pRoot->pBt;    /* The BTree */
55801: 
55802:   assert( pRoot->nOverflow>0 );
55803:   assert( sqlite3_mutex_held(pBt->mutex) );
55804: 
55805:   /* Make pRoot, the root page of the b-tree, writable. Allocate a new 
55806:   ** page that will become the new right-child of pPage. Copy the contents
55807:   ** of the node stored on pRoot into the new child page.
55808:   */
55809:   rc = sqlite3PagerWrite(pRoot->pDbPage);
55810:   if( rc==SQLITE_OK ){
55811:     rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0);
55812:     copyNodeContent(pRoot, pChild, &rc);
55813:     if( ISAUTOVACUUM ){
55814:       ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc);
55815:     }
55816:   }
55817:   if( rc ){
55818:     *ppChild = 0;
55819:     releasePage(pChild);
55820:     return rc;
55821:   }
55822:   assert( sqlite3PagerIswriteable(pChild->pDbPage) );
55823:   assert( sqlite3PagerIswriteable(pRoot->pDbPage) );
55824:   assert( pChild->nCell==pRoot->nCell );
55825: 
55826:   TRACE(("BALANCE: copy root %d into %d\n", pRoot->pgno, pChild->pgno));
55827: 
55828:   /* Copy the overflow cells from pRoot to pChild */
55829:   memcpy(pChild->aOvfl, pRoot->aOvfl, pRoot->nOverflow*sizeof(pRoot->aOvfl[0]));
55830:   pChild->nOverflow = pRoot->nOverflow;
55831: 
55832:   /* Zero the contents of pRoot. Then install pChild as the right-child. */
55833:   zeroPage(pRoot, pChild->aData[0] & ~PTF_LEAF);
55834:   put4byte(&pRoot->aData[pRoot->hdrOffset+8], pgnoChild);
55835: 
55836:   *ppChild = pChild;
55837:   return SQLITE_OK;
55838: }
55839: 
55840: /*
55841: ** The page that pCur currently points to has just been modified in
55842: ** some way. This function figures out if this modification means the
55843: ** tree needs to be balanced, and if so calls the appropriate balancing 
55844: ** routine. Balancing routines are:
55845: **
55846: **   balance_quick()
55847: **   balance_deeper()
55848: **   balance_nonroot()
55849: */
55850: static int balance(BtCursor *pCur){
55851:   int rc = SQLITE_OK;
55852:   const int nMin = pCur->pBt->usableSize * 2 / 3;
55853:   u8 aBalanceQuickSpace[13];
55854:   u8 *pFree = 0;
55855: 
55856:   TESTONLY( int balance_quick_called = 0 );
55857:   TESTONLY( int balance_deeper_called = 0 );
55858: 
55859:   do {
55860:     int iPage = pCur->iPage;
55861:     MemPage *pPage = pCur->apPage[iPage];
55862: 
55863:     if( iPage==0 ){
55864:       if( pPage->nOverflow ){
55865:         /* The root page of the b-tree is overfull. In this case call the
55866:         ** balance_deeper() function to create a new child for the root-page
55867:         ** and copy the current contents of the root-page to it. The
55868:         ** next iteration of the do-loop will balance the child page.
55869:         */ 
55870:         assert( (balance_deeper_called++)==0 );
55871:         rc = balance_deeper(pPage, &pCur->apPage[1]);
55872:         if( rc==SQLITE_OK ){
55873:           pCur->iPage = 1;
55874:           pCur->aiIdx[0] = 0;
55875:           pCur->aiIdx[1] = 0;
55876:           assert( pCur->apPage[1]->nOverflow );
55877:         }
55878:       }else{
55879:         break;
55880:       }
55881:     }else if( pPage->nOverflow==0 && pPage->nFree<=nMin ){
55882:       break;
55883:     }else{
55884:       MemPage * const pParent = pCur->apPage[iPage-1];
55885:       int const iIdx = pCur->aiIdx[iPage-1];
55886: 
55887:       rc = sqlite3PagerWrite(pParent->pDbPage);
55888:       if( rc==SQLITE_OK ){
55889: #ifndef SQLITE_OMIT_QUICKBALANCE
55890:         if( pPage->hasData
55891:          && pPage->nOverflow==1
55892:          && pPage->aOvfl[0].idx==pPage->nCell
55893:          && pParent->pgno!=1
55894:          && pParent->nCell==iIdx
55895:         ){
55896:           /* Call balance_quick() to create a new sibling of pPage on which
55897:           ** to store the overflow cell. balance_quick() inserts a new cell
55898:           ** into pParent, which may cause pParent overflow. If this
55899:           ** happens, the next interation of the do-loop will balance pParent 
55900:           ** use either balance_nonroot() or balance_deeper(). Until this
55901:           ** happens, the overflow cell is stored in the aBalanceQuickSpace[]
55902:           ** buffer. 
55903:           **
55904:           ** The purpose of the following assert() is to check that only a
55905:           ** single call to balance_quick() is made for each call to this
55906:           ** function. If this were not verified, a subtle bug involving reuse
55907:           ** of the aBalanceQuickSpace[] might sneak in.
55908:           */
55909:           assert( (balance_quick_called++)==0 );
55910:           rc = balance_quick(pParent, pPage, aBalanceQuickSpace);
55911:         }else
55912: #endif
55913:         {
55914:           /* In this case, call balance_nonroot() to redistribute cells
55915:           ** between pPage and up to 2 of its sibling pages. This involves
55916:           ** modifying the contents of pParent, which may cause pParent to
55917:           ** become overfull or underfull. The next iteration of the do-loop
55918:           ** will balance the parent page to correct this.
55919:           ** 
55920:           ** If the parent page becomes overfull, the overflow cell or cells
55921:           ** are stored in the pSpace buffer allocated immediately below. 
55922:           ** A subsequent iteration of the do-loop will deal with this by
55923:           ** calling balance_nonroot() (balance_deeper() may be called first,
55924:           ** but it doesn't deal with overflow cells - just moves them to a
55925:           ** different page). Once this subsequent call to balance_nonroot() 
55926:           ** has completed, it is safe to release the pSpace buffer used by
55927:           ** the previous call, as the overflow cell data will have been 
55928:           ** copied either into the body of a database page or into the new
55929:           ** pSpace buffer passed to the latter call to balance_nonroot().
55930:           */
55931:           u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize);
55932:           rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1);
55933:           if( pFree ){
55934:             /* If pFree is not NULL, it points to the pSpace buffer used 
55935:             ** by a previous call to balance_nonroot(). Its contents are
55936:             ** now stored either on real database pages or within the 
55937:             ** new pSpace buffer, so it may be safely freed here. */
55938:             sqlite3PageFree(pFree);
55939:           }
55940: 
55941:           /* The pSpace buffer will be freed after the next call to
55942:           ** balance_nonroot(), or just before this function returns, whichever
55943:           ** comes first. */
55944:           pFree = pSpace;
55945:         }
55946:       }
55947: 
55948:       pPage->nOverflow = 0;
55949: 
55950:       /* The next iteration of the do-loop balances the parent page. */
55951:       releasePage(pPage);
55952:       pCur->iPage--;
55953:     }
55954:   }while( rc==SQLITE_OK );
55955: 
55956:   if( pFree ){
55957:     sqlite3PageFree(pFree);
55958:   }
55959:   return rc;
55960: }
55961: 
55962: 
55963: /*
55964: ** Insert a new record into the BTree.  The key is given by (pKey,nKey)
55965: ** and the data is given by (pData,nData).  The cursor is used only to
55966: ** define what table the record should be inserted into.  The cursor
55967: ** is left pointing at a random location.
55968: **
55969: ** For an INTKEY table, only the nKey value of the key is used.  pKey is
55970: ** ignored.  For a ZERODATA table, the pData and nData are both ignored.
55971: **
55972: ** If the seekResult parameter is non-zero, then a successful call to
55973: ** MovetoUnpacked() to seek cursor pCur to (pKey, nKey) has already
55974: ** been performed. seekResult is the search result returned (a negative
55975: ** number if pCur points at an entry that is smaller than (pKey, nKey), or
55976: ** a positive value if pCur points at an etry that is larger than 
55977: ** (pKey, nKey)). 
55978: **
55979: ** If the seekResult parameter is non-zero, then the caller guarantees that
55980: ** cursor pCur is pointing at the existing copy of a row that is to be
55981: ** overwritten.  If the seekResult parameter is 0, then cursor pCur may
55982: ** point to any entry or to no entry at all and so this function has to seek
55983: ** the cursor before the new key can be inserted.
55984: */
55985: SQLITE_PRIVATE int sqlite3BtreeInsert(
55986:   BtCursor *pCur,                /* Insert data into the table of this cursor */
55987:   const void *pKey, i64 nKey,    /* The key of the new record */
55988:   const void *pData, int nData,  /* The data of the new record */
55989:   int nZero,                     /* Number of extra 0 bytes to append to data */
55990:   int appendBias,                /* True if this is likely an append */
55991:   int seekResult                 /* Result of prior MovetoUnpacked() call */
55992: ){
55993:   int rc;
55994:   int loc = seekResult;          /* -1: before desired location  +1: after */
55995:   int szNew = 0;
55996:   int idx;
55997:   MemPage *pPage;
55998:   Btree *p = pCur->pBtree;
55999:   BtShared *pBt = p->pBt;
56000:   unsigned char *oldCell;
56001:   unsigned char *newCell = 0;
56002: 
56003:   if( pCur->eState==CURSOR_FAULT ){
56004:     assert( pCur->skipNext!=SQLITE_OK );
56005:     return pCur->skipNext;
56006:   }
56007: 
56008:   assert( cursorHoldsMutex(pCur) );
56009:   assert( pCur->wrFlag && pBt->inTransaction==TRANS_WRITE
56010:               && (pBt->btsFlags & BTS_READ_ONLY)==0 );
56011:   assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
56012: 
56013:   /* Assert that the caller has been consistent. If this cursor was opened
56014:   ** expecting an index b-tree, then the caller should be inserting blob
56015:   ** keys with no associated data. If the cursor was opened expecting an
56016:   ** intkey table, the caller should be inserting integer keys with a
56017:   ** blob of associated data.  */
56018:   assert( (pKey==0)==(pCur->pKeyInfo==0) );
56019: 
56020:   /* If this is an insert into a table b-tree, invalidate any incrblob 
56021:   ** cursors open on the row being replaced (assuming this is a replace
56022:   ** operation - if it is not, the following is a no-op).  */
56023:   if( pCur->pKeyInfo==0 ){
56024:     invalidateIncrblobCursors(p, nKey, 0);
56025:   }
56026: 
56027:   /* Save the positions of any other cursors open on this table.
56028:   **
56029:   ** In some cases, the call to btreeMoveto() below is a no-op. For
56030:   ** example, when inserting data into a table with auto-generated integer
56031:   ** keys, the VDBE layer invokes sqlite3BtreeLast() to figure out the 
56032:   ** integer key to use. It then calls this function to actually insert the 
56033:   ** data into the intkey B-Tree. In this case btreeMoveto() recognizes
56034:   ** that the cursor is already where it needs to be and returns without
56035:   ** doing any work. To avoid thwarting these optimizations, it is important
56036:   ** not to clear the cursor here.
56037:   */
56038:   rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);
56039:   if( rc ) return rc;
56040:   if( !loc ){
56041:     rc = btreeMoveto(pCur, pKey, nKey, appendBias, &loc);
56042:     if( rc ) return rc;
56043:   }
56044:   assert( pCur->eState==CURSOR_VALID || (pCur->eState==CURSOR_INVALID && loc) );
56045: 
56046:   pPage = pCur->apPage[pCur->iPage];
56047:   assert( pPage->intKey || nKey>=0 );
56048:   assert( pPage->leaf || !pPage->intKey );
56049: 
56050:   TRACE(("INSERT: table=%d nkey=%lld ndata=%d page=%d %s\n",
56051:           pCur->pgnoRoot, nKey, nData, pPage->pgno,
56052:           loc==0 ? "overwrite" : "new entry"));
56053:   assert( pPage->isInit );
56054:   allocateTempSpace(pBt);
56055:   newCell = pBt->pTmpSpace;
56056:   if( newCell==0 ) return SQLITE_NOMEM;
56057:   rc = fillInCell(pPage, newCell, pKey, nKey, pData, nData, nZero, &szNew);
56058:   if( rc ) goto end_insert;
56059:   assert( szNew==cellSizePtr(pPage, newCell) );
56060:   assert( szNew <= MX_CELL_SIZE(pBt) );
56061:   idx = pCur->aiIdx[pCur->iPage];
56062:   if( loc==0 ){
56063:     u16 szOld;
56064:     assert( idx<pPage->nCell );
56065:     rc = sqlite3PagerWrite(pPage->pDbPage);
56066:     if( rc ){
56067:       goto end_insert;
56068:     }
56069:     oldCell = findCell(pPage, idx);
56070:     if( !pPage->leaf ){
56071:       memcpy(newCell, oldCell, 4);
56072:     }
56073:     szOld = cellSizePtr(pPage, oldCell);
56074:     rc = clearCell(pPage, oldCell);
56075:     dropCell(pPage, idx, szOld, &rc);
56076:     if( rc ) goto end_insert;
56077:   }else if( loc<0 && pPage->nCell>0 ){
56078:     assert( pPage->leaf );
56079:     idx = ++pCur->aiIdx[pCur->iPage];
56080:   }else{
56081:     assert( pPage->leaf );
56082:   }
56083:   insertCell(pPage, idx, newCell, szNew, 0, 0, &rc);
56084:   assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 );
56085: 
56086:   /* If no error has occured and pPage has an overflow cell, call balance() 
56087:   ** to redistribute the cells within the tree. Since balance() may move
56088:   ** the cursor, zero the BtCursor.info.nSize and BtCursor.validNKey
56089:   ** variables.
56090:   **
56091:   ** Previous versions of SQLite called moveToRoot() to move the cursor
56092:   ** back to the root page as balance() used to invalidate the contents
56093:   ** of BtCursor.apPage[] and BtCursor.aiIdx[]. Instead of doing that,
56094:   ** set the cursor state to "invalid". This makes common insert operations
56095:   ** slightly faster.
56096:   **
56097:   ** There is a subtle but important optimization here too. When inserting
56098:   ** multiple records into an intkey b-tree using a single cursor (as can
56099:   ** happen while processing an "INSERT INTO ... SELECT" statement), it
56100:   ** is advantageous to leave the cursor pointing to the last entry in
56101:   ** the b-tree if possible. If the cursor is left pointing to the last
56102:   ** entry in the table, and the next row inserted has an integer key
56103:   ** larger than the largest existing key, it is possible to insert the
56104:   ** row without seeking the cursor. This can be a big performance boost.
56105:   */
56106:   pCur->info.nSize = 0;
56107:   pCur->validNKey = 0;
56108:   if( rc==SQLITE_OK && pPage->nOverflow ){
56109:     rc = balance(pCur);
56110: 
56111:     /* Must make sure nOverflow is reset to zero even if the balance()
56112:     ** fails. Internal data structure corruption will result otherwise. 
56113:     ** Also, set the cursor state to invalid. This stops saveCursorPosition()
56114:     ** from trying to save the current position of the cursor.  */
56115:     pCur->apPage[pCur->iPage]->nOverflow = 0;
56116:     pCur->eState = CURSOR_INVALID;
56117:   }
56118:   assert( pCur->apPage[pCur->iPage]->nOverflow==0 );
56119: 
56120: end_insert:
56121:   return rc;
56122: }
56123: 
56124: /*
56125: ** Delete the entry that the cursor is pointing to.  The cursor
56126: ** is left pointing at a arbitrary location.
56127: */
56128: SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){
56129:   Btree *p = pCur->pBtree;
56130:   BtShared *pBt = p->pBt;              
56131:   int rc;                              /* Return code */
56132:   MemPage *pPage;                      /* Page to delete cell from */
56133:   unsigned char *pCell;                /* Pointer to cell to delete */
56134:   int iCellIdx;                        /* Index of cell to delete */
56135:   int iCellDepth;                      /* Depth of node containing pCell */ 
56136: 
56137:   assert( cursorHoldsMutex(pCur) );
56138:   assert( pBt->inTransaction==TRANS_WRITE );
56139:   assert( (pBt->btsFlags & BTS_READ_ONLY)==0 );
56140:   assert( pCur->wrFlag );
56141:   assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
56142:   assert( !hasReadConflicts(p, pCur->pgnoRoot) );
56143: 
56144:   if( NEVER(pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell) 
56145:    || NEVER(pCur->eState!=CURSOR_VALID)
56146:   ){
56147:     return SQLITE_ERROR;  /* Something has gone awry. */
56148:   }
56149: 
56150:   /* If this is a delete operation to remove a row from a table b-tree,
56151:   ** invalidate any incrblob cursors open on the row being deleted.  */
56152:   if( pCur->pKeyInfo==0 ){
56153:     invalidateIncrblobCursors(p, pCur->info.nKey, 0);
56154:   }
56155: 
56156:   iCellDepth = pCur->iPage;
56157:   iCellIdx = pCur->aiIdx[iCellDepth];
56158:   pPage = pCur->apPage[iCellDepth];
56159:   pCell = findCell(pPage, iCellIdx);
56160: 
56161:   /* If the page containing the entry to delete is not a leaf page, move
56162:   ** the cursor to the largest entry in the tree that is smaller than
56163:   ** the entry being deleted. This cell will replace the cell being deleted
56164:   ** from the internal node. The 'previous' entry is used for this instead
56165:   ** of the 'next' entry, as the previous entry is always a part of the
56166:   ** sub-tree headed by the child page of the cell being deleted. This makes
56167:   ** balancing the tree following the delete operation easier.  */
56168:   if( !pPage->leaf ){
56169:     int notUsed;
56170:     rc = sqlite3BtreePrevious(pCur, &notUsed);
56171:     if( rc ) return rc;
56172:   }
56173: 
56174:   /* Save the positions of any other cursors open on this table before
56175:   ** making any modifications. Make the page containing the entry to be 
56176:   ** deleted writable. Then free any overflow pages associated with the 
56177:   ** entry and finally remove the cell itself from within the page.  
56178:   */
56179:   rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);
56180:   if( rc ) return rc;
56181:   rc = sqlite3PagerWrite(pPage->pDbPage);
56182:   if( rc ) return rc;
56183:   rc = clearCell(pPage, pCell);
56184:   dropCell(pPage, iCellIdx, cellSizePtr(pPage, pCell), &rc);
56185:   if( rc ) return rc;
56186: 
56187:   /* If the cell deleted was not located on a leaf page, then the cursor
56188:   ** is currently pointing to the largest entry in the sub-tree headed
56189:   ** by the child-page of the cell that was just deleted from an internal
56190:   ** node. The cell from the leaf node needs to be moved to the internal
56191:   ** node to replace the deleted cell.  */
56192:   if( !pPage->leaf ){
56193:     MemPage *pLeaf = pCur->apPage[pCur->iPage];
56194:     int nCell;
56195:     Pgno n = pCur->apPage[iCellDepth+1]->pgno;
56196:     unsigned char *pTmp;
56197: 
56198:     pCell = findCell(pLeaf, pLeaf->nCell-1);
56199:     nCell = cellSizePtr(pLeaf, pCell);
56200:     assert( MX_CELL_SIZE(pBt) >= nCell );
56201: 
56202:     allocateTempSpace(pBt);
56203:     pTmp = pBt->pTmpSpace;
56204: 
56205:     rc = sqlite3PagerWrite(pLeaf->pDbPage);
56206:     insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n, &rc);
56207:     dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc);
56208:     if( rc ) return rc;
56209:   }
56210: 
56211:   /* Balance the tree. If the entry deleted was located on a leaf page,
56212:   ** then the cursor still points to that page. In this case the first
56213:   ** call to balance() repairs the tree, and the if(...) condition is
56214:   ** never true.
56215:   **
56216:   ** Otherwise, if the entry deleted was on an internal node page, then
56217:   ** pCur is pointing to the leaf page from which a cell was removed to
56218:   ** replace the cell deleted from the internal node. This is slightly
56219:   ** tricky as the leaf node may be underfull, and the internal node may
56220:   ** be either under or overfull. In this case run the balancing algorithm
56221:   ** on the leaf node first. If the balance proceeds far enough up the
56222:   ** tree that we can be sure that any problem in the internal node has
56223:   ** been corrected, so be it. Otherwise, after balancing the leaf node,
56224:   ** walk the cursor up the tree to the internal node and balance it as 
56225:   ** well.  */
56226:   rc = balance(pCur);
56227:   if( rc==SQLITE_OK && pCur->iPage>iCellDepth ){
56228:     while( pCur->iPage>iCellDepth ){
56229:       releasePage(pCur->apPage[pCur->iPage--]);
56230:     }
56231:     rc = balance(pCur);
56232:   }
56233: 
56234:   if( rc==SQLITE_OK ){
56235:     moveToRoot(pCur);
56236:   }
56237:   return rc;
56238: }
56239: 
56240: /*
56241: ** Create a new BTree table.  Write into *piTable the page
56242: ** number for the root page of the new table.
56243: **
56244: ** The type of type is determined by the flags parameter.  Only the
56245: ** following values of flags are currently in use.  Other values for
56246: ** flags might not work:
56247: **
56248: **     BTREE_INTKEY|BTREE_LEAFDATA     Used for SQL tables with rowid keys
56249: **     BTREE_ZERODATA                  Used for SQL indices
56250: */
56251: static int btreeCreateTable(Btree *p, int *piTable, int createTabFlags){
56252:   BtShared *pBt = p->pBt;
56253:   MemPage *pRoot;
56254:   Pgno pgnoRoot;
56255:   int rc;
56256:   int ptfFlags;          /* Page-type flage for the root page of new table */
56257: 
56258:   assert( sqlite3BtreeHoldsMutex(p) );
56259:   assert( pBt->inTransaction==TRANS_WRITE );
56260:   assert( (pBt->btsFlags & BTS_READ_ONLY)==0 );
56261: 
56262: #ifdef SQLITE_OMIT_AUTOVACUUM
56263:   rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);
56264:   if( rc ){
56265:     return rc;
56266:   }
56267: #else
56268:   if( pBt->autoVacuum ){
56269:     Pgno pgnoMove;      /* Move a page here to make room for the root-page */
56270:     MemPage *pPageMove; /* The page to move to. */
56271: 
56272:     /* Creating a new table may probably require moving an existing database
56273:     ** to make room for the new tables root page. In case this page turns
56274:     ** out to be an overflow page, delete all overflow page-map caches
56275:     ** held by open cursors.
56276:     */
56277:     invalidateAllOverflowCache(pBt);
56278: 
56279:     /* Read the value of meta[3] from the database to determine where the
56280:     ** root page of the new table should go. meta[3] is the largest root-page
56281:     ** created so far, so the new root-page is (meta[3]+1).
56282:     */
56283:     sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &pgnoRoot);
56284:     pgnoRoot++;
56285: 
56286:     /* The new root-page may not be allocated on a pointer-map page, or the
56287:     ** PENDING_BYTE page.
56288:     */
56289:     while( pgnoRoot==PTRMAP_PAGENO(pBt, pgnoRoot) ||
56290:         pgnoRoot==PENDING_BYTE_PAGE(pBt) ){
56291:       pgnoRoot++;
56292:     }
56293:     assert( pgnoRoot>=3 );
56294: 
56295:     /* Allocate a page. The page that currently resides at pgnoRoot will
56296:     ** be moved to the allocated page (unless the allocated page happens
56297:     ** to reside at pgnoRoot).
56298:     */
56299:     rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, 1);
56300:     if( rc!=SQLITE_OK ){
56301:       return rc;
56302:     }
56303: 
56304:     if( pgnoMove!=pgnoRoot ){
56305:       /* pgnoRoot is the page that will be used for the root-page of
56306:       ** the new table (assuming an error did not occur). But we were
56307:       ** allocated pgnoMove. If required (i.e. if it was not allocated
56308:       ** by extending the file), the current page at position pgnoMove
56309:       ** is already journaled.
56310:       */
56311:       u8 eType = 0;
56312:       Pgno iPtrPage = 0;
56313: 
56314:       releasePage(pPageMove);
56315: 
56316:       /* Move the page currently at pgnoRoot to pgnoMove. */
56317:       rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0);
56318:       if( rc!=SQLITE_OK ){
56319:         return rc;
56320:       }
56321:       rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage);
56322:       if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){
56323:         rc = SQLITE_CORRUPT_BKPT;
56324:       }
56325:       if( rc!=SQLITE_OK ){
56326:         releasePage(pRoot);
56327:         return rc;
56328:       }
56329:       assert( eType!=PTRMAP_ROOTPAGE );
56330:       assert( eType!=PTRMAP_FREEPAGE );
56331:       rc = relocatePage(pBt, pRoot, eType, iPtrPage, pgnoMove, 0);
56332:       releasePage(pRoot);
56333: 
56334:       /* Obtain the page at pgnoRoot */
56335:       if( rc!=SQLITE_OK ){
56336:         return rc;
56337:       }
56338:       rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0);
56339:       if( rc!=SQLITE_OK ){
56340:         return rc;
56341:       }
56342:       rc = sqlite3PagerWrite(pRoot->pDbPage);
56343:       if( rc!=SQLITE_OK ){
56344:         releasePage(pRoot);
56345:         return rc;
56346:       }
56347:     }else{
56348:       pRoot = pPageMove;
56349:     } 
56350: 
56351:     /* Update the pointer-map and meta-data with the new root-page number. */
56352:     ptrmapPut(pBt, pgnoRoot, PTRMAP_ROOTPAGE, 0, &rc);
56353:     if( rc ){
56354:       releasePage(pRoot);
56355:       return rc;
56356:     }
56357: 
56358:     /* When the new root page was allocated, page 1 was made writable in
56359:     ** order either to increase the database filesize, or to decrement the
56360:     ** freelist count.  Hence, the sqlite3BtreeUpdateMeta() call cannot fail.
56361:     */
56362:     assert( sqlite3PagerIswriteable(pBt->pPage1->pDbPage) );
56363:     rc = sqlite3BtreeUpdateMeta(p, 4, pgnoRoot);
56364:     if( NEVER(rc) ){
56365:       releasePage(pRoot);
56366:       return rc;
56367:     }
56368: 
56369:   }else{
56370:     rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);
56371:     if( rc ) return rc;
56372:   }
56373: #endif
56374:   assert( sqlite3PagerIswriteable(pRoot->pDbPage) );
56375:   if( createTabFlags & BTREE_INTKEY ){
56376:     ptfFlags = PTF_INTKEY | PTF_LEAFDATA | PTF_LEAF;
56377:   }else{
56378:     ptfFlags = PTF_ZERODATA | PTF_LEAF;
56379:   }
56380:   zeroPage(pRoot, ptfFlags);
56381:   sqlite3PagerUnref(pRoot->pDbPage);
56382:   assert( (pBt->openFlags & BTREE_SINGLE)==0 || pgnoRoot==2 );
56383:   *piTable = (int)pgnoRoot;
56384:   return SQLITE_OK;
56385: }
56386: SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree *p, int *piTable, int flags){
56387:   int rc;
56388:   sqlite3BtreeEnter(p);
56389:   rc = btreeCreateTable(p, piTable, flags);
56390:   sqlite3BtreeLeave(p);
56391:   return rc;
56392: }
56393: 
56394: /*
56395: ** Erase the given database page and all its children.  Return
56396: ** the page to the freelist.
56397: */
56398: static int clearDatabasePage(
56399:   BtShared *pBt,           /* The BTree that contains the table */
56400:   Pgno pgno,               /* Page number to clear */
56401:   int freePageFlag,        /* Deallocate page if true */
56402:   int *pnChange            /* Add number of Cells freed to this counter */
56403: ){
56404:   MemPage *pPage;
56405:   int rc;
56406:   unsigned char *pCell;
56407:   int i;
56408: 
56409:   assert( sqlite3_mutex_held(pBt->mutex) );
56410:   if( pgno>btreePagecount(pBt) ){
56411:     return SQLITE_CORRUPT_BKPT;
56412:   }
56413: 
56414:   rc = getAndInitPage(pBt, pgno, &pPage);
56415:   if( rc ) return rc;
56416:   for(i=0; i<pPage->nCell; i++){
56417:     pCell = findCell(pPage, i);
56418:     if( !pPage->leaf ){
56419:       rc = clearDatabasePage(pBt, get4byte(pCell), 1, pnChange);
56420:       if( rc ) goto cleardatabasepage_out;
56421:     }
56422:     rc = clearCell(pPage, pCell);
56423:     if( rc ) goto cleardatabasepage_out;
56424:   }
56425:   if( !pPage->leaf ){
56426:     rc = clearDatabasePage(pBt, get4byte(&pPage->aData[8]), 1, pnChange);
56427:     if( rc ) goto cleardatabasepage_out;
56428:   }else if( pnChange ){
56429:     assert( pPage->intKey );
56430:     *pnChange += pPage->nCell;
56431:   }
56432:   if( freePageFlag ){
56433:     freePage(pPage, &rc);
56434:   }else if( (rc = sqlite3PagerWrite(pPage->pDbPage))==0 ){
56435:     zeroPage(pPage, pPage->aData[0] | PTF_LEAF);
56436:   }
56437: 
56438: cleardatabasepage_out:
56439:   releasePage(pPage);
56440:   return rc;
56441: }
56442: 
56443: /*
56444: ** Delete all information from a single table in the database.  iTable is
56445: ** the page number of the root of the table.  After this routine returns,
56446: ** the root page is empty, but still exists.
56447: **
56448: ** This routine will fail with SQLITE_LOCKED if there are any open
56449: ** read cursors on the table.  Open write cursors are moved to the
56450: ** root of the table.
56451: **
56452: ** If pnChange is not NULL, then table iTable must be an intkey table. The
56453: ** integer value pointed to by pnChange is incremented by the number of
56454: ** entries in the table.
56455: */
56456: SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree *p, int iTable, int *pnChange){
56457:   int rc;
56458:   BtShared *pBt = p->pBt;
56459:   sqlite3BtreeEnter(p);
56460:   assert( p->inTrans==TRANS_WRITE );
56461: 
56462:   /* Invalidate all incrblob cursors open on table iTable (assuming iTable
56463:   ** is the root of a table b-tree - if it is not, the following call is
56464:   ** a no-op).  */
56465:   invalidateIncrblobCursors(p, 0, 1);
56466: 
56467:   rc = saveAllCursors(pBt, (Pgno)iTable, 0);
56468:   if( SQLITE_OK==rc ){
56469:     rc = clearDatabasePage(pBt, (Pgno)iTable, 0, pnChange);
56470:   }
56471:   sqlite3BtreeLeave(p);
56472:   return rc;
56473: }
56474: 
56475: /*
56476: ** Erase all information in a table and add the root of the table to
56477: ** the freelist.  Except, the root of the principle table (the one on
56478: ** page 1) is never added to the freelist.
56479: **
56480: ** This routine will fail with SQLITE_LOCKED if there are any open
56481: ** cursors on the table.
56482: **
56483: ** If AUTOVACUUM is enabled and the page at iTable is not the last
56484: ** root page in the database file, then the last root page 
56485: ** in the database file is moved into the slot formerly occupied by
56486: ** iTable and that last slot formerly occupied by the last root page
56487: ** is added to the freelist instead of iTable.  In this say, all
56488: ** root pages are kept at the beginning of the database file, which
56489: ** is necessary for AUTOVACUUM to work right.  *piMoved is set to the 
56490: ** page number that used to be the last root page in the file before
56491: ** the move.  If no page gets moved, *piMoved is set to 0.
56492: ** The last root page is recorded in meta[3] and the value of
56493: ** meta[3] is updated by this procedure.
56494: */
56495: static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){
56496:   int rc;
56497:   MemPage *pPage = 0;
56498:   BtShared *pBt = p->pBt;
56499: 
56500:   assert( sqlite3BtreeHoldsMutex(p) );
56501:   assert( p->inTrans==TRANS_WRITE );
56502: 
56503:   /* It is illegal to drop a table if any cursors are open on the
56504:   ** database. This is because in auto-vacuum mode the backend may
56505:   ** need to move another root-page to fill a gap left by the deleted
56506:   ** root page. If an open cursor was using this page a problem would 
56507:   ** occur.
56508:   **
56509:   ** This error is caught long before control reaches this point.
56510:   */
56511:   if( NEVER(pBt->pCursor) ){
56512:     sqlite3ConnectionBlocked(p->db, pBt->pCursor->pBtree->db);
56513:     return SQLITE_LOCKED_SHAREDCACHE;
56514:   }
56515: 
56516:   rc = btreeGetPage(pBt, (Pgno)iTable, &pPage, 0);
56517:   if( rc ) return rc;
56518:   rc = sqlite3BtreeClearTable(p, iTable, 0);
56519:   if( rc ){
56520:     releasePage(pPage);
56521:     return rc;
56522:   }
56523: 
56524:   *piMoved = 0;
56525: 
56526:   if( iTable>1 ){
56527: #ifdef SQLITE_OMIT_AUTOVACUUM
56528:     freePage(pPage, &rc);
56529:     releasePage(pPage);
56530: #else
56531:     if( pBt->autoVacuum ){
56532:       Pgno maxRootPgno;
56533:       sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &maxRootPgno);
56534: 
56535:       if( iTable==maxRootPgno ){
56536:         /* If the table being dropped is the table with the largest root-page
56537:         ** number in the database, put the root page on the free list. 
56538:         */
56539:         freePage(pPage, &rc);
56540:         releasePage(pPage);
56541:         if( rc!=SQLITE_OK ){
56542:           return rc;
56543:         }
56544:       }else{
56545:         /* The table being dropped does not have the largest root-page
56546:         ** number in the database. So move the page that does into the 
56547:         ** gap left by the deleted root-page.
56548:         */
56549:         MemPage *pMove;
56550:         releasePage(pPage);
56551:         rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0);
56552:         if( rc!=SQLITE_OK ){
56553:           return rc;
56554:         }
56555:         rc = relocatePage(pBt, pMove, PTRMAP_ROOTPAGE, 0, iTable, 0);
56556:         releasePage(pMove);
56557:         if( rc!=SQLITE_OK ){
56558:           return rc;
56559:         }
56560:         pMove = 0;
56561:         rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0);
56562:         freePage(pMove, &rc);
56563:         releasePage(pMove);
56564:         if( rc!=SQLITE_OK ){
56565:           return rc;
56566:         }
56567:         *piMoved = maxRootPgno;
56568:       }
56569: 
56570:       /* Set the new 'max-root-page' value in the database header. This
56571:       ** is the old value less one, less one more if that happens to
56572:       ** be a root-page number, less one again if that is the
56573:       ** PENDING_BYTE_PAGE.
56574:       */
56575:       maxRootPgno--;
56576:       while( maxRootPgno==PENDING_BYTE_PAGE(pBt)
56577:              || PTRMAP_ISPAGE(pBt, maxRootPgno) ){
56578:         maxRootPgno--;
56579:       }
56580:       assert( maxRootPgno!=PENDING_BYTE_PAGE(pBt) );
56581: 
56582:       rc = sqlite3BtreeUpdateMeta(p, 4, maxRootPgno);
56583:     }else{
56584:       freePage(pPage, &rc);
56585:       releasePage(pPage);
56586:     }
56587: #endif
56588:   }else{
56589:     /* If sqlite3BtreeDropTable was called on page 1.
56590:     ** This really never should happen except in a corrupt
56591:     ** database. 
56592:     */
56593:     zeroPage(pPage, PTF_INTKEY|PTF_LEAF );
56594:     releasePage(pPage);
56595:   }
56596:   return rc;  
56597: }
56598: SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){
56599:   int rc;
56600:   sqlite3BtreeEnter(p);
56601:   rc = btreeDropTable(p, iTable, piMoved);
56602:   sqlite3BtreeLeave(p);
56603:   return rc;
56604: }
56605: 
56606: 
56607: /*
56608: ** This function may only be called if the b-tree connection already
56609: ** has a read or write transaction open on the database.
56610: **
56611: ** Read the meta-information out of a database file.  Meta[0]
56612: ** is the number of free pages currently in the database.  Meta[1]
56613: ** through meta[15] are available for use by higher layers.  Meta[0]
56614: ** is read-only, the others are read/write.
56615: ** 
56616: ** The schema layer numbers meta values differently.  At the schema
56617: ** layer (and the SetCookie and ReadCookie opcodes) the number of
56618: ** free pages is not visible.  So Cookie[0] is the same as Meta[1].
56619: */
56620: SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){
56621:   BtShared *pBt = p->pBt;
56622: 
56623:   sqlite3BtreeEnter(p);
56624:   assert( p->inTrans>TRANS_NONE );
56625:   assert( SQLITE_OK==querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK) );
56626:   assert( pBt->pPage1 );
56627:   assert( idx>=0 && idx<=15 );
56628: 
56629:   *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]);
56630: 
56631:   /* If auto-vacuum is disabled in this build and this is an auto-vacuum
56632:   ** database, mark the database as read-only.  */
56633: #ifdef SQLITE_OMIT_AUTOVACUUM
56634:   if( idx==BTREE_LARGEST_ROOT_PAGE && *pMeta>0 ){
56635:     pBt->btsFlags |= BTS_READ_ONLY;
56636:   }
56637: #endif
56638: 
56639:   sqlite3BtreeLeave(p);
56640: }
56641: 
56642: /*
56643: ** Write meta-information back into the database.  Meta[0] is
56644: ** read-only and may not be written.
56645: */
56646: SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree *p, int idx, u32 iMeta){
56647:   BtShared *pBt = p->pBt;
56648:   unsigned char *pP1;
56649:   int rc;
56650:   assert( idx>=1 && idx<=15 );
56651:   sqlite3BtreeEnter(p);
56652:   assert( p->inTrans==TRANS_WRITE );
56653:   assert( pBt->pPage1!=0 );
56654:   pP1 = pBt->pPage1->aData;
56655:   rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
56656:   if( rc==SQLITE_OK ){
56657:     put4byte(&pP1[36 + idx*4], iMeta);
56658: #ifndef SQLITE_OMIT_AUTOVACUUM
56659:     if( idx==BTREE_INCR_VACUUM ){
56660:       assert( pBt->autoVacuum || iMeta==0 );
56661:       assert( iMeta==0 || iMeta==1 );
56662:       pBt->incrVacuum = (u8)iMeta;
56663:     }
56664: #endif
56665:   }
56666:   sqlite3BtreeLeave(p);
56667:   return rc;
56668: }
56669: 
56670: #ifndef SQLITE_OMIT_BTREECOUNT
56671: /*
56672: ** The first argument, pCur, is a cursor opened on some b-tree. Count the
56673: ** number of entries in the b-tree and write the result to *pnEntry.
56674: **
56675: ** SQLITE_OK is returned if the operation is successfully executed. 
56676: ** Otherwise, if an error is encountered (i.e. an IO error or database
56677: ** corruption) an SQLite error code is returned.
56678: */
56679: SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
56680:   i64 nEntry = 0;                      /* Value to return in *pnEntry */
56681:   int rc;                              /* Return code */
56682: 
56683:   if( pCur->pgnoRoot==0 ){
56684:     *pnEntry = 0;
56685:     return SQLITE_OK;
56686:   }
56687:   rc = moveToRoot(pCur);
56688: 
56689:   /* Unless an error occurs, the following loop runs one iteration for each
56690:   ** page in the B-Tree structure (not including overflow pages). 
56691:   */
56692:   while( rc==SQLITE_OK ){
56693:     int iIdx;                          /* Index of child node in parent */
56694:     MemPage *pPage;                    /* Current page of the b-tree */
56695: 
56696:     /* If this is a leaf page or the tree is not an int-key tree, then 
56697:     ** this page contains countable entries. Increment the entry counter
56698:     ** accordingly.
56699:     */
56700:     pPage = pCur->apPage[pCur->iPage];
56701:     if( pPage->leaf || !pPage->intKey ){
56702:       nEntry += pPage->nCell;
56703:     }
56704: 
56705:     /* pPage is a leaf node. This loop navigates the cursor so that it 
56706:     ** points to the first interior cell that it points to the parent of
56707:     ** the next page in the tree that has not yet been visited. The
56708:     ** pCur->aiIdx[pCur->iPage] value is set to the index of the parent cell
56709:     ** of the page, or to the number of cells in the page if the next page
56710:     ** to visit is the right-child of its parent.
56711:     **
56712:     ** If all pages in the tree have been visited, return SQLITE_OK to the
56713:     ** caller.
56714:     */
56715:     if( pPage->leaf ){
56716:       do {
56717:         if( pCur->iPage==0 ){
56718:           /* All pages of the b-tree have been visited. Return successfully. */
56719:           *pnEntry = nEntry;
56720:           return SQLITE_OK;
56721:         }
56722:         moveToParent(pCur);
56723:       }while ( pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell );
56724: 
56725:       pCur->aiIdx[pCur->iPage]++;
56726:       pPage = pCur->apPage[pCur->iPage];
56727:     }
56728: 
56729:     /* Descend to the child node of the cell that the cursor currently 
56730:     ** points at. This is the right-child if (iIdx==pPage->nCell).
56731:     */
56732:     iIdx = pCur->aiIdx[pCur->iPage];
56733:     if( iIdx==pPage->nCell ){
56734:       rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));
56735:     }else{
56736:       rc = moveToChild(pCur, get4byte(findCell(pPage, iIdx)));
56737:     }
56738:   }
56739: 
56740:   /* An error has occurred. Return an error code. */
56741:   return rc;
56742: }
56743: #endif
56744: 
56745: /*
56746: ** Return the pager associated with a BTree.  This routine is used for
56747: ** testing and debugging only.
56748: */
56749: SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){
56750:   return p->pBt->pPager;
56751: }
56752: 
56753: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
56754: /*
56755: ** Append a message to the error message string.
56756: */
56757: static void checkAppendMsg(
56758:   IntegrityCk *pCheck,
56759:   char *zMsg1,
56760:   const char *zFormat,
56761:   ...
56762: ){
56763:   va_list ap;
56764:   if( !pCheck->mxErr ) return;
56765:   pCheck->mxErr--;
56766:   pCheck->nErr++;
56767:   va_start(ap, zFormat);
56768:   if( pCheck->errMsg.nChar ){
56769:     sqlite3StrAccumAppend(&pCheck->errMsg, "\n", 1);
56770:   }
56771:   if( zMsg1 ){
56772:     sqlite3StrAccumAppend(&pCheck->errMsg, zMsg1, -1);
56773:   }
56774:   sqlite3VXPrintf(&pCheck->errMsg, 1, zFormat, ap);
56775:   va_end(ap);
56776:   if( pCheck->errMsg.mallocFailed ){
56777:     pCheck->mallocFailed = 1;
56778:   }
56779: }
56780: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
56781: 
56782: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
56783: /*
56784: ** Add 1 to the reference count for page iPage.  If this is the second
56785: ** reference to the page, add an error message to pCheck->zErrMsg.
56786: ** Return 1 if there are 2 ore more references to the page and 0 if
56787: ** if this is the first reference to the page.
56788: **
56789: ** Also check that the page number is in bounds.
56790: */
56791: static int checkRef(IntegrityCk *pCheck, Pgno iPage, char *zContext){
56792:   if( iPage==0 ) return 1;
56793:   if( iPage>pCheck->nPage ){
56794:     checkAppendMsg(pCheck, zContext, "invalid page number %d", iPage);
56795:     return 1;
56796:   }
56797:   if( pCheck->anRef[iPage]==1 ){
56798:     checkAppendMsg(pCheck, zContext, "2nd reference to page %d", iPage);
56799:     return 1;
56800:   }
56801:   return  (pCheck->anRef[iPage]++)>1;
56802: }
56803: 
56804: #ifndef SQLITE_OMIT_AUTOVACUUM
56805: /*
56806: ** Check that the entry in the pointer-map for page iChild maps to 
56807: ** page iParent, pointer type ptrType. If not, append an error message
56808: ** to pCheck.
56809: */
56810: static void checkPtrmap(
56811:   IntegrityCk *pCheck,   /* Integrity check context */
56812:   Pgno iChild,           /* Child page number */
56813:   u8 eType,              /* Expected pointer map type */
56814:   Pgno iParent,          /* Expected pointer map parent page number */
56815:   char *zContext         /* Context description (used for error msg) */
56816: ){
56817:   int rc;
56818:   u8 ePtrmapType;
56819:   Pgno iPtrmapParent;
56820: 
56821:   rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent);
56822:   if( rc!=SQLITE_OK ){
56823:     if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->mallocFailed = 1;
56824:     checkAppendMsg(pCheck, zContext, "Failed to read ptrmap key=%d", iChild);
56825:     return;
56826:   }
56827: 
56828:   if( ePtrmapType!=eType || iPtrmapParent!=iParent ){
56829:     checkAppendMsg(pCheck, zContext, 
56830:       "Bad ptr map entry key=%d expected=(%d,%d) got=(%d,%d)", 
56831:       iChild, eType, iParent, ePtrmapType, iPtrmapParent);
56832:   }
56833: }
56834: #endif
56835: 
56836: /*
56837: ** Check the integrity of the freelist or of an overflow page list.
56838: ** Verify that the number of pages on the list is N.
56839: */
56840: static void checkList(
56841:   IntegrityCk *pCheck,  /* Integrity checking context */
56842:   int isFreeList,       /* True for a freelist.  False for overflow page list */
56843:   int iPage,            /* Page number for first page in the list */
56844:   int N,                /* Expected number of pages in the list */
56845:   char *zContext        /* Context for error messages */
56846: ){
56847:   int i;
56848:   int expected = N;
56849:   int iFirst = iPage;
56850:   while( N-- > 0 && pCheck->mxErr ){
56851:     DbPage *pOvflPage;
56852:     unsigned char *pOvflData;
56853:     if( iPage<1 ){
56854:       checkAppendMsg(pCheck, zContext,
56855:          "%d of %d pages missing from overflow list starting at %d",
56856:           N+1, expected, iFirst);
56857:       break;
56858:     }
56859:     if( checkRef(pCheck, iPage, zContext) ) break;
56860:     if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage) ){
56861:       checkAppendMsg(pCheck, zContext, "failed to get page %d", iPage);
56862:       break;
56863:     }
56864:     pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage);
56865:     if( isFreeList ){
56866:       int n = get4byte(&pOvflData[4]);
56867: #ifndef SQLITE_OMIT_AUTOVACUUM
56868:       if( pCheck->pBt->autoVacuum ){
56869:         checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0, zContext);
56870:       }
56871: #endif
56872:       if( n>(int)pCheck->pBt->usableSize/4-2 ){
56873:         checkAppendMsg(pCheck, zContext,
56874:            "freelist leaf count too big on page %d", iPage);
56875:         N--;
56876:       }else{
56877:         for(i=0; i<n; i++){
56878:           Pgno iFreePage = get4byte(&pOvflData[8+i*4]);
56879: #ifndef SQLITE_OMIT_AUTOVACUUM
56880:           if( pCheck->pBt->autoVacuum ){
56881:             checkPtrmap(pCheck, iFreePage, PTRMAP_FREEPAGE, 0, zContext);
56882:           }
56883: #endif
56884:           checkRef(pCheck, iFreePage, zContext);
56885:         }
56886:         N -= n;
56887:       }
56888:     }
56889: #ifndef SQLITE_OMIT_AUTOVACUUM
56890:     else{
56891:       /* If this database supports auto-vacuum and iPage is not the last
56892:       ** page in this overflow list, check that the pointer-map entry for
56893:       ** the following page matches iPage.
56894:       */
56895:       if( pCheck->pBt->autoVacuum && N>0 ){
56896:         i = get4byte(pOvflData);
56897:         checkPtrmap(pCheck, i, PTRMAP_OVERFLOW2, iPage, zContext);
56898:       }
56899:     }
56900: #endif
56901:     iPage = get4byte(pOvflData);
56902:     sqlite3PagerUnref(pOvflPage);
56903:   }
56904: }
56905: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
56906: 
56907: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
56908: /*
56909: ** Do various sanity checks on a single page of a tree.  Return
56910: ** the tree depth.  Root pages return 0.  Parents of root pages
56911: ** return 1, and so forth.
56912: ** 
56913: ** These checks are done:
56914: **
56915: **      1.  Make sure that cells and freeblocks do not overlap
56916: **          but combine to completely cover the page.
56917: **  NO  2.  Make sure cell keys are in order.
56918: **  NO  3.  Make sure no key is less than or equal to zLowerBound.
56919: **  NO  4.  Make sure no key is greater than or equal to zUpperBound.
56920: **      5.  Check the integrity of overflow pages.
56921: **      6.  Recursively call checkTreePage on all children.
56922: **      7.  Verify that the depth of all children is the same.
56923: **      8.  Make sure this page is at least 33% full or else it is
56924: **          the root of the tree.
56925: */
56926: static int checkTreePage(
56927:   IntegrityCk *pCheck,  /* Context for the sanity check */
56928:   int iPage,            /* Page number of the page to check */
56929:   char *zParentContext, /* Parent context */
56930:   i64 *pnParentMinKey, 
56931:   i64 *pnParentMaxKey
56932: ){
56933:   MemPage *pPage;
56934:   int i, rc, depth, d2, pgno, cnt;
56935:   int hdr, cellStart;
56936:   int nCell;
56937:   u8 *data;
56938:   BtShared *pBt;
56939:   int usableSize;
56940:   char zContext[100];
56941:   char *hit = 0;
56942:   i64 nMinKey = 0;
56943:   i64 nMaxKey = 0;
56944: 
56945:   sqlite3_snprintf(sizeof(zContext), zContext, "Page %d: ", iPage);
56946: 
56947:   /* Check that the page exists
56948:   */
56949:   pBt = pCheck->pBt;
56950:   usableSize = pBt->usableSize;
56951:   if( iPage==0 ) return 0;
56952:   if( checkRef(pCheck, iPage, zParentContext) ) return 0;
56953:   if( (rc = btreeGetPage(pBt, (Pgno)iPage, &pPage, 0))!=0 ){
56954:     checkAppendMsg(pCheck, zContext,
56955:        "unable to get the page. error code=%d", rc);
56956:     return 0;
56957:   }
56958: 
56959:   /* Clear MemPage.isInit to make sure the corruption detection code in
56960:   ** btreeInitPage() is executed.  */
56961:   pPage->isInit = 0;
56962:   if( (rc = btreeInitPage(pPage))!=0 ){
56963:     assert( rc==SQLITE_CORRUPT );  /* The only possible error from InitPage */
56964:     checkAppendMsg(pCheck, zContext, 
56965:                    "btreeInitPage() returns error code %d", rc);
56966:     releasePage(pPage);
56967:     return 0;
56968:   }
56969: 
56970:   /* Check out all the cells.
56971:   */
56972:   depth = 0;
56973:   for(i=0; i<pPage->nCell && pCheck->mxErr; i++){
56974:     u8 *pCell;
56975:     u32 sz;
56976:     CellInfo info;
56977: 
56978:     /* Check payload overflow pages
56979:     */
56980:     sqlite3_snprintf(sizeof(zContext), zContext,
56981:              "On tree page %d cell %d: ", iPage, i);
56982:     pCell = findCell(pPage,i);
56983:     btreeParseCellPtr(pPage, pCell, &info);
56984:     sz = info.nData;
56985:     if( !pPage->intKey ) sz += (int)info.nKey;
56986:     /* For intKey pages, check that the keys are in order.
56987:     */
56988:     else if( i==0 ) nMinKey = nMaxKey = info.nKey;
56989:     else{
56990:       if( info.nKey <= nMaxKey ){
56991:         checkAppendMsg(pCheck, zContext, 
56992:             "Rowid %lld out of order (previous was %lld)", info.nKey, nMaxKey);
56993:       }
56994:       nMaxKey = info.nKey;
56995:     }
56996:     assert( sz==info.nPayload );
56997:     if( (sz>info.nLocal) 
56998:      && (&pCell[info.iOverflow]<=&pPage->aData[pBt->usableSize])
56999:     ){
57000:       int nPage = (sz - info.nLocal + usableSize - 5)/(usableSize - 4);
57001:       Pgno pgnoOvfl = get4byte(&pCell[info.iOverflow]);
57002: #ifndef SQLITE_OMIT_AUTOVACUUM
57003:       if( pBt->autoVacuum ){
57004:         checkPtrmap(pCheck, pgnoOvfl, PTRMAP_OVERFLOW1, iPage, zContext);
57005:       }
57006: #endif
57007:       checkList(pCheck, 0, pgnoOvfl, nPage, zContext);
57008:     }
57009: 
57010:     /* Check sanity of left child page.
57011:     */
57012:     if( !pPage->leaf ){
57013:       pgno = get4byte(pCell);
57014: #ifndef SQLITE_OMIT_AUTOVACUUM
57015:       if( pBt->autoVacuum ){
57016:         checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext);
57017:       }
57018: #endif
57019:       d2 = checkTreePage(pCheck, pgno, zContext, &nMinKey, i==0 ? NULL : &nMaxKey);
57020:       if( i>0 && d2!=depth ){
57021:         checkAppendMsg(pCheck, zContext, "Child page depth differs");
57022:       }
57023:       depth = d2;
57024:     }
57025:   }
57026: 
57027:   if( !pPage->leaf ){
57028:     pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
57029:     sqlite3_snprintf(sizeof(zContext), zContext, 
57030:                      "On page %d at right child: ", iPage);
57031: #ifndef SQLITE_OMIT_AUTOVACUUM
57032:     if( pBt->autoVacuum ){
57033:       checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext);
57034:     }
57035: #endif
57036:     checkTreePage(pCheck, pgno, zContext, NULL, !pPage->nCell ? NULL : &nMaxKey);
57037:   }
57038:  
57039:   /* For intKey leaf pages, check that the min/max keys are in order
57040:   ** with any left/parent/right pages.
57041:   */
57042:   if( pPage->leaf && pPage->intKey ){
57043:     /* if we are a left child page */
57044:     if( pnParentMinKey ){
57045:       /* if we are the left most child page */
57046:       if( !pnParentMaxKey ){
57047:         if( nMaxKey > *pnParentMinKey ){
57048:           checkAppendMsg(pCheck, zContext, 
57049:               "Rowid %lld out of order (max larger than parent min of %lld)",
57050:               nMaxKey, *pnParentMinKey);
57051:         }
57052:       }else{
57053:         if( nMinKey <= *pnParentMinKey ){
57054:           checkAppendMsg(pCheck, zContext, 
57055:               "Rowid %lld out of order (min less than parent min of %lld)",
57056:               nMinKey, *pnParentMinKey);
57057:         }
57058:         if( nMaxKey > *pnParentMaxKey ){
57059:           checkAppendMsg(pCheck, zContext, 
57060:               "Rowid %lld out of order (max larger than parent max of %lld)",
57061:               nMaxKey, *pnParentMaxKey);
57062:         }
57063:         *pnParentMinKey = nMaxKey;
57064:       }
57065:     /* else if we're a right child page */
57066:     } else if( pnParentMaxKey ){
57067:       if( nMinKey <= *pnParentMaxKey ){
57068:         checkAppendMsg(pCheck, zContext, 
57069:             "Rowid %lld out of order (min less than parent max of %lld)",
57070:             nMinKey, *pnParentMaxKey);
57071:       }
57072:     }
57073:   }
57074: 
57075:   /* Check for complete coverage of the page
57076:   */
57077:   data = pPage->aData;
57078:   hdr = pPage->hdrOffset;
57079:   hit = sqlite3PageMalloc( pBt->pageSize );
57080:   if( hit==0 ){
57081:     pCheck->mallocFailed = 1;
57082:   }else{
57083:     int contentOffset = get2byteNotZero(&data[hdr+5]);
57084:     assert( contentOffset<=usableSize );  /* Enforced by btreeInitPage() */
57085:     memset(hit+contentOffset, 0, usableSize-contentOffset);
57086:     memset(hit, 1, contentOffset);
57087:     nCell = get2byte(&data[hdr+3]);
57088:     cellStart = hdr + 12 - 4*pPage->leaf;
57089:     for(i=0; i<nCell; i++){
57090:       int pc = get2byte(&data[cellStart+i*2]);
57091:       u32 size = 65536;
57092:       int j;
57093:       if( pc<=usableSize-4 ){
57094:         size = cellSizePtr(pPage, &data[pc]);
57095:       }
57096:       if( (int)(pc+size-1)>=usableSize ){
57097:         checkAppendMsg(pCheck, 0, 
57098:             "Corruption detected in cell %d on page %d",i,iPage);
57099:       }else{
57100:         for(j=pc+size-1; j>=pc; j--) hit[j]++;
57101:       }
57102:     }
57103:     i = get2byte(&data[hdr+1]);
57104:     while( i>0 ){
57105:       int size, j;
57106:       assert( i<=usableSize-4 );     /* Enforced by btreeInitPage() */
57107:       size = get2byte(&data[i+2]);
57108:       assert( i+size<=usableSize );  /* Enforced by btreeInitPage() */
57109:       for(j=i+size-1; j>=i; j--) hit[j]++;
57110:       j = get2byte(&data[i]);
57111:       assert( j==0 || j>i+size );  /* Enforced by btreeInitPage() */
57112:       assert( j<=usableSize-4 );   /* Enforced by btreeInitPage() */
57113:       i = j;
57114:     }
57115:     for(i=cnt=0; i<usableSize; i++){
57116:       if( hit[i]==0 ){
57117:         cnt++;
57118:       }else if( hit[i]>1 ){
57119:         checkAppendMsg(pCheck, 0,
57120:           "Multiple uses for byte %d of page %d", i, iPage);
57121:         break;
57122:       }
57123:     }
57124:     if( cnt!=data[hdr+7] ){
57125:       checkAppendMsg(pCheck, 0, 
57126:           "Fragmentation of %d bytes reported as %d on page %d",
57127:           cnt, data[hdr+7], iPage);
57128:     }
57129:   }
57130:   sqlite3PageFree(hit);
57131:   releasePage(pPage);
57132:   return depth+1;
57133: }
57134: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
57135: 
57136: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
57137: /*
57138: ** This routine does a complete check of the given BTree file.  aRoot[] is
57139: ** an array of pages numbers were each page number is the root page of
57140: ** a table.  nRoot is the number of entries in aRoot.
57141: **
57142: ** A read-only or read-write transaction must be opened before calling
57143: ** this function.
57144: **
57145: ** Write the number of error seen in *pnErr.  Except for some memory
57146: ** allocation errors,  an error message held in memory obtained from
57147: ** malloc is returned if *pnErr is non-zero.  If *pnErr==0 then NULL is
57148: ** returned.  If a memory allocation error occurs, NULL is returned.
57149: */
57150: SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
57151:   Btree *p,     /* The btree to be checked */
57152:   int *aRoot,   /* An array of root pages numbers for individual trees */
57153:   int nRoot,    /* Number of entries in aRoot[] */
57154:   int mxErr,    /* Stop reporting errors after this many */
57155:   int *pnErr    /* Write number of errors seen to this variable */
57156: ){
57157:   Pgno i;
57158:   int nRef;
57159:   IntegrityCk sCheck;
57160:   BtShared *pBt = p->pBt;
57161:   char zErr[100];
57162: 
57163:   sqlite3BtreeEnter(p);
57164:   assert( p->inTrans>TRANS_NONE && pBt->inTransaction>TRANS_NONE );
57165:   nRef = sqlite3PagerRefcount(pBt->pPager);
57166:   sCheck.pBt = pBt;
57167:   sCheck.pPager = pBt->pPager;
57168:   sCheck.nPage = btreePagecount(sCheck.pBt);
57169:   sCheck.mxErr = mxErr;
57170:   sCheck.nErr = 0;
57171:   sCheck.mallocFailed = 0;
57172:   *pnErr = 0;
57173:   if( sCheck.nPage==0 ){
57174:     sqlite3BtreeLeave(p);
57175:     return 0;
57176:   }
57177:   sCheck.anRef = sqlite3Malloc( (sCheck.nPage+1)*sizeof(sCheck.anRef[0]) );
57178:   if( !sCheck.anRef ){
57179:     *pnErr = 1;
57180:     sqlite3BtreeLeave(p);
57181:     return 0;
57182:   }
57183:   for(i=0; i<=sCheck.nPage; i++){ sCheck.anRef[i] = 0; }
57184:   i = PENDING_BYTE_PAGE(pBt);
57185:   if( i<=sCheck.nPage ){
57186:     sCheck.anRef[i] = 1;
57187:   }
57188:   sqlite3StrAccumInit(&sCheck.errMsg, zErr, sizeof(zErr), 20000);
57189:   sCheck.errMsg.useMalloc = 2;
57190: 
57191:   /* Check the integrity of the freelist
57192:   */
57193:   checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]),
57194:             get4byte(&pBt->pPage1->aData[36]), "Main freelist: ");
57195: 
57196:   /* Check all the tables.
57197:   */
57198:   for(i=0; (int)i<nRoot && sCheck.mxErr; i++){
57199:     if( aRoot[i]==0 ) continue;
57200: #ifndef SQLITE_OMIT_AUTOVACUUM
57201:     if( pBt->autoVacuum && aRoot[i]>1 ){
57202:       checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0, 0);
57203:     }
57204: #endif
57205:     checkTreePage(&sCheck, aRoot[i], "List of tree roots: ", NULL, NULL);
57206:   }
57207: 
57208:   /* Make sure every page in the file is referenced
57209:   */
57210:   for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){
57211: #ifdef SQLITE_OMIT_AUTOVACUUM
57212:     if( sCheck.anRef[i]==0 ){
57213:       checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
57214:     }
57215: #else
57216:     /* If the database supports auto-vacuum, make sure no tables contain
57217:     ** references to pointer-map pages.
57218:     */
57219:     if( sCheck.anRef[i]==0 && 
57220:        (PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){
57221:       checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
57222:     }
57223:     if( sCheck.anRef[i]!=0 && 
57224:        (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){
57225:       checkAppendMsg(&sCheck, 0, "Pointer map page %d is referenced", i);
57226:     }
57227: #endif
57228:   }
57229: 
57230:   /* Make sure this analysis did not leave any unref() pages.
57231:   ** This is an internal consistency check; an integrity check
57232:   ** of the integrity check.
57233:   */
57234:   if( NEVER(nRef != sqlite3PagerRefcount(pBt->pPager)) ){
57235:     checkAppendMsg(&sCheck, 0, 
57236:       "Outstanding page count goes from %d to %d during this analysis",
57237:       nRef, sqlite3PagerRefcount(pBt->pPager)
57238:     );
57239:   }
57240: 
57241:   /* Clean  up and report errors.
57242:   */
57243:   sqlite3BtreeLeave(p);
57244:   sqlite3_free(sCheck.anRef);
57245:   if( sCheck.mallocFailed ){
57246:     sqlite3StrAccumReset(&sCheck.errMsg);
57247:     *pnErr = sCheck.nErr+1;
57248:     return 0;
57249:   }
57250:   *pnErr = sCheck.nErr;
57251:   if( sCheck.nErr==0 ) sqlite3StrAccumReset(&sCheck.errMsg);
57252:   return sqlite3StrAccumFinish(&sCheck.errMsg);
57253: }
57254: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
57255: 
57256: /*
57257: ** Return the full pathname of the underlying database file.
57258: **
57259: ** The pager filename is invariant as long as the pager is
57260: ** open so it is safe to access without the BtShared mutex.
57261: */
57262: SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *p){
57263:   assert( p->pBt->pPager!=0 );
57264:   return sqlite3PagerFilename(p->pBt->pPager);
57265: }
57266: 
57267: /*
57268: ** Return the pathname of the journal file for this database. The return
57269: ** value of this routine is the same regardless of whether the journal file
57270: ** has been created or not.
57271: **
57272: ** The pager journal filename is invariant as long as the pager is
57273: ** open so it is safe to access without the BtShared mutex.
57274: */
57275: SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *p){
57276:   assert( p->pBt->pPager!=0 );
57277:   return sqlite3PagerJournalname(p->pBt->pPager);
57278: }
57279: 
57280: /*
57281: ** Return non-zero if a transaction is active.
57282: */
57283: SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree *p){
57284:   assert( p==0 || sqlite3_mutex_held(p->db->mutex) );
57285:   return (p && (p->inTrans==TRANS_WRITE));
57286: }
57287: 
57288: #ifndef SQLITE_OMIT_WAL
57289: /*
57290: ** Run a checkpoint on the Btree passed as the first argument.
57291: **
57292: ** Return SQLITE_LOCKED if this or any other connection has an open 
57293: ** transaction on the shared-cache the argument Btree is connected to.
57294: **
57295: ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
57296: */
57297: SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree *p, int eMode, int *pnLog, int *pnCkpt){
57298:   int rc = SQLITE_OK;
57299:   if( p ){
57300:     BtShared *pBt = p->pBt;
57301:     sqlite3BtreeEnter(p);
57302:     if( pBt->inTransaction!=TRANS_NONE ){
57303:       rc = SQLITE_LOCKED;
57304:     }else{
57305:       rc = sqlite3PagerCheckpoint(pBt->pPager, eMode, pnLog, pnCkpt);
57306:     }
57307:     sqlite3BtreeLeave(p);
57308:   }
57309:   return rc;
57310: }
57311: #endif
57312: 
57313: /*
57314: ** Return non-zero if a read (or write) transaction is active.
57315: */
57316: SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree *p){
57317:   assert( p );
57318:   assert( sqlite3_mutex_held(p->db->mutex) );
57319:   return p->inTrans!=TRANS_NONE;
57320: }
57321: 
57322: SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree *p){
57323:   assert( p );
57324:   assert( sqlite3_mutex_held(p->db->mutex) );
57325:   return p->nBackup!=0;
57326: }
57327: 
57328: /*
57329: ** This function returns a pointer to a blob of memory associated with
57330: ** a single shared-btree. The memory is used by client code for its own
57331: ** purposes (for example, to store a high-level schema associated with 
57332: ** the shared-btree). The btree layer manages reference counting issues.
57333: **
57334: ** The first time this is called on a shared-btree, nBytes bytes of memory
57335: ** are allocated, zeroed, and returned to the caller. For each subsequent 
57336: ** call the nBytes parameter is ignored and a pointer to the same blob
57337: ** of memory returned. 
57338: **
57339: ** If the nBytes parameter is 0 and the blob of memory has not yet been
57340: ** allocated, a null pointer is returned. If the blob has already been
57341: ** allocated, it is returned as normal.
57342: **
57343: ** Just before the shared-btree is closed, the function passed as the 
57344: ** xFree argument when the memory allocation was made is invoked on the 
57345: ** blob of allocated memory. The xFree function should not call sqlite3_free()
57346: ** on the memory, the btree layer does that.
57347: */
57348: SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *p, int nBytes, void(*xFree)(void *)){
57349:   BtShared *pBt = p->pBt;
57350:   sqlite3BtreeEnter(p);
57351:   if( !pBt->pSchema && nBytes ){
57352:     pBt->pSchema = sqlite3DbMallocZero(0, nBytes);
57353:     pBt->xFreeSchema = xFree;
57354:   }
57355:   sqlite3BtreeLeave(p);
57356:   return pBt->pSchema;
57357: }
57358: 
57359: /*
57360: ** Return SQLITE_LOCKED_SHAREDCACHE if another user of the same shared 
57361: ** btree as the argument handle holds an exclusive lock on the 
57362: ** sqlite_master table. Otherwise SQLITE_OK.
57363: */
57364: SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *p){
57365:   int rc;
57366:   assert( sqlite3_mutex_held(p->db->mutex) );
57367:   sqlite3BtreeEnter(p);
57368:   rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK);
57369:   assert( rc==SQLITE_OK || rc==SQLITE_LOCKED_SHAREDCACHE );
57370:   sqlite3BtreeLeave(p);
57371:   return rc;
57372: }
57373: 
57374: 
57375: #ifndef SQLITE_OMIT_SHARED_CACHE
57376: /*
57377: ** Obtain a lock on the table whose root page is iTab.  The
57378: ** lock is a write lock if isWritelock is true or a read lock
57379: ** if it is false.
57380: */
57381: SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){
57382:   int rc = SQLITE_OK;
57383:   assert( p->inTrans!=TRANS_NONE );
57384:   if( p->sharable ){
57385:     u8 lockType = READ_LOCK + isWriteLock;
57386:     assert( READ_LOCK+1==WRITE_LOCK );
57387:     assert( isWriteLock==0 || isWriteLock==1 );
57388: 
57389:     sqlite3BtreeEnter(p);
57390:     rc = querySharedCacheTableLock(p, iTab, lockType);
57391:     if( rc==SQLITE_OK ){
57392:       rc = setSharedCacheTableLock(p, iTab, lockType);
57393:     }
57394:     sqlite3BtreeLeave(p);
57395:   }
57396:   return rc;
57397: }
57398: #endif
57399: 
57400: #ifndef SQLITE_OMIT_INCRBLOB
57401: /*
57402: ** Argument pCsr must be a cursor opened for writing on an 
57403: ** INTKEY table currently pointing at a valid table entry. 
57404: ** This function modifies the data stored as part of that entry.
57405: **
57406: ** Only the data content may only be modified, it is not possible to 
57407: ** change the length of the data stored. If this function is called with
57408: ** parameters that attempt to write past the end of the existing data,
57409: ** no modifications are made and SQLITE_CORRUPT is returned.
57410: */
57411: SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void *z){
57412:   int rc;
57413:   assert( cursorHoldsMutex(pCsr) );
57414:   assert( sqlite3_mutex_held(pCsr->pBtree->db->mutex) );
57415:   assert( pCsr->isIncrblobHandle );
57416: 
57417:   rc = restoreCursorPosition(pCsr);
57418:   if( rc!=SQLITE_OK ){
57419:     return rc;
57420:   }
57421:   assert( pCsr->eState!=CURSOR_REQUIRESEEK );
57422:   if( pCsr->eState!=CURSOR_VALID ){
57423:     return SQLITE_ABORT;
57424:   }
57425: 
57426:   /* Check some assumptions: 
57427:   **   (a) the cursor is open for writing,
57428:   **   (b) there is a read/write transaction open,
57429:   **   (c) the connection holds a write-lock on the table (if required),
57430:   **   (d) there are no conflicting read-locks, and
57431:   **   (e) the cursor points at a valid row of an intKey table.
57432:   */
57433:   if( !pCsr->wrFlag ){
57434:     return SQLITE_READONLY;
57435:   }
57436:   assert( (pCsr->pBt->btsFlags & BTS_READ_ONLY)==0
57437:               && pCsr->pBt->inTransaction==TRANS_WRITE );
57438:   assert( hasSharedCacheTableLock(pCsr->pBtree, pCsr->pgnoRoot, 0, 2) );
57439:   assert( !hasReadConflicts(pCsr->pBtree, pCsr->pgnoRoot) );
57440:   assert( pCsr->apPage[pCsr->iPage]->intKey );
57441: 
57442:   return accessPayload(pCsr, offset, amt, (unsigned char *)z, 1);
57443: }
57444: 
57445: /* 
57446: ** Set a flag on this cursor to cache the locations of pages from the 
57447: ** overflow list for the current row. This is used by cursors opened
57448: ** for incremental blob IO only.
57449: **
57450: ** This function sets a flag only. The actual page location cache
57451: ** (stored in BtCursor.aOverflow[]) is allocated and used by function
57452: ** accessPayload() (the worker function for sqlite3BtreeData() and
57453: ** sqlite3BtreePutData()).
57454: */
57455: SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *pCur){
57456:   assert( cursorHoldsMutex(pCur) );
57457:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
57458:   invalidateOverflowCache(pCur);
57459:   pCur->isIncrblobHandle = 1;
57460: }
57461: #endif
57462: 
57463: /*
57464: ** Set both the "read version" (single byte at byte offset 18) and 
57465: ** "write version" (single byte at byte offset 19) fields in the database
57466: ** header to iVersion.
57467: */
57468: SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBtree, int iVersion){
57469:   BtShared *pBt = pBtree->pBt;
57470:   int rc;                         /* Return code */
57471:  
57472:   assert( iVersion==1 || iVersion==2 );
57473: 
57474:   /* If setting the version fields to 1, do not automatically open the
57475:   ** WAL connection, even if the version fields are currently set to 2.
57476:   */
57477:   pBt->btsFlags &= ~BTS_NO_WAL;
57478:   if( iVersion==1 ) pBt->btsFlags |= BTS_NO_WAL;
57479: 
57480:   rc = sqlite3BtreeBeginTrans(pBtree, 0);
57481:   if( rc==SQLITE_OK ){
57482:     u8 *aData = pBt->pPage1->aData;
57483:     if( aData[18]!=(u8)iVersion || aData[19]!=(u8)iVersion ){
57484:       rc = sqlite3BtreeBeginTrans(pBtree, 2);
57485:       if( rc==SQLITE_OK ){
57486:         rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
57487:         if( rc==SQLITE_OK ){
57488:           aData[18] = (u8)iVersion;
57489:           aData[19] = (u8)iVersion;
57490:         }
57491:       }
57492:     }
57493:   }
57494: 
57495:   pBt->btsFlags &= ~BTS_NO_WAL;
57496:   return rc;
57497: }
57498: 
57499: /************** End of btree.c ***********************************************/
57500: /************** Begin file backup.c ******************************************/
57501: /*
57502: ** 2009 January 28
57503: **
57504: ** The author disclaims copyright to this source code.  In place of
57505: ** a legal notice, here is a blessing:
57506: **
57507: **    May you do good and not evil.
57508: **    May you find forgiveness for yourself and forgive others.
57509: **    May you share freely, never taking more than you give.
57510: **
57511: *************************************************************************
57512: ** This file contains the implementation of the sqlite3_backup_XXX() 
57513: ** API functions and the related features.
57514: */
57515: 
57516: /* Macro to find the minimum of two numeric values.
57517: */
57518: #ifndef MIN
57519: # define MIN(x,y) ((x)<(y)?(x):(y))
57520: #endif
57521: 
57522: /*
57523: ** Structure allocated for each backup operation.
57524: */
57525: struct sqlite3_backup {
57526:   sqlite3* pDestDb;        /* Destination database handle */
57527:   Btree *pDest;            /* Destination b-tree file */
57528:   u32 iDestSchema;         /* Original schema cookie in destination */
57529:   int bDestLocked;         /* True once a write-transaction is open on pDest */
57530: 
57531:   Pgno iNext;              /* Page number of the next source page to copy */
57532:   sqlite3* pSrcDb;         /* Source database handle */
57533:   Btree *pSrc;             /* Source b-tree file */
57534: 
57535:   int rc;                  /* Backup process error code */
57536: 
57537:   /* These two variables are set by every call to backup_step(). They are
57538:   ** read by calls to backup_remaining() and backup_pagecount().
57539:   */
57540:   Pgno nRemaining;         /* Number of pages left to copy */
57541:   Pgno nPagecount;         /* Total number of pages to copy */
57542: 
57543:   int isAttached;          /* True once backup has been registered with pager */
57544:   sqlite3_backup *pNext;   /* Next backup associated with source pager */
57545: };
57546: 
57547: /*
57548: ** THREAD SAFETY NOTES:
57549: **
57550: **   Once it has been created using backup_init(), a single sqlite3_backup
57551: **   structure may be accessed via two groups of thread-safe entry points:
57552: **
57553: **     * Via the sqlite3_backup_XXX() API function backup_step() and 
57554: **       backup_finish(). Both these functions obtain the source database
57555: **       handle mutex and the mutex associated with the source BtShared 
57556: **       structure, in that order.
57557: **
57558: **     * Via the BackupUpdate() and BackupRestart() functions, which are
57559: **       invoked by the pager layer to report various state changes in
57560: **       the page cache associated with the source database. The mutex
57561: **       associated with the source database BtShared structure will always 
57562: **       be held when either of these functions are invoked.
57563: **
57564: **   The other sqlite3_backup_XXX() API functions, backup_remaining() and
57565: **   backup_pagecount() are not thread-safe functions. If they are called
57566: **   while some other thread is calling backup_step() or backup_finish(),
57567: **   the values returned may be invalid. There is no way for a call to
57568: **   BackupUpdate() or BackupRestart() to interfere with backup_remaining()
57569: **   or backup_pagecount().
57570: **
57571: **   Depending on the SQLite configuration, the database handles and/or
57572: **   the Btree objects may have their own mutexes that require locking.
57573: **   Non-sharable Btrees (in-memory databases for example), do not have
57574: **   associated mutexes.
57575: */
57576: 
57577: /*
57578: ** Return a pointer corresponding to database zDb (i.e. "main", "temp")
57579: ** in connection handle pDb. If such a database cannot be found, return
57580: ** a NULL pointer and write an error message to pErrorDb.
57581: **
57582: ** If the "temp" database is requested, it may need to be opened by this 
57583: ** function. If an error occurs while doing so, return 0 and write an 
57584: ** error message to pErrorDb.
57585: */
57586: static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){
57587:   int i = sqlite3FindDbName(pDb, zDb);
57588: 
57589:   if( i==1 ){
57590:     Parse *pParse;
57591:     int rc = 0;
57592:     pParse = sqlite3StackAllocZero(pErrorDb, sizeof(*pParse));
57593:     if( pParse==0 ){
57594:       sqlite3Error(pErrorDb, SQLITE_NOMEM, "out of memory");
57595:       rc = SQLITE_NOMEM;
57596:     }else{
57597:       pParse->db = pDb;
57598:       if( sqlite3OpenTempDatabase(pParse) ){
57599:         sqlite3Error(pErrorDb, pParse->rc, "%s", pParse->zErrMsg);
57600:         rc = SQLITE_ERROR;
57601:       }
57602:       sqlite3DbFree(pErrorDb, pParse->zErrMsg);
57603:       sqlite3StackFree(pErrorDb, pParse);
57604:     }
57605:     if( rc ){
57606:       return 0;
57607:     }
57608:   }
57609: 
57610:   if( i<0 ){
57611:     sqlite3Error(pErrorDb, SQLITE_ERROR, "unknown database %s", zDb);
57612:     return 0;
57613:   }
57614: 
57615:   return pDb->aDb[i].pBt;
57616: }
57617: 
57618: /*
57619: ** Attempt to set the page size of the destination to match the page size
57620: ** of the source.
57621: */
57622: static int setDestPgsz(sqlite3_backup *p){
57623:   int rc;
57624:   rc = sqlite3BtreeSetPageSize(p->pDest,sqlite3BtreeGetPageSize(p->pSrc),-1,0);
57625:   return rc;
57626: }
57627: 
57628: /*
57629: ** Create an sqlite3_backup process to copy the contents of zSrcDb from
57630: ** connection handle pSrcDb to zDestDb in pDestDb. If successful, return
57631: ** a pointer to the new sqlite3_backup object.
57632: **
57633: ** If an error occurs, NULL is returned and an error code and error message
57634: ** stored in database handle pDestDb.
57635: */
57636: SQLITE_API sqlite3_backup *sqlite3_backup_init(
57637:   sqlite3* pDestDb,                     /* Database to write to */
57638:   const char *zDestDb,                  /* Name of database within pDestDb */
57639:   sqlite3* pSrcDb,                      /* Database connection to read from */
57640:   const char *zSrcDb                    /* Name of database within pSrcDb */
57641: ){
57642:   sqlite3_backup *p;                    /* Value to return */
57643: 
57644:   /* Lock the source database handle. The destination database
57645:   ** handle is not locked in this routine, but it is locked in
57646:   ** sqlite3_backup_step(). The user is required to ensure that no
57647:   ** other thread accesses the destination handle for the duration
57648:   ** of the backup operation.  Any attempt to use the destination
57649:   ** database connection while a backup is in progress may cause
57650:   ** a malfunction or a deadlock.
57651:   */
57652:   sqlite3_mutex_enter(pSrcDb->mutex);
57653:   sqlite3_mutex_enter(pDestDb->mutex);
57654: 
57655:   if( pSrcDb==pDestDb ){
57656:     sqlite3Error(
57657:         pDestDb, SQLITE_ERROR, "source and destination must be distinct"
57658:     );
57659:     p = 0;
57660:   }else {
57661:     /* Allocate space for a new sqlite3_backup object...
57662:     ** EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
57663:     ** call to sqlite3_backup_init() and is destroyed by a call to
57664:     ** sqlite3_backup_finish(). */
57665:     p = (sqlite3_backup *)sqlite3_malloc(sizeof(sqlite3_backup));
57666:     if( !p ){
57667:       sqlite3Error(pDestDb, SQLITE_NOMEM, 0);
57668:     }
57669:   }
57670: 
57671:   /* If the allocation succeeded, populate the new object. */
57672:   if( p ){
57673:     memset(p, 0, sizeof(sqlite3_backup));
57674:     p->pSrc = findBtree(pDestDb, pSrcDb, zSrcDb);
57675:     p->pDest = findBtree(pDestDb, pDestDb, zDestDb);
57676:     p->pDestDb = pDestDb;
57677:     p->pSrcDb = pSrcDb;
57678:     p->iNext = 1;
57679:     p->isAttached = 0;
57680: 
57681:     if( 0==p->pSrc || 0==p->pDest || setDestPgsz(p)==SQLITE_NOMEM ){
57682:       /* One (or both) of the named databases did not exist or an OOM
57683:       ** error was hit.  The error has already been written into the
57684:       ** pDestDb handle.  All that is left to do here is free the
57685:       ** sqlite3_backup structure.
57686:       */
57687:       sqlite3_free(p);
57688:       p = 0;
57689:     }
57690:   }
57691:   if( p ){
57692:     p->pSrc->nBackup++;
57693:   }
57694: 
57695:   sqlite3_mutex_leave(pDestDb->mutex);
57696:   sqlite3_mutex_leave(pSrcDb->mutex);
57697:   return p;
57698: }
57699: 
57700: /*
57701: ** Argument rc is an SQLite error code. Return true if this error is 
57702: ** considered fatal if encountered during a backup operation. All errors
57703: ** are considered fatal except for SQLITE_BUSY and SQLITE_LOCKED.
57704: */
57705: static int isFatalError(int rc){
57706:   return (rc!=SQLITE_OK && rc!=SQLITE_BUSY && ALWAYS(rc!=SQLITE_LOCKED));
57707: }
57708: 
57709: /*
57710: ** Parameter zSrcData points to a buffer containing the data for 
57711: ** page iSrcPg from the source database. Copy this data into the 
57712: ** destination database.
57713: */
57714: static int backupOnePage(sqlite3_backup *p, Pgno iSrcPg, const u8 *zSrcData){
57715:   Pager * const pDestPager = sqlite3BtreePager(p->pDest);
57716:   const int nSrcPgsz = sqlite3BtreeGetPageSize(p->pSrc);
57717:   int nDestPgsz = sqlite3BtreeGetPageSize(p->pDest);
57718:   const int nCopy = MIN(nSrcPgsz, nDestPgsz);
57719:   const i64 iEnd = (i64)iSrcPg*(i64)nSrcPgsz;
57720: #ifdef SQLITE_HAS_CODEC
57721:   int nSrcReserve = sqlite3BtreeGetReserve(p->pSrc);
57722:   int nDestReserve = sqlite3BtreeGetReserve(p->pDest);
57723: #endif
57724: 
57725:   int rc = SQLITE_OK;
57726:   i64 iOff;
57727: 
57728:   assert( p->bDestLocked );
57729:   assert( !isFatalError(p->rc) );
57730:   assert( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) );
57731:   assert( zSrcData );
57732: 
57733:   /* Catch the case where the destination is an in-memory database and the
57734:   ** page sizes of the source and destination differ. 
57735:   */
57736:   if( nSrcPgsz!=nDestPgsz && sqlite3PagerIsMemdb(pDestPager) ){
57737:     rc = SQLITE_READONLY;
57738:   }
57739: 
57740: #ifdef SQLITE_HAS_CODEC
57741:   /* Backup is not possible if the page size of the destination is changing
57742:   ** and a codec is in use.
57743:   */
57744:   if( nSrcPgsz!=nDestPgsz && sqlite3PagerGetCodec(pDestPager)!=0 ){
57745:     rc = SQLITE_READONLY;
57746:   }
57747: 
57748:   /* Backup is not possible if the number of bytes of reserve space differ
57749:   ** between source and destination.  If there is a difference, try to
57750:   ** fix the destination to agree with the source.  If that is not possible,
57751:   ** then the backup cannot proceed.
57752:   */
57753:   if( nSrcReserve!=nDestReserve ){
57754:     u32 newPgsz = nSrcPgsz;
57755:     rc = sqlite3PagerSetPagesize(pDestPager, &newPgsz, nSrcReserve);
57756:     if( rc==SQLITE_OK && newPgsz!=nSrcPgsz ) rc = SQLITE_READONLY;
57757:   }
57758: #endif
57759: 
57760:   /* This loop runs once for each destination page spanned by the source 
57761:   ** page. For each iteration, variable iOff is set to the byte offset
57762:   ** of the destination page.
57763:   */
57764:   for(iOff=iEnd-(i64)nSrcPgsz; rc==SQLITE_OK && iOff<iEnd; iOff+=nDestPgsz){
57765:     DbPage *pDestPg = 0;
57766:     Pgno iDest = (Pgno)(iOff/nDestPgsz)+1;
57767:     if( iDest==PENDING_BYTE_PAGE(p->pDest->pBt) ) continue;
57768:     if( SQLITE_OK==(rc = sqlite3PagerGet(pDestPager, iDest, &pDestPg))
57769:      && SQLITE_OK==(rc = sqlite3PagerWrite(pDestPg))
57770:     ){
57771:       const u8 *zIn = &zSrcData[iOff%nSrcPgsz];
57772:       u8 *zDestData = sqlite3PagerGetData(pDestPg);
57773:       u8 *zOut = &zDestData[iOff%nDestPgsz];
57774: 
57775:       /* Copy the data from the source page into the destination page.
57776:       ** Then clear the Btree layer MemPage.isInit flag. Both this module
57777:       ** and the pager code use this trick (clearing the first byte
57778:       ** of the page 'extra' space to invalidate the Btree layers
57779:       ** cached parse of the page). MemPage.isInit is marked 
57780:       ** "MUST BE FIRST" for this purpose.
57781:       */
57782:       memcpy(zOut, zIn, nCopy);
57783:       ((u8 *)sqlite3PagerGetExtra(pDestPg))[0] = 0;
57784:     }
57785:     sqlite3PagerUnref(pDestPg);
57786:   }
57787: 
57788:   return rc;
57789: }
57790: 
57791: /*
57792: ** If pFile is currently larger than iSize bytes, then truncate it to
57793: ** exactly iSize bytes. If pFile is not larger than iSize bytes, then
57794: ** this function is a no-op.
57795: **
57796: ** Return SQLITE_OK if everything is successful, or an SQLite error 
57797: ** code if an error occurs.
57798: */
57799: static int backupTruncateFile(sqlite3_file *pFile, i64 iSize){
57800:   i64 iCurrent;
57801:   int rc = sqlite3OsFileSize(pFile, &iCurrent);
57802:   if( rc==SQLITE_OK && iCurrent>iSize ){
57803:     rc = sqlite3OsTruncate(pFile, iSize);
57804:   }
57805:   return rc;
57806: }
57807: 
57808: /*
57809: ** Register this backup object with the associated source pager for
57810: ** callbacks when pages are changed or the cache invalidated.
57811: */
57812: static void attachBackupObject(sqlite3_backup *p){
57813:   sqlite3_backup **pp;
57814:   assert( sqlite3BtreeHoldsMutex(p->pSrc) );
57815:   pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc));
57816:   p->pNext = *pp;
57817:   *pp = p;
57818:   p->isAttached = 1;
57819: }
57820: 
57821: /*
57822: ** Copy nPage pages from the source b-tree to the destination.
57823: */
57824: SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage){
57825:   int rc;
57826:   int destMode;       /* Destination journal mode */
57827:   int pgszSrc = 0;    /* Source page size */
57828:   int pgszDest = 0;   /* Destination page size */
57829: 
57830:   sqlite3_mutex_enter(p->pSrcDb->mutex);
57831:   sqlite3BtreeEnter(p->pSrc);
57832:   if( p->pDestDb ){
57833:     sqlite3_mutex_enter(p->pDestDb->mutex);
57834:   }
57835: 
57836:   rc = p->rc;
57837:   if( !isFatalError(rc) ){
57838:     Pager * const pSrcPager = sqlite3BtreePager(p->pSrc);     /* Source pager */
57839:     Pager * const pDestPager = sqlite3BtreePager(p->pDest);   /* Dest pager */
57840:     int ii;                            /* Iterator variable */
57841:     int nSrcPage = -1;                 /* Size of source db in pages */
57842:     int bCloseTrans = 0;               /* True if src db requires unlocking */
57843: 
57844:     /* If the source pager is currently in a write-transaction, return
57845:     ** SQLITE_BUSY immediately.
57846:     */
57847:     if( p->pDestDb && p->pSrc->pBt->inTransaction==TRANS_WRITE ){
57848:       rc = SQLITE_BUSY;
57849:     }else{
57850:       rc = SQLITE_OK;
57851:     }
57852: 
57853:     /* Lock the destination database, if it is not locked already. */
57854:     if( SQLITE_OK==rc && p->bDestLocked==0
57855:      && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2)) 
57856:     ){
57857:       p->bDestLocked = 1;
57858:       sqlite3BtreeGetMeta(p->pDest, BTREE_SCHEMA_VERSION, &p->iDestSchema);
57859:     }
57860: 
57861:     /* If there is no open read-transaction on the source database, open
57862:     ** one now. If a transaction is opened here, then it will be closed
57863:     ** before this function exits.
57864:     */
57865:     if( rc==SQLITE_OK && 0==sqlite3BtreeIsInReadTrans(p->pSrc) ){
57866:       rc = sqlite3BtreeBeginTrans(p->pSrc, 0);
57867:       bCloseTrans = 1;
57868:     }
57869: 
57870:     /* Do not allow backup if the destination database is in WAL mode
57871:     ** and the page sizes are different between source and destination */
57872:     pgszSrc = sqlite3BtreeGetPageSize(p->pSrc);
57873:     pgszDest = sqlite3BtreeGetPageSize(p->pDest);
57874:     destMode = sqlite3PagerGetJournalMode(sqlite3BtreePager(p->pDest));
57875:     if( SQLITE_OK==rc && destMode==PAGER_JOURNALMODE_WAL && pgszSrc!=pgszDest ){
57876:       rc = SQLITE_READONLY;
57877:     }
57878:   
57879:     /* Now that there is a read-lock on the source database, query the
57880:     ** source pager for the number of pages in the database.
57881:     */
57882:     nSrcPage = (int)sqlite3BtreeLastPage(p->pSrc);
57883:     assert( nSrcPage>=0 );
57884:     for(ii=0; (nPage<0 || ii<nPage) && p->iNext<=(Pgno)nSrcPage && !rc; ii++){
57885:       const Pgno iSrcPg = p->iNext;                 /* Source page number */
57886:       if( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ){
57887:         DbPage *pSrcPg;                             /* Source page object */
57888:         rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
57889:         if( rc==SQLITE_OK ){
57890:           rc = backupOnePage(p, iSrcPg, sqlite3PagerGetData(pSrcPg));
57891:           sqlite3PagerUnref(pSrcPg);
57892:         }
57893:       }
57894:       p->iNext++;
57895:     }
57896:     if( rc==SQLITE_OK ){
57897:       p->nPagecount = nSrcPage;
57898:       p->nRemaining = nSrcPage+1-p->iNext;
57899:       if( p->iNext>(Pgno)nSrcPage ){
57900:         rc = SQLITE_DONE;
57901:       }else if( !p->isAttached ){
57902:         attachBackupObject(p);
57903:       }
57904:     }
57905:   
57906:     /* Update the schema version field in the destination database. This
57907:     ** is to make sure that the schema-version really does change in
57908:     ** the case where the source and destination databases have the
57909:     ** same schema version.
57910:     */
57911:     if( rc==SQLITE_DONE ){
57912:       rc = sqlite3BtreeUpdateMeta(p->pDest,1,p->iDestSchema+1);
57913:       if( rc==SQLITE_OK ){
57914:         if( p->pDestDb ){
57915:           sqlite3ResetInternalSchema(p->pDestDb, -1);
57916:         }
57917:         if( destMode==PAGER_JOURNALMODE_WAL ){
57918:           rc = sqlite3BtreeSetVersion(p->pDest, 2);
57919:         }
57920:       }
57921:       if( rc==SQLITE_OK ){
57922:         int nDestTruncate;
57923:         /* Set nDestTruncate to the final number of pages in the destination
57924:         ** database. The complication here is that the destination page
57925:         ** size may be different to the source page size. 
57926:         **
57927:         ** If the source page size is smaller than the destination page size, 
57928:         ** round up. In this case the call to sqlite3OsTruncate() below will
57929:         ** fix the size of the file. However it is important to call
57930:         ** sqlite3PagerTruncateImage() here so that any pages in the 
57931:         ** destination file that lie beyond the nDestTruncate page mark are
57932:         ** journalled by PagerCommitPhaseOne() before they are destroyed
57933:         ** by the file truncation.
57934:         */
57935:         assert( pgszSrc==sqlite3BtreeGetPageSize(p->pSrc) );
57936:         assert( pgszDest==sqlite3BtreeGetPageSize(p->pDest) );
57937:         if( pgszSrc<pgszDest ){
57938:           int ratio = pgszDest/pgszSrc;
57939:           nDestTruncate = (nSrcPage+ratio-1)/ratio;
57940:           if( nDestTruncate==(int)PENDING_BYTE_PAGE(p->pDest->pBt) ){
57941:             nDestTruncate--;
57942:           }
57943:         }else{
57944:           nDestTruncate = nSrcPage * (pgszSrc/pgszDest);
57945:         }
57946:         sqlite3PagerTruncateImage(pDestPager, nDestTruncate);
57947: 
57948:         if( pgszSrc<pgszDest ){
57949:           /* If the source page-size is smaller than the destination page-size,
57950:           ** two extra things may need to happen:
57951:           **
57952:           **   * The destination may need to be truncated, and
57953:           **
57954:           **   * Data stored on the pages immediately following the 
57955:           **     pending-byte page in the source database may need to be
57956:           **     copied into the destination database.
57957:           */
57958:           const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
57959:           sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
57960:           i64 iOff;
57961:           i64 iEnd;
57962: 
57963:           assert( pFile );
57964:           assert( (i64)nDestTruncate*(i64)pgszDest >= iSize || (
57965:                 nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
57966:              && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
57967:           ));
57968: 
57969:           /* This call ensures that all data required to recreate the original
57970:           ** database has been stored in the journal for pDestPager and the
57971:           ** journal synced to disk. So at this point we may safely modify
57972:           ** the database file in any way, knowing that if a power failure
57973:           ** occurs, the original database will be reconstructed from the 
57974:           ** journal file.  */
57975:           rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
57976: 
57977:           /* Write the extra pages and truncate the database file as required */
57978:           iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
57979:           for(
57980:             iOff=PENDING_BYTE+pgszSrc; 
57981:             rc==SQLITE_OK && iOff<iEnd; 
57982:             iOff+=pgszSrc
57983:           ){
57984:             PgHdr *pSrcPg = 0;
57985:             const Pgno iSrcPg = (Pgno)((iOff/pgszSrc)+1);
57986:             rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
57987:             if( rc==SQLITE_OK ){
57988:               u8 *zData = sqlite3PagerGetData(pSrcPg);
57989:               rc = sqlite3OsWrite(pFile, zData, pgszSrc, iOff);
57990:             }
57991:             sqlite3PagerUnref(pSrcPg);
57992:           }
57993:           if( rc==SQLITE_OK ){
57994:             rc = backupTruncateFile(pFile, iSize);
57995:           }
57996: 
57997:           /* Sync the database file to disk. */
57998:           if( rc==SQLITE_OK ){
57999:             rc = sqlite3PagerSync(pDestPager);
58000:           }
58001:         }else{
58002:           rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 0);
58003:         }
58004:     
58005:         /* Finish committing the transaction to the destination database. */
58006:         if( SQLITE_OK==rc
58007:          && SQLITE_OK==(rc = sqlite3BtreeCommitPhaseTwo(p->pDest, 0))
58008:         ){
58009:           rc = SQLITE_DONE;
58010:         }
58011:       }
58012:     }
58013:   
58014:     /* If bCloseTrans is true, then this function opened a read transaction
58015:     ** on the source database. Close the read transaction here. There is
58016:     ** no need to check the return values of the btree methods here, as
58017:     ** "committing" a read-only transaction cannot fail.
58018:     */
58019:     if( bCloseTrans ){
58020:       TESTONLY( int rc2 );
58021:       TESTONLY( rc2  = ) sqlite3BtreeCommitPhaseOne(p->pSrc, 0);
58022:       TESTONLY( rc2 |= ) sqlite3BtreeCommitPhaseTwo(p->pSrc, 0);
58023:       assert( rc2==SQLITE_OK );
58024:     }
58025:   
58026:     if( rc==SQLITE_IOERR_NOMEM ){
58027:       rc = SQLITE_NOMEM;
58028:     }
58029:     p->rc = rc;
58030:   }
58031:   if( p->pDestDb ){
58032:     sqlite3_mutex_leave(p->pDestDb->mutex);
58033:   }
58034:   sqlite3BtreeLeave(p->pSrc);
58035:   sqlite3_mutex_leave(p->pSrcDb->mutex);
58036:   return rc;
58037: }
58038: 
58039: /*
58040: ** Release all resources associated with an sqlite3_backup* handle.
58041: */
58042: SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p){
58043:   sqlite3_backup **pp;                 /* Ptr to head of pagers backup list */
58044:   MUTEX_LOGIC( sqlite3_mutex *mutex; ) /* Mutex to protect source database */
58045:   int rc;                              /* Value to return */
58046: 
58047:   /* Enter the mutexes */
58048:   if( p==0 ) return SQLITE_OK;
58049:   sqlite3_mutex_enter(p->pSrcDb->mutex);
58050:   sqlite3BtreeEnter(p->pSrc);
58051:   MUTEX_LOGIC( mutex = p->pSrcDb->mutex; )
58052:   if( p->pDestDb ){
58053:     sqlite3_mutex_enter(p->pDestDb->mutex);
58054:   }
58055: 
58056:   /* Detach this backup from the source pager. */
58057:   if( p->pDestDb ){
58058:     p->pSrc->nBackup--;
58059:   }
58060:   if( p->isAttached ){
58061:     pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc));
58062:     while( *pp!=p ){
58063:       pp = &(*pp)->pNext;
58064:     }
58065:     *pp = p->pNext;
58066:   }
58067: 
58068:   /* If a transaction is still open on the Btree, roll it back. */
58069:   sqlite3BtreeRollback(p->pDest);
58070: 
58071:   /* Set the error code of the destination database handle. */
58072:   rc = (p->rc==SQLITE_DONE) ? SQLITE_OK : p->rc;
58073:   sqlite3Error(p->pDestDb, rc, 0);
58074: 
58075:   /* Exit the mutexes and free the backup context structure. */
58076:   if( p->pDestDb ){
58077:     sqlite3_mutex_leave(p->pDestDb->mutex);
58078:   }
58079:   sqlite3BtreeLeave(p->pSrc);
58080:   if( p->pDestDb ){
58081:     /* EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
58082:     ** call to sqlite3_backup_init() and is destroyed by a call to
58083:     ** sqlite3_backup_finish(). */
58084:     sqlite3_free(p);
58085:   }
58086:   sqlite3_mutex_leave(mutex);
58087:   return rc;
58088: }
58089: 
58090: /*
58091: ** Return the number of pages still to be backed up as of the most recent
58092: ** call to sqlite3_backup_step().
58093: */
58094: SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){
58095:   return p->nRemaining;
58096: }
58097: 
58098: /*
58099: ** Return the total number of pages in the source database as of the most 
58100: ** recent call to sqlite3_backup_step().
58101: */
58102: SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){
58103:   return p->nPagecount;
58104: }
58105: 
58106: /*
58107: ** This function is called after the contents of page iPage of the
58108: ** source database have been modified. If page iPage has already been 
58109: ** copied into the destination database, then the data written to the
58110: ** destination is now invalidated. The destination copy of iPage needs
58111: ** to be updated with the new data before the backup operation is
58112: ** complete.
58113: **
58114: ** It is assumed that the mutex associated with the BtShared object
58115: ** corresponding to the source database is held when this function is
58116: ** called.
58117: */
58118: SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *pBackup, Pgno iPage, const u8 *aData){
58119:   sqlite3_backup *p;                   /* Iterator variable */
58120:   for(p=pBackup; p; p=p->pNext){
58121:     assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) );
58122:     if( !isFatalError(p->rc) && iPage<p->iNext ){
58123:       /* The backup process p has already copied page iPage. But now it
58124:       ** has been modified by a transaction on the source pager. Copy
58125:       ** the new data into the backup.
58126:       */
58127:       int rc;
58128:       assert( p->pDestDb );
58129:       sqlite3_mutex_enter(p->pDestDb->mutex);
58130:       rc = backupOnePage(p, iPage, aData);
58131:       sqlite3_mutex_leave(p->pDestDb->mutex);
58132:       assert( rc!=SQLITE_BUSY && rc!=SQLITE_LOCKED );
58133:       if( rc!=SQLITE_OK ){
58134:         p->rc = rc;
58135:       }
58136:     }
58137:   }
58138: }
58139: 
58140: /*
58141: ** Restart the backup process. This is called when the pager layer
58142: ** detects that the database has been modified by an external database
58143: ** connection. In this case there is no way of knowing which of the
58144: ** pages that have been copied into the destination database are still 
58145: ** valid and which are not, so the entire process needs to be restarted.
58146: **
58147: ** It is assumed that the mutex associated with the BtShared object
58148: ** corresponding to the source database is held when this function is
58149: ** called.
58150: */
58151: SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *pBackup){
58152:   sqlite3_backup *p;                   /* Iterator variable */
58153:   for(p=pBackup; p; p=p->pNext){
58154:     assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) );
58155:     p->iNext = 1;
58156:   }
58157: }
58158: 
58159: #ifndef SQLITE_OMIT_VACUUM
58160: /*
58161: ** Copy the complete content of pBtFrom into pBtTo.  A transaction
58162: ** must be active for both files.
58163: **
58164: ** The size of file pTo may be reduced by this operation. If anything 
58165: ** goes wrong, the transaction on pTo is rolled back. If successful, the 
58166: ** transaction is committed before returning.
58167: */
58168: SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *pTo, Btree *pFrom){
58169:   int rc;
58170:   sqlite3_file *pFd;              /* File descriptor for database pTo */
58171:   sqlite3_backup b;
58172:   sqlite3BtreeEnter(pTo);
58173:   sqlite3BtreeEnter(pFrom);
58174: 
58175:   assert( sqlite3BtreeIsInTrans(pTo) );
58176:   pFd = sqlite3PagerFile(sqlite3BtreePager(pTo));
58177:   if( pFd->pMethods ){
58178:     i64 nByte = sqlite3BtreeGetPageSize(pFrom)*(i64)sqlite3BtreeLastPage(pFrom);
58179:     rc = sqlite3OsFileControl(pFd, SQLITE_FCNTL_OVERWRITE, &nByte);
58180:     if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK;
58181:     if( rc ) goto copy_finished;
58182:   }
58183: 
58184:   /* Set up an sqlite3_backup object. sqlite3_backup.pDestDb must be set
58185:   ** to 0. This is used by the implementations of sqlite3_backup_step()
58186:   ** and sqlite3_backup_finish() to detect that they are being called
58187:   ** from this function, not directly by the user.
58188:   */
58189:   memset(&b, 0, sizeof(b));
58190:   b.pSrcDb = pFrom->db;
58191:   b.pSrc = pFrom;
58192:   b.pDest = pTo;
58193:   b.iNext = 1;
58194: 
58195:   /* 0x7FFFFFFF is the hard limit for the number of pages in a database
58196:   ** file. By passing this as the number of pages to copy to
58197:   ** sqlite3_backup_step(), we can guarantee that the copy finishes 
58198:   ** within a single call (unless an error occurs). The assert() statement
58199:   ** checks this assumption - (p->rc) should be set to either SQLITE_DONE 
58200:   ** or an error code.
58201:   */
58202:   sqlite3_backup_step(&b, 0x7FFFFFFF);
58203:   assert( b.rc!=SQLITE_OK );
58204:   rc = sqlite3_backup_finish(&b);
58205:   if( rc==SQLITE_OK ){
58206:     pTo->pBt->btsFlags &= ~BTS_PAGESIZE_FIXED;
58207:   }else{
58208:     sqlite3PagerClearCache(sqlite3BtreePager(b.pDest));
58209:   }
58210: 
58211:   assert( sqlite3BtreeIsInTrans(pTo)==0 );
58212: copy_finished:
58213:   sqlite3BtreeLeave(pFrom);
58214:   sqlite3BtreeLeave(pTo);
58215:   return rc;
58216: }
58217: #endif /* SQLITE_OMIT_VACUUM */
58218: 
58219: /************** End of backup.c **********************************************/
58220: /************** Begin file vdbemem.c *****************************************/
58221: /*
58222: ** 2004 May 26
58223: **
58224: ** The author disclaims copyright to this source code.  In place of
58225: ** a legal notice, here is a blessing:
58226: **
58227: **    May you do good and not evil.
58228: **    May you find forgiveness for yourself and forgive others.
58229: **    May you share freely, never taking more than you give.
58230: **
58231: *************************************************************************
58232: **
58233: ** This file contains code use to manipulate "Mem" structure.  A "Mem"
58234: ** stores a single value in the VDBE.  Mem is an opaque structure visible
58235: ** only within the VDBE.  Interface routines refer to a Mem using the
58236: ** name sqlite_value
58237: */
58238: 
58239: /*
58240: ** If pMem is an object with a valid string representation, this routine
58241: ** ensures the internal encoding for the string representation is
58242: ** 'desiredEnc', one of SQLITE_UTF8, SQLITE_UTF16LE or SQLITE_UTF16BE.
58243: **
58244: ** If pMem is not a string object, or the encoding of the string
58245: ** representation is already stored using the requested encoding, then this
58246: ** routine is a no-op.
58247: **
58248: ** SQLITE_OK is returned if the conversion is successful (or not required).
58249: ** SQLITE_NOMEM may be returned if a malloc() fails during conversion
58250: ** between formats.
58251: */
58252: SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
58253:   int rc;
58254:   assert( (pMem->flags&MEM_RowSet)==0 );
58255:   assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE
58256:            || desiredEnc==SQLITE_UTF16BE );
58257:   if( !(pMem->flags&MEM_Str) || pMem->enc==desiredEnc ){
58258:     return SQLITE_OK;
58259:   }
58260:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58261: #ifdef SQLITE_OMIT_UTF16
58262:   return SQLITE_ERROR;
58263: #else
58264: 
58265:   /* MemTranslate() may return SQLITE_OK or SQLITE_NOMEM. If NOMEM is returned,
58266:   ** then the encoding of the value may not have changed.
58267:   */
58268:   rc = sqlite3VdbeMemTranslate(pMem, (u8)desiredEnc);
58269:   assert(rc==SQLITE_OK    || rc==SQLITE_NOMEM);
58270:   assert(rc==SQLITE_OK    || pMem->enc!=desiredEnc);
58271:   assert(rc==SQLITE_NOMEM || pMem->enc==desiredEnc);
58272:   return rc;
58273: #endif
58274: }
58275: 
58276: /*
58277: ** Make sure pMem->z points to a writable allocation of at least 
58278: ** n bytes.
58279: **
58280: ** If the memory cell currently contains string or blob data
58281: ** and the third argument passed to this function is true, the 
58282: ** current content of the cell is preserved. Otherwise, it may
58283: ** be discarded.  
58284: **
58285: ** This function sets the MEM_Dyn flag and clears any xDel callback.
58286: ** It also clears MEM_Ephem and MEM_Static. If the preserve flag is 
58287: ** not set, Mem.n is zeroed.
58288: */
58289: SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){
58290:   assert( 1 >=
58291:     ((pMem->zMalloc && pMem->zMalloc==pMem->z) ? 1 : 0) +
58292:     (((pMem->flags&MEM_Dyn)&&pMem->xDel) ? 1 : 0) + 
58293:     ((pMem->flags&MEM_Ephem) ? 1 : 0) + 
58294:     ((pMem->flags&MEM_Static) ? 1 : 0)
58295:   );
58296:   assert( (pMem->flags&MEM_RowSet)==0 );
58297: 
58298:   if( n<32 ) n = 32;
58299:   if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)<n ){
58300:     if( preserve && pMem->z==pMem->zMalloc ){
58301:       pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
58302:       preserve = 0;
58303:     }else{
58304:       sqlite3DbFree(pMem->db, pMem->zMalloc);
58305:       pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
58306:     }
58307:   }
58308: 
58309:   if( pMem->z && preserve && pMem->zMalloc && pMem->z!=pMem->zMalloc ){
58310:     memcpy(pMem->zMalloc, pMem->z, pMem->n);
58311:   }
58312:   if( pMem->flags&MEM_Dyn && pMem->xDel ){
58313:     pMem->xDel((void *)(pMem->z));
58314:   }
58315: 
58316:   pMem->z = pMem->zMalloc;
58317:   if( pMem->z==0 ){
58318:     pMem->flags = MEM_Null;
58319:   }else{
58320:     pMem->flags &= ~(MEM_Ephem|MEM_Static);
58321:   }
58322:   pMem->xDel = 0;
58323:   return (pMem->z ? SQLITE_OK : SQLITE_NOMEM);
58324: }
58325: 
58326: /*
58327: ** Make the given Mem object MEM_Dyn.  In other words, make it so
58328: ** that any TEXT or BLOB content is stored in memory obtained from
58329: ** malloc().  In this way, we know that the memory is safe to be
58330: ** overwritten or altered.
58331: **
58332: ** Return SQLITE_OK on success or SQLITE_NOMEM if malloc fails.
58333: */
58334: SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){
58335:   int f;
58336:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58337:   assert( (pMem->flags&MEM_RowSet)==0 );
58338:   ExpandBlob(pMem);
58339:   f = pMem->flags;
58340:   if( (f&(MEM_Str|MEM_Blob)) && pMem->z!=pMem->zMalloc ){
58341:     if( sqlite3VdbeMemGrow(pMem, pMem->n + 2, 1) ){
58342:       return SQLITE_NOMEM;
58343:     }
58344:     pMem->z[pMem->n] = 0;
58345:     pMem->z[pMem->n+1] = 0;
58346:     pMem->flags |= MEM_Term;
58347: #ifdef SQLITE_DEBUG
58348:     pMem->pScopyFrom = 0;
58349: #endif
58350:   }
58351: 
58352:   return SQLITE_OK;
58353: }
58354: 
58355: /*
58356: ** If the given Mem* has a zero-filled tail, turn it into an ordinary
58357: ** blob stored in dynamically allocated space.
58358: */
58359: #ifndef SQLITE_OMIT_INCRBLOB
58360: SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){
58361:   if( pMem->flags & MEM_Zero ){
58362:     int nByte;
58363:     assert( pMem->flags&MEM_Blob );
58364:     assert( (pMem->flags&MEM_RowSet)==0 );
58365:     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58366: 
58367:     /* Set nByte to the number of bytes required to store the expanded blob. */
58368:     nByte = pMem->n + pMem->u.nZero;
58369:     if( nByte<=0 ){
58370:       nByte = 1;
58371:     }
58372:     if( sqlite3VdbeMemGrow(pMem, nByte, 1) ){
58373:       return SQLITE_NOMEM;
58374:     }
58375: 
58376:     memset(&pMem->z[pMem->n], 0, pMem->u.nZero);
58377:     pMem->n += pMem->u.nZero;
58378:     pMem->flags &= ~(MEM_Zero|MEM_Term);
58379:   }
58380:   return SQLITE_OK;
58381: }
58382: #endif
58383: 
58384: 
58385: /*
58386: ** Make sure the given Mem is \u0000 terminated.
58387: */
58388: SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
58389:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58390:   if( (pMem->flags & MEM_Term)!=0 || (pMem->flags & MEM_Str)==0 ){
58391:     return SQLITE_OK;   /* Nothing to do */
58392:   }
58393:   if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
58394:     return SQLITE_NOMEM;
58395:   }
58396:   pMem->z[pMem->n] = 0;
58397:   pMem->z[pMem->n+1] = 0;
58398:   pMem->flags |= MEM_Term;
58399:   return SQLITE_OK;
58400: }
58401: 
58402: /*
58403: ** Add MEM_Str to the set of representations for the given Mem.  Numbers
58404: ** are converted using sqlite3_snprintf().  Converting a BLOB to a string
58405: ** is a no-op.
58406: **
58407: ** Existing representations MEM_Int and MEM_Real are *not* invalidated.
58408: **
58409: ** A MEM_Null value will never be passed to this function. This function is
58410: ** used for converting values to text for returning to the user (i.e. via
58411: ** sqlite3_value_text()), or for ensuring that values to be used as btree
58412: ** keys are strings. In the former case a NULL pointer is returned the
58413: ** user and the later is an internal programming error.
58414: */
58415: SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, int enc){
58416:   int rc = SQLITE_OK;
58417:   int fg = pMem->flags;
58418:   const int nByte = 32;
58419: 
58420:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58421:   assert( !(fg&MEM_Zero) );
58422:   assert( !(fg&(MEM_Str|MEM_Blob)) );
58423:   assert( fg&(MEM_Int|MEM_Real) );
58424:   assert( (pMem->flags&MEM_RowSet)==0 );
58425:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58426: 
58427: 
58428:   if( sqlite3VdbeMemGrow(pMem, nByte, 0) ){
58429:     return SQLITE_NOMEM;
58430:   }
58431: 
58432:   /* For a Real or Integer, use sqlite3_mprintf() to produce the UTF-8
58433:   ** string representation of the value. Then, if the required encoding
58434:   ** is UTF-16le or UTF-16be do a translation.
58435:   ** 
58436:   ** FIX ME: It would be better if sqlite3_snprintf() could do UTF-16.
58437:   */
58438:   if( fg & MEM_Int ){
58439:     sqlite3_snprintf(nByte, pMem->z, "%lld", pMem->u.i);
58440:   }else{
58441:     assert( fg & MEM_Real );
58442:     sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->r);
58443:   }
58444:   pMem->n = sqlite3Strlen30(pMem->z);
58445:   pMem->enc = SQLITE_UTF8;
58446:   pMem->flags |= MEM_Str|MEM_Term;
58447:   sqlite3VdbeChangeEncoding(pMem, enc);
58448:   return rc;
58449: }
58450: 
58451: /*
58452: ** Memory cell pMem contains the context of an aggregate function.
58453: ** This routine calls the finalize method for that function.  The
58454: ** result of the aggregate is stored back into pMem.
58455: **
58456: ** Return SQLITE_ERROR if the finalizer reports an error.  SQLITE_OK
58457: ** otherwise.
58458: */
58459: SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
58460:   int rc = SQLITE_OK;
58461:   if( ALWAYS(pFunc && pFunc->xFinalize) ){
58462:     sqlite3_context ctx;
58463:     assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef );
58464:     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58465:     memset(&ctx, 0, sizeof(ctx));
58466:     ctx.s.flags = MEM_Null;
58467:     ctx.s.db = pMem->db;
58468:     ctx.pMem = pMem;
58469:     ctx.pFunc = pFunc;
58470:     pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */
58471:     assert( 0==(pMem->flags&MEM_Dyn) && !pMem->xDel );
58472:     sqlite3DbFree(pMem->db, pMem->zMalloc);
58473:     memcpy(pMem, &ctx.s, sizeof(ctx.s));
58474:     rc = ctx.isError;
58475:   }
58476:   return rc;
58477: }
58478: 
58479: /*
58480: ** If the memory cell contains a string value that must be freed by
58481: ** invoking an external callback, free it now. Calling this function
58482: ** does not free any Mem.zMalloc buffer.
58483: */
58484: SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p){
58485:   assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
58486:   if( p->flags&MEM_Agg ){
58487:     sqlite3VdbeMemFinalize(p, p->u.pDef);
58488:     assert( (p->flags & MEM_Agg)==0 );
58489:     sqlite3VdbeMemRelease(p);
58490:   }else if( p->flags&MEM_Dyn && p->xDel ){
58491:     assert( (p->flags&MEM_RowSet)==0 );
58492:     p->xDel((void *)p->z);
58493:     p->xDel = 0;
58494:   }else if( p->flags&MEM_RowSet ){
58495:     sqlite3RowSetClear(p->u.pRowSet);
58496:   }else if( p->flags&MEM_Frame ){
58497:     sqlite3VdbeMemSetNull(p);
58498:   }
58499: }
58500: 
58501: /*
58502: ** Release any memory held by the Mem. This may leave the Mem in an
58503: ** inconsistent state, for example with (Mem.z==0) and
58504: ** (Mem.type==SQLITE_TEXT).
58505: */
58506: SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){
58507:   VdbeMemRelease(p);
58508:   sqlite3DbFree(p->db, p->zMalloc);
58509:   p->z = 0;
58510:   p->zMalloc = 0;
58511:   p->xDel = 0;
58512: }
58513: 
58514: /*
58515: ** Convert a 64-bit IEEE double into a 64-bit signed integer.
58516: ** If the double is too large, return 0x8000000000000000.
58517: **
58518: ** Most systems appear to do this simply by assigning
58519: ** variables and without the extra range tests.  But
58520: ** there are reports that windows throws an expection
58521: ** if the floating point value is out of range. (See ticket #2880.)
58522: ** Because we do not completely understand the problem, we will
58523: ** take the conservative approach and always do range tests
58524: ** before attempting the conversion.
58525: */
58526: static i64 doubleToInt64(double r){
58527: #ifdef SQLITE_OMIT_FLOATING_POINT
58528:   /* When floating-point is omitted, double and int64 are the same thing */
58529:   return r;
58530: #else
58531:   /*
58532:   ** Many compilers we encounter do not define constants for the
58533:   ** minimum and maximum 64-bit integers, or they define them
58534:   ** inconsistently.  And many do not understand the "LL" notation.
58535:   ** So we define our own static constants here using nothing
58536:   ** larger than a 32-bit integer constant.
58537:   */
58538:   static const i64 maxInt = LARGEST_INT64;
58539:   static const i64 minInt = SMALLEST_INT64;
58540: 
58541:   if( r<(double)minInt ){
58542:     return minInt;
58543:   }else if( r>(double)maxInt ){
58544:     /* minInt is correct here - not maxInt.  It turns out that assigning
58545:     ** a very large positive number to an integer results in a very large
58546:     ** negative integer.  This makes no sense, but it is what x86 hardware
58547:     ** does so for compatibility we will do the same in software. */
58548:     return minInt;
58549:   }else{
58550:     return (i64)r;
58551:   }
58552: #endif
58553: }
58554: 
58555: /*
58556: ** Return some kind of integer value which is the best we can do
58557: ** at representing the value that *pMem describes as an integer.
58558: ** If pMem is an integer, then the value is exact.  If pMem is
58559: ** a floating-point then the value returned is the integer part.
58560: ** If pMem is a string or blob, then we make an attempt to convert
58561: ** it into a integer and return that.  If pMem represents an
58562: ** an SQL-NULL value, return 0.
58563: **
58564: ** If pMem represents a string value, its encoding might be changed.
58565: */
58566: SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){
58567:   int flags;
58568:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58569:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58570:   flags = pMem->flags;
58571:   if( flags & MEM_Int ){
58572:     return pMem->u.i;
58573:   }else if( flags & MEM_Real ){
58574:     return doubleToInt64(pMem->r);
58575:   }else if( flags & (MEM_Str|MEM_Blob) ){
58576:     i64 value = 0;
58577:     assert( pMem->z || pMem->n==0 );
58578:     testcase( pMem->z==0 );
58579:     sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc);
58580:     return value;
58581:   }else{
58582:     return 0;
58583:   }
58584: }
58585: 
58586: /*
58587: ** Return the best representation of pMem that we can get into a
58588: ** double.  If pMem is already a double or an integer, return its
58589: ** value.  If it is a string or blob, try to convert it to a double.
58590: ** If it is a NULL, return 0.0.
58591: */
58592: SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){
58593:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58594:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58595:   if( pMem->flags & MEM_Real ){
58596:     return pMem->r;
58597:   }else if( pMem->flags & MEM_Int ){
58598:     return (double)pMem->u.i;
58599:   }else if( pMem->flags & (MEM_Str|MEM_Blob) ){
58600:     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
58601:     double val = (double)0;
58602:     sqlite3AtoF(pMem->z, &val, pMem->n, pMem->enc);
58603:     return val;
58604:   }else{
58605:     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
58606:     return (double)0;
58607:   }
58608: }
58609: 
58610: /*
58611: ** The MEM structure is already a MEM_Real.  Try to also make it a
58612: ** MEM_Int if we can.
58613: */
58614: SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){
58615:   assert( pMem->flags & MEM_Real );
58616:   assert( (pMem->flags & MEM_RowSet)==0 );
58617:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58618:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58619: 
58620:   pMem->u.i = doubleToInt64(pMem->r);
58621: 
58622:   /* Only mark the value as an integer if
58623:   **
58624:   **    (1) the round-trip conversion real->int->real is a no-op, and
58625:   **    (2) The integer is neither the largest nor the smallest
58626:   **        possible integer (ticket #3922)
58627:   **
58628:   ** The second and third terms in the following conditional enforces
58629:   ** the second condition under the assumption that addition overflow causes
58630:   ** values to wrap around.  On x86 hardware, the third term is always
58631:   ** true and could be omitted.  But we leave it in because other
58632:   ** architectures might behave differently.
58633:   */
58634:   if( pMem->r==(double)pMem->u.i && pMem->u.i>SMALLEST_INT64
58635:       && ALWAYS(pMem->u.i<LARGEST_INT64) ){
58636:     pMem->flags |= MEM_Int;
58637:   }
58638: }
58639: 
58640: /*
58641: ** Convert pMem to type integer.  Invalidate any prior representations.
58642: */
58643: SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem *pMem){
58644:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58645:   assert( (pMem->flags & MEM_RowSet)==0 );
58646:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58647: 
58648:   pMem->u.i = sqlite3VdbeIntValue(pMem);
58649:   MemSetTypeFlag(pMem, MEM_Int);
58650:   return SQLITE_OK;
58651: }
58652: 
58653: /*
58654: ** Convert pMem so that it is of type MEM_Real.
58655: ** Invalidate any prior representations.
58656: */
58657: SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){
58658:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58659:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58660: 
58661:   pMem->r = sqlite3VdbeRealValue(pMem);
58662:   MemSetTypeFlag(pMem, MEM_Real);
58663:   return SQLITE_OK;
58664: }
58665: 
58666: /*
58667: ** Convert pMem so that it has types MEM_Real or MEM_Int or both.
58668: ** Invalidate any prior representations.
58669: **
58670: ** Every effort is made to force the conversion, even if the input
58671: ** is a string that does not look completely like a number.  Convert
58672: ** as much of the string as we can and ignore the rest.
58673: */
58674: SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
58675:   if( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ){
58676:     assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
58677:     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58678:     if( 0==sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc) ){
58679:       MemSetTypeFlag(pMem, MEM_Int);
58680:     }else{
58681:       pMem->r = sqlite3VdbeRealValue(pMem);
58682:       MemSetTypeFlag(pMem, MEM_Real);
58683:       sqlite3VdbeIntegerAffinity(pMem);
58684:     }
58685:   }
58686:   assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))!=0 );
58687:   pMem->flags &= ~(MEM_Str|MEM_Blob);
58688:   return SQLITE_OK;
58689: }
58690: 
58691: /*
58692: ** Delete any previous value and set the value stored in *pMem to NULL.
58693: */
58694: SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){
58695:   if( pMem->flags & MEM_Frame ){
58696:     VdbeFrame *pFrame = pMem->u.pFrame;
58697:     pFrame->pParent = pFrame->v->pDelFrame;
58698:     pFrame->v->pDelFrame = pFrame;
58699:   }
58700:   if( pMem->flags & MEM_RowSet ){
58701:     sqlite3RowSetClear(pMem->u.pRowSet);
58702:   }
58703:   MemSetTypeFlag(pMem, MEM_Null);
58704:   pMem->type = SQLITE_NULL;
58705: }
58706: 
58707: /*
58708: ** Delete any previous value and set the value to be a BLOB of length
58709: ** n containing all zeros.
58710: */
58711: SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
58712:   sqlite3VdbeMemRelease(pMem);
58713:   pMem->flags = MEM_Blob|MEM_Zero;
58714:   pMem->type = SQLITE_BLOB;
58715:   pMem->n = 0;
58716:   if( n<0 ) n = 0;
58717:   pMem->u.nZero = n;
58718:   pMem->enc = SQLITE_UTF8;
58719: 
58720: #ifdef SQLITE_OMIT_INCRBLOB
58721:   sqlite3VdbeMemGrow(pMem, n, 0);
58722:   if( pMem->z ){
58723:     pMem->n = n;
58724:     memset(pMem->z, 0, n);
58725:   }
58726: #endif
58727: }
58728: 
58729: /*
58730: ** Delete any previous value and set the value stored in *pMem to val,
58731: ** manifest type INTEGER.
58732: */
58733: SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
58734:   sqlite3VdbeMemRelease(pMem);
58735:   pMem->u.i = val;
58736:   pMem->flags = MEM_Int;
58737:   pMem->type = SQLITE_INTEGER;
58738: }
58739: 
58740: #ifndef SQLITE_OMIT_FLOATING_POINT
58741: /*
58742: ** Delete any previous value and set the value stored in *pMem to val,
58743: ** manifest type REAL.
58744: */
58745: SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem *pMem, double val){
58746:   if( sqlite3IsNaN(val) ){
58747:     sqlite3VdbeMemSetNull(pMem);
58748:   }else{
58749:     sqlite3VdbeMemRelease(pMem);
58750:     pMem->r = val;
58751:     pMem->flags = MEM_Real;
58752:     pMem->type = SQLITE_FLOAT;
58753:   }
58754: }
58755: #endif
58756: 
58757: /*
58758: ** Delete any previous value and set the value of pMem to be an
58759: ** empty boolean index.
58760: */
58761: SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem *pMem){
58762:   sqlite3 *db = pMem->db;
58763:   assert( db!=0 );
58764:   assert( (pMem->flags & MEM_RowSet)==0 );
58765:   sqlite3VdbeMemRelease(pMem);
58766:   pMem->zMalloc = sqlite3DbMallocRaw(db, 64);
58767:   if( db->mallocFailed ){
58768:     pMem->flags = MEM_Null;
58769:   }else{
58770:     assert( pMem->zMalloc );
58771:     pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc, 
58772:                                        sqlite3DbMallocSize(db, pMem->zMalloc));
58773:     assert( pMem->u.pRowSet!=0 );
58774:     pMem->flags = MEM_RowSet;
58775:   }
58776: }
58777: 
58778: /*
58779: ** Return true if the Mem object contains a TEXT or BLOB that is
58780: ** too large - whose size exceeds SQLITE_MAX_LENGTH.
58781: */
58782: SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem *p){
58783:   assert( p->db!=0 );
58784:   if( p->flags & (MEM_Str|MEM_Blob) ){
58785:     int n = p->n;
58786:     if( p->flags & MEM_Zero ){
58787:       n += p->u.nZero;
58788:     }
58789:     return n>p->db->aLimit[SQLITE_LIMIT_LENGTH];
58790:   }
58791:   return 0; 
58792: }
58793: 
58794: #ifdef SQLITE_DEBUG
58795: /*
58796: ** This routine prepares a memory cell for modication by breaking
58797: ** its link to a shallow copy and by marking any current shallow
58798: ** copies of this cell as invalid.
58799: **
58800: ** This is used for testing and debugging only - to make sure shallow
58801: ** copies are not misused.
58802: */
58803: SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){
58804:   int i;
58805:   Mem *pX;
58806:   for(i=1, pX=&pVdbe->aMem[1]; i<=pVdbe->nMem; i++, pX++){
58807:     if( pX->pScopyFrom==pMem ){
58808:       pX->flags |= MEM_Invalid;
58809:       pX->pScopyFrom = 0;
58810:     }
58811:   }
58812:   pMem->pScopyFrom = 0;
58813: }
58814: #endif /* SQLITE_DEBUG */
58815: 
58816: /*
58817: ** Size of struct Mem not including the Mem.zMalloc member.
58818: */
58819: #define MEMCELLSIZE (size_t)(&(((Mem *)0)->zMalloc))
58820: 
58821: /*
58822: ** Make an shallow copy of pFrom into pTo.  Prior contents of
58823: ** pTo are freed.  The pFrom->z field is not duplicated.  If
58824: ** pFrom->z is used, then pTo->z points to the same thing as pFrom->z
58825: ** and flags gets srcType (either MEM_Ephem or MEM_Static).
58826: */
58827: SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
58828:   assert( (pFrom->flags & MEM_RowSet)==0 );
58829:   VdbeMemRelease(pTo);
58830:   memcpy(pTo, pFrom, MEMCELLSIZE);
58831:   pTo->xDel = 0;
58832:   if( (pFrom->flags&MEM_Static)==0 ){
58833:     pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem);
58834:     assert( srcType==MEM_Ephem || srcType==MEM_Static );
58835:     pTo->flags |= srcType;
58836:   }
58837: }
58838: 
58839: /*
58840: ** Make a full copy of pFrom into pTo.  Prior contents of pTo are
58841: ** freed before the copy is made.
58842: */
58843: SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
58844:   int rc = SQLITE_OK;
58845: 
58846:   assert( (pFrom->flags & MEM_RowSet)==0 );
58847:   VdbeMemRelease(pTo);
58848:   memcpy(pTo, pFrom, MEMCELLSIZE);
58849:   pTo->flags &= ~MEM_Dyn;
58850: 
58851:   if( pTo->flags&(MEM_Str|MEM_Blob) ){
58852:     if( 0==(pFrom->flags&MEM_Static) ){
58853:       pTo->flags |= MEM_Ephem;
58854:       rc = sqlite3VdbeMemMakeWriteable(pTo);
58855:     }
58856:   }
58857: 
58858:   return rc;
58859: }
58860: 
58861: /*
58862: ** Transfer the contents of pFrom to pTo. Any existing value in pTo is
58863: ** freed. If pFrom contains ephemeral data, a copy is made.
58864: **
58865: ** pFrom contains an SQL NULL when this routine returns.
58866: */
58867: SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){
58868:   assert( pFrom->db==0 || sqlite3_mutex_held(pFrom->db->mutex) );
58869:   assert( pTo->db==0 || sqlite3_mutex_held(pTo->db->mutex) );
58870:   assert( pFrom->db==0 || pTo->db==0 || pFrom->db==pTo->db );
58871: 
58872:   sqlite3VdbeMemRelease(pTo);
58873:   memcpy(pTo, pFrom, sizeof(Mem));
58874:   pFrom->flags = MEM_Null;
58875:   pFrom->xDel = 0;
58876:   pFrom->zMalloc = 0;
58877: }
58878: 
58879: /*
58880: ** Change the value of a Mem to be a string or a BLOB.
58881: **
58882: ** The memory management strategy depends on the value of the xDel
58883: ** parameter. If the value passed is SQLITE_TRANSIENT, then the 
58884: ** string is copied into a (possibly existing) buffer managed by the 
58885: ** Mem structure. Otherwise, any existing buffer is freed and the
58886: ** pointer copied.
58887: **
58888: ** If the string is too large (if it exceeds the SQLITE_LIMIT_LENGTH
58889: ** size limit) then no memory allocation occurs.  If the string can be
58890: ** stored without allocating memory, then it is.  If a memory allocation
58891: ** is required to store the string, then value of pMem is unchanged.  In
58892: ** either case, SQLITE_TOOBIG is returned.
58893: */
58894: SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
58895:   Mem *pMem,          /* Memory cell to set to string value */
58896:   const char *z,      /* String pointer */
58897:   int n,              /* Bytes in string, or negative */
58898:   u8 enc,             /* Encoding of z.  0 for BLOBs */
58899:   void (*xDel)(void*) /* Destructor function */
58900: ){
58901:   int nByte = n;      /* New value for pMem->n */
58902:   int iLimit;         /* Maximum allowed string or blob size */
58903:   u16 flags = 0;      /* New value for pMem->flags */
58904: 
58905:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58906:   assert( (pMem->flags & MEM_RowSet)==0 );
58907: 
58908:   /* If z is a NULL pointer, set pMem to contain an SQL NULL. */
58909:   if( !z ){
58910:     sqlite3VdbeMemSetNull(pMem);
58911:     return SQLITE_OK;
58912:   }
58913: 
58914:   if( pMem->db ){
58915:     iLimit = pMem->db->aLimit[SQLITE_LIMIT_LENGTH];
58916:   }else{
58917:     iLimit = SQLITE_MAX_LENGTH;
58918:   }
58919:   flags = (enc==0?MEM_Blob:MEM_Str);
58920:   if( nByte<0 ){
58921:     assert( enc!=0 );
58922:     if( enc==SQLITE_UTF8 ){
58923:       for(nByte=0; nByte<=iLimit && z[nByte]; nByte++){}
58924:     }else{
58925:       for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){}
58926:     }
58927:     flags |= MEM_Term;
58928:   }
58929: 
58930:   /* The following block sets the new values of Mem.z and Mem.xDel. It
58931:   ** also sets a flag in local variable "flags" to indicate the memory
58932:   ** management (one of MEM_Dyn or MEM_Static).
58933:   */
58934:   if( xDel==SQLITE_TRANSIENT ){
58935:     int nAlloc = nByte;
58936:     if( flags&MEM_Term ){
58937:       nAlloc += (enc==SQLITE_UTF8?1:2);
58938:     }
58939:     if( nByte>iLimit ){
58940:       return SQLITE_TOOBIG;
58941:     }
58942:     if( sqlite3VdbeMemGrow(pMem, nAlloc, 0) ){
58943:       return SQLITE_NOMEM;
58944:     }
58945:     memcpy(pMem->z, z, nAlloc);
58946:   }else if( xDel==SQLITE_DYNAMIC ){
58947:     sqlite3VdbeMemRelease(pMem);
58948:     pMem->zMalloc = pMem->z = (char *)z;
58949:     pMem->xDel = 0;
58950:   }else{
58951:     sqlite3VdbeMemRelease(pMem);
58952:     pMem->z = (char *)z;
58953:     pMem->xDel = xDel;
58954:     flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
58955:   }
58956: 
58957:   pMem->n = nByte;
58958:   pMem->flags = flags;
58959:   pMem->enc = (enc==0 ? SQLITE_UTF8 : enc);
58960:   pMem->type = (enc==0 ? SQLITE_BLOB : SQLITE_TEXT);
58961: 
58962: #ifndef SQLITE_OMIT_UTF16
58963:   if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){
58964:     return SQLITE_NOMEM;
58965:   }
58966: #endif
58967: 
58968:   if( nByte>iLimit ){
58969:     return SQLITE_TOOBIG;
58970:   }
58971: 
58972:   return SQLITE_OK;
58973: }
58974: 
58975: /*
58976: ** Compare the values contained by the two memory cells, returning
58977: ** negative, zero or positive if pMem1 is less than, equal to, or greater
58978: ** than pMem2. Sorting order is NULL's first, followed by numbers (integers
58979: ** and reals) sorted numerically, followed by text ordered by the collating
58980: ** sequence pColl and finally blob's ordered by memcmp().
58981: **
58982: ** Two NULL values are considered equal by this function.
58983: */
58984: SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
58985:   int rc;
58986:   int f1, f2;
58987:   int combined_flags;
58988: 
58989:   f1 = pMem1->flags;
58990:   f2 = pMem2->flags;
58991:   combined_flags = f1|f2;
58992:   assert( (combined_flags & MEM_RowSet)==0 );
58993:  
58994:   /* If one value is NULL, it is less than the other. If both values
58995:   ** are NULL, return 0.
58996:   */
58997:   if( combined_flags&MEM_Null ){
58998:     return (f2&MEM_Null) - (f1&MEM_Null);
58999:   }
59000: 
59001:   /* If one value is a number and the other is not, the number is less.
59002:   ** If both are numbers, compare as reals if one is a real, or as integers
59003:   ** if both values are integers.
59004:   */
59005:   if( combined_flags&(MEM_Int|MEM_Real) ){
59006:     if( !(f1&(MEM_Int|MEM_Real)) ){
59007:       return 1;
59008:     }
59009:     if( !(f2&(MEM_Int|MEM_Real)) ){
59010:       return -1;
59011:     }
59012:     if( (f1 & f2 & MEM_Int)==0 ){
59013:       double r1, r2;
59014:       if( (f1&MEM_Real)==0 ){
59015:         r1 = (double)pMem1->u.i;
59016:       }else{
59017:         r1 = pMem1->r;
59018:       }
59019:       if( (f2&MEM_Real)==0 ){
59020:         r2 = (double)pMem2->u.i;
59021:       }else{
59022:         r2 = pMem2->r;
59023:       }
59024:       if( r1<r2 ) return -1;
59025:       if( r1>r2 ) return 1;
59026:       return 0;
59027:     }else{
59028:       assert( f1&MEM_Int );
59029:       assert( f2&MEM_Int );
59030:       if( pMem1->u.i < pMem2->u.i ) return -1;
59031:       if( pMem1->u.i > pMem2->u.i ) return 1;
59032:       return 0;
59033:     }
59034:   }
59035: 
59036:   /* If one value is a string and the other is a blob, the string is less.
59037:   ** If both are strings, compare using the collating functions.
59038:   */
59039:   if( combined_flags&MEM_Str ){
59040:     if( (f1 & MEM_Str)==0 ){
59041:       return 1;
59042:     }
59043:     if( (f2 & MEM_Str)==0 ){
59044:       return -1;
59045:     }
59046: 
59047:     assert( pMem1->enc==pMem2->enc );
59048:     assert( pMem1->enc==SQLITE_UTF8 || 
59049:             pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE );
59050: 
59051:     /* The collation sequence must be defined at this point, even if
59052:     ** the user deletes the collation sequence after the vdbe program is
59053:     ** compiled (this was not always the case).
59054:     */
59055:     assert( !pColl || pColl->xCmp );
59056: 
59057:     if( pColl ){
59058:       if( pMem1->enc==pColl->enc ){
59059:         /* The strings are already in the correct encoding.  Call the
59060:         ** comparison function directly */
59061:         return pColl->xCmp(pColl->pUser,pMem1->n,pMem1->z,pMem2->n,pMem2->z);
59062:       }else{
59063:         const void *v1, *v2;
59064:         int n1, n2;
59065:         Mem c1;
59066:         Mem c2;
59067:         memset(&c1, 0, sizeof(c1));
59068:         memset(&c2, 0, sizeof(c2));
59069:         sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem);
59070:         sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem);
59071:         v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc);
59072:         n1 = v1==0 ? 0 : c1.n;
59073:         v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc);
59074:         n2 = v2==0 ? 0 : c2.n;
59075:         rc = pColl->xCmp(pColl->pUser, n1, v1, n2, v2);
59076:         sqlite3VdbeMemRelease(&c1);
59077:         sqlite3VdbeMemRelease(&c2);
59078:         return rc;
59079:       }
59080:     }
59081:     /* If a NULL pointer was passed as the collate function, fall through
59082:     ** to the blob case and use memcmp().  */
59083:   }
59084:  
59085:   /* Both values must be blobs.  Compare using memcmp().  */
59086:   rc = memcmp(pMem1->z, pMem2->z, (pMem1->n>pMem2->n)?pMem2->n:pMem1->n);
59087:   if( rc==0 ){
59088:     rc = pMem1->n - pMem2->n;
59089:   }
59090:   return rc;
59091: }
59092: 
59093: /*
59094: ** Move data out of a btree key or data field and into a Mem structure.
59095: ** The data or key is taken from the entry that pCur is currently pointing
59096: ** to.  offset and amt determine what portion of the data or key to retrieve.
59097: ** key is true to get the key or false to get data.  The result is written
59098: ** into the pMem element.
59099: **
59100: ** The pMem structure is assumed to be uninitialized.  Any prior content
59101: ** is overwritten without being freed.
59102: **
59103: ** If this routine fails for any reason (malloc returns NULL or unable
59104: ** to read from the disk) then the pMem is left in an inconsistent state.
59105: */
59106: SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(
59107:   BtCursor *pCur,   /* Cursor pointing at record to retrieve. */
59108:   int offset,       /* Offset from the start of data to return bytes from. */
59109:   int amt,          /* Number of bytes to return. */
59110:   int key,          /* If true, retrieve from the btree key, not data. */
59111:   Mem *pMem         /* OUT: Return data in this Mem structure. */
59112: ){
59113:   char *zData;        /* Data from the btree layer */
59114:   int available = 0;  /* Number of bytes available on the local btree page */
59115:   int rc = SQLITE_OK; /* Return code */
59116: 
59117:   assert( sqlite3BtreeCursorIsValid(pCur) );
59118: 
59119:   /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert() 
59120:   ** that both the BtShared and database handle mutexes are held. */
59121:   assert( (pMem->flags & MEM_RowSet)==0 );
59122:   if( key ){
59123:     zData = (char *)sqlite3BtreeKeyFetch(pCur, &available);
59124:   }else{
59125:     zData = (char *)sqlite3BtreeDataFetch(pCur, &available);
59126:   }
59127:   assert( zData!=0 );
59128: 
59129:   if( offset+amt<=available && (pMem->flags&MEM_Dyn)==0 ){
59130:     sqlite3VdbeMemRelease(pMem);
59131:     pMem->z = &zData[offset];
59132:     pMem->flags = MEM_Blob|MEM_Ephem;
59133:   }else if( SQLITE_OK==(rc = sqlite3VdbeMemGrow(pMem, amt+2, 0)) ){
59134:     pMem->flags = MEM_Blob|MEM_Dyn|MEM_Term;
59135:     pMem->enc = 0;
59136:     pMem->type = SQLITE_BLOB;
59137:     if( key ){
59138:       rc = sqlite3BtreeKey(pCur, offset, amt, pMem->z);
59139:     }else{
59140:       rc = sqlite3BtreeData(pCur, offset, amt, pMem->z);
59141:     }
59142:     pMem->z[amt] = 0;
59143:     pMem->z[amt+1] = 0;
59144:     if( rc!=SQLITE_OK ){
59145:       sqlite3VdbeMemRelease(pMem);
59146:     }
59147:   }
59148:   pMem->n = amt;
59149: 
59150:   return rc;
59151: }
59152: 
59153: /* This function is only available internally, it is not part of the
59154: ** external API. It works in a similar way to sqlite3_value_text(),
59155: ** except the data returned is in the encoding specified by the second
59156: ** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or
59157: ** SQLITE_UTF8.
59158: **
59159: ** (2006-02-16:)  The enc value can be or-ed with SQLITE_UTF16_ALIGNED.
59160: ** If that is the case, then the result must be aligned on an even byte
59161: ** boundary.
59162: */
59163: SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
59164:   if( !pVal ) return 0;
59165: 
59166:   assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) );
59167:   assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) );
59168:   assert( (pVal->flags & MEM_RowSet)==0 );
59169: 
59170:   if( pVal->flags&MEM_Null ){
59171:     return 0;
59172:   }
59173:   assert( (MEM_Blob>>3) == MEM_Str );
59174:   pVal->flags |= (pVal->flags & MEM_Blob)>>3;
59175:   ExpandBlob(pVal);
59176:   if( pVal->flags&MEM_Str ){
59177:     sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED);
59178:     if( (enc & SQLITE_UTF16_ALIGNED)!=0 && 1==(1&SQLITE_PTR_TO_INT(pVal->z)) ){
59179:       assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 );
59180:       if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){
59181:         return 0;
59182:       }
59183:     }
59184:     sqlite3VdbeMemNulTerminate(pVal); /* IMP: R-31275-44060 */
59185:   }else{
59186:     assert( (pVal->flags&MEM_Blob)==0 );
59187:     sqlite3VdbeMemStringify(pVal, enc);
59188:     assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) );
59189:   }
59190:   assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0
59191:               || pVal->db->mallocFailed );
59192:   if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){
59193:     return pVal->z;
59194:   }else{
59195:     return 0;
59196:   }
59197: }
59198: 
59199: /*
59200: ** Create a new sqlite3_value object.
59201: */
59202: SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *db){
59203:   Mem *p = sqlite3DbMallocZero(db, sizeof(*p));
59204:   if( p ){
59205:     p->flags = MEM_Null;
59206:     p->type = SQLITE_NULL;
59207:     p->db = db;
59208:   }
59209:   return p;
59210: }
59211: 
59212: /*
59213: ** Create a new sqlite3_value object, containing the value of pExpr.
59214: **
59215: ** This only works for very simple expressions that consist of one constant
59216: ** token (i.e. "5", "5.1", "'a string'"). If the expression can
59217: ** be converted directly into a value, then the value is allocated and
59218: ** a pointer written to *ppVal. The caller is responsible for deallocating
59219: ** the value by passing it to sqlite3ValueFree() later on. If the expression
59220: ** cannot be converted to a value, then *ppVal is set to NULL.
59221: */
59222: SQLITE_PRIVATE int sqlite3ValueFromExpr(
59223:   sqlite3 *db,              /* The database connection */
59224:   Expr *pExpr,              /* The expression to evaluate */
59225:   u8 enc,                   /* Encoding to use */
59226:   u8 affinity,              /* Affinity to use */
59227:   sqlite3_value **ppVal     /* Write the new value here */
59228: ){
59229:   int op;
59230:   char *zVal = 0;
59231:   sqlite3_value *pVal = 0;
59232:   int negInt = 1;
59233:   const char *zNeg = "";
59234: 
59235:   if( !pExpr ){
59236:     *ppVal = 0;
59237:     return SQLITE_OK;
59238:   }
59239:   op = pExpr->op;
59240: 
59241:   /* op can only be TK_REGISTER if we have compiled with SQLITE_ENABLE_STAT3.
59242:   ** The ifdef here is to enable us to achieve 100% branch test coverage even
59243:   ** when SQLITE_ENABLE_STAT3 is omitted.
59244:   */
59245: #ifdef SQLITE_ENABLE_STAT3
59246:   if( op==TK_REGISTER ) op = pExpr->op2;
59247: #else
59248:   if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
59249: #endif
59250: 
59251:   /* Handle negative integers in a single step.  This is needed in the
59252:   ** case when the value is -9223372036854775808.
59253:   */
59254:   if( op==TK_UMINUS
59255:    && (pExpr->pLeft->op==TK_INTEGER || pExpr->pLeft->op==TK_FLOAT) ){
59256:     pExpr = pExpr->pLeft;
59257:     op = pExpr->op;
59258:     negInt = -1;
59259:     zNeg = "-";
59260:   }
59261: 
59262:   if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){
59263:     pVal = sqlite3ValueNew(db);
59264:     if( pVal==0 ) goto no_mem;
59265:     if( ExprHasProperty(pExpr, EP_IntValue) ){
59266:       sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt);
59267:     }else{
59268:       zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
59269:       if( zVal==0 ) goto no_mem;
59270:       sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
59271:       if( op==TK_FLOAT ) pVal->type = SQLITE_FLOAT;
59272:     }
59273:     if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){
59274:       sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
59275:     }else{
59276:       sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
59277:     }
59278:     if( pVal->flags & (MEM_Int|MEM_Real) ) pVal->flags &= ~MEM_Str;
59279:     if( enc!=SQLITE_UTF8 ){
59280:       sqlite3VdbeChangeEncoding(pVal, enc);
59281:     }
59282:   }else if( op==TK_UMINUS ) {
59283:     /* This branch happens for multiple negative signs.  Ex: -(-5) */
59284:     if( SQLITE_OK==sqlite3ValueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal) ){
59285:       sqlite3VdbeMemNumerify(pVal);
59286:       if( pVal->u.i==SMALLEST_INT64 ){
59287:         pVal->flags &= MEM_Int;
59288:         pVal->flags |= MEM_Real;
59289:         pVal->r = (double)LARGEST_INT64;
59290:       }else{
59291:         pVal->u.i = -pVal->u.i;
59292:       }
59293:       pVal->r = -pVal->r;
59294:       sqlite3ValueApplyAffinity(pVal, affinity, enc);
59295:     }
59296:   }else if( op==TK_NULL ){
59297:     pVal = sqlite3ValueNew(db);
59298:     if( pVal==0 ) goto no_mem;
59299:   }
59300: #ifndef SQLITE_OMIT_BLOB_LITERAL
59301:   else if( op==TK_BLOB ){
59302:     int nVal;
59303:     assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
59304:     assert( pExpr->u.zToken[1]=='\'' );
59305:     pVal = sqlite3ValueNew(db);
59306:     if( !pVal ) goto no_mem;
59307:     zVal = &pExpr->u.zToken[2];
59308:     nVal = sqlite3Strlen30(zVal)-1;
59309:     assert( zVal[nVal]=='\'' );
59310:     sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2,
59311:                          0, SQLITE_DYNAMIC);
59312:   }
59313: #endif
59314: 
59315:   if( pVal ){
59316:     sqlite3VdbeMemStoreType(pVal);
59317:   }
59318:   *ppVal = pVal;
59319:   return SQLITE_OK;
59320: 
59321: no_mem:
59322:   db->mallocFailed = 1;
59323:   sqlite3DbFree(db, zVal);
59324:   sqlite3ValueFree(pVal);
59325:   *ppVal = 0;
59326:   return SQLITE_NOMEM;
59327: }
59328: 
59329: /*
59330: ** Change the string value of an sqlite3_value object
59331: */
59332: SQLITE_PRIVATE void sqlite3ValueSetStr(
59333:   sqlite3_value *v,     /* Value to be set */
59334:   int n,                /* Length of string z */
59335:   const void *z,        /* Text of the new string */
59336:   u8 enc,               /* Encoding to use */
59337:   void (*xDel)(void*)   /* Destructor for the string */
59338: ){
59339:   if( v ) sqlite3VdbeMemSetStr((Mem *)v, z, n, enc, xDel);
59340: }
59341: 
59342: /*
59343: ** Free an sqlite3_value object
59344: */
59345: SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value *v){
59346:   if( !v ) return;
59347:   sqlite3VdbeMemRelease((Mem *)v);
59348:   sqlite3DbFree(((Mem*)v)->db, v);
59349: }
59350: 
59351: /*
59352: ** Return the number of bytes in the sqlite3_value object assuming
59353: ** that it uses the encoding "enc"
59354: */
59355: SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){
59356:   Mem *p = (Mem*)pVal;
59357:   if( (p->flags & MEM_Blob)!=0 || sqlite3ValueText(pVal, enc) ){
59358:     if( p->flags & MEM_Zero ){
59359:       return p->n + p->u.nZero;
59360:     }else{
59361:       return p->n;
59362:     }
59363:   }
59364:   return 0;
59365: }
59366: 
59367: /************** End of vdbemem.c *********************************************/
59368: /************** Begin file vdbeaux.c *****************************************/
59369: /*
59370: ** 2003 September 6
59371: **
59372: ** The author disclaims copyright to this source code.  In place of
59373: ** a legal notice, here is a blessing:
59374: **
59375: **    May you do good and not evil.
59376: **    May you find forgiveness for yourself and forgive others.
59377: **    May you share freely, never taking more than you give.
59378: **
59379: *************************************************************************
59380: ** This file contains code used for creating, destroying, and populating
59381: ** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.)  Prior
59382: ** to version 2.8.7, all this code was combined into the vdbe.c source file.
59383: ** But that file was getting too big so this subroutines were split out.
59384: */
59385: 
59386: 
59387: 
59388: /*
59389: ** When debugging the code generator in a symbolic debugger, one can
59390: ** set the sqlite3VdbeAddopTrace to 1 and all opcodes will be printed
59391: ** as they are added to the instruction stream.
59392: */
59393: #ifdef SQLITE_DEBUG
59394: SQLITE_PRIVATE int sqlite3VdbeAddopTrace = 0;
59395: #endif
59396: 
59397: 
59398: /*
59399: ** Create a new virtual database engine.
59400: */
59401: SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3 *db){
59402:   Vdbe *p;
59403:   p = sqlite3DbMallocZero(db, sizeof(Vdbe) );
59404:   if( p==0 ) return 0;
59405:   p->db = db;
59406:   if( db->pVdbe ){
59407:     db->pVdbe->pPrev = p;
59408:   }
59409:   p->pNext = db->pVdbe;
59410:   p->pPrev = 0;
59411:   db->pVdbe = p;
59412:   p->magic = VDBE_MAGIC_INIT;
59413:   return p;
59414: }
59415: 
59416: /*
59417: ** Remember the SQL string for a prepared statement.
59418: */
59419: SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){
59420:   assert( isPrepareV2==1 || isPrepareV2==0 );
59421:   if( p==0 ) return;
59422: #ifdef SQLITE_OMIT_TRACE
59423:   if( !isPrepareV2 ) return;
59424: #endif
59425:   assert( p->zSql==0 );
59426:   p->zSql = sqlite3DbStrNDup(p->db, z, n);
59427:   p->isPrepareV2 = (u8)isPrepareV2;
59428: }
59429: 
59430: /*
59431: ** Return the SQL associated with a prepared statement
59432: */
59433: SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt){
59434:   Vdbe *p = (Vdbe *)pStmt;
59435:   return (p && p->isPrepareV2) ? p->zSql : 0;
59436: }
59437: 
59438: /*
59439: ** Swap all content between two VDBE structures.
59440: */
59441: SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
59442:   Vdbe tmp, *pTmp;
59443:   char *zTmp;
59444:   tmp = *pA;
59445:   *pA = *pB;
59446:   *pB = tmp;
59447:   pTmp = pA->pNext;
59448:   pA->pNext = pB->pNext;
59449:   pB->pNext = pTmp;
59450:   pTmp = pA->pPrev;
59451:   pA->pPrev = pB->pPrev;
59452:   pB->pPrev = pTmp;
59453:   zTmp = pA->zSql;
59454:   pA->zSql = pB->zSql;
59455:   pB->zSql = zTmp;
59456:   pB->isPrepareV2 = pA->isPrepareV2;
59457: }
59458: 
59459: #ifdef SQLITE_DEBUG
59460: /*
59461: ** Turn tracing on or off
59462: */
59463: SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe *p, FILE *trace){
59464:   p->trace = trace;
59465: }
59466: #endif
59467: 
59468: /*
59469: ** Resize the Vdbe.aOp array so that it is at least one op larger than 
59470: ** it was.
59471: **
59472: ** If an out-of-memory error occurs while resizing the array, return
59473: ** SQLITE_NOMEM. In this case Vdbe.aOp and Vdbe.nOpAlloc remain 
59474: ** unchanged (this is so that any opcodes already allocated can be 
59475: ** correctly deallocated along with the rest of the Vdbe).
59476: */
59477: static int growOpArray(Vdbe *p){
59478:   VdbeOp *pNew;
59479:   int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op)));
59480:   pNew = sqlite3DbRealloc(p->db, p->aOp, nNew*sizeof(Op));
59481:   if( pNew ){
59482:     p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op);
59483:     p->aOp = pNew;
59484:   }
59485:   return (pNew ? SQLITE_OK : SQLITE_NOMEM);
59486: }
59487: 
59488: /*
59489: ** Add a new instruction to the list of instructions current in the
59490: ** VDBE.  Return the address of the new instruction.
59491: **
59492: ** Parameters:
59493: **
59494: **    p               Pointer to the VDBE
59495: **
59496: **    op              The opcode for this instruction
59497: **
59498: **    p1, p2, p3      Operands
59499: **
59500: ** Use the sqlite3VdbeResolveLabel() function to fix an address and
59501: ** the sqlite3VdbeChangeP4() function to change the value of the P4
59502: ** operand.
59503: */
59504: SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
59505:   int i;
59506:   VdbeOp *pOp;
59507: 
59508:   i = p->nOp;
59509:   assert( p->magic==VDBE_MAGIC_INIT );
59510:   assert( op>0 && op<0xff );
59511:   if( p->nOpAlloc<=i ){
59512:     if( growOpArray(p) ){
59513:       return 1;
59514:     }
59515:   }
59516:   p->nOp++;
59517:   pOp = &p->aOp[i];
59518:   pOp->opcode = (u8)op;
59519:   pOp->p5 = 0;
59520:   pOp->p1 = p1;
59521:   pOp->p2 = p2;
59522:   pOp->p3 = p3;
59523:   pOp->p4.p = 0;
59524:   pOp->p4type = P4_NOTUSED;
59525: #ifdef SQLITE_DEBUG
59526:   pOp->zComment = 0;
59527:   if( sqlite3VdbeAddopTrace ) sqlite3VdbePrintOp(0, i, &p->aOp[i]);
59528: #endif
59529: #ifdef VDBE_PROFILE
59530:   pOp->cycles = 0;
59531:   pOp->cnt = 0;
59532: #endif
59533:   return i;
59534: }
59535: SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe *p, int op){
59536:   return sqlite3VdbeAddOp3(p, op, 0, 0, 0);
59537: }
59538: SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){
59539:   return sqlite3VdbeAddOp3(p, op, p1, 0, 0);
59540: }
59541: SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){
59542:   return sqlite3VdbeAddOp3(p, op, p1, p2, 0);
59543: }
59544: 
59545: 
59546: /*
59547: ** Add an opcode that includes the p4 value as a pointer.
59548: */
59549: SQLITE_PRIVATE int sqlite3VdbeAddOp4(
59550:   Vdbe *p,            /* Add the opcode to this VM */
59551:   int op,             /* The new opcode */
59552:   int p1,             /* The P1 operand */
59553:   int p2,             /* The P2 operand */
59554:   int p3,             /* The P3 operand */
59555:   const char *zP4,    /* The P4 operand */
59556:   int p4type          /* P4 operand type */
59557: ){
59558:   int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
59559:   sqlite3VdbeChangeP4(p, addr, zP4, p4type);
59560:   return addr;
59561: }
59562: 
59563: /*
59564: ** Add an OP_ParseSchema opcode.  This routine is broken out from
59565: ** sqlite3VdbeAddOp4() since it needs to also needs to mark all btrees
59566: ** as having been used.
59567: **
59568: ** The zWhere string must have been obtained from sqlite3_malloc().
59569: ** This routine will take ownership of the allocated memory.
59570: */
59571: SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere){
59572:   int j;
59573:   int addr = sqlite3VdbeAddOp3(p, OP_ParseSchema, iDb, 0, 0);
59574:   sqlite3VdbeChangeP4(p, addr, zWhere, P4_DYNAMIC);
59575:   for(j=0; j<p->db->nDb; j++) sqlite3VdbeUsesBtree(p, j);
59576: }
59577: 
59578: /*
59579: ** Add an opcode that includes the p4 value as an integer.
59580: */
59581: SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(
59582:   Vdbe *p,            /* Add the opcode to this VM */
59583:   int op,             /* The new opcode */
59584:   int p1,             /* The P1 operand */
59585:   int p2,             /* The P2 operand */
59586:   int p3,             /* The P3 operand */
59587:   int p4              /* The P4 operand as an integer */
59588: ){
59589:   int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
59590:   sqlite3VdbeChangeP4(p, addr, SQLITE_INT_TO_PTR(p4), P4_INT32);
59591:   return addr;
59592: }
59593: 
59594: /*
59595: ** Create a new symbolic label for an instruction that has yet to be
59596: ** coded.  The symbolic label is really just a negative number.  The
59597: ** label can be used as the P2 value of an operation.  Later, when
59598: ** the label is resolved to a specific address, the VDBE will scan
59599: ** through its operation list and change all values of P2 which match
59600: ** the label into the resolved address.
59601: **
59602: ** The VDBE knows that a P2 value is a label because labels are
59603: ** always negative and P2 values are suppose to be non-negative.
59604: ** Hence, a negative P2 value is a label that has yet to be resolved.
59605: **
59606: ** Zero is returned if a malloc() fails.
59607: */
59608: SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe *p){
59609:   int i;
59610:   i = p->nLabel++;
59611:   assert( p->magic==VDBE_MAGIC_INIT );
59612:   if( i>=p->nLabelAlloc ){
59613:     int n = p->nLabelAlloc*2 + 5;
59614:     p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel,
59615:                                        n*sizeof(p->aLabel[0]));
59616:     p->nLabelAlloc = sqlite3DbMallocSize(p->db, p->aLabel)/sizeof(p->aLabel[0]);
59617:   }
59618:   if( p->aLabel ){
59619:     p->aLabel[i] = -1;
59620:   }
59621:   return -1-i;
59622: }
59623: 
59624: /*
59625: ** Resolve label "x" to be the address of the next instruction to
59626: ** be inserted.  The parameter "x" must have been obtained from
59627: ** a prior call to sqlite3VdbeMakeLabel().
59628: */
59629: SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *p, int x){
59630:   int j = -1-x;
59631:   assert( p->magic==VDBE_MAGIC_INIT );
59632:   assert( j>=0 && j<p->nLabel );
59633:   if( p->aLabel ){
59634:     p->aLabel[j] = p->nOp;
59635:   }
59636: }
59637: 
59638: /*
59639: ** Mark the VDBE as one that can only be run one time.
59640: */
59641: SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){
59642:   p->runOnlyOnce = 1;
59643: }
59644: 
59645: #ifdef SQLITE_DEBUG /* sqlite3AssertMayAbort() logic */
59646: 
59647: /*
59648: ** The following type and function are used to iterate through all opcodes
59649: ** in a Vdbe main program and each of the sub-programs (triggers) it may 
59650: ** invoke directly or indirectly. It should be used as follows:
59651: **
59652: **   Op *pOp;
59653: **   VdbeOpIter sIter;
59654: **
59655: **   memset(&sIter, 0, sizeof(sIter));
59656: **   sIter.v = v;                            // v is of type Vdbe* 
59657: **   while( (pOp = opIterNext(&sIter)) ){
59658: **     // Do something with pOp
59659: **   }
59660: **   sqlite3DbFree(v->db, sIter.apSub);
59661: ** 
59662: */
59663: typedef struct VdbeOpIter VdbeOpIter;
59664: struct VdbeOpIter {
59665:   Vdbe *v;                   /* Vdbe to iterate through the opcodes of */
59666:   SubProgram **apSub;        /* Array of subprograms */
59667:   int nSub;                  /* Number of entries in apSub */
59668:   int iAddr;                 /* Address of next instruction to return */
59669:   int iSub;                  /* 0 = main program, 1 = first sub-program etc. */
59670: };
59671: static Op *opIterNext(VdbeOpIter *p){
59672:   Vdbe *v = p->v;
59673:   Op *pRet = 0;
59674:   Op *aOp;
59675:   int nOp;
59676: 
59677:   if( p->iSub<=p->nSub ){
59678: 
59679:     if( p->iSub==0 ){
59680:       aOp = v->aOp;
59681:       nOp = v->nOp;
59682:     }else{
59683:       aOp = p->apSub[p->iSub-1]->aOp;
59684:       nOp = p->apSub[p->iSub-1]->nOp;
59685:     }
59686:     assert( p->iAddr<nOp );
59687: 
59688:     pRet = &aOp[p->iAddr];
59689:     p->iAddr++;
59690:     if( p->iAddr==nOp ){
59691:       p->iSub++;
59692:       p->iAddr = 0;
59693:     }
59694:   
59695:     if( pRet->p4type==P4_SUBPROGRAM ){
59696:       int nByte = (p->nSub+1)*sizeof(SubProgram*);
59697:       int j;
59698:       for(j=0; j<p->nSub; j++){
59699:         if( p->apSub[j]==pRet->p4.pProgram ) break;
59700:       }
59701:       if( j==p->nSub ){
59702:         p->apSub = sqlite3DbReallocOrFree(v->db, p->apSub, nByte);
59703:         if( !p->apSub ){
59704:           pRet = 0;
59705:         }else{
59706:           p->apSub[p->nSub++] = pRet->p4.pProgram;
59707:         }
59708:       }
59709:     }
59710:   }
59711: 
59712:   return pRet;
59713: }
59714: 
59715: /*
59716: ** Check if the program stored in the VM associated with pParse may
59717: ** throw an ABORT exception (causing the statement, but not entire transaction
59718: ** to be rolled back). This condition is true if the main program or any
59719: ** sub-programs contains any of the following:
59720: **
59721: **   *  OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
59722: **   *  OP_HaltIfNull with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
59723: **   *  OP_Destroy
59724: **   *  OP_VUpdate
59725: **   *  OP_VRename
59726: **   *  OP_FkCounter with P2==0 (immediate foreign key constraint)
59727: **
59728: ** Then check that the value of Parse.mayAbort is true if an
59729: ** ABORT may be thrown, or false otherwise. Return true if it does
59730: ** match, or false otherwise. This function is intended to be used as
59731: ** part of an assert statement in the compiler. Similar to:
59732: **
59733: **   assert( sqlite3VdbeAssertMayAbort(pParse->pVdbe, pParse->mayAbort) );
59734: */
59735: SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
59736:   int hasAbort = 0;
59737:   Op *pOp;
59738:   VdbeOpIter sIter;
59739:   memset(&sIter, 0, sizeof(sIter));
59740:   sIter.v = v;
59741: 
59742:   while( (pOp = opIterNext(&sIter))!=0 ){
59743:     int opcode = pOp->opcode;
59744:     if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename 
59745: #ifndef SQLITE_OMIT_FOREIGN_KEY
59746:      || (opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1) 
59747: #endif
59748:      || ((opcode==OP_Halt || opcode==OP_HaltIfNull) 
59749:       && (pOp->p1==SQLITE_CONSTRAINT && pOp->p2==OE_Abort))
59750:     ){
59751:       hasAbort = 1;
59752:       break;
59753:     }
59754:   }
59755:   sqlite3DbFree(v->db, sIter.apSub);
59756: 
59757:   /* Return true if hasAbort==mayAbort. Or if a malloc failure occured.
59758:   ** If malloc failed, then the while() loop above may not have iterated
59759:   ** through all opcodes and hasAbort may be set incorrectly. Return
59760:   ** true for this case to prevent the assert() in the callers frame
59761:   ** from failing.  */
59762:   return ( v->db->mallocFailed || hasAbort==mayAbort );
59763: }
59764: #endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */
59765: 
59766: /*
59767: ** Loop through the program looking for P2 values that are negative
59768: ** on jump instructions.  Each such value is a label.  Resolve the
59769: ** label by setting the P2 value to its correct non-zero value.
59770: **
59771: ** This routine is called once after all opcodes have been inserted.
59772: **
59773: ** Variable *pMaxFuncArgs is set to the maximum value of any P2 argument 
59774: ** to an OP_Function, OP_AggStep or OP_VFilter opcode. This is used by 
59775: ** sqlite3VdbeMakeReady() to size the Vdbe.apArg[] array.
59776: **
59777: ** The Op.opflags field is set on all opcodes.
59778: */
59779: static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
59780:   int i;
59781:   int nMaxArgs = *pMaxFuncArgs;
59782:   Op *pOp;
59783:   int *aLabel = p->aLabel;
59784:   p->readOnly = 1;
59785:   for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){
59786:     u8 opcode = pOp->opcode;
59787: 
59788:     pOp->opflags = sqlite3OpcodeProperty[opcode];
59789:     if( opcode==OP_Function || opcode==OP_AggStep ){
59790:       if( pOp->p5>nMaxArgs ) nMaxArgs = pOp->p5;
59791:     }else if( (opcode==OP_Transaction && pOp->p2!=0) || opcode==OP_Vacuum ){
59792:       p->readOnly = 0;
59793: #ifndef SQLITE_OMIT_VIRTUALTABLE
59794:     }else if( opcode==OP_VUpdate ){
59795:       if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
59796:     }else if( opcode==OP_VFilter ){
59797:       int n;
59798:       assert( p->nOp - i >= 3 );
59799:       assert( pOp[-1].opcode==OP_Integer );
59800:       n = pOp[-1].p1;
59801:       if( n>nMaxArgs ) nMaxArgs = n;
59802: #endif
59803:     }else if( opcode==OP_Next || opcode==OP_SorterNext ){
59804:       pOp->p4.xAdvance = sqlite3BtreeNext;
59805:       pOp->p4type = P4_ADVANCE;
59806:     }else if( opcode==OP_Prev ){
59807:       pOp->p4.xAdvance = sqlite3BtreePrevious;
59808:       pOp->p4type = P4_ADVANCE;
59809:     }
59810: 
59811:     if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){
59812:       assert( -1-pOp->p2<p->nLabel );
59813:       pOp->p2 = aLabel[-1-pOp->p2];
59814:     }
59815:   }
59816:   sqlite3DbFree(p->db, p->aLabel);
59817:   p->aLabel = 0;
59818: 
59819:   *pMaxFuncArgs = nMaxArgs;
59820: }
59821: 
59822: /*
59823: ** Return the address of the next instruction to be inserted.
59824: */
59825: SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe *p){
59826:   assert( p->magic==VDBE_MAGIC_INIT );
59827:   return p->nOp;
59828: }
59829: 
59830: /*
59831: ** This function returns a pointer to the array of opcodes associated with
59832: ** the Vdbe passed as the first argument. It is the callers responsibility
59833: ** to arrange for the returned array to be eventually freed using the 
59834: ** vdbeFreeOpArray() function.
59835: **
59836: ** Before returning, *pnOp is set to the number of entries in the returned
59837: ** array. Also, *pnMaxArg is set to the larger of its current value and 
59838: ** the number of entries in the Vdbe.apArg[] array required to execute the 
59839: ** returned program.
59840: */
59841: SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg){
59842:   VdbeOp *aOp = p->aOp;
59843:   assert( aOp && !p->db->mallocFailed );
59844: 
59845:   /* Check that sqlite3VdbeUsesBtree() was not called on this VM */
59846:   assert( p->btreeMask==0 );
59847: 
59848:   resolveP2Values(p, pnMaxArg);
59849:   *pnOp = p->nOp;
59850:   p->aOp = 0;
59851:   return aOp;
59852: }
59853: 
59854: /*
59855: ** Add a whole list of operations to the operation stack.  Return the
59856: ** address of the first operation added.
59857: */
59858: SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){
59859:   int addr;
59860:   assert( p->magic==VDBE_MAGIC_INIT );
59861:   if( p->nOp + nOp > p->nOpAlloc && growOpArray(p) ){
59862:     return 0;
59863:   }
59864:   addr = p->nOp;
59865:   if( ALWAYS(nOp>0) ){
59866:     int i;
59867:     VdbeOpList const *pIn = aOp;
59868:     for(i=0; i<nOp; i++, pIn++){
59869:       int p2 = pIn->p2;
59870:       VdbeOp *pOut = &p->aOp[i+addr];
59871:       pOut->opcode = pIn->opcode;
59872:       pOut->p1 = pIn->p1;
59873:       if( p2<0 && (sqlite3OpcodeProperty[pOut->opcode] & OPFLG_JUMP)!=0 ){
59874:         pOut->p2 = addr + ADDR(p2);
59875:       }else{
59876:         pOut->p2 = p2;
59877:       }
59878:       pOut->p3 = pIn->p3;
59879:       pOut->p4type = P4_NOTUSED;
59880:       pOut->p4.p = 0;
59881:       pOut->p5 = 0;
59882: #ifdef SQLITE_DEBUG
59883:       pOut->zComment = 0;
59884:       if( sqlite3VdbeAddopTrace ){
59885:         sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]);
59886:       }
59887: #endif
59888:     }
59889:     p->nOp += nOp;
59890:   }
59891:   return addr;
59892: }
59893: 
59894: /*
59895: ** Change the value of the P1 operand for a specific instruction.
59896: ** This routine is useful when a large program is loaded from a
59897: ** static array using sqlite3VdbeAddOpList but we want to make a
59898: ** few minor changes to the program.
59899: */
59900: SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, u32 addr, int val){
59901:   assert( p!=0 );
59902:   if( ((u32)p->nOp)>addr ){
59903:     p->aOp[addr].p1 = val;
59904:   }
59905: }
59906: 
59907: /*
59908: ** Change the value of the P2 operand for a specific instruction.
59909: ** This routine is useful for setting a jump destination.
59910: */
59911: SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, u32 addr, int val){
59912:   assert( p!=0 );
59913:   if( ((u32)p->nOp)>addr ){
59914:     p->aOp[addr].p2 = val;
59915:   }
59916: }
59917: 
59918: /*
59919: ** Change the value of the P3 operand for a specific instruction.
59920: */
59921: SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, u32 addr, int val){
59922:   assert( p!=0 );
59923:   if( ((u32)p->nOp)>addr ){
59924:     p->aOp[addr].p3 = val;
59925:   }
59926: }
59927: 
59928: /*
59929: ** Change the value of the P5 operand for the most recently
59930: ** added operation.
59931: */
59932: SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u8 val){
59933:   assert( p!=0 );
59934:   if( p->aOp ){
59935:     assert( p->nOp>0 );
59936:     p->aOp[p->nOp-1].p5 = val;
59937:   }
59938: }
59939: 
59940: /*
59941: ** Change the P2 operand of instruction addr so that it points to
59942: ** the address of the next instruction to be coded.
59943: */
59944: SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){
59945:   assert( addr>=0 || p->db->mallocFailed );
59946:   if( addr>=0 ) sqlite3VdbeChangeP2(p, addr, p->nOp);
59947: }
59948: 
59949: 
59950: /*
59951: ** If the input FuncDef structure is ephemeral, then free it.  If
59952: ** the FuncDef is not ephermal, then do nothing.
59953: */
59954: static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
59955:   if( ALWAYS(pDef) && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){
59956:     sqlite3DbFree(db, pDef);
59957:   }
59958: }
59959: 
59960: static void vdbeFreeOpArray(sqlite3 *, Op *, int);
59961: 
59962: /*
59963: ** Delete a P4 value if necessary.
59964: */
59965: static void freeP4(sqlite3 *db, int p4type, void *p4){
59966:   if( p4 ){
59967:     assert( db );
59968:     switch( p4type ){
59969:       case P4_REAL:
59970:       case P4_INT64:
59971:       case P4_DYNAMIC:
59972:       case P4_KEYINFO:
59973:       case P4_INTARRAY:
59974:       case P4_KEYINFO_HANDOFF: {
59975:         sqlite3DbFree(db, p4);
59976:         break;
59977:       }
59978:       case P4_MPRINTF: {
59979:         if( db->pnBytesFreed==0 ) sqlite3_free(p4);
59980:         break;
59981:       }
59982:       case P4_VDBEFUNC: {
59983:         VdbeFunc *pVdbeFunc = (VdbeFunc *)p4;
59984:         freeEphemeralFunction(db, pVdbeFunc->pFunc);
59985:         if( db->pnBytesFreed==0 ) sqlite3VdbeDeleteAuxData(pVdbeFunc, 0);
59986:         sqlite3DbFree(db, pVdbeFunc);
59987:         break;
59988:       }
59989:       case P4_FUNCDEF: {
59990:         freeEphemeralFunction(db, (FuncDef*)p4);
59991:         break;
59992:       }
59993:       case P4_MEM: {
59994:         if( db->pnBytesFreed==0 ){
59995:           sqlite3ValueFree((sqlite3_value*)p4);
59996:         }else{
59997:           Mem *p = (Mem*)p4;
59998:           sqlite3DbFree(db, p->zMalloc);
59999:           sqlite3DbFree(db, p);
60000:         }
60001:         break;
60002:       }
60003:       case P4_VTAB : {
60004:         if( db->pnBytesFreed==0 ) sqlite3VtabUnlock((VTable *)p4);
60005:         break;
60006:       }
60007:     }
60008:   }
60009: }
60010: 
60011: /*
60012: ** Free the space allocated for aOp and any p4 values allocated for the
60013: ** opcodes contained within. If aOp is not NULL it is assumed to contain 
60014: ** nOp entries. 
60015: */
60016: static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){
60017:   if( aOp ){
60018:     Op *pOp;
60019:     for(pOp=aOp; pOp<&aOp[nOp]; pOp++){
60020:       freeP4(db, pOp->p4type, pOp->p4.p);
60021: #ifdef SQLITE_DEBUG
60022:       sqlite3DbFree(db, pOp->zComment);
60023: #endif     
60024:     }
60025:   }
60026:   sqlite3DbFree(db, aOp);
60027: }
60028: 
60029: /*
60030: ** Link the SubProgram object passed as the second argument into the linked
60031: ** list at Vdbe.pSubProgram. This list is used to delete all sub-program
60032: ** objects when the VM is no longer required.
60033: */
60034: SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *pVdbe, SubProgram *p){
60035:   p->pNext = pVdbe->pProgram;
60036:   pVdbe->pProgram = p;
60037: }
60038: 
60039: /*
60040: ** Change the opcode at addr into OP_Noop
60041: */
60042: SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr){
60043:   if( p->aOp ){
60044:     VdbeOp *pOp = &p->aOp[addr];
60045:     sqlite3 *db = p->db;
60046:     freeP4(db, pOp->p4type, pOp->p4.p);
60047:     memset(pOp, 0, sizeof(pOp[0]));
60048:     pOp->opcode = OP_Noop;
60049:   }
60050: }
60051: 
60052: /*
60053: ** Change the value of the P4 operand for a specific instruction.
60054: ** This routine is useful when a large program is loaded from a
60055: ** static array using sqlite3VdbeAddOpList but we want to make a
60056: ** few minor changes to the program.
60057: **
60058: ** If n>=0 then the P4 operand is dynamic, meaning that a copy of
60059: ** the string is made into memory obtained from sqlite3_malloc().
60060: ** A value of n==0 means copy bytes of zP4 up to and including the
60061: ** first null byte.  If n>0 then copy n+1 bytes of zP4.
60062: **
60063: ** If n==P4_KEYINFO it means that zP4 is a pointer to a KeyInfo structure.
60064: ** A copy is made of the KeyInfo structure into memory obtained from
60065: ** sqlite3_malloc, to be freed when the Vdbe is finalized.
60066: ** n==P4_KEYINFO_HANDOFF indicates that zP4 points to a KeyInfo structure
60067: ** stored in memory that the caller has obtained from sqlite3_malloc. The 
60068: ** caller should not free the allocation, it will be freed when the Vdbe is
60069: ** finalized.
60070: ** 
60071: ** Other values of n (P4_STATIC, P4_COLLSEQ etc.) indicate that zP4 points
60072: ** to a string or structure that is guaranteed to exist for the lifetime of
60073: ** the Vdbe. In these cases we can just copy the pointer.
60074: **
60075: ** If addr<0 then change P4 on the most recently inserted instruction.
60076: */
60077: SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int n){
60078:   Op *pOp;
60079:   sqlite3 *db;
60080:   assert( p!=0 );
60081:   db = p->db;
60082:   assert( p->magic==VDBE_MAGIC_INIT );
60083:   if( p->aOp==0 || db->mallocFailed ){
60084:     if ( n!=P4_KEYINFO && n!=P4_VTAB ) {
60085:       freeP4(db, n, (void*)*(char**)&zP4);
60086:     }
60087:     return;
60088:   }
60089:   assert( p->nOp>0 );
60090:   assert( addr<p->nOp );
60091:   if( addr<0 ){
60092:     addr = p->nOp - 1;
60093:   }
60094:   pOp = &p->aOp[addr];
60095:   freeP4(db, pOp->p4type, pOp->p4.p);
60096:   pOp->p4.p = 0;
60097:   if( n==P4_INT32 ){
60098:     /* Note: this cast is safe, because the origin data point was an int
60099:     ** that was cast to a (const char *). */
60100:     pOp->p4.i = SQLITE_PTR_TO_INT(zP4);
60101:     pOp->p4type = P4_INT32;
60102:   }else if( zP4==0 ){
60103:     pOp->p4.p = 0;
60104:     pOp->p4type = P4_NOTUSED;
60105:   }else if( n==P4_KEYINFO ){
60106:     KeyInfo *pKeyInfo;
60107:     int nField, nByte;
60108: 
60109:     nField = ((KeyInfo*)zP4)->nField;
60110:     nByte = sizeof(*pKeyInfo) + (nField-1)*sizeof(pKeyInfo->aColl[0]) + nField;
60111:     pKeyInfo = sqlite3DbMallocRaw(0, nByte);
60112:     pOp->p4.pKeyInfo = pKeyInfo;
60113:     if( pKeyInfo ){
60114:       u8 *aSortOrder;
60115:       memcpy((char*)pKeyInfo, zP4, nByte - nField);
60116:       aSortOrder = pKeyInfo->aSortOrder;
60117:       if( aSortOrder ){
60118:         pKeyInfo->aSortOrder = (unsigned char*)&pKeyInfo->aColl[nField];
60119:         memcpy(pKeyInfo->aSortOrder, aSortOrder, nField);
60120:       }
60121:       pOp->p4type = P4_KEYINFO;
60122:     }else{
60123:       p->db->mallocFailed = 1;
60124:       pOp->p4type = P4_NOTUSED;
60125:     }
60126:   }else if( n==P4_KEYINFO_HANDOFF ){
60127:     pOp->p4.p = (void*)zP4;
60128:     pOp->p4type = P4_KEYINFO;
60129:   }else if( n==P4_VTAB ){
60130:     pOp->p4.p = (void*)zP4;
60131:     pOp->p4type = P4_VTAB;
60132:     sqlite3VtabLock((VTable *)zP4);
60133:     assert( ((VTable *)zP4)->db==p->db );
60134:   }else if( n<0 ){
60135:     pOp->p4.p = (void*)zP4;
60136:     pOp->p4type = (signed char)n;
60137:   }else{
60138:     if( n==0 ) n = sqlite3Strlen30(zP4);
60139:     pOp->p4.z = sqlite3DbStrNDup(p->db, zP4, n);
60140:     pOp->p4type = P4_DYNAMIC;
60141:   }
60142: }
60143: 
60144: #ifndef NDEBUG
60145: /*
60146: ** Change the comment on the the most recently coded instruction.  Or
60147: ** insert a No-op and add the comment to that new instruction.  This
60148: ** makes the code easier to read during debugging.  None of this happens
60149: ** in a production build.
60150: */
60151: static void vdbeVComment(Vdbe *p, const char *zFormat, va_list ap){
60152:   assert( p->nOp>0 || p->aOp==0 );
60153:   assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed );
60154:   if( p->nOp ){
60155:     assert( p->aOp );
60156:     sqlite3DbFree(p->db, p->aOp[p->nOp-1].zComment);
60157:     p->aOp[p->nOp-1].zComment = sqlite3VMPrintf(p->db, zFormat, ap);
60158:   }
60159: }
60160: SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){
60161:   va_list ap;
60162:   if( p ){
60163:     va_start(ap, zFormat);
60164:     vdbeVComment(p, zFormat, ap);
60165:     va_end(ap);
60166:   }
60167: }
60168: SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe *p, const char *zFormat, ...){
60169:   va_list ap;
60170:   if( p ){
60171:     sqlite3VdbeAddOp0(p, OP_Noop);
60172:     va_start(ap, zFormat);
60173:     vdbeVComment(p, zFormat, ap);
60174:     va_end(ap);
60175:   }
60176: }
60177: #endif  /* NDEBUG */
60178: 
60179: /*
60180: ** Return the opcode for a given address.  If the address is -1, then
60181: ** return the most recently inserted opcode.
60182: **
60183: ** If a memory allocation error has occurred prior to the calling of this
60184: ** routine, then a pointer to a dummy VdbeOp will be returned.  That opcode
60185: ** is readable but not writable, though it is cast to a writable value.
60186: ** The return of a dummy opcode allows the call to continue functioning
60187: ** after a OOM fault without having to check to see if the return from 
60188: ** this routine is a valid pointer.  But because the dummy.opcode is 0,
60189: ** dummy will never be written to.  This is verified by code inspection and
60190: ** by running with Valgrind.
60191: **
60192: ** About the #ifdef SQLITE_OMIT_TRACE:  Normally, this routine is never called
60193: ** unless p->nOp>0.  This is because in the absense of SQLITE_OMIT_TRACE,
60194: ** an OP_Trace instruction is always inserted by sqlite3VdbeGet() as soon as
60195: ** a new VDBE is created.  So we are free to set addr to p->nOp-1 without
60196: ** having to double-check to make sure that the result is non-negative. But
60197: ** if SQLITE_OMIT_TRACE is defined, the OP_Trace is omitted and we do need to
60198: ** check the value of p->nOp-1 before continuing.
60199: */
60200: SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
60201:   /* C89 specifies that the constant "dummy" will be initialized to all
60202:   ** zeros, which is correct.  MSVC generates a warning, nevertheless. */
60203:   static VdbeOp dummy;  /* Ignore the MSVC warning about no initializer */
60204:   assert( p->magic==VDBE_MAGIC_INIT );
60205:   if( addr<0 ){
60206: #ifdef SQLITE_OMIT_TRACE
60207:     if( p->nOp==0 ) return (VdbeOp*)&dummy;
60208: #endif
60209:     addr = p->nOp - 1;
60210:   }
60211:   assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed );
60212:   if( p->db->mallocFailed ){
60213:     return (VdbeOp*)&dummy;
60214:   }else{
60215:     return &p->aOp[addr];
60216:   }
60217: }
60218: 
60219: #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \
60220:      || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
60221: /*
60222: ** Compute a string that describes the P4 parameter for an opcode.
60223: ** Use zTemp for any required temporary buffer space.
60224: */
60225: static char *displayP4(Op *pOp, char *zTemp, int nTemp){
60226:   char *zP4 = zTemp;
60227:   assert( nTemp>=20 );
60228:   switch( pOp->p4type ){
60229:     case P4_KEYINFO_STATIC:
60230:     case P4_KEYINFO: {
60231:       int i, j;
60232:       KeyInfo *pKeyInfo = pOp->p4.pKeyInfo;
60233:       sqlite3_snprintf(nTemp, zTemp, "keyinfo(%d", pKeyInfo->nField);
60234:       i = sqlite3Strlen30(zTemp);
60235:       for(j=0; j<pKeyInfo->nField; j++){
60236:         CollSeq *pColl = pKeyInfo->aColl[j];
60237:         if( pColl ){
60238:           int n = sqlite3Strlen30(pColl->zName);
60239:           if( i+n>nTemp-6 ){
60240:             memcpy(&zTemp[i],",...",4);
60241:             break;
60242:           }
60243:           zTemp[i++] = ',';
60244:           if( pKeyInfo->aSortOrder && pKeyInfo->aSortOrder[j] ){
60245:             zTemp[i++] = '-';
60246:           }
60247:           memcpy(&zTemp[i], pColl->zName,n+1);
60248:           i += n;
60249:         }else if( i+4<nTemp-6 ){
60250:           memcpy(&zTemp[i],",nil",4);
60251:           i += 4;
60252:         }
60253:       }
60254:       zTemp[i++] = ')';
60255:       zTemp[i] = 0;
60256:       assert( i<nTemp );
60257:       break;
60258:     }
60259:     case P4_COLLSEQ: {
60260:       CollSeq *pColl = pOp->p4.pColl;
60261:       sqlite3_snprintf(nTemp, zTemp, "collseq(%.20s)", pColl->zName);
60262:       break;
60263:     }
60264:     case P4_FUNCDEF: {
60265:       FuncDef *pDef = pOp->p4.pFunc;
60266:       sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg);
60267:       break;
60268:     }
60269:     case P4_INT64: {
60270:       sqlite3_snprintf(nTemp, zTemp, "%lld", *pOp->p4.pI64);
60271:       break;
60272:     }
60273:     case P4_INT32: {
60274:       sqlite3_snprintf(nTemp, zTemp, "%d", pOp->p4.i);
60275:       break;
60276:     }
60277:     case P4_REAL: {
60278:       sqlite3_snprintf(nTemp, zTemp, "%.16g", *pOp->p4.pReal);
60279:       break;
60280:     }
60281:     case P4_MEM: {
60282:       Mem *pMem = pOp->p4.pMem;
60283:       if( pMem->flags & MEM_Str ){
60284:         zP4 = pMem->z;
60285:       }else if( pMem->flags & MEM_Int ){
60286:         sqlite3_snprintf(nTemp, zTemp, "%lld", pMem->u.i);
60287:       }else if( pMem->flags & MEM_Real ){
60288:         sqlite3_snprintf(nTemp, zTemp, "%.16g", pMem->r);
60289:       }else if( pMem->flags & MEM_Null ){
60290:         sqlite3_snprintf(nTemp, zTemp, "NULL");
60291:       }else{
60292:         assert( pMem->flags & MEM_Blob );
60293:         zP4 = "(blob)";
60294:       }
60295:       break;
60296:     }
60297: #ifndef SQLITE_OMIT_VIRTUALTABLE
60298:     case P4_VTAB: {
60299:       sqlite3_vtab *pVtab = pOp->p4.pVtab->pVtab;
60300:       sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule);
60301:       break;
60302:     }
60303: #endif
60304:     case P4_INTARRAY: {
60305:       sqlite3_snprintf(nTemp, zTemp, "intarray");
60306:       break;
60307:     }
60308:     case P4_SUBPROGRAM: {
60309:       sqlite3_snprintf(nTemp, zTemp, "program");
60310:       break;
60311:     }
60312:     case P4_ADVANCE: {
60313:       zTemp[0] = 0;
60314:       break;
60315:     }
60316:     default: {
60317:       zP4 = pOp->p4.z;
60318:       if( zP4==0 ){
60319:         zP4 = zTemp;
60320:         zTemp[0] = 0;
60321:       }
60322:     }
60323:   }
60324:   assert( zP4!=0 );
60325:   return zP4;
60326: }
60327: #endif
60328: 
60329: /*
60330: ** Declare to the Vdbe that the BTree object at db->aDb[i] is used.
60331: **
60332: ** The prepared statements need to know in advance the complete set of
60333: ** attached databases that will be use.  A mask of these databases
60334: ** is maintained in p->btreeMask.  The p->lockMask value is the subset of
60335: ** p->btreeMask of databases that will require a lock.
60336: */
60337: SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe *p, int i){
60338:   assert( i>=0 && i<p->db->nDb && i<(int)sizeof(yDbMask)*8 );
60339:   assert( i<(int)sizeof(p->btreeMask)*8 );
60340:   p->btreeMask |= ((yDbMask)1)<<i;
60341:   if( i!=1 && sqlite3BtreeSharable(p->db->aDb[i].pBt) ){
60342:     p->lockMask |= ((yDbMask)1)<<i;
60343:   }
60344: }
60345: 
60346: #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
60347: /*
60348: ** If SQLite is compiled to support shared-cache mode and to be threadsafe,
60349: ** this routine obtains the mutex associated with each BtShared structure
60350: ** that may be accessed by the VM passed as an argument. In doing so it also
60351: ** sets the BtShared.db member of each of the BtShared structures, ensuring
60352: ** that the correct busy-handler callback is invoked if required.
60353: **
60354: ** If SQLite is not threadsafe but does support shared-cache mode, then
60355: ** sqlite3BtreeEnter() is invoked to set the BtShared.db variables
60356: ** of all of BtShared structures accessible via the database handle 
60357: ** associated with the VM.
60358: **
60359: ** If SQLite is not threadsafe and does not support shared-cache mode, this
60360: ** function is a no-op.
60361: **
60362: ** The p->btreeMask field is a bitmask of all btrees that the prepared 
60363: ** statement p will ever use.  Let N be the number of bits in p->btreeMask
60364: ** corresponding to btrees that use shared cache.  Then the runtime of
60365: ** this routine is N*N.  But as N is rarely more than 1, this should not
60366: ** be a problem.
60367: */
60368: SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe *p){
60369:   int i;
60370:   yDbMask mask;
60371:   sqlite3 *db;
60372:   Db *aDb;
60373:   int nDb;
60374:   if( p->lockMask==0 ) return;  /* The common case */
60375:   db = p->db;
60376:   aDb = db->aDb;
60377:   nDb = db->nDb;
60378:   for(i=0, mask=1; i<nDb; i++, mask += mask){
60379:     if( i!=1 && (mask & p->lockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){
60380:       sqlite3BtreeEnter(aDb[i].pBt);
60381:     }
60382:   }
60383: }
60384: #endif
60385: 
60386: #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
60387: /*
60388: ** Unlock all of the btrees previously locked by a call to sqlite3VdbeEnter().
60389: */
60390: SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe *p){
60391:   int i;
60392:   yDbMask mask;
60393:   sqlite3 *db;
60394:   Db *aDb;
60395:   int nDb;
60396:   if( p->lockMask==0 ) return;  /* The common case */
60397:   db = p->db;
60398:   aDb = db->aDb;
60399:   nDb = db->nDb;
60400:   for(i=0, mask=1; i<nDb; i++, mask += mask){
60401:     if( i!=1 && (mask & p->lockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){
60402:       sqlite3BtreeLeave(aDb[i].pBt);
60403:     }
60404:   }
60405: }
60406: #endif
60407: 
60408: #if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
60409: /*
60410: ** Print a single opcode.  This routine is used for debugging only.
60411: */
60412: SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
60413:   char *zP4;
60414:   char zPtr[50];
60415:   static const char *zFormat1 = "%4d %-13s %4d %4d %4d %-4s %.2X %s\n";
60416:   if( pOut==0 ) pOut = stdout;
60417:   zP4 = displayP4(pOp, zPtr, sizeof(zPtr));
60418:   fprintf(pOut, zFormat1, pc, 
60419:       sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, zP4, pOp->p5,
60420: #ifdef SQLITE_DEBUG
60421:       pOp->zComment ? pOp->zComment : ""
60422: #else
60423:       ""
60424: #endif
60425:   );
60426:   fflush(pOut);
60427: }
60428: #endif
60429: 
60430: /*
60431: ** Release an array of N Mem elements
60432: */
60433: static void releaseMemArray(Mem *p, int N){
60434:   if( p && N ){
60435:     Mem *pEnd;
60436:     sqlite3 *db = p->db;
60437:     u8 malloc_failed = db->mallocFailed;
60438:     if( db->pnBytesFreed ){
60439:       for(pEnd=&p[N]; p<pEnd; p++){
60440:         sqlite3DbFree(db, p->zMalloc);
60441:       }
60442:       return;
60443:     }
60444:     for(pEnd=&p[N]; p<pEnd; p++){
60445:       assert( (&p[1])==pEnd || p[0].db==p[1].db );
60446: 
60447:       /* This block is really an inlined version of sqlite3VdbeMemRelease()
60448:       ** that takes advantage of the fact that the memory cell value is 
60449:       ** being set to NULL after releasing any dynamic resources.
60450:       **
60451:       ** The justification for duplicating code is that according to 
60452:       ** callgrind, this causes a certain test case to hit the CPU 4.7 
60453:       ** percent less (x86 linux, gcc version 4.1.2, -O6) than if 
60454:       ** sqlite3MemRelease() were called from here. With -O2, this jumps
60455:       ** to 6.6 percent. The test case is inserting 1000 rows into a table 
60456:       ** with no indexes using a single prepared INSERT statement, bind() 
60457:       ** and reset(). Inserts are grouped into a transaction.
60458:       */
60459:       if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){
60460:         sqlite3VdbeMemRelease(p);
60461:       }else if( p->zMalloc ){
60462:         sqlite3DbFree(db, p->zMalloc);
60463:         p->zMalloc = 0;
60464:       }
60465: 
60466:       p->flags = MEM_Invalid;
60467:     }
60468:     db->mallocFailed = malloc_failed;
60469:   }
60470: }
60471: 
60472: /*
60473: ** Delete a VdbeFrame object and its contents. VdbeFrame objects are
60474: ** allocated by the OP_Program opcode in sqlite3VdbeExec().
60475: */
60476: SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame *p){
60477:   int i;
60478:   Mem *aMem = VdbeFrameMem(p);
60479:   VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem];
60480:   for(i=0; i<p->nChildCsr; i++){
60481:     sqlite3VdbeFreeCursor(p->v, apCsr[i]);
60482:   }
60483:   releaseMemArray(aMem, p->nChildMem);
60484:   sqlite3DbFree(p->v->db, p);
60485: }
60486: 
60487: #ifndef SQLITE_OMIT_EXPLAIN
60488: /*
60489: ** Give a listing of the program in the virtual machine.
60490: **
60491: ** The interface is the same as sqlite3VdbeExec().  But instead of
60492: ** running the code, it invokes the callback once for each instruction.
60493: ** This feature is used to implement "EXPLAIN".
60494: **
60495: ** When p->explain==1, each instruction is listed.  When
60496: ** p->explain==2, only OP_Explain instructions are listed and these
60497: ** are shown in a different format.  p->explain==2 is used to implement
60498: ** EXPLAIN QUERY PLAN.
60499: **
60500: ** When p->explain==1, first the main program is listed, then each of
60501: ** the trigger subprograms are listed one by one.
60502: */
60503: SQLITE_PRIVATE int sqlite3VdbeList(
60504:   Vdbe *p                   /* The VDBE */
60505: ){
60506:   int nRow;                            /* Stop when row count reaches this */
60507:   int nSub = 0;                        /* Number of sub-vdbes seen so far */
60508:   SubProgram **apSub = 0;              /* Array of sub-vdbes */
60509:   Mem *pSub = 0;                       /* Memory cell hold array of subprogs */
60510:   sqlite3 *db = p->db;                 /* The database connection */
60511:   int i;                               /* Loop counter */
60512:   int rc = SQLITE_OK;                  /* Return code */
60513:   Mem *pMem = &p->aMem[1];             /* First Mem of result set */
60514: 
60515:   assert( p->explain );
60516:   assert( p->magic==VDBE_MAGIC_RUN );
60517:   assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || p->rc==SQLITE_NOMEM );
60518: 
60519:   /* Even though this opcode does not use dynamic strings for
60520:   ** the result, result columns may become dynamic if the user calls
60521:   ** sqlite3_column_text16(), causing a translation to UTF-16 encoding.
60522:   */
60523:   releaseMemArray(pMem, 8);
60524:   p->pResultSet = 0;
60525: 
60526:   if( p->rc==SQLITE_NOMEM ){
60527:     /* This happens if a malloc() inside a call to sqlite3_column_text() or
60528:     ** sqlite3_column_text16() failed.  */
60529:     db->mallocFailed = 1;
60530:     return SQLITE_ERROR;
60531:   }
60532: 
60533:   /* When the number of output rows reaches nRow, that means the
60534:   ** listing has finished and sqlite3_step() should return SQLITE_DONE.
60535:   ** nRow is the sum of the number of rows in the main program, plus
60536:   ** the sum of the number of rows in all trigger subprograms encountered
60537:   ** so far.  The nRow value will increase as new trigger subprograms are
60538:   ** encountered, but p->pc will eventually catch up to nRow.
60539:   */
60540:   nRow = p->nOp;
60541:   if( p->explain==1 ){
60542:     /* The first 8 memory cells are used for the result set.  So we will
60543:     ** commandeer the 9th cell to use as storage for an array of pointers
60544:     ** to trigger subprograms.  The VDBE is guaranteed to have at least 9
60545:     ** cells.  */
60546:     assert( p->nMem>9 );
60547:     pSub = &p->aMem[9];
60548:     if( pSub->flags&MEM_Blob ){
60549:       /* On the first call to sqlite3_step(), pSub will hold a NULL.  It is
60550:       ** initialized to a BLOB by the P4_SUBPROGRAM processing logic below */
60551:       nSub = pSub->n/sizeof(Vdbe*);
60552:       apSub = (SubProgram **)pSub->z;
60553:     }
60554:     for(i=0; i<nSub; i++){
60555:       nRow += apSub[i]->nOp;
60556:     }
60557:   }
60558: 
60559:   do{
60560:     i = p->pc++;
60561:   }while( i<nRow && p->explain==2 && p->aOp[i].opcode!=OP_Explain );
60562:   if( i>=nRow ){
60563:     p->rc = SQLITE_OK;
60564:     rc = SQLITE_DONE;
60565:   }else if( db->u1.isInterrupted ){
60566:     p->rc = SQLITE_INTERRUPT;
60567:     rc = SQLITE_ERROR;
60568:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(p->rc));
60569:   }else{
60570:     char *z;
60571:     Op *pOp;
60572:     if( i<p->nOp ){
60573:       /* The output line number is small enough that we are still in the
60574:       ** main program. */
60575:       pOp = &p->aOp[i];
60576:     }else{
60577:       /* We are currently listing subprograms.  Figure out which one and
60578:       ** pick up the appropriate opcode. */
60579:       int j;
60580:       i -= p->nOp;
60581:       for(j=0; i>=apSub[j]->nOp; j++){
60582:         i -= apSub[j]->nOp;
60583:       }
60584:       pOp = &apSub[j]->aOp[i];
60585:     }
60586:     if( p->explain==1 ){
60587:       pMem->flags = MEM_Int;
60588:       pMem->type = SQLITE_INTEGER;
60589:       pMem->u.i = i;                                /* Program counter */
60590:       pMem++;
60591:   
60592:       pMem->flags = MEM_Static|MEM_Str|MEM_Term;
60593:       pMem->z = (char*)sqlite3OpcodeName(pOp->opcode);  /* Opcode */
60594:       assert( pMem->z!=0 );
60595:       pMem->n = sqlite3Strlen30(pMem->z);
60596:       pMem->type = SQLITE_TEXT;
60597:       pMem->enc = SQLITE_UTF8;
60598:       pMem++;
60599: 
60600:       /* When an OP_Program opcode is encounter (the only opcode that has
60601:       ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms
60602:       ** kept in p->aMem[9].z to hold the new program - assuming this subprogram
60603:       ** has not already been seen.
60604:       */
60605:       if( pOp->p4type==P4_SUBPROGRAM ){
60606:         int nByte = (nSub+1)*sizeof(SubProgram*);
60607:         int j;
60608:         for(j=0; j<nSub; j++){
60609:           if( apSub[j]==pOp->p4.pProgram ) break;
60610:         }
60611:         if( j==nSub && SQLITE_OK==sqlite3VdbeMemGrow(pSub, nByte, 1) ){
60612:           apSub = (SubProgram **)pSub->z;
60613:           apSub[nSub++] = pOp->p4.pProgram;
60614:           pSub->flags |= MEM_Blob;
60615:           pSub->n = nSub*sizeof(SubProgram*);
60616:         }
60617:       }
60618:     }
60619: 
60620:     pMem->flags = MEM_Int;
60621:     pMem->u.i = pOp->p1;                          /* P1 */
60622:     pMem->type = SQLITE_INTEGER;
60623:     pMem++;
60624: 
60625:     pMem->flags = MEM_Int;
60626:     pMem->u.i = pOp->p2;                          /* P2 */
60627:     pMem->type = SQLITE_INTEGER;
60628:     pMem++;
60629: 
60630:     pMem->flags = MEM_Int;
60631:     pMem->u.i = pOp->p3;                          /* P3 */
60632:     pMem->type = SQLITE_INTEGER;
60633:     pMem++;
60634: 
60635:     if( sqlite3VdbeMemGrow(pMem, 32, 0) ){            /* P4 */
60636:       assert( p->db->mallocFailed );
60637:       return SQLITE_ERROR;
60638:     }
60639:     pMem->flags = MEM_Dyn|MEM_Str|MEM_Term;
60640:     z = displayP4(pOp, pMem->z, 32);
60641:     if( z!=pMem->z ){
60642:       sqlite3VdbeMemSetStr(pMem, z, -1, SQLITE_UTF8, 0);
60643:     }else{
60644:       assert( pMem->z!=0 );
60645:       pMem->n = sqlite3Strlen30(pMem->z);
60646:       pMem->enc = SQLITE_UTF8;
60647:     }
60648:     pMem->type = SQLITE_TEXT;
60649:     pMem++;
60650: 
60651:     if( p->explain==1 ){
60652:       if( sqlite3VdbeMemGrow(pMem, 4, 0) ){
60653:         assert( p->db->mallocFailed );
60654:         return SQLITE_ERROR;
60655:       }
60656:       pMem->flags = MEM_Dyn|MEM_Str|MEM_Term;
60657:       pMem->n = 2;
60658:       sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5);   /* P5 */
60659:       pMem->type = SQLITE_TEXT;
60660:       pMem->enc = SQLITE_UTF8;
60661:       pMem++;
60662:   
60663: #ifdef SQLITE_DEBUG
60664:       if( pOp->zComment ){
60665:         pMem->flags = MEM_Str|MEM_Term;
60666:         pMem->z = pOp->zComment;
60667:         pMem->n = sqlite3Strlen30(pMem->z);
60668:         pMem->enc = SQLITE_UTF8;
60669:         pMem->type = SQLITE_TEXT;
60670:       }else
60671: #endif
60672:       {
60673:         pMem->flags = MEM_Null;                       /* Comment */
60674:         pMem->type = SQLITE_NULL;
60675:       }
60676:     }
60677: 
60678:     p->nResColumn = 8 - 4*(p->explain-1);
60679:     p->pResultSet = &p->aMem[1];
60680:     p->rc = SQLITE_OK;
60681:     rc = SQLITE_ROW;
60682:   }
60683:   return rc;
60684: }
60685: #endif /* SQLITE_OMIT_EXPLAIN */
60686: 
60687: #ifdef SQLITE_DEBUG
60688: /*
60689: ** Print the SQL that was used to generate a VDBE program.
60690: */
60691: SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe *p){
60692:   int nOp = p->nOp;
60693:   VdbeOp *pOp;
60694:   if( nOp<1 ) return;
60695:   pOp = &p->aOp[0];
60696:   if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){
60697:     const char *z = pOp->p4.z;
60698:     while( sqlite3Isspace(*z) ) z++;
60699:     printf("SQL: [%s]\n", z);
60700:   }
60701: }
60702: #endif
60703: 
60704: #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
60705: /*
60706: ** Print an IOTRACE message showing SQL content.
60707: */
60708: SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe *p){
60709:   int nOp = p->nOp;
60710:   VdbeOp *pOp;
60711:   if( sqlite3IoTrace==0 ) return;
60712:   if( nOp<1 ) return;
60713:   pOp = &p->aOp[0];
60714:   if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){
60715:     int i, j;
60716:     char z[1000];
60717:     sqlite3_snprintf(sizeof(z), z, "%s", pOp->p4.z);
60718:     for(i=0; sqlite3Isspace(z[i]); i++){}
60719:     for(j=0; z[i]; i++){
60720:       if( sqlite3Isspace(z[i]) ){
60721:         if( z[i-1]!=' ' ){
60722:           z[j++] = ' ';
60723:         }
60724:       }else{
60725:         z[j++] = z[i];
60726:       }
60727:     }
60728:     z[j] = 0;
60729:     sqlite3IoTrace("SQL %s\n", z);
60730:   }
60731: }
60732: #endif /* !SQLITE_OMIT_TRACE && SQLITE_ENABLE_IOTRACE */
60733: 
60734: /*
60735: ** Allocate space from a fixed size buffer and return a pointer to
60736: ** that space.  If insufficient space is available, return NULL.
60737: **
60738: ** The pBuf parameter is the initial value of a pointer which will
60739: ** receive the new memory.  pBuf is normally NULL.  If pBuf is not
60740: ** NULL, it means that memory space has already been allocated and that
60741: ** this routine should not allocate any new memory.  When pBuf is not
60742: ** NULL simply return pBuf.  Only allocate new memory space when pBuf
60743: ** is NULL.
60744: **
60745: ** nByte is the number of bytes of space needed.
60746: **
60747: ** *ppFrom points to available space and pEnd points to the end of the
60748: ** available space.  When space is allocated, *ppFrom is advanced past
60749: ** the end of the allocated space.
60750: **
60751: ** *pnByte is a counter of the number of bytes of space that have failed
60752: ** to allocate.  If there is insufficient space in *ppFrom to satisfy the
60753: ** request, then increment *pnByte by the amount of the request.
60754: */
60755: static void *allocSpace(
60756:   void *pBuf,          /* Where return pointer will be stored */
60757:   int nByte,           /* Number of bytes to allocate */
60758:   u8 **ppFrom,         /* IN/OUT: Allocate from *ppFrom */
60759:   u8 *pEnd,            /* Pointer to 1 byte past the end of *ppFrom buffer */
60760:   int *pnByte          /* If allocation cannot be made, increment *pnByte */
60761: ){
60762:   assert( EIGHT_BYTE_ALIGNMENT(*ppFrom) );
60763:   if( pBuf ) return pBuf;
60764:   nByte = ROUND8(nByte);
60765:   if( &(*ppFrom)[nByte] <= pEnd ){
60766:     pBuf = (void*)*ppFrom;
60767:     *ppFrom += nByte;
60768:   }else{
60769:     *pnByte += nByte;
60770:   }
60771:   return pBuf;
60772: }
60773: 
60774: /*
60775: ** Rewind the VDBE back to the beginning in preparation for
60776: ** running it.
60777: */
60778: SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){
60779: #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
60780:   int i;
60781: #endif
60782:   assert( p!=0 );
60783:   assert( p->magic==VDBE_MAGIC_INIT );
60784: 
60785:   /* There should be at least one opcode.
60786:   */
60787:   assert( p->nOp>0 );
60788: 
60789:   /* Set the magic to VDBE_MAGIC_RUN sooner rather than later. */
60790:   p->magic = VDBE_MAGIC_RUN;
60791: 
60792: #ifdef SQLITE_DEBUG
60793:   for(i=1; i<p->nMem; i++){
60794:     assert( p->aMem[i].db==p->db );
60795:   }
60796: #endif
60797:   p->pc = -1;
60798:   p->rc = SQLITE_OK;
60799:   p->errorAction = OE_Abort;
60800:   p->magic = VDBE_MAGIC_RUN;
60801:   p->nChange = 0;
60802:   p->cacheCtr = 1;
60803:   p->minWriteFileFormat = 255;
60804:   p->iStatement = 0;
60805:   p->nFkConstraint = 0;
60806: #ifdef VDBE_PROFILE
60807:   for(i=0; i<p->nOp; i++){
60808:     p->aOp[i].cnt = 0;
60809:     p->aOp[i].cycles = 0;
60810:   }
60811: #endif
60812: }
60813: 
60814: /*
60815: ** Prepare a virtual machine for execution for the first time after
60816: ** creating the virtual machine.  This involves things such
60817: ** as allocating stack space and initializing the program counter.
60818: ** After the VDBE has be prepped, it can be executed by one or more
60819: ** calls to sqlite3VdbeExec().  
60820: **
60821: ** This function may be called exact once on a each virtual machine.
60822: ** After this routine is called the VM has been "packaged" and is ready
60823: ** to run.  After this routine is called, futher calls to 
60824: ** sqlite3VdbeAddOp() functions are prohibited.  This routine disconnects
60825: ** the Vdbe from the Parse object that helped generate it so that the
60826: ** the Vdbe becomes an independent entity and the Parse object can be
60827: ** destroyed.
60828: **
60829: ** Use the sqlite3VdbeRewind() procedure to restore a virtual machine back
60830: ** to its initial state after it has been run.
60831: */
60832: SQLITE_PRIVATE void sqlite3VdbeMakeReady(
60833:   Vdbe *p,                       /* The VDBE */
60834:   Parse *pParse                  /* Parsing context */
60835: ){
60836:   sqlite3 *db;                   /* The database connection */
60837:   int nVar;                      /* Number of parameters */
60838:   int nMem;                      /* Number of VM memory registers */
60839:   int nCursor;                   /* Number of cursors required */
60840:   int nArg;                      /* Number of arguments in subprograms */
60841:   int nOnce;                     /* Number of OP_Once instructions */
60842:   int n;                         /* Loop counter */
60843:   u8 *zCsr;                      /* Memory available for allocation */
60844:   u8 *zEnd;                      /* First byte past allocated memory */
60845:   int nByte;                     /* How much extra memory is needed */
60846: 
60847:   assert( p!=0 );
60848:   assert( p->nOp>0 );
60849:   assert( pParse!=0 );
60850:   assert( p->magic==VDBE_MAGIC_INIT );
60851:   db = p->db;
60852:   assert( db->mallocFailed==0 );
60853:   nVar = pParse->nVar;
60854:   nMem = pParse->nMem;
60855:   nCursor = pParse->nTab;
60856:   nArg = pParse->nMaxArg;
60857:   nOnce = pParse->nOnce;
60858:   if( nOnce==0 ) nOnce = 1; /* Ensure at least one byte in p->aOnceFlag[] */
60859:   
60860:   /* For each cursor required, also allocate a memory cell. Memory
60861:   ** cells (nMem+1-nCursor)..nMem, inclusive, will never be used by
60862:   ** the vdbe program. Instead they are used to allocate space for
60863:   ** VdbeCursor/BtCursor structures. The blob of memory associated with 
60864:   ** cursor 0 is stored in memory cell nMem. Memory cell (nMem-1)
60865:   ** stores the blob of memory associated with cursor 1, etc.
60866:   **
60867:   ** See also: allocateCursor().
60868:   */
60869:   nMem += nCursor;
60870: 
60871:   /* Allocate space for memory registers, SQL variables, VDBE cursors and 
60872:   ** an array to marshal SQL function arguments in.
60873:   */
60874:   zCsr = (u8*)&p->aOp[p->nOp];       /* Memory avaliable for allocation */
60875:   zEnd = (u8*)&p->aOp[p->nOpAlloc];  /* First byte past end of zCsr[] */
60876: 
60877:   resolveP2Values(p, &nArg);
60878:   p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort);
60879:   if( pParse->explain && nMem<10 ){
60880:     nMem = 10;
60881:   }
60882:   memset(zCsr, 0, zEnd-zCsr);
60883:   zCsr += (zCsr - (u8*)0)&7;
60884:   assert( EIGHT_BYTE_ALIGNMENT(zCsr) );
60885:   p->expired = 0;
60886: 
60887:   /* Memory for registers, parameters, cursor, etc, is allocated in two
60888:   ** passes.  On the first pass, we try to reuse unused space at the 
60889:   ** end of the opcode array.  If we are unable to satisfy all memory
60890:   ** requirements by reusing the opcode array tail, then the second
60891:   ** pass will fill in the rest using a fresh allocation.  
60892:   **
60893:   ** This two-pass approach that reuses as much memory as possible from
60894:   ** the leftover space at the end of the opcode array can significantly
60895:   ** reduce the amount of memory held by a prepared statement.
60896:   */
60897:   do {
60898:     nByte = 0;
60899:     p->aMem = allocSpace(p->aMem, nMem*sizeof(Mem), &zCsr, zEnd, &nByte);
60900:     p->aVar = allocSpace(p->aVar, nVar*sizeof(Mem), &zCsr, zEnd, &nByte);
60901:     p->apArg = allocSpace(p->apArg, nArg*sizeof(Mem*), &zCsr, zEnd, &nByte);
60902:     p->azVar = allocSpace(p->azVar, nVar*sizeof(char*), &zCsr, zEnd, &nByte);
60903:     p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*),
60904:                           &zCsr, zEnd, &nByte);
60905:     p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte);
60906:     if( nByte ){
60907:       p->pFree = sqlite3DbMallocZero(db, nByte);
60908:     }
60909:     zCsr = p->pFree;
60910:     zEnd = &zCsr[nByte];
60911:   }while( nByte && !db->mallocFailed );
60912: 
60913:   p->nCursor = (u16)nCursor;
60914:   p->nOnceFlag = nOnce;
60915:   if( p->aVar ){
60916:     p->nVar = (ynVar)nVar;
60917:     for(n=0; n<nVar; n++){
60918:       p->aVar[n].flags = MEM_Null;
60919:       p->aVar[n].db = db;
60920:     }
60921:   }
60922:   if( p->azVar ){
60923:     p->nzVar = pParse->nzVar;
60924:     memcpy(p->azVar, pParse->azVar, p->nzVar*sizeof(p->azVar[0]));
60925:     memset(pParse->azVar, 0, pParse->nzVar*sizeof(pParse->azVar[0]));
60926:   }
60927:   if( p->aMem ){
60928:     p->aMem--;                      /* aMem[] goes from 1..nMem */
60929:     p->nMem = nMem;                 /*       not from 0..nMem-1 */
60930:     for(n=1; n<=nMem; n++){
60931:       p->aMem[n].flags = MEM_Invalid;
60932:       p->aMem[n].db = db;
60933:     }
60934:   }
60935:   p->explain = pParse->explain;
60936:   sqlite3VdbeRewind(p);
60937: }
60938: 
60939: /*
60940: ** Close a VDBE cursor and release all the resources that cursor 
60941: ** happens to hold.
60942: */
60943: SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
60944:   if( pCx==0 ){
60945:     return;
60946:   }
60947:   sqlite3VdbeSorterClose(p->db, pCx);
60948:   if( pCx->pBt ){
60949:     sqlite3BtreeClose(pCx->pBt);
60950:     /* The pCx->pCursor will be close automatically, if it exists, by
60951:     ** the call above. */
60952:   }else if( pCx->pCursor ){
60953:     sqlite3BtreeCloseCursor(pCx->pCursor);
60954:   }
60955: #ifndef SQLITE_OMIT_VIRTUALTABLE
60956:   if( pCx->pVtabCursor ){
60957:     sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor;
60958:     const sqlite3_module *pModule = pCx->pModule;
60959:     p->inVtabMethod = 1;
60960:     pModule->xClose(pVtabCursor);
60961:     p->inVtabMethod = 0;
60962:   }
60963: #endif
60964: }
60965: 
60966: /*
60967: ** Copy the values stored in the VdbeFrame structure to its Vdbe. This
60968: ** is used, for example, when a trigger sub-program is halted to restore
60969: ** control to the main program.
60970: */
60971: SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
60972:   Vdbe *v = pFrame->v;
60973:   v->aOnceFlag = pFrame->aOnceFlag;
60974:   v->nOnceFlag = pFrame->nOnceFlag;
60975:   v->aOp = pFrame->aOp;
60976:   v->nOp = pFrame->nOp;
60977:   v->aMem = pFrame->aMem;
60978:   v->nMem = pFrame->nMem;
60979:   v->apCsr = pFrame->apCsr;
60980:   v->nCursor = pFrame->nCursor;
60981:   v->db->lastRowid = pFrame->lastRowid;
60982:   v->nChange = pFrame->nChange;
60983:   return pFrame->pc;
60984: }
60985: 
60986: /*
60987: ** Close all cursors.
60988: **
60989: ** Also release any dynamic memory held by the VM in the Vdbe.aMem memory 
60990: ** cell array. This is necessary as the memory cell array may contain
60991: ** pointers to VdbeFrame objects, which may in turn contain pointers to
60992: ** open cursors.
60993: */
60994: static void closeAllCursors(Vdbe *p){
60995:   if( p->pFrame ){
60996:     VdbeFrame *pFrame;
60997:     for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
60998:     sqlite3VdbeFrameRestore(pFrame);
60999:   }
61000:   p->pFrame = 0;
61001:   p->nFrame = 0;
61002: 
61003:   if( p->apCsr ){
61004:     int i;
61005:     for(i=0; i<p->nCursor; i++){
61006:       VdbeCursor *pC = p->apCsr[i];
61007:       if( pC ){
61008:         sqlite3VdbeFreeCursor(p, pC);
61009:         p->apCsr[i] = 0;
61010:       }
61011:     }
61012:   }
61013:   if( p->aMem ){
61014:     releaseMemArray(&p->aMem[1], p->nMem);
61015:   }
61016:   while( p->pDelFrame ){
61017:     VdbeFrame *pDel = p->pDelFrame;
61018:     p->pDelFrame = pDel->pParent;
61019:     sqlite3VdbeFrameDelete(pDel);
61020:   }
61021: }
61022: 
61023: /*
61024: ** Clean up the VM after execution.
61025: **
61026: ** This routine will automatically close any cursors, lists, and/or
61027: ** sorters that were left open.  It also deletes the values of
61028: ** variables in the aVar[] array.
61029: */
61030: static void Cleanup(Vdbe *p){
61031:   sqlite3 *db = p->db;
61032: 
61033: #ifdef SQLITE_DEBUG
61034:   /* Execute assert() statements to ensure that the Vdbe.apCsr[] and 
61035:   ** Vdbe.aMem[] arrays have already been cleaned up.  */
61036:   int i;
61037:   if( p->apCsr ) for(i=0; i<p->nCursor; i++) assert( p->apCsr[i]==0 );
61038:   if( p->aMem ){
61039:     for(i=1; i<=p->nMem; i++) assert( p->aMem[i].flags==MEM_Invalid );
61040:   }
61041: #endif
61042: 
61043:   sqlite3DbFree(db, p->zErrMsg);
61044:   p->zErrMsg = 0;
61045:   p->pResultSet = 0;
61046: }
61047: 
61048: /*
61049: ** Set the number of result columns that will be returned by this SQL
61050: ** statement. This is now set at compile time, rather than during
61051: ** execution of the vdbe program so that sqlite3_column_count() can
61052: ** be called on an SQL statement before sqlite3_step().
61053: */
61054: SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){
61055:   Mem *pColName;
61056:   int n;
61057:   sqlite3 *db = p->db;
61058: 
61059:   releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
61060:   sqlite3DbFree(db, p->aColName);
61061:   n = nResColumn*COLNAME_N;
61062:   p->nResColumn = (u16)nResColumn;
61063:   p->aColName = pColName = (Mem*)sqlite3DbMallocZero(db, sizeof(Mem)*n );
61064:   if( p->aColName==0 ) return;
61065:   while( n-- > 0 ){
61066:     pColName->flags = MEM_Null;
61067:     pColName->db = p->db;
61068:     pColName++;
61069:   }
61070: }
61071: 
61072: /*
61073: ** Set the name of the idx'th column to be returned by the SQL statement.
61074: ** zName must be a pointer to a nul terminated string.
61075: **
61076: ** This call must be made after a call to sqlite3VdbeSetNumCols().
61077: **
61078: ** The final parameter, xDel, must be one of SQLITE_DYNAMIC, SQLITE_STATIC
61079: ** or SQLITE_TRANSIENT. If it is SQLITE_DYNAMIC, then the buffer pointed
61080: ** to by zName will be freed by sqlite3DbFree() when the vdbe is destroyed.
61081: */
61082: SQLITE_PRIVATE int sqlite3VdbeSetColName(
61083:   Vdbe *p,                         /* Vdbe being configured */
61084:   int idx,                         /* Index of column zName applies to */
61085:   int var,                         /* One of the COLNAME_* constants */
61086:   const char *zName,               /* Pointer to buffer containing name */
61087:   void (*xDel)(void*)              /* Memory management strategy for zName */
61088: ){
61089:   int rc;
61090:   Mem *pColName;
61091:   assert( idx<p->nResColumn );
61092:   assert( var<COLNAME_N );
61093:   if( p->db->mallocFailed ){
61094:     assert( !zName || xDel!=SQLITE_DYNAMIC );
61095:     return SQLITE_NOMEM;
61096:   }
61097:   assert( p->aColName!=0 );
61098:   pColName = &(p->aColName[idx+var*p->nResColumn]);
61099:   rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, xDel);
61100:   assert( rc!=0 || !zName || (pColName->flags&MEM_Term)!=0 );
61101:   return rc;
61102: }
61103: 
61104: /*
61105: ** A read or write transaction may or may not be active on database handle
61106: ** db. If a transaction is active, commit it. If there is a
61107: ** write-transaction spanning more than one database file, this routine
61108: ** takes care of the master journal trickery.
61109: */
61110: static int vdbeCommit(sqlite3 *db, Vdbe *p){
61111:   int i;
61112:   int nTrans = 0;  /* Number of databases with an active write-transaction */
61113:   int rc = SQLITE_OK;
61114:   int needXcommit = 0;
61115: 
61116: #ifdef SQLITE_OMIT_VIRTUALTABLE
61117:   /* With this option, sqlite3VtabSync() is defined to be simply 
61118:   ** SQLITE_OK so p is not used. 
61119:   */
61120:   UNUSED_PARAMETER(p);
61121: #endif
61122: 
61123:   /* Before doing anything else, call the xSync() callback for any
61124:   ** virtual module tables written in this transaction. This has to
61125:   ** be done before determining whether a master journal file is 
61126:   ** required, as an xSync() callback may add an attached database
61127:   ** to the transaction.
61128:   */
61129:   rc = sqlite3VtabSync(db, &p->zErrMsg);
61130: 
61131:   /* This loop determines (a) if the commit hook should be invoked and
61132:   ** (b) how many database files have open write transactions, not 
61133:   ** including the temp database. (b) is important because if more than 
61134:   ** one database file has an open write transaction, a master journal
61135:   ** file is required for an atomic commit.
61136:   */ 
61137:   for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ 
61138:     Btree *pBt = db->aDb[i].pBt;
61139:     if( sqlite3BtreeIsInTrans(pBt) ){
61140:       needXcommit = 1;
61141:       if( i!=1 ) nTrans++;
61142:       rc = sqlite3PagerExclusiveLock(sqlite3BtreePager(pBt));
61143:     }
61144:   }
61145:   if( rc!=SQLITE_OK ){
61146:     return rc;
61147:   }
61148: 
61149:   /* If there are any write-transactions at all, invoke the commit hook */
61150:   if( needXcommit && db->xCommitCallback ){
61151:     rc = db->xCommitCallback(db->pCommitArg);
61152:     if( rc ){
61153:       return SQLITE_CONSTRAINT;
61154:     }
61155:   }
61156: 
61157:   /* The simple case - no more than one database file (not counting the
61158:   ** TEMP database) has a transaction active.   There is no need for the
61159:   ** master-journal.
61160:   **
61161:   ** If the return value of sqlite3BtreeGetFilename() is a zero length
61162:   ** string, it means the main database is :memory: or a temp file.  In 
61163:   ** that case we do not support atomic multi-file commits, so use the 
61164:   ** simple case then too.
61165:   */
61166:   if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(db->aDb[0].pBt))
61167:    || nTrans<=1
61168:   ){
61169:     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
61170:       Btree *pBt = db->aDb[i].pBt;
61171:       if( pBt ){
61172:         rc = sqlite3BtreeCommitPhaseOne(pBt, 0);
61173:       }
61174:     }
61175: 
61176:     /* Do the commit only if all databases successfully complete phase 1. 
61177:     ** If one of the BtreeCommitPhaseOne() calls fails, this indicates an
61178:     ** IO error while deleting or truncating a journal file. It is unlikely,
61179:     ** but could happen. In this case abandon processing and return the error.
61180:     */
61181:     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
61182:       Btree *pBt = db->aDb[i].pBt;
61183:       if( pBt ){
61184:         rc = sqlite3BtreeCommitPhaseTwo(pBt, 0);
61185:       }
61186:     }
61187:     if( rc==SQLITE_OK ){
61188:       sqlite3VtabCommit(db);
61189:     }
61190:   }
61191: 
61192:   /* The complex case - There is a multi-file write-transaction active.
61193:   ** This requires a master journal file to ensure the transaction is
61194:   ** committed atomicly.
61195:   */
61196: #ifndef SQLITE_OMIT_DISKIO
61197:   else{
61198:     sqlite3_vfs *pVfs = db->pVfs;
61199:     int needSync = 0;
61200:     char *zMaster = 0;   /* File-name for the master journal */
61201:     char const *zMainFile = sqlite3BtreeGetFilename(db->aDb[0].pBt);
61202:     sqlite3_file *pMaster = 0;
61203:     i64 offset = 0;
61204:     int res;
61205:     int retryCount = 0;
61206:     int nMainFile;
61207: 
61208:     /* Select a master journal file name */
61209:     nMainFile = sqlite3Strlen30(zMainFile);
61210:     zMaster = sqlite3MPrintf(db, "%s-mjXXXXXX9XXz", zMainFile);
61211:     if( zMaster==0 ) return SQLITE_NOMEM;
61212:     do {
61213:       u32 iRandom;
61214:       if( retryCount ){
61215:         if( retryCount>100 ){
61216:           sqlite3_log(SQLITE_FULL, "MJ delete: %s", zMaster);
61217:           sqlite3OsDelete(pVfs, zMaster, 0);
61218:           break;
61219:         }else if( retryCount==1 ){
61220:           sqlite3_log(SQLITE_FULL, "MJ collide: %s", zMaster);
61221:         }
61222:       }
61223:       retryCount++;
61224:       sqlite3_randomness(sizeof(iRandom), &iRandom);
61225:       sqlite3_snprintf(13, &zMaster[nMainFile], "-mj%06X9%02X",
61226:                                (iRandom>>8)&0xffffff, iRandom&0xff);
61227:       /* The antipenultimate character of the master journal name must
61228:       ** be "9" to avoid name collisions when using 8+3 filenames. */
61229:       assert( zMaster[sqlite3Strlen30(zMaster)-3]=='9' );
61230:       sqlite3FileSuffix3(zMainFile, zMaster);
61231:       rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);
61232:     }while( rc==SQLITE_OK && res );
61233:     if( rc==SQLITE_OK ){
61234:       /* Open the master journal. */
61235:       rc = sqlite3OsOpenMalloc(pVfs, zMaster, &pMaster, 
61236:           SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|
61237:           SQLITE_OPEN_EXCLUSIVE|SQLITE_OPEN_MASTER_JOURNAL, 0
61238:       );
61239:     }
61240:     if( rc!=SQLITE_OK ){
61241:       sqlite3DbFree(db, zMaster);
61242:       return rc;
61243:     }
61244:  
61245:     /* Write the name of each database file in the transaction into the new
61246:     ** master journal file. If an error occurs at this point close
61247:     ** and delete the master journal file. All the individual journal files
61248:     ** still have 'null' as the master journal pointer, so they will roll
61249:     ** back independently if a failure occurs.
61250:     */
61251:     for(i=0; i<db->nDb; i++){
61252:       Btree *pBt = db->aDb[i].pBt;
61253:       if( sqlite3BtreeIsInTrans(pBt) ){
61254:         char const *zFile = sqlite3BtreeGetJournalname(pBt);
61255:         if( zFile==0 ){
61256:           continue;  /* Ignore TEMP and :memory: databases */
61257:         }
61258:         assert( zFile[0]!=0 );
61259:         if( !needSync && !sqlite3BtreeSyncDisabled(pBt) ){
61260:           needSync = 1;
61261:         }
61262:         rc = sqlite3OsWrite(pMaster, zFile, sqlite3Strlen30(zFile)+1, offset);
61263:         offset += sqlite3Strlen30(zFile)+1;
61264:         if( rc!=SQLITE_OK ){
61265:           sqlite3OsCloseFree(pMaster);
61266:           sqlite3OsDelete(pVfs, zMaster, 0);
61267:           sqlite3DbFree(db, zMaster);
61268:           return rc;
61269:         }
61270:       }
61271:     }
61272: 
61273:     /* Sync the master journal file. If the IOCAP_SEQUENTIAL device
61274:     ** flag is set this is not required.
61275:     */
61276:     if( needSync 
61277:      && 0==(sqlite3OsDeviceCharacteristics(pMaster)&SQLITE_IOCAP_SEQUENTIAL)
61278:      && SQLITE_OK!=(rc = sqlite3OsSync(pMaster, SQLITE_SYNC_NORMAL))
61279:     ){
61280:       sqlite3OsCloseFree(pMaster);
61281:       sqlite3OsDelete(pVfs, zMaster, 0);
61282:       sqlite3DbFree(db, zMaster);
61283:       return rc;
61284:     }
61285: 
61286:     /* Sync all the db files involved in the transaction. The same call
61287:     ** sets the master journal pointer in each individual journal. If
61288:     ** an error occurs here, do not delete the master journal file.
61289:     **
61290:     ** If the error occurs during the first call to
61291:     ** sqlite3BtreeCommitPhaseOne(), then there is a chance that the
61292:     ** master journal file will be orphaned. But we cannot delete it,
61293:     ** in case the master journal file name was written into the journal
61294:     ** file before the failure occurred.
61295:     */
61296:     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ 
61297:       Btree *pBt = db->aDb[i].pBt;
61298:       if( pBt ){
61299:         rc = sqlite3BtreeCommitPhaseOne(pBt, zMaster);
61300:       }
61301:     }
61302:     sqlite3OsCloseFree(pMaster);
61303:     assert( rc!=SQLITE_BUSY );
61304:     if( rc!=SQLITE_OK ){
61305:       sqlite3DbFree(db, zMaster);
61306:       return rc;
61307:     }
61308: 
61309:     /* Delete the master journal file. This commits the transaction. After
61310:     ** doing this the directory is synced again before any individual
61311:     ** transaction files are deleted.
61312:     */
61313:     rc = sqlite3OsDelete(pVfs, zMaster, 1);
61314:     sqlite3DbFree(db, zMaster);
61315:     zMaster = 0;
61316:     if( rc ){
61317:       return rc;
61318:     }
61319: 
61320:     /* All files and directories have already been synced, so the following
61321:     ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and
61322:     ** deleting or truncating journals. If something goes wrong while
61323:     ** this is happening we don't really care. The integrity of the
61324:     ** transaction is already guaranteed, but some stray 'cold' journals
61325:     ** may be lying around. Returning an error code won't help matters.
61326:     */
61327:     disable_simulated_io_errors();
61328:     sqlite3BeginBenignMalloc();
61329:     for(i=0; i<db->nDb; i++){ 
61330:       Btree *pBt = db->aDb[i].pBt;
61331:       if( pBt ){
61332:         sqlite3BtreeCommitPhaseTwo(pBt, 1);
61333:       }
61334:     }
61335:     sqlite3EndBenignMalloc();
61336:     enable_simulated_io_errors();
61337: 
61338:     sqlite3VtabCommit(db);
61339:   }
61340: #endif
61341: 
61342:   return rc;
61343: }
61344: 
61345: /* 
61346: ** This routine checks that the sqlite3.activeVdbeCnt count variable
61347: ** matches the number of vdbe's in the list sqlite3.pVdbe that are
61348: ** currently active. An assertion fails if the two counts do not match.
61349: ** This is an internal self-check only - it is not an essential processing
61350: ** step.
61351: **
61352: ** This is a no-op if NDEBUG is defined.
61353: */
61354: #ifndef NDEBUG
61355: static void checkActiveVdbeCnt(sqlite3 *db){
61356:   Vdbe *p;
61357:   int cnt = 0;
61358:   int nWrite = 0;
61359:   p = db->pVdbe;
61360:   while( p ){
61361:     if( p->magic==VDBE_MAGIC_RUN && p->pc>=0 ){
61362:       cnt++;
61363:       if( p->readOnly==0 ) nWrite++;
61364:     }
61365:     p = p->pNext;
61366:   }
61367:   assert( cnt==db->activeVdbeCnt );
61368:   assert( nWrite==db->writeVdbeCnt );
61369: }
61370: #else
61371: #define checkActiveVdbeCnt(x)
61372: #endif
61373: 
61374: /*
61375: ** For every Btree that in database connection db which 
61376: ** has been modified, "trip" or invalidate each cursor in
61377: ** that Btree might have been modified so that the cursor
61378: ** can never be used again.  This happens when a rollback
61379: *** occurs.  We have to trip all the other cursors, even
61380: ** cursor from other VMs in different database connections,
61381: ** so that none of them try to use the data at which they
61382: ** were pointing and which now may have been changed due
61383: ** to the rollback.
61384: **
61385: ** Remember that a rollback can delete tables complete and
61386: ** reorder rootpages.  So it is not sufficient just to save
61387: ** the state of the cursor.  We have to invalidate the cursor
61388: ** so that it is never used again.
61389: */
61390: static void invalidateCursorsOnModifiedBtrees(sqlite3 *db){
61391:   int i;
61392:   for(i=0; i<db->nDb; i++){
61393:     Btree *p = db->aDb[i].pBt;
61394:     if( p && sqlite3BtreeIsInTrans(p) ){
61395:       sqlite3BtreeTripAllCursors(p, SQLITE_ABORT);
61396:     }
61397:   }
61398: }
61399: 
61400: /*
61401: ** If the Vdbe passed as the first argument opened a statement-transaction,
61402: ** close it now. Argument eOp must be either SAVEPOINT_ROLLBACK or
61403: ** SAVEPOINT_RELEASE. If it is SAVEPOINT_ROLLBACK, then the statement
61404: ** transaction is rolled back. If eOp is SAVEPOINT_RELEASE, then the 
61405: ** statement transaction is commtted.
61406: **
61407: ** If an IO error occurs, an SQLITE_IOERR_XXX error code is returned. 
61408: ** Otherwise SQLITE_OK.
61409: */
61410: SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){
61411:   sqlite3 *const db = p->db;
61412:   int rc = SQLITE_OK;
61413: 
61414:   /* If p->iStatement is greater than zero, then this Vdbe opened a 
61415:   ** statement transaction that should be closed here. The only exception
61416:   ** is that an IO error may have occured, causing an emergency rollback.
61417:   ** In this case (db->nStatement==0), and there is nothing to do.
61418:   */
61419:   if( db->nStatement && p->iStatement ){
61420:     int i;
61421:     const int iSavepoint = p->iStatement-1;
61422: 
61423:     assert( eOp==SAVEPOINT_ROLLBACK || eOp==SAVEPOINT_RELEASE);
61424:     assert( db->nStatement>0 );
61425:     assert( p->iStatement==(db->nStatement+db->nSavepoint) );
61426: 
61427:     for(i=0; i<db->nDb; i++){ 
61428:       int rc2 = SQLITE_OK;
61429:       Btree *pBt = db->aDb[i].pBt;
61430:       if( pBt ){
61431:         if( eOp==SAVEPOINT_ROLLBACK ){
61432:           rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_ROLLBACK, iSavepoint);
61433:         }
61434:         if( rc2==SQLITE_OK ){
61435:           rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_RELEASE, iSavepoint);
61436:         }
61437:         if( rc==SQLITE_OK ){
61438:           rc = rc2;
61439:         }
61440:       }
61441:     }
61442:     db->nStatement--;
61443:     p->iStatement = 0;
61444: 
61445:     if( rc==SQLITE_OK ){
61446:       if( eOp==SAVEPOINT_ROLLBACK ){
61447:         rc = sqlite3VtabSavepoint(db, SAVEPOINT_ROLLBACK, iSavepoint);
61448:       }
61449:       if( rc==SQLITE_OK ){
61450:         rc = sqlite3VtabSavepoint(db, SAVEPOINT_RELEASE, iSavepoint);
61451:       }
61452:     }
61453: 
61454:     /* If the statement transaction is being rolled back, also restore the 
61455:     ** database handles deferred constraint counter to the value it had when 
61456:     ** the statement transaction was opened.  */
61457:     if( eOp==SAVEPOINT_ROLLBACK ){
61458:       db->nDeferredCons = p->nStmtDefCons;
61459:     }
61460:   }
61461:   return rc;
61462: }
61463: 
61464: /*
61465: ** This function is called when a transaction opened by the database 
61466: ** handle associated with the VM passed as an argument is about to be 
61467: ** committed. If there are outstanding deferred foreign key constraint
61468: ** violations, return SQLITE_ERROR. Otherwise, SQLITE_OK.
61469: **
61470: ** If there are outstanding FK violations and this function returns 
61471: ** SQLITE_ERROR, set the result of the VM to SQLITE_CONSTRAINT and write
61472: ** an error message to it. Then return SQLITE_ERROR.
61473: */
61474: #ifndef SQLITE_OMIT_FOREIGN_KEY
61475: SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *p, int deferred){
61476:   sqlite3 *db = p->db;
61477:   if( (deferred && db->nDeferredCons>0) || (!deferred && p->nFkConstraint>0) ){
61478:     p->rc = SQLITE_CONSTRAINT;
61479:     p->errorAction = OE_Abort;
61480:     sqlite3SetString(&p->zErrMsg, db, "foreign key constraint failed");
61481:     return SQLITE_ERROR;
61482:   }
61483:   return SQLITE_OK;
61484: }
61485: #endif
61486: 
61487: /*
61488: ** This routine is called the when a VDBE tries to halt.  If the VDBE
61489: ** has made changes and is in autocommit mode, then commit those
61490: ** changes.  If a rollback is needed, then do the rollback.
61491: **
61492: ** This routine is the only way to move the state of a VM from
61493: ** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT.  It is harmless to
61494: ** call this on a VM that is in the SQLITE_MAGIC_HALT state.
61495: **
61496: ** Return an error code.  If the commit could not complete because of
61497: ** lock contention, return SQLITE_BUSY.  If SQLITE_BUSY is returned, it
61498: ** means the close did not happen and needs to be repeated.
61499: */
61500: SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){
61501:   int rc;                         /* Used to store transient return codes */
61502:   sqlite3 *db = p->db;
61503: 
61504:   /* This function contains the logic that determines if a statement or
61505:   ** transaction will be committed or rolled back as a result of the
61506:   ** execution of this virtual machine. 
61507:   **
61508:   ** If any of the following errors occur:
61509:   **
61510:   **     SQLITE_NOMEM
61511:   **     SQLITE_IOERR
61512:   **     SQLITE_FULL
61513:   **     SQLITE_INTERRUPT
61514:   **
61515:   ** Then the internal cache might have been left in an inconsistent
61516:   ** state.  We need to rollback the statement transaction, if there is
61517:   ** one, or the complete transaction if there is no statement transaction.
61518:   */
61519: 
61520:   if( p->db->mallocFailed ){
61521:     p->rc = SQLITE_NOMEM;
61522:   }
61523:   if( p->aOnceFlag ) memset(p->aOnceFlag, 0, p->nOnceFlag);
61524:   closeAllCursors(p);
61525:   if( p->magic!=VDBE_MAGIC_RUN ){
61526:     return SQLITE_OK;
61527:   }
61528:   checkActiveVdbeCnt(db);
61529: 
61530:   /* No commit or rollback needed if the program never started */
61531:   if( p->pc>=0 ){
61532:     int mrc;   /* Primary error code from p->rc */
61533:     int eStatementOp = 0;
61534:     int isSpecialError;            /* Set to true if a 'special' error */
61535: 
61536:     /* Lock all btrees used by the statement */
61537:     sqlite3VdbeEnter(p);
61538: 
61539:     /* Check for one of the special errors */
61540:     mrc = p->rc & 0xff;
61541:     assert( p->rc!=SQLITE_IOERR_BLOCKED );  /* This error no longer exists */
61542:     isSpecialError = mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR
61543:                      || mrc==SQLITE_INTERRUPT || mrc==SQLITE_FULL;
61544:     if( isSpecialError ){
61545:       /* If the query was read-only and the error code is SQLITE_INTERRUPT, 
61546:       ** no rollback is necessary. Otherwise, at least a savepoint 
61547:       ** transaction must be rolled back to restore the database to a 
61548:       ** consistent state.
61549:       **
61550:       ** Even if the statement is read-only, it is important to perform
61551:       ** a statement or transaction rollback operation. If the error 
61552:       ** occured while writing to the journal, sub-journal or database
61553:       ** file as part of an effort to free up cache space (see function
61554:       ** pagerStress() in pager.c), the rollback is required to restore 
61555:       ** the pager to a consistent state.
61556:       */
61557:       if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){
61558:         if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && p->usesStmtJournal ){
61559:           eStatementOp = SAVEPOINT_ROLLBACK;
61560:         }else{
61561:           /* We are forced to roll back the active transaction. Before doing
61562:           ** so, abort any other statements this handle currently has active.
61563:           */
61564:           invalidateCursorsOnModifiedBtrees(db);
61565:           sqlite3RollbackAll(db);
61566:           sqlite3CloseSavepoints(db);
61567:           db->autoCommit = 1;
61568:         }
61569:       }
61570:     }
61571: 
61572:     /* Check for immediate foreign key violations. */
61573:     if( p->rc==SQLITE_OK ){
61574:       sqlite3VdbeCheckFk(p, 0);
61575:     }
61576:   
61577:     /* If the auto-commit flag is set and this is the only active writer 
61578:     ** VM, then we do either a commit or rollback of the current transaction. 
61579:     **
61580:     ** Note: This block also runs if one of the special errors handled 
61581:     ** above has occurred. 
61582:     */
61583:     if( !sqlite3VtabInSync(db) 
61584:      && db->autoCommit 
61585:      && db->writeVdbeCnt==(p->readOnly==0) 
61586:     ){
61587:       if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){
61588:         rc = sqlite3VdbeCheckFk(p, 1);
61589:         if( rc!=SQLITE_OK ){
61590:           if( NEVER(p->readOnly) ){
61591:             sqlite3VdbeLeave(p);
61592:             return SQLITE_ERROR;
61593:           }
61594:           rc = SQLITE_CONSTRAINT;
61595:         }else{ 
61596:           /* The auto-commit flag is true, the vdbe program was successful 
61597:           ** or hit an 'OR FAIL' constraint and there are no deferred foreign
61598:           ** key constraints to hold up the transaction. This means a commit 
61599:           ** is required. */
61600:           rc = vdbeCommit(db, p);
61601:         }
61602:         if( rc==SQLITE_BUSY && p->readOnly ){
61603:           sqlite3VdbeLeave(p);
61604:           return SQLITE_BUSY;
61605:         }else if( rc!=SQLITE_OK ){
61606:           p->rc = rc;
61607:           sqlite3RollbackAll(db);
61608:         }else{
61609:           db->nDeferredCons = 0;
61610:           sqlite3CommitInternalChanges(db);
61611:         }
61612:       }else{
61613:         sqlite3RollbackAll(db);
61614:       }
61615:       db->nStatement = 0;
61616:     }else if( eStatementOp==0 ){
61617:       if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){
61618:         eStatementOp = SAVEPOINT_RELEASE;
61619:       }else if( p->errorAction==OE_Abort ){
61620:         eStatementOp = SAVEPOINT_ROLLBACK;
61621:       }else{
61622:         invalidateCursorsOnModifiedBtrees(db);
61623:         sqlite3RollbackAll(db);
61624:         sqlite3CloseSavepoints(db);
61625:         db->autoCommit = 1;
61626:       }
61627:     }
61628:   
61629:     /* If eStatementOp is non-zero, then a statement transaction needs to
61630:     ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to
61631:     ** do so. If this operation returns an error, and the current statement
61632:     ** error code is SQLITE_OK or SQLITE_CONSTRAINT, then promote the
61633:     ** current statement error code.
61634:     */
61635:     if( eStatementOp ){
61636:       rc = sqlite3VdbeCloseStatement(p, eStatementOp);
61637:       if( rc ){
61638:         if( p->rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT ){
61639:           p->rc = rc;
61640:           sqlite3DbFree(db, p->zErrMsg);
61641:           p->zErrMsg = 0;
61642:         }
61643:         invalidateCursorsOnModifiedBtrees(db);
61644:         sqlite3RollbackAll(db);
61645:         sqlite3CloseSavepoints(db);
61646:         db->autoCommit = 1;
61647:       }
61648:     }
61649:   
61650:     /* If this was an INSERT, UPDATE or DELETE and no statement transaction
61651:     ** has been rolled back, update the database connection change-counter. 
61652:     */
61653:     if( p->changeCntOn ){
61654:       if( eStatementOp!=SAVEPOINT_ROLLBACK ){
61655:         sqlite3VdbeSetChanges(db, p->nChange);
61656:       }else{
61657:         sqlite3VdbeSetChanges(db, 0);
61658:       }
61659:       p->nChange = 0;
61660:     }
61661:   
61662:     /* Rollback or commit any schema changes that occurred. */
61663:     if( p->rc!=SQLITE_OK && db->flags&SQLITE_InternChanges ){
61664:       sqlite3ResetInternalSchema(db, -1);
61665:       db->flags = (db->flags | SQLITE_InternChanges);
61666:     }
61667: 
61668:     /* Release the locks */
61669:     sqlite3VdbeLeave(p);
61670:   }
61671: 
61672:   /* We have successfully halted and closed the VM.  Record this fact. */
61673:   if( p->pc>=0 ){
61674:     db->activeVdbeCnt--;
61675:     if( !p->readOnly ){
61676:       db->writeVdbeCnt--;
61677:     }
61678:     assert( db->activeVdbeCnt>=db->writeVdbeCnt );
61679:   }
61680:   p->magic = VDBE_MAGIC_HALT;
61681:   checkActiveVdbeCnt(db);
61682:   if( p->db->mallocFailed ){
61683:     p->rc = SQLITE_NOMEM;
61684:   }
61685: 
61686:   /* If the auto-commit flag is set to true, then any locks that were held
61687:   ** by connection db have now been released. Call sqlite3ConnectionUnlocked() 
61688:   ** to invoke any required unlock-notify callbacks.
61689:   */
61690:   if( db->autoCommit ){
61691:     sqlite3ConnectionUnlocked(db);
61692:   }
61693: 
61694:   assert( db->activeVdbeCnt>0 || db->autoCommit==0 || db->nStatement==0 );
61695:   return (p->rc==SQLITE_BUSY ? SQLITE_BUSY : SQLITE_OK);
61696: }
61697: 
61698: 
61699: /*
61700: ** Each VDBE holds the result of the most recent sqlite3_step() call
61701: ** in p->rc.  This routine sets that result back to SQLITE_OK.
61702: */
61703: SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe *p){
61704:   p->rc = SQLITE_OK;
61705: }
61706: 
61707: /*
61708: ** Copy the error code and error message belonging to the VDBE passed
61709: ** as the first argument to its database handle (so that they will be 
61710: ** returned by calls to sqlite3_errcode() and sqlite3_errmsg()).
61711: **
61712: ** This function does not clear the VDBE error code or message, just
61713: ** copies them to the database handle.
61714: */
61715: SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p){
61716:   sqlite3 *db = p->db;
61717:   int rc = p->rc;
61718:   if( p->zErrMsg ){
61719:     u8 mallocFailed = db->mallocFailed;
61720:     sqlite3BeginBenignMalloc();
61721:     sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT);
61722:     sqlite3EndBenignMalloc();
61723:     db->mallocFailed = mallocFailed;
61724:     db->errCode = rc;
61725:   }else{
61726:     sqlite3Error(db, rc, 0);
61727:   }
61728:   return rc;
61729: }
61730: 
61731: /*
61732: ** Clean up a VDBE after execution but do not delete the VDBE just yet.
61733: ** Write any error messages into *pzErrMsg.  Return the result code.
61734: **
61735: ** After this routine is run, the VDBE should be ready to be executed
61736: ** again.
61737: **
61738: ** To look at it another way, this routine resets the state of the
61739: ** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to
61740: ** VDBE_MAGIC_INIT.
61741: */
61742: SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
61743:   sqlite3 *db;
61744:   db = p->db;
61745: 
61746:   /* If the VM did not run to completion or if it encountered an
61747:   ** error, then it might not have been halted properly.  So halt
61748:   ** it now.
61749:   */
61750:   sqlite3VdbeHalt(p);
61751: 
61752:   /* If the VDBE has be run even partially, then transfer the error code
61753:   ** and error message from the VDBE into the main database structure.  But
61754:   ** if the VDBE has just been set to run but has not actually executed any
61755:   ** instructions yet, leave the main database error information unchanged.
61756:   */
61757:   if( p->pc>=0 ){
61758:     sqlite3VdbeTransferError(p);
61759:     sqlite3DbFree(db, p->zErrMsg);
61760:     p->zErrMsg = 0;
61761:     if( p->runOnlyOnce ) p->expired = 1;
61762:   }else if( p->rc && p->expired ){
61763:     /* The expired flag was set on the VDBE before the first call
61764:     ** to sqlite3_step(). For consistency (since sqlite3_step() was
61765:     ** called), set the database error in this case as well.
61766:     */
61767:     sqlite3Error(db, p->rc, 0);
61768:     sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT);
61769:     sqlite3DbFree(db, p->zErrMsg);
61770:     p->zErrMsg = 0;
61771:   }
61772: 
61773:   /* Reclaim all memory used by the VDBE
61774:   */
61775:   Cleanup(p);
61776: 
61777:   /* Save profiling information from this VDBE run.
61778:   */
61779: #ifdef VDBE_PROFILE
61780:   {
61781:     FILE *out = fopen("vdbe_profile.out", "a");
61782:     if( out ){
61783:       int i;
61784:       fprintf(out, "---- ");
61785:       for(i=0; i<p->nOp; i++){
61786:         fprintf(out, "%02x", p->aOp[i].opcode);
61787:       }
61788:       fprintf(out, "\n");
61789:       for(i=0; i<p->nOp; i++){
61790:         fprintf(out, "%6d %10lld %8lld ",
61791:            p->aOp[i].cnt,
61792:            p->aOp[i].cycles,
61793:            p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0
61794:         );
61795:         sqlite3VdbePrintOp(out, i, &p->aOp[i]);
61796:       }
61797:       fclose(out);
61798:     }
61799:   }
61800: #endif
61801:   p->magic = VDBE_MAGIC_INIT;
61802:   return p->rc & db->errMask;
61803: }
61804:  
61805: /*
61806: ** Clean up and delete a VDBE after execution.  Return an integer which is
61807: ** the result code.  Write any error message text into *pzErrMsg.
61808: */
61809: SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe *p){
61810:   int rc = SQLITE_OK;
61811:   if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){
61812:     rc = sqlite3VdbeReset(p);
61813:     assert( (rc & p->db->errMask)==rc );
61814:   }
61815:   sqlite3VdbeDelete(p);
61816:   return rc;
61817: }
61818: 
61819: /*
61820: ** Call the destructor for each auxdata entry in pVdbeFunc for which
61821: ** the corresponding bit in mask is clear.  Auxdata entries beyond 31
61822: ** are always destroyed.  To destroy all auxdata entries, call this
61823: ** routine with mask==0.
61824: */
61825: SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc *pVdbeFunc, int mask){
61826:   int i;
61827:   for(i=0; i<pVdbeFunc->nAux; i++){
61828:     struct AuxData *pAux = &pVdbeFunc->apAux[i];
61829:     if( (i>31 || !(mask&(((u32)1)<<i))) && pAux->pAux ){
61830:       if( pAux->xDelete ){
61831:         pAux->xDelete(pAux->pAux);
61832:       }
61833:       pAux->pAux = 0;
61834:     }
61835:   }
61836: }
61837: 
61838: /*
61839: ** Free all memory associated with the Vdbe passed as the second argument.
61840: ** The difference between this function and sqlite3VdbeDelete() is that
61841: ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with
61842: ** the database connection.
61843: */
61844: SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3 *db, Vdbe *p){
61845:   SubProgram *pSub, *pNext;
61846:   int i;
61847:   assert( p->db==0 || p->db==db );
61848:   releaseMemArray(p->aVar, p->nVar);
61849:   releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
61850:   for(pSub=p->pProgram; pSub; pSub=pNext){
61851:     pNext = pSub->pNext;
61852:     vdbeFreeOpArray(db, pSub->aOp, pSub->nOp);
61853:     sqlite3DbFree(db, pSub);
61854:   }
61855:   for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]);
61856:   vdbeFreeOpArray(db, p->aOp, p->nOp);
61857:   sqlite3DbFree(db, p->aLabel);
61858:   sqlite3DbFree(db, p->aColName);
61859:   sqlite3DbFree(db, p->zSql);
61860:   sqlite3DbFree(db, p->pFree);
61861: #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
61862:   sqlite3DbFree(db, p->zExplain);
61863:   sqlite3DbFree(db, p->pExplain);
61864: #endif
61865:   sqlite3DbFree(db, p);
61866: }
61867: 
61868: /*
61869: ** Delete an entire VDBE.
61870: */
61871: SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
61872:   sqlite3 *db;
61873: 
61874:   if( NEVER(p==0) ) return;
61875:   db = p->db;
61876:   if( p->pPrev ){
61877:     p->pPrev->pNext = p->pNext;
61878:   }else{
61879:     assert( db->pVdbe==p );
61880:     db->pVdbe = p->pNext;
61881:   }
61882:   if( p->pNext ){
61883:     p->pNext->pPrev = p->pPrev;
61884:   }
61885:   p->magic = VDBE_MAGIC_DEAD;
61886:   p->db = 0;
61887:   sqlite3VdbeDeleteObject(db, p);
61888: }
61889: 
61890: /*
61891: ** Make sure the cursor p is ready to read or write the row to which it
61892: ** was last positioned.  Return an error code if an OOM fault or I/O error
61893: ** prevents us from positioning the cursor to its correct position.
61894: **
61895: ** If a MoveTo operation is pending on the given cursor, then do that
61896: ** MoveTo now.  If no move is pending, check to see if the row has been
61897: ** deleted out from under the cursor and if it has, mark the row as
61898: ** a NULL row.
61899: **
61900: ** If the cursor is already pointing to the correct row and that row has
61901: ** not been deleted out from under the cursor, then this routine is a no-op.
61902: */
61903: SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor *p){
61904:   if( p->deferredMoveto ){
61905:     int res, rc;
61906: #ifdef SQLITE_TEST
61907:     extern int sqlite3_search_count;
61908: #endif
61909:     assert( p->isTable );
61910:     rc = sqlite3BtreeMovetoUnpacked(p->pCursor, 0, p->movetoTarget, 0, &res);
61911:     if( rc ) return rc;
61912:     p->lastRowid = p->movetoTarget;
61913:     if( res!=0 ) return SQLITE_CORRUPT_BKPT;
61914:     p->rowidIsValid = 1;
61915: #ifdef SQLITE_TEST
61916:     sqlite3_search_count++;
61917: #endif
61918:     p->deferredMoveto = 0;
61919:     p->cacheStatus = CACHE_STALE;
61920:   }else if( ALWAYS(p->pCursor) ){
61921:     int hasMoved;
61922:     int rc = sqlite3BtreeCursorHasMoved(p->pCursor, &hasMoved);
61923:     if( rc ) return rc;
61924:     if( hasMoved ){
61925:       p->cacheStatus = CACHE_STALE;
61926:       p->nullRow = 1;
61927:     }
61928:   }
61929:   return SQLITE_OK;
61930: }
61931: 
61932: /*
61933: ** The following functions:
61934: **
61935: ** sqlite3VdbeSerialType()
61936: ** sqlite3VdbeSerialTypeLen()
61937: ** sqlite3VdbeSerialLen()
61938: ** sqlite3VdbeSerialPut()
61939: ** sqlite3VdbeSerialGet()
61940: **
61941: ** encapsulate the code that serializes values for storage in SQLite
61942: ** data and index records. Each serialized value consists of a
61943: ** 'serial-type' and a blob of data. The serial type is an 8-byte unsigned
61944: ** integer, stored as a varint.
61945: **
61946: ** In an SQLite index record, the serial type is stored directly before
61947: ** the blob of data that it corresponds to. In a table record, all serial
61948: ** types are stored at the start of the record, and the blobs of data at
61949: ** the end. Hence these functions allow the caller to handle the
61950: ** serial-type and data blob seperately.
61951: **
61952: ** The following table describes the various storage classes for data:
61953: **
61954: **   serial type        bytes of data      type
61955: **   --------------     ---------------    ---------------
61956: **      0                     0            NULL
61957: **      1                     1            signed integer
61958: **      2                     2            signed integer
61959: **      3                     3            signed integer
61960: **      4                     4            signed integer
61961: **      5                     6            signed integer
61962: **      6                     8            signed integer
61963: **      7                     8            IEEE float
61964: **      8                     0            Integer constant 0
61965: **      9                     0            Integer constant 1
61966: **     10,11                               reserved for expansion
61967: **    N>=12 and even       (N-12)/2        BLOB
61968: **    N>=13 and odd        (N-13)/2        text
61969: **
61970: ** The 8 and 9 types were added in 3.3.0, file format 4.  Prior versions
61971: ** of SQLite will not understand those serial types.
61972: */
61973: 
61974: /*
61975: ** Return the serial-type for the value stored in pMem.
61976: */
61977: SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){
61978:   int flags = pMem->flags;
61979:   int n;
61980: 
61981:   if( flags&MEM_Null ){
61982:     return 0;
61983:   }
61984:   if( flags&MEM_Int ){
61985:     /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
61986: #   define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
61987:     i64 i = pMem->u.i;
61988:     u64 u;
61989:     if( file_format>=4 && (i&1)==i ){
61990:       return 8+(u32)i;
61991:     }
61992:     if( i<0 ){
61993:       if( i<(-MAX_6BYTE) ) return 6;
61994:       /* Previous test prevents:  u = -(-9223372036854775808) */
61995:       u = -i;
61996:     }else{
61997:       u = i;
61998:     }
61999:     if( u<=127 ) return 1;
62000:     if( u<=32767 ) return 2;
62001:     if( u<=8388607 ) return 3;
62002:     if( u<=2147483647 ) return 4;
62003:     if( u<=MAX_6BYTE ) return 5;
62004:     return 6;
62005:   }
62006:   if( flags&MEM_Real ){
62007:     return 7;
62008:   }
62009:   assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) );
62010:   n = pMem->n;
62011:   if( flags & MEM_Zero ){
62012:     n += pMem->u.nZero;
62013:   }
62014:   assert( n>=0 );
62015:   return ((n*2) + 12 + ((flags&MEM_Str)!=0));
62016: }
62017: 
62018: /*
62019: ** Return the length of the data corresponding to the supplied serial-type.
62020: */
62021: SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32 serial_type){
62022:   if( serial_type>=12 ){
62023:     return (serial_type-12)/2;
62024:   }else{
62025:     static const u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 };
62026:     return aSize[serial_type];
62027:   }
62028: }
62029: 
62030: /*
62031: ** If we are on an architecture with mixed-endian floating 
62032: ** points (ex: ARM7) then swap the lower 4 bytes with the 
62033: ** upper 4 bytes.  Return the result.
62034: **
62035: ** For most architectures, this is a no-op.
62036: **
62037: ** (later):  It is reported to me that the mixed-endian problem
62038: ** on ARM7 is an issue with GCC, not with the ARM7 chip.  It seems
62039: ** that early versions of GCC stored the two words of a 64-bit
62040: ** float in the wrong order.  And that error has been propagated
62041: ** ever since.  The blame is not necessarily with GCC, though.
62042: ** GCC might have just copying the problem from a prior compiler.
62043: ** I am also told that newer versions of GCC that follow a different
62044: ** ABI get the byte order right.
62045: **
62046: ** Developers using SQLite on an ARM7 should compile and run their
62047: ** application using -DSQLITE_DEBUG=1 at least once.  With DEBUG
62048: ** enabled, some asserts below will ensure that the byte order of
62049: ** floating point values is correct.
62050: **
62051: ** (2007-08-30)  Frank van Vugt has studied this problem closely
62052: ** and has send his findings to the SQLite developers.  Frank
62053: ** writes that some Linux kernels offer floating point hardware
62054: ** emulation that uses only 32-bit mantissas instead of a full 
62055: ** 48-bits as required by the IEEE standard.  (This is the
62056: ** CONFIG_FPE_FASTFPE option.)  On such systems, floating point
62057: ** byte swapping becomes very complicated.  To avoid problems,
62058: ** the necessary byte swapping is carried out using a 64-bit integer
62059: ** rather than a 64-bit float.  Frank assures us that the code here
62060: ** works for him.  We, the developers, have no way to independently
62061: ** verify this, but Frank seems to know what he is talking about
62062: ** so we trust him.
62063: */
62064: #ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
62065: static u64 floatSwap(u64 in){
62066:   union {
62067:     u64 r;
62068:     u32 i[2];
62069:   } u;
62070:   u32 t;
62071: 
62072:   u.r = in;
62073:   t = u.i[0];
62074:   u.i[0] = u.i[1];
62075:   u.i[1] = t;
62076:   return u.r;
62077: }
62078: # define swapMixedEndianFloat(X)  X = floatSwap(X)
62079: #else
62080: # define swapMixedEndianFloat(X)
62081: #endif
62082: 
62083: /*
62084: ** Write the serialized data blob for the value stored in pMem into 
62085: ** buf. It is assumed that the caller has allocated sufficient space.
62086: ** Return the number of bytes written.
62087: **
62088: ** nBuf is the amount of space left in buf[].  nBuf must always be
62089: ** large enough to hold the entire field.  Except, if the field is
62090: ** a blob with a zero-filled tail, then buf[] might be just the right
62091: ** size to hold everything except for the zero-filled tail.  If buf[]
62092: ** is only big enough to hold the non-zero prefix, then only write that
62093: ** prefix into buf[].  But if buf[] is large enough to hold both the
62094: ** prefix and the tail then write the prefix and set the tail to all
62095: ** zeros.
62096: **
62097: ** Return the number of bytes actually written into buf[].  The number
62098: ** of bytes in the zero-filled tail is included in the return value only
62099: ** if those bytes were zeroed in buf[].
62100: */ 
62101: SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_format){
62102:   u32 serial_type = sqlite3VdbeSerialType(pMem, file_format);
62103:   u32 len;
62104: 
62105:   /* Integer and Real */
62106:   if( serial_type<=7 && serial_type>0 ){
62107:     u64 v;
62108:     u32 i;
62109:     if( serial_type==7 ){
62110:       assert( sizeof(v)==sizeof(pMem->r) );
62111:       memcpy(&v, &pMem->r, sizeof(v));
62112:       swapMixedEndianFloat(v);
62113:     }else{
62114:       v = pMem->u.i;
62115:     }
62116:     len = i = sqlite3VdbeSerialTypeLen(serial_type);
62117:     assert( len<=(u32)nBuf );
62118:     while( i-- ){
62119:       buf[i] = (u8)(v&0xFF);
62120:       v >>= 8;
62121:     }
62122:     return len;
62123:   }
62124: 
62125:   /* String or blob */
62126:   if( serial_type>=12 ){
62127:     assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.nZero:0)
62128:              == (int)sqlite3VdbeSerialTypeLen(serial_type) );
62129:     assert( pMem->n<=nBuf );
62130:     len = pMem->n;
62131:     memcpy(buf, pMem->z, len);
62132:     if( pMem->flags & MEM_Zero ){
62133:       len += pMem->u.nZero;
62134:       assert( nBuf>=0 );
62135:       if( len > (u32)nBuf ){
62136:         len = (u32)nBuf;
62137:       }
62138:       memset(&buf[pMem->n], 0, len-pMem->n);
62139:     }
62140:     return len;
62141:   }
62142: 
62143:   /* NULL or constants 0 or 1 */
62144:   return 0;
62145: }
62146: 
62147: /*
62148: ** Deserialize the data blob pointed to by buf as serial type serial_type
62149: ** and store the result in pMem.  Return the number of bytes read.
62150: */ 
62151: SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(
62152:   const unsigned char *buf,     /* Buffer to deserialize from */
62153:   u32 serial_type,              /* Serial type to deserialize */
62154:   Mem *pMem                     /* Memory cell to write value into */
62155: ){
62156:   switch( serial_type ){
62157:     case 10:   /* Reserved for future use */
62158:     case 11:   /* Reserved for future use */
62159:     case 0: {  /* NULL */
62160:       pMem->flags = MEM_Null;
62161:       break;
62162:     }
62163:     case 1: { /* 1-byte signed integer */
62164:       pMem->u.i = (signed char)buf[0];
62165:       pMem->flags = MEM_Int;
62166:       return 1;
62167:     }
62168:     case 2: { /* 2-byte signed integer */
62169:       pMem->u.i = (((signed char)buf[0])<<8) | buf[1];
62170:       pMem->flags = MEM_Int;
62171:       return 2;
62172:     }
62173:     case 3: { /* 3-byte signed integer */
62174:       pMem->u.i = (((signed char)buf[0])<<16) | (buf[1]<<8) | buf[2];
62175:       pMem->flags = MEM_Int;
62176:       return 3;
62177:     }
62178:     case 4: { /* 4-byte signed integer */
62179:       pMem->u.i = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
62180:       pMem->flags = MEM_Int;
62181:       return 4;
62182:     }
62183:     case 5: { /* 6-byte signed integer */
62184:       u64 x = (((signed char)buf[0])<<8) | buf[1];
62185:       u32 y = (buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5];
62186:       x = (x<<32) | y;
62187:       pMem->u.i = *(i64*)&x;
62188:       pMem->flags = MEM_Int;
62189:       return 6;
62190:     }
62191:     case 6:   /* 8-byte signed integer */
62192:     case 7: { /* IEEE floating point */
62193:       u64 x;
62194:       u32 y;
62195: #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
62196:       /* Verify that integers and floating point values use the same
62197:       ** byte order.  Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
62198:       ** defined that 64-bit floating point values really are mixed
62199:       ** endian.
62200:       */
62201:       static const u64 t1 = ((u64)0x3ff00000)<<32;
62202:       static const double r1 = 1.0;
62203:       u64 t2 = t1;
62204:       swapMixedEndianFloat(t2);
62205:       assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 );
62206: #endif
62207: 
62208:       x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
62209:       y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7];
62210:       x = (x<<32) | y;
62211:       if( serial_type==6 ){
62212:         pMem->u.i = *(i64*)&x;
62213:         pMem->flags = MEM_Int;
62214:       }else{
62215:         assert( sizeof(x)==8 && sizeof(pMem->r)==8 );
62216:         swapMixedEndianFloat(x);
62217:         memcpy(&pMem->r, &x, sizeof(x));
62218:         pMem->flags = sqlite3IsNaN(pMem->r) ? MEM_Null : MEM_Real;
62219:       }
62220:       return 8;
62221:     }
62222:     case 8:    /* Integer 0 */
62223:     case 9: {  /* Integer 1 */
62224:       pMem->u.i = serial_type-8;
62225:       pMem->flags = MEM_Int;
62226:       return 0;
62227:     }
62228:     default: {
62229:       u32 len = (serial_type-12)/2;
62230:       pMem->z = (char *)buf;
62231:       pMem->n = len;
62232:       pMem->xDel = 0;
62233:       if( serial_type&0x01 ){
62234:         pMem->flags = MEM_Str | MEM_Ephem;
62235:       }else{
62236:         pMem->flags = MEM_Blob | MEM_Ephem;
62237:       }
62238:       return len;
62239:     }
62240:   }
62241:   return 0;
62242: }
62243: 
62244: /*
62245: ** This routine is used to allocate sufficient space for an UnpackedRecord
62246: ** structure large enough to be used with sqlite3VdbeRecordUnpack() if
62247: ** the first argument is a pointer to KeyInfo structure pKeyInfo.
62248: **
62249: ** The space is either allocated using sqlite3DbMallocRaw() or from within
62250: ** the unaligned buffer passed via the second and third arguments (presumably
62251: ** stack space). If the former, then *ppFree is set to a pointer that should
62252: ** be eventually freed by the caller using sqlite3DbFree(). Or, if the 
62253: ** allocation comes from the pSpace/szSpace buffer, *ppFree is set to NULL
62254: ** before returning.
62255: **
62256: ** If an OOM error occurs, NULL is returned.
62257: */
62258: SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(
62259:   KeyInfo *pKeyInfo,              /* Description of the record */
62260:   char *pSpace,                   /* Unaligned space available */
62261:   int szSpace,                    /* Size of pSpace[] in bytes */
62262:   char **ppFree                   /* OUT: Caller should free this pointer */
62263: ){
62264:   UnpackedRecord *p;              /* Unpacked record to return */
62265:   int nOff;                       /* Increment pSpace by nOff to align it */
62266:   int nByte;                      /* Number of bytes required for *p */
62267: 
62268:   /* We want to shift the pointer pSpace up such that it is 8-byte aligned.
62269:   ** Thus, we need to calculate a value, nOff, between 0 and 7, to shift 
62270:   ** it by.  If pSpace is already 8-byte aligned, nOff should be zero.
62271:   */
62272:   nOff = (8 - (SQLITE_PTR_TO_INT(pSpace) & 7)) & 7;
62273:   nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nField+1);
62274:   if( nByte>szSpace+nOff ){
62275:     p = (UnpackedRecord *)sqlite3DbMallocRaw(pKeyInfo->db, nByte);
62276:     *ppFree = (char *)p;
62277:     if( !p ) return 0;
62278:   }else{
62279:     p = (UnpackedRecord*)&pSpace[nOff];
62280:     *ppFree = 0;
62281:   }
62282: 
62283:   p->aMem = (Mem*)&((char*)p)[ROUND8(sizeof(UnpackedRecord))];
62284:   p->pKeyInfo = pKeyInfo;
62285:   p->nField = pKeyInfo->nField + 1;
62286:   return p;
62287: }
62288: 
62289: /*
62290: ** Given the nKey-byte encoding of a record in pKey[], populate the 
62291: ** UnpackedRecord structure indicated by the fourth argument with the
62292: ** contents of the decoded record.
62293: */ 
62294: SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(
62295:   KeyInfo *pKeyInfo,     /* Information about the record format */
62296:   int nKey,              /* Size of the binary record */
62297:   const void *pKey,      /* The binary record */
62298:   UnpackedRecord *p      /* Populate this structure before returning. */
62299: ){
62300:   const unsigned char *aKey = (const unsigned char *)pKey;
62301:   int d; 
62302:   u32 idx;                        /* Offset in aKey[] to read from */
62303:   u16 u;                          /* Unsigned loop counter */
62304:   u32 szHdr;
62305:   Mem *pMem = p->aMem;
62306: 
62307:   p->flags = 0;
62308:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
62309:   idx = getVarint32(aKey, szHdr);
62310:   d = szHdr;
62311:   u = 0;
62312:   while( idx<szHdr && u<p->nField && d<=nKey ){
62313:     u32 serial_type;
62314: 
62315:     idx += getVarint32(&aKey[idx], serial_type);
62316:     pMem->enc = pKeyInfo->enc;
62317:     pMem->db = pKeyInfo->db;
62318:     /* pMem->flags = 0; // sqlite3VdbeSerialGet() will set this for us */
62319:     pMem->zMalloc = 0;
62320:     d += sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem);
62321:     pMem++;
62322:     u++;
62323:   }
62324:   assert( u<=pKeyInfo->nField + 1 );
62325:   p->nField = u;
62326: }
62327: 
62328: /*
62329: ** This function compares the two table rows or index records
62330: ** specified by {nKey1, pKey1} and pPKey2.  It returns a negative, zero
62331: ** or positive integer if key1 is less than, equal to or 
62332: ** greater than key2.  The {nKey1, pKey1} key must be a blob
62333: ** created by th OP_MakeRecord opcode of the VDBE.  The pPKey2
62334: ** key must be a parsed key such as obtained from
62335: ** sqlite3VdbeParseRecord.
62336: **
62337: ** Key1 and Key2 do not have to contain the same number of fields.
62338: ** The key with fewer fields is usually compares less than the 
62339: ** longer key.  However if the UNPACKED_INCRKEY flags in pPKey2 is set
62340: ** and the common prefixes are equal, then key1 is less than key2.
62341: ** Or if the UNPACKED_MATCH_PREFIX flag is set and the prefixes are
62342: ** equal, then the keys are considered to be equal and
62343: ** the parts beyond the common prefix are ignored.
62344: */
62345: SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
62346:   int nKey1, const void *pKey1, /* Left key */
62347:   UnpackedRecord *pPKey2        /* Right key */
62348: ){
62349:   int d1;            /* Offset into aKey[] of next data element */
62350:   u32 idx1;          /* Offset into aKey[] of next header element */
62351:   u32 szHdr1;        /* Number of bytes in header */
62352:   int i = 0;
62353:   int nField;
62354:   int rc = 0;
62355:   const unsigned char *aKey1 = (const unsigned char *)pKey1;
62356:   KeyInfo *pKeyInfo;
62357:   Mem mem1;
62358: 
62359:   pKeyInfo = pPKey2->pKeyInfo;
62360:   mem1.enc = pKeyInfo->enc;
62361:   mem1.db = pKeyInfo->db;
62362:   /* mem1.flags = 0;  // Will be initialized by sqlite3VdbeSerialGet() */
62363:   VVA_ONLY( mem1.zMalloc = 0; ) /* Only needed by assert() statements */
62364: 
62365:   /* Compilers may complain that mem1.u.i is potentially uninitialized.
62366:   ** We could initialize it, as shown here, to silence those complaints.
62367:   ** But in fact, mem1.u.i will never actually be used uninitialized, and doing 
62368:   ** the unnecessary initialization has a measurable negative performance
62369:   ** impact, since this routine is a very high runner.  And so, we choose
62370:   ** to ignore the compiler warnings and leave this variable uninitialized.
62371:   */
62372:   /*  mem1.u.i = 0;  // not needed, here to silence compiler warning */
62373:   
62374:   idx1 = getVarint32(aKey1, szHdr1);
62375:   d1 = szHdr1;
62376:   nField = pKeyInfo->nField;
62377:   while( idx1<szHdr1 && i<pPKey2->nField ){
62378:     u32 serial_type1;
62379: 
62380:     /* Read the serial types for the next element in each key. */
62381:     idx1 += getVarint32( aKey1+idx1, serial_type1 );
62382:     if( d1>=nKey1 && sqlite3VdbeSerialTypeLen(serial_type1)>0 ) break;
62383: 
62384:     /* Extract the values to be compared.
62385:     */
62386:     d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1);
62387: 
62388:     /* Do the comparison
62389:     */
62390:     rc = sqlite3MemCompare(&mem1, &pPKey2->aMem[i],
62391:                            i<nField ? pKeyInfo->aColl[i] : 0);
62392:     if( rc!=0 ){
62393:       assert( mem1.zMalloc==0 );  /* See comment below */
62394: 
62395:       /* Invert the result if we are using DESC sort order. */
62396:       if( pKeyInfo->aSortOrder && i<nField && pKeyInfo->aSortOrder[i] ){
62397:         rc = -rc;
62398:       }
62399:     
62400:       /* If the PREFIX_SEARCH flag is set and all fields except the final
62401:       ** rowid field were equal, then clear the PREFIX_SEARCH flag and set 
62402:       ** pPKey2->rowid to the value of the rowid field in (pKey1, nKey1).
62403:       ** This is used by the OP_IsUnique opcode.
62404:       */
62405:       if( (pPKey2->flags & UNPACKED_PREFIX_SEARCH) && i==(pPKey2->nField-1) ){
62406:         assert( idx1==szHdr1 && rc );
62407:         assert( mem1.flags & MEM_Int );
62408:         pPKey2->flags &= ~UNPACKED_PREFIX_SEARCH;
62409:         pPKey2->rowid = mem1.u.i;
62410:       }
62411:     
62412:       return rc;
62413:     }
62414:     i++;
62415:   }
62416: 
62417:   /* No memory allocation is ever used on mem1.  Prove this using
62418:   ** the following assert().  If the assert() fails, it indicates a
62419:   ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1).
62420:   */
62421:   assert( mem1.zMalloc==0 );
62422: 
62423:   /* rc==0 here means that one of the keys ran out of fields and
62424:   ** all the fields up to that point were equal. If the UNPACKED_INCRKEY
62425:   ** flag is set, then break the tie by treating key2 as larger.
62426:   ** If the UPACKED_PREFIX_MATCH flag is set, then keys with common prefixes
62427:   ** are considered to be equal.  Otherwise, the longer key is the 
62428:   ** larger.  As it happens, the pPKey2 will always be the longer
62429:   ** if there is a difference.
62430:   */
62431:   assert( rc==0 );
62432:   if( pPKey2->flags & UNPACKED_INCRKEY ){
62433:     rc = -1;
62434:   }else if( pPKey2->flags & UNPACKED_PREFIX_MATCH ){
62435:     /* Leave rc==0 */
62436:   }else if( idx1<szHdr1 ){
62437:     rc = 1;
62438:   }
62439:   return rc;
62440: }
62441:  
62442: 
62443: /*
62444: ** pCur points at an index entry created using the OP_MakeRecord opcode.
62445: ** Read the rowid (the last field in the record) and store it in *rowid.
62446: ** Return SQLITE_OK if everything works, or an error code otherwise.
62447: **
62448: ** pCur might be pointing to text obtained from a corrupt database file.
62449: ** So the content cannot be trusted.  Do appropriate checks on the content.
62450: */
62451: SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){
62452:   i64 nCellKey = 0;
62453:   int rc;
62454:   u32 szHdr;        /* Size of the header */
62455:   u32 typeRowid;    /* Serial type of the rowid */
62456:   u32 lenRowid;     /* Size of the rowid */
62457:   Mem m, v;
62458: 
62459:   UNUSED_PARAMETER(db);
62460: 
62461:   /* Get the size of the index entry.  Only indices entries of less
62462:   ** than 2GiB are support - anything large must be database corruption.
62463:   ** Any corruption is detected in sqlite3BtreeParseCellPtr(), though, so
62464:   ** this code can safely assume that nCellKey is 32-bits  
62465:   */
62466:   assert( sqlite3BtreeCursorIsValid(pCur) );
62467:   VVA_ONLY(rc =) sqlite3BtreeKeySize(pCur, &nCellKey);
62468:   assert( rc==SQLITE_OK );     /* pCur is always valid so KeySize cannot fail */
62469:   assert( (nCellKey & SQLITE_MAX_U32)==(u64)nCellKey );
62470: 
62471:   /* Read in the complete content of the index entry */
62472:   memset(&m, 0, sizeof(m));
62473:   rc = sqlite3VdbeMemFromBtree(pCur, 0, (int)nCellKey, 1, &m);
62474:   if( rc ){
62475:     return rc;
62476:   }
62477: 
62478:   /* The index entry must begin with a header size */
62479:   (void)getVarint32((u8*)m.z, szHdr);
62480:   testcase( szHdr==3 );
62481:   testcase( szHdr==m.n );
62482:   if( unlikely(szHdr<3 || (int)szHdr>m.n) ){
62483:     goto idx_rowid_corruption;
62484:   }
62485: 
62486:   /* The last field of the index should be an integer - the ROWID.
62487:   ** Verify that the last entry really is an integer. */
62488:   (void)getVarint32((u8*)&m.z[szHdr-1], typeRowid);
62489:   testcase( typeRowid==1 );
62490:   testcase( typeRowid==2 );
62491:   testcase( typeRowid==3 );
62492:   testcase( typeRowid==4 );
62493:   testcase( typeRowid==5 );
62494:   testcase( typeRowid==6 );
62495:   testcase( typeRowid==8 );
62496:   testcase( typeRowid==9 );
62497:   if( unlikely(typeRowid<1 || typeRowid>9 || typeRowid==7) ){
62498:     goto idx_rowid_corruption;
62499:   }
62500:   lenRowid = sqlite3VdbeSerialTypeLen(typeRowid);
62501:   testcase( (u32)m.n==szHdr+lenRowid );
62502:   if( unlikely((u32)m.n<szHdr+lenRowid) ){
62503:     goto idx_rowid_corruption;
62504:   }
62505: 
62506:   /* Fetch the integer off the end of the index record */
62507:   sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v);
62508:   *rowid = v.u.i;
62509:   sqlite3VdbeMemRelease(&m);
62510:   return SQLITE_OK;
62511: 
62512:   /* Jump here if database corruption is detected after m has been
62513:   ** allocated.  Free the m object and return SQLITE_CORRUPT. */
62514: idx_rowid_corruption:
62515:   testcase( m.zMalloc!=0 );
62516:   sqlite3VdbeMemRelease(&m);
62517:   return SQLITE_CORRUPT_BKPT;
62518: }
62519: 
62520: /*
62521: ** Compare the key of the index entry that cursor pC is pointing to against
62522: ** the key string in pUnpacked.  Write into *pRes a number
62523: ** that is negative, zero, or positive if pC is less than, equal to,
62524: ** or greater than pUnpacked.  Return SQLITE_OK on success.
62525: **
62526: ** pUnpacked is either created without a rowid or is truncated so that it
62527: ** omits the rowid at the end.  The rowid at the end of the index entry
62528: ** is ignored as well.  Hence, this routine only compares the prefixes 
62529: ** of the keys prior to the final rowid, not the entire key.
62530: */
62531: SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(
62532:   VdbeCursor *pC,             /* The cursor to compare against */
62533:   UnpackedRecord *pUnpacked,  /* Unpacked version of key to compare against */
62534:   int *res                    /* Write the comparison result here */
62535: ){
62536:   i64 nCellKey = 0;
62537:   int rc;
62538:   BtCursor *pCur = pC->pCursor;
62539:   Mem m;
62540: 
62541:   assert( sqlite3BtreeCursorIsValid(pCur) );
62542:   VVA_ONLY(rc =) sqlite3BtreeKeySize(pCur, &nCellKey);
62543:   assert( rc==SQLITE_OK );    /* pCur is always valid so KeySize cannot fail */
62544:   /* nCellKey will always be between 0 and 0xffffffff because of the say
62545:   ** that btreeParseCellPtr() and sqlite3GetVarint32() are implemented */
62546:   if( nCellKey<=0 || nCellKey>0x7fffffff ){
62547:     *res = 0;
62548:     return SQLITE_CORRUPT_BKPT;
62549:   }
62550:   memset(&m, 0, sizeof(m));
62551:   rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, (int)nCellKey, 1, &m);
62552:   if( rc ){
62553:     return rc;
62554:   }
62555:   assert( pUnpacked->flags & UNPACKED_PREFIX_MATCH );
62556:   *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked);
62557:   sqlite3VdbeMemRelease(&m);
62558:   return SQLITE_OK;
62559: }
62560: 
62561: /*
62562: ** This routine sets the value to be returned by subsequent calls to
62563: ** sqlite3_changes() on the database handle 'db'. 
62564: */
62565: SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){
62566:   assert( sqlite3_mutex_held(db->mutex) );
62567:   db->nChange = nChange;
62568:   db->nTotalChange += nChange;
62569: }
62570: 
62571: /*
62572: ** Set a flag in the vdbe to update the change counter when it is finalised
62573: ** or reset.
62574: */
62575: SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe *v){
62576:   v->changeCntOn = 1;
62577: }
62578: 
62579: /*
62580: ** Mark every prepared statement associated with a database connection
62581: ** as expired.
62582: **
62583: ** An expired statement means that recompilation of the statement is
62584: ** recommend.  Statements expire when things happen that make their
62585: ** programs obsolete.  Removing user-defined functions or collating
62586: ** sequences, or changing an authorization function are the types of
62587: ** things that make prepared statements obsolete.
62588: */
62589: SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db){
62590:   Vdbe *p;
62591:   for(p = db->pVdbe; p; p=p->pNext){
62592:     p->expired = 1;
62593:   }
62594: }
62595: 
62596: /*
62597: ** Return the database associated with the Vdbe.
62598: */
62599: SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe *v){
62600:   return v->db;
62601: }
62602: 
62603: /*
62604: ** Return a pointer to an sqlite3_value structure containing the value bound
62605: ** parameter iVar of VM v. Except, if the value is an SQL NULL, return 
62606: ** 0 instead. Unless it is NULL, apply affinity aff (one of the SQLITE_AFF_*
62607: ** constants) to the value before returning it.
62608: **
62609: ** The returned value must be freed by the caller using sqlite3ValueFree().
62610: */
62611: SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe *v, int iVar, u8 aff){
62612:   assert( iVar>0 );
62613:   if( v ){
62614:     Mem *pMem = &v->aVar[iVar-1];
62615:     if( 0==(pMem->flags & MEM_Null) ){
62616:       sqlite3_value *pRet = sqlite3ValueNew(v->db);
62617:       if( pRet ){
62618:         sqlite3VdbeMemCopy((Mem *)pRet, pMem);
62619:         sqlite3ValueApplyAffinity(pRet, aff, SQLITE_UTF8);
62620:         sqlite3VdbeMemStoreType((Mem *)pRet);
62621:       }
62622:       return pRet;
62623:     }
62624:   }
62625:   return 0;
62626: }
62627: 
62628: /*
62629: ** Configure SQL variable iVar so that binding a new value to it signals
62630: ** to sqlite3_reoptimize() that re-preparing the statement may result
62631: ** in a better query plan.
62632: */
62633: SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){
62634:   assert( iVar>0 );
62635:   if( iVar>32 ){
62636:     v->expmask = 0xffffffff;
62637:   }else{
62638:     v->expmask |= ((u32)1 << (iVar-1));
62639:   }
62640: }
62641: 
62642: /************** End of vdbeaux.c *********************************************/
62643: /************** Begin file vdbeapi.c *****************************************/
62644: /*
62645: ** 2004 May 26
62646: **
62647: ** The author disclaims copyright to this source code.  In place of
62648: ** a legal notice, here is a blessing:
62649: **
62650: **    May you do good and not evil.
62651: **    May you find forgiveness for yourself and forgive others.
62652: **    May you share freely, never taking more than you give.
62653: **
62654: *************************************************************************
62655: **
62656: ** This file contains code use to implement APIs that are part of the
62657: ** VDBE.
62658: */
62659: 
62660: #ifndef SQLITE_OMIT_DEPRECATED
62661: /*
62662: ** Return TRUE (non-zero) of the statement supplied as an argument needs
62663: ** to be recompiled.  A statement needs to be recompiled whenever the
62664: ** execution environment changes in a way that would alter the program
62665: ** that sqlite3_prepare() generates.  For example, if new functions or
62666: ** collating sequences are registered or if an authorizer function is
62667: ** added or changed.
62668: */
62669: SQLITE_API int sqlite3_expired(sqlite3_stmt *pStmt){
62670:   Vdbe *p = (Vdbe*)pStmt;
62671:   return p==0 || p->expired;
62672: }
62673: #endif
62674: 
62675: /*
62676: ** Check on a Vdbe to make sure it has not been finalized.  Log
62677: ** an error and return true if it has been finalized (or is otherwise
62678: ** invalid).  Return false if it is ok.
62679: */
62680: static int vdbeSafety(Vdbe *p){
62681:   if( p->db==0 ){
62682:     sqlite3_log(SQLITE_MISUSE, "API called with finalized prepared statement");
62683:     return 1;
62684:   }else{
62685:     return 0;
62686:   }
62687: }
62688: static int vdbeSafetyNotNull(Vdbe *p){
62689:   if( p==0 ){
62690:     sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement");
62691:     return 1;
62692:   }else{
62693:     return vdbeSafety(p);
62694:   }
62695: }
62696: 
62697: /*
62698: ** The following routine destroys a virtual machine that is created by
62699: ** the sqlite3_compile() routine. The integer returned is an SQLITE_
62700: ** success/failure code that describes the result of executing the virtual
62701: ** machine.
62702: **
62703: ** This routine sets the error code and string returned by
62704: ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
62705: */
62706: SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt){
62707:   int rc;
62708:   if( pStmt==0 ){
62709:     /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
62710:     ** pointer is a harmless no-op. */
62711:     rc = SQLITE_OK;
62712:   }else{
62713:     Vdbe *v = (Vdbe*)pStmt;
62714:     sqlite3 *db = v->db;
62715: #if SQLITE_THREADSAFE
62716:     sqlite3_mutex *mutex;
62717: #endif
62718:     if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
62719: #if SQLITE_THREADSAFE
62720:     mutex = v->db->mutex;
62721: #endif
62722:     sqlite3_mutex_enter(mutex);
62723:     rc = sqlite3VdbeFinalize(v);
62724:     rc = sqlite3ApiExit(db, rc);
62725:     sqlite3_mutex_leave(mutex);
62726:   }
62727:   return rc;
62728: }
62729: 
62730: /*
62731: ** Terminate the current execution of an SQL statement and reset it
62732: ** back to its starting state so that it can be reused. A success code from
62733: ** the prior execution is returned.
62734: **
62735: ** This routine sets the error code and string returned by
62736: ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
62737: */
62738: SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt){
62739:   int rc;
62740:   if( pStmt==0 ){
62741:     rc = SQLITE_OK;
62742:   }else{
62743:     Vdbe *v = (Vdbe*)pStmt;
62744:     sqlite3_mutex_enter(v->db->mutex);
62745:     rc = sqlite3VdbeReset(v);
62746:     sqlite3VdbeRewind(v);
62747:     assert( (rc & (v->db->errMask))==rc );
62748:     rc = sqlite3ApiExit(v->db, rc);
62749:     sqlite3_mutex_leave(v->db->mutex);
62750:   }
62751:   return rc;
62752: }
62753: 
62754: /*
62755: ** Set all the parameters in the compiled SQL statement to NULL.
62756: */
62757: SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt *pStmt){
62758:   int i;
62759:   int rc = SQLITE_OK;
62760:   Vdbe *p = (Vdbe*)pStmt;
62761: #if SQLITE_THREADSAFE
62762:   sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex;
62763: #endif
62764:   sqlite3_mutex_enter(mutex);
62765:   for(i=0; i<p->nVar; i++){
62766:     sqlite3VdbeMemRelease(&p->aVar[i]);
62767:     p->aVar[i].flags = MEM_Null;
62768:   }
62769:   if( p->isPrepareV2 && p->expmask ){
62770:     p->expired = 1;
62771:   }
62772:   sqlite3_mutex_leave(mutex);
62773:   return rc;
62774: }
62775: 
62776: 
62777: /**************************** sqlite3_value_  *******************************
62778: ** The following routines extract information from a Mem or sqlite3_value
62779: ** structure.
62780: */
62781: SQLITE_API const void *sqlite3_value_blob(sqlite3_value *pVal){
62782:   Mem *p = (Mem*)pVal;
62783:   if( p->flags & (MEM_Blob|MEM_Str) ){
62784:     sqlite3VdbeMemExpandBlob(p);
62785:     p->flags &= ~MEM_Str;
62786:     p->flags |= MEM_Blob;
62787:     return p->n ? p->z : 0;
62788:   }else{
62789:     return sqlite3_value_text(pVal);
62790:   }
62791: }
62792: SQLITE_API int sqlite3_value_bytes(sqlite3_value *pVal){
62793:   return sqlite3ValueBytes(pVal, SQLITE_UTF8);
62794: }
62795: SQLITE_API int sqlite3_value_bytes16(sqlite3_value *pVal){
62796:   return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
62797: }
62798: SQLITE_API double sqlite3_value_double(sqlite3_value *pVal){
62799:   return sqlite3VdbeRealValue((Mem*)pVal);
62800: }
62801: SQLITE_API int sqlite3_value_int(sqlite3_value *pVal){
62802:   return (int)sqlite3VdbeIntValue((Mem*)pVal);
62803: }
62804: SQLITE_API sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
62805:   return sqlite3VdbeIntValue((Mem*)pVal);
62806: }
62807: SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
62808:   return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
62809: }
62810: #ifndef SQLITE_OMIT_UTF16
62811: SQLITE_API const void *sqlite3_value_text16(sqlite3_value* pVal){
62812:   return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
62813: }
62814: SQLITE_API const void *sqlite3_value_text16be(sqlite3_value *pVal){
62815:   return sqlite3ValueText(pVal, SQLITE_UTF16BE);
62816: }
62817: SQLITE_API const void *sqlite3_value_text16le(sqlite3_value *pVal){
62818:   return sqlite3ValueText(pVal, SQLITE_UTF16LE);
62819: }
62820: #endif /* SQLITE_OMIT_UTF16 */
62821: SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){
62822:   return pVal->type;
62823: }
62824: 
62825: /**************************** sqlite3_result_  *******************************
62826: ** The following routines are used by user-defined functions to specify
62827: ** the function result.
62828: **
62829: ** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the
62830: ** result as a string or blob but if the string or blob is too large, it
62831: ** then sets the error code to SQLITE_TOOBIG
62832: */
62833: static void setResultStrOrError(
62834:   sqlite3_context *pCtx,  /* Function context */
62835:   const char *z,          /* String pointer */
62836:   int n,                  /* Bytes in string, or negative */
62837:   u8 enc,                 /* Encoding of z.  0 for BLOBs */
62838:   void (*xDel)(void*)     /* Destructor function */
62839: ){
62840:   if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){
62841:     sqlite3_result_error_toobig(pCtx);
62842:   }
62843: }
62844: SQLITE_API void sqlite3_result_blob(
62845:   sqlite3_context *pCtx, 
62846:   const void *z, 
62847:   int n, 
62848:   void (*xDel)(void *)
62849: ){
62850:   assert( n>=0 );
62851:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62852:   setResultStrOrError(pCtx, z, n, 0, xDel);
62853: }
62854: SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
62855:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62856:   sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
62857: }
62858: SQLITE_API void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
62859:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62860:   pCtx->isError = SQLITE_ERROR;
62861:   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
62862: }
62863: #ifndef SQLITE_OMIT_UTF16
62864: SQLITE_API void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
62865:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62866:   pCtx->isError = SQLITE_ERROR;
62867:   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
62868: }
62869: #endif
62870: SQLITE_API void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
62871:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62872:   sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal);
62873: }
62874: SQLITE_API void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
62875:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62876:   sqlite3VdbeMemSetInt64(&pCtx->s, iVal);
62877: }
62878: SQLITE_API void sqlite3_result_null(sqlite3_context *pCtx){
62879:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62880:   sqlite3VdbeMemSetNull(&pCtx->s);
62881: }
62882: SQLITE_API void sqlite3_result_text(
62883:   sqlite3_context *pCtx, 
62884:   const char *z, 
62885:   int n,
62886:   void (*xDel)(void *)
62887: ){
62888:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62889:   setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
62890: }
62891: #ifndef SQLITE_OMIT_UTF16
62892: SQLITE_API void sqlite3_result_text16(
62893:   sqlite3_context *pCtx, 
62894:   const void *z, 
62895:   int n, 
62896:   void (*xDel)(void *)
62897: ){
62898:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62899:   setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
62900: }
62901: SQLITE_API void sqlite3_result_text16be(
62902:   sqlite3_context *pCtx, 
62903:   const void *z, 
62904:   int n, 
62905:   void (*xDel)(void *)
62906: ){
62907:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62908:   setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
62909: }
62910: SQLITE_API void sqlite3_result_text16le(
62911:   sqlite3_context *pCtx, 
62912:   const void *z, 
62913:   int n, 
62914:   void (*xDel)(void *)
62915: ){
62916:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62917:   setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
62918: }
62919: #endif /* SQLITE_OMIT_UTF16 */
62920: SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
62921:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62922:   sqlite3VdbeMemCopy(&pCtx->s, pValue);
62923: }
62924: SQLITE_API void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
62925:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62926:   sqlite3VdbeMemSetZeroBlob(&pCtx->s, n);
62927: }
62928: SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
62929:   pCtx->isError = errCode;
62930:   if( pCtx->s.flags & MEM_Null ){
62931:     sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1, 
62932:                          SQLITE_UTF8, SQLITE_STATIC);
62933:   }
62934: }
62935: 
62936: /* Force an SQLITE_TOOBIG error. */
62937: SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){
62938:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62939:   pCtx->isError = SQLITE_TOOBIG;
62940:   sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1, 
62941:                        SQLITE_UTF8, SQLITE_STATIC);
62942: }
62943: 
62944: /* An SQLITE_NOMEM error. */
62945: SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){
62946:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62947:   sqlite3VdbeMemSetNull(&pCtx->s);
62948:   pCtx->isError = SQLITE_NOMEM;
62949:   pCtx->s.db->mallocFailed = 1;
62950: }
62951: 
62952: /*
62953: ** This function is called after a transaction has been committed. It 
62954: ** invokes callbacks registered with sqlite3_wal_hook() as required.
62955: */
62956: static int doWalCallbacks(sqlite3 *db){
62957:   int rc = SQLITE_OK;
62958: #ifndef SQLITE_OMIT_WAL
62959:   int i;
62960:   for(i=0; i<db->nDb; i++){
62961:     Btree *pBt = db->aDb[i].pBt;
62962:     if( pBt ){
62963:       int nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
62964:       if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){
62965:         rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry);
62966:       }
62967:     }
62968:   }
62969: #endif
62970:   return rc;
62971: }
62972: 
62973: /*
62974: ** Execute the statement pStmt, either until a row of data is ready, the
62975: ** statement is completely executed or an error occurs.
62976: **
62977: ** This routine implements the bulk of the logic behind the sqlite_step()
62978: ** API.  The only thing omitted is the automatic recompile if a 
62979: ** schema change has occurred.  That detail is handled by the
62980: ** outer sqlite3_step() wrapper procedure.
62981: */
62982: static int sqlite3Step(Vdbe *p){
62983:   sqlite3 *db;
62984:   int rc;
62985: 
62986:   assert(p);
62987:   if( p->magic!=VDBE_MAGIC_RUN ){
62988:     /* We used to require that sqlite3_reset() be called before retrying
62989:     ** sqlite3_step() after any error or after SQLITE_DONE.  But beginning
62990:     ** with version 3.7.0, we changed this so that sqlite3_reset() would
62991:     ** be called automatically instead of throwing the SQLITE_MISUSE error.
62992:     ** This "automatic-reset" change is not technically an incompatibility, 
62993:     ** since any application that receives an SQLITE_MISUSE is broken by
62994:     ** definition.
62995:     **
62996:     ** Nevertheless, some published applications that were originally written
62997:     ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE 
62998:     ** returns, and those were broken by the automatic-reset change.  As a
62999:     ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the
63000:     ** legacy behavior of returning SQLITE_MISUSE for cases where the 
63001:     ** previous sqlite3_step() returned something other than a SQLITE_LOCKED
63002:     ** or SQLITE_BUSY error.
63003:     */
63004: #ifdef SQLITE_OMIT_AUTORESET
63005:     if( p->rc==SQLITE_BUSY || p->rc==SQLITE_LOCKED ){
63006:       sqlite3_reset((sqlite3_stmt*)p);
63007:     }else{
63008:       return SQLITE_MISUSE_BKPT;
63009:     }
63010: #else
63011:     sqlite3_reset((sqlite3_stmt*)p);
63012: #endif
63013:   }
63014: 
63015:   /* Check that malloc() has not failed. If it has, return early. */
63016:   db = p->db;
63017:   if( db->mallocFailed ){
63018:     p->rc = SQLITE_NOMEM;
63019:     return SQLITE_NOMEM;
63020:   }
63021: 
63022:   if( p->pc<=0 && p->expired ){
63023:     p->rc = SQLITE_SCHEMA;
63024:     rc = SQLITE_ERROR;
63025:     goto end_of_step;
63026:   }
63027:   if( p->pc<0 ){
63028:     /* If there are no other statements currently running, then
63029:     ** reset the interrupt flag.  This prevents a call to sqlite3_interrupt
63030:     ** from interrupting a statement that has not yet started.
63031:     */
63032:     if( db->activeVdbeCnt==0 ){
63033:       db->u1.isInterrupted = 0;
63034:     }
63035: 
63036:     assert( db->writeVdbeCnt>0 || db->autoCommit==0 || db->nDeferredCons==0 );
63037: 
63038: #ifndef SQLITE_OMIT_TRACE
63039:     if( db->xProfile && !db->init.busy ){
63040:       sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime);
63041:     }
63042: #endif
63043: 
63044:     db->activeVdbeCnt++;
63045:     if( p->readOnly==0 ) db->writeVdbeCnt++;
63046:     p->pc = 0;
63047:   }
63048: #ifndef SQLITE_OMIT_EXPLAIN
63049:   if( p->explain ){
63050:     rc = sqlite3VdbeList(p);
63051:   }else
63052: #endif /* SQLITE_OMIT_EXPLAIN */
63053:   {
63054:     db->vdbeExecCnt++;
63055:     rc = sqlite3VdbeExec(p);
63056:     db->vdbeExecCnt--;
63057:   }
63058: 
63059: #ifndef SQLITE_OMIT_TRACE
63060:   /* Invoke the profile callback if there is one
63061:   */
63062:   if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){
63063:     sqlite3_int64 iNow;
63064:     sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
63065:     db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000);
63066:   }
63067: #endif
63068: 
63069:   if( rc==SQLITE_DONE ){
63070:     assert( p->rc==SQLITE_OK );
63071:     p->rc = doWalCallbacks(db);
63072:     if( p->rc!=SQLITE_OK ){
63073:       rc = SQLITE_ERROR;
63074:     }
63075:   }
63076: 
63077:   db->errCode = rc;
63078:   if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){
63079:     p->rc = SQLITE_NOMEM;
63080:   }
63081: end_of_step:
63082:   /* At this point local variable rc holds the value that should be 
63083:   ** returned if this statement was compiled using the legacy 
63084:   ** sqlite3_prepare() interface. According to the docs, this can only
63085:   ** be one of the values in the first assert() below. Variable p->rc 
63086:   ** contains the value that would be returned if sqlite3_finalize() 
63087:   ** were called on statement p.
63088:   */
63089:   assert( rc==SQLITE_ROW  || rc==SQLITE_DONE   || rc==SQLITE_ERROR 
63090:        || rc==SQLITE_BUSY || rc==SQLITE_MISUSE
63091:   );
63092:   assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE );
63093:   if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){
63094:     /* If this statement was prepared using sqlite3_prepare_v2(), and an
63095:     ** error has occured, then return the error code in p->rc to the
63096:     ** caller. Set the error code in the database handle to the same value.
63097:     */ 
63098:     rc = sqlite3VdbeTransferError(p);
63099:   }
63100:   return (rc&db->errMask);
63101: }
63102: 
63103: /*
63104: ** The maximum number of times that a statement will try to reparse
63105: ** itself before giving up and returning SQLITE_SCHEMA.
63106: */
63107: #ifndef SQLITE_MAX_SCHEMA_RETRY
63108: # define SQLITE_MAX_SCHEMA_RETRY 5
63109: #endif
63110: 
63111: /*
63112: ** This is the top-level implementation of sqlite3_step().  Call
63113: ** sqlite3Step() to do most of the work.  If a schema error occurs,
63114: ** call sqlite3Reprepare() and try again.
63115: */
63116: SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){
63117:   int rc = SQLITE_OK;      /* Result from sqlite3Step() */
63118:   int rc2 = SQLITE_OK;     /* Result from sqlite3Reprepare() */
63119:   Vdbe *v = (Vdbe*)pStmt;  /* the prepared statement */
63120:   int cnt = 0;             /* Counter to prevent infinite loop of reprepares */
63121:   sqlite3 *db;             /* The database connection */
63122: 
63123:   if( vdbeSafetyNotNull(v) ){
63124:     return SQLITE_MISUSE_BKPT;
63125:   }
63126:   db = v->db;
63127:   sqlite3_mutex_enter(db->mutex);
63128:   while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
63129:          && cnt++ < SQLITE_MAX_SCHEMA_RETRY
63130:          && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){
63131:     sqlite3_reset(pStmt);
63132:     assert( v->expired==0 );
63133:   }
63134:   if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){
63135:     /* This case occurs after failing to recompile an sql statement. 
63136:     ** The error message from the SQL compiler has already been loaded 
63137:     ** into the database handle. This block copies the error message 
63138:     ** from the database handle into the statement and sets the statement
63139:     ** program counter to 0 to ensure that when the statement is 
63140:     ** finalized or reset the parser error message is available via
63141:     ** sqlite3_errmsg() and sqlite3_errcode().
63142:     */
63143:     const char *zErr = (const char *)sqlite3_value_text(db->pErr); 
63144:     sqlite3DbFree(db, v->zErrMsg);
63145:     if( !db->mallocFailed ){
63146:       v->zErrMsg = sqlite3DbStrDup(db, zErr);
63147:       v->rc = rc2;
63148:     } else {
63149:       v->zErrMsg = 0;
63150:       v->rc = rc = SQLITE_NOMEM;
63151:     }
63152:   }
63153:   rc = sqlite3ApiExit(db, rc);
63154:   sqlite3_mutex_leave(db->mutex);
63155:   return rc;
63156: }
63157: 
63158: /*
63159: ** Extract the user data from a sqlite3_context structure and return a
63160: ** pointer to it.
63161: */
63162: SQLITE_API void *sqlite3_user_data(sqlite3_context *p){
63163:   assert( p && p->pFunc );
63164:   return p->pFunc->pUserData;
63165: }
63166: 
63167: /*
63168: ** Extract the user data from a sqlite3_context structure and return a
63169: ** pointer to it.
63170: **
63171: ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface
63172: ** returns a copy of the pointer to the database connection (the 1st
63173: ** parameter) of the sqlite3_create_function() and
63174: ** sqlite3_create_function16() routines that originally registered the
63175: ** application defined function.
63176: */
63177: SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
63178:   assert( p && p->pFunc );
63179:   return p->s.db;
63180: }
63181: 
63182: /*
63183: ** The following is the implementation of an SQL function that always
63184: ** fails with an error message stating that the function is used in the
63185: ** wrong context.  The sqlite3_overload_function() API might construct
63186: ** SQL function that use this routine so that the functions will exist
63187: ** for name resolution but are actually overloaded by the xFindFunction
63188: ** method of virtual tables.
63189: */
63190: SQLITE_PRIVATE void sqlite3InvalidFunction(
63191:   sqlite3_context *context,  /* The function calling context */
63192:   int NotUsed,               /* Number of arguments to the function */
63193:   sqlite3_value **NotUsed2   /* Value of each argument */
63194: ){
63195:   const char *zName = context->pFunc->zName;
63196:   char *zErr;
63197:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
63198:   zErr = sqlite3_mprintf(
63199:       "unable to use function %s in the requested context", zName);
63200:   sqlite3_result_error(context, zErr, -1);
63201:   sqlite3_free(zErr);
63202: }
63203: 
63204: /*
63205: ** Allocate or return the aggregate context for a user function.  A new
63206: ** context is allocated on the first call.  Subsequent calls return the
63207: ** same context that was returned on prior calls.
63208: */
63209: SQLITE_API void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
63210:   Mem *pMem;
63211:   assert( p && p->pFunc && p->pFunc->xStep );
63212:   assert( sqlite3_mutex_held(p->s.db->mutex) );
63213:   pMem = p->pMem;
63214:   testcase( nByte<0 );
63215:   if( (pMem->flags & MEM_Agg)==0 ){
63216:     if( nByte<=0 ){
63217:       sqlite3VdbeMemReleaseExternal(pMem);
63218:       pMem->flags = MEM_Null;
63219:       pMem->z = 0;
63220:     }else{
63221:       sqlite3VdbeMemGrow(pMem, nByte, 0);
63222:       pMem->flags = MEM_Agg;
63223:       pMem->u.pDef = p->pFunc;
63224:       if( pMem->z ){
63225:         memset(pMem->z, 0, nByte);
63226:       }
63227:     }
63228:   }
63229:   return (void*)pMem->z;
63230: }
63231: 
63232: /*
63233: ** Return the auxilary data pointer, if any, for the iArg'th argument to
63234: ** the user-function defined by pCtx.
63235: */
63236: SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
63237:   VdbeFunc *pVdbeFunc;
63238: 
63239:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
63240:   pVdbeFunc = pCtx->pVdbeFunc;
63241:   if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
63242:     return 0;
63243:   }
63244:   return pVdbeFunc->apAux[iArg].pAux;
63245: }
63246: 
63247: /*
63248: ** Set the auxilary data pointer and delete function, for the iArg'th
63249: ** argument to the user-function defined by pCtx. Any previous value is
63250: ** deleted by calling the delete function specified when it was set.
63251: */
63252: SQLITE_API void sqlite3_set_auxdata(
63253:   sqlite3_context *pCtx, 
63254:   int iArg, 
63255:   void *pAux, 
63256:   void (*xDelete)(void*)
63257: ){
63258:   struct AuxData *pAuxData;
63259:   VdbeFunc *pVdbeFunc;
63260:   if( iArg<0 ) goto failed;
63261: 
63262:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
63263:   pVdbeFunc = pCtx->pVdbeFunc;
63264:   if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
63265:     int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0);
63266:     int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
63267:     pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc);
63268:     if( !pVdbeFunc ){
63269:       goto failed;
63270:     }
63271:     pCtx->pVdbeFunc = pVdbeFunc;
63272:     memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux));
63273:     pVdbeFunc->nAux = iArg+1;
63274:     pVdbeFunc->pFunc = pCtx->pFunc;
63275:   }
63276: 
63277:   pAuxData = &pVdbeFunc->apAux[iArg];
63278:   if( pAuxData->pAux && pAuxData->xDelete ){
63279:     pAuxData->xDelete(pAuxData->pAux);
63280:   }
63281:   pAuxData->pAux = pAux;
63282:   pAuxData->xDelete = xDelete;
63283:   return;
63284: 
63285: failed:
63286:   if( xDelete ){
63287:     xDelete(pAux);
63288:   }
63289: }
63290: 
63291: #ifndef SQLITE_OMIT_DEPRECATED
63292: /*
63293: ** Return the number of times the Step function of a aggregate has been 
63294: ** called.
63295: **
63296: ** This function is deprecated.  Do not use it for new code.  It is
63297: ** provide only to avoid breaking legacy code.  New aggregate function
63298: ** implementations should keep their own counts within their aggregate
63299: ** context.
63300: */
63301: SQLITE_API int sqlite3_aggregate_count(sqlite3_context *p){
63302:   assert( p && p->pMem && p->pFunc && p->pFunc->xStep );
63303:   return p->pMem->n;
63304: }
63305: #endif
63306: 
63307: /*
63308: ** Return the number of columns in the result set for the statement pStmt.
63309: */
63310: SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){
63311:   Vdbe *pVm = (Vdbe *)pStmt;
63312:   return pVm ? pVm->nResColumn : 0;
63313: }
63314: 
63315: /*
63316: ** Return the number of values available from the current row of the
63317: ** currently executing statement pStmt.
63318: */
63319: SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt){
63320:   Vdbe *pVm = (Vdbe *)pStmt;
63321:   if( pVm==0 || pVm->pResultSet==0 ) return 0;
63322:   return pVm->nResColumn;
63323: }
63324: 
63325: 
63326: /*
63327: ** Check to see if column iCol of the given statement is valid.  If
63328: ** it is, return a pointer to the Mem for the value of that column.
63329: ** If iCol is not valid, return a pointer to a Mem which has a value
63330: ** of NULL.
63331: */
63332: static Mem *columnMem(sqlite3_stmt *pStmt, int i){
63333:   Vdbe *pVm;
63334:   Mem *pOut;
63335: 
63336:   pVm = (Vdbe *)pStmt;
63337:   if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
63338:     sqlite3_mutex_enter(pVm->db->mutex);
63339:     pOut = &pVm->pResultSet[i];
63340:   }else{
63341:     /* If the value passed as the second argument is out of range, return
63342:     ** a pointer to the following static Mem object which contains the
63343:     ** value SQL NULL. Even though the Mem structure contains an element
63344:     ** of type i64, on certain architectures (x86) with certain compiler
63345:     ** switches (-Os), gcc may align this Mem object on a 4-byte boundary
63346:     ** instead of an 8-byte one. This all works fine, except that when
63347:     ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
63348:     ** that a Mem structure is located on an 8-byte boundary. To prevent
63349:     ** these assert()s from failing, when building with SQLITE_DEBUG defined
63350:     ** using gcc, we force nullMem to be 8-byte aligned using the magical
63351:     ** __attribute__((aligned(8))) macro.  */
63352:     static const Mem nullMem 
63353: #if defined(SQLITE_DEBUG) && defined(__GNUC__)
63354:       __attribute__((aligned(8))) 
63355: #endif
63356:       = {0, "", (double)0, {0}, 0, MEM_Null, SQLITE_NULL, 0,
63357: #ifdef SQLITE_DEBUG
63358:          0, 0,  /* pScopyFrom, pFiller */
63359: #endif
63360:          0, 0 };
63361: 
63362:     if( pVm && ALWAYS(pVm->db) ){
63363:       sqlite3_mutex_enter(pVm->db->mutex);
63364:       sqlite3Error(pVm->db, SQLITE_RANGE, 0);
63365:     }
63366:     pOut = (Mem*)&nullMem;
63367:   }
63368:   return pOut;
63369: }
63370: 
63371: /*
63372: ** This function is called after invoking an sqlite3_value_XXX function on a 
63373: ** column value (i.e. a value returned by evaluating an SQL expression in the
63374: ** select list of a SELECT statement) that may cause a malloc() failure. If 
63375: ** malloc() has failed, the threads mallocFailed flag is cleared and the result
63376: ** code of statement pStmt set to SQLITE_NOMEM.
63377: **
63378: ** Specifically, this is called from within:
63379: **
63380: **     sqlite3_column_int()
63381: **     sqlite3_column_int64()
63382: **     sqlite3_column_text()
63383: **     sqlite3_column_text16()
63384: **     sqlite3_column_real()
63385: **     sqlite3_column_bytes()
63386: **     sqlite3_column_bytes16()
63387: **     sqiite3_column_blob()
63388: */
63389: static void columnMallocFailure(sqlite3_stmt *pStmt)
63390: {
63391:   /* If malloc() failed during an encoding conversion within an
63392:   ** sqlite3_column_XXX API, then set the return code of the statement to
63393:   ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
63394:   ** and _finalize() will return NOMEM.
63395:   */
63396:   Vdbe *p = (Vdbe *)pStmt;
63397:   if( p ){
63398:     p->rc = sqlite3ApiExit(p->db, p->rc);
63399:     sqlite3_mutex_leave(p->db->mutex);
63400:   }
63401: }
63402: 
63403: /**************************** sqlite3_column_  *******************************
63404: ** The following routines are used to access elements of the current row
63405: ** in the result set.
63406: */
63407: SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
63408:   const void *val;
63409:   val = sqlite3_value_blob( columnMem(pStmt,i) );
63410:   /* Even though there is no encoding conversion, value_blob() might
63411:   ** need to call malloc() to expand the result of a zeroblob() 
63412:   ** expression. 
63413:   */
63414:   columnMallocFailure(pStmt);
63415:   return val;
63416: }
63417: SQLITE_API int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
63418:   int val = sqlite3_value_bytes( columnMem(pStmt,i) );
63419:   columnMallocFailure(pStmt);
63420:   return val;
63421: }
63422: SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
63423:   int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
63424:   columnMallocFailure(pStmt);
63425:   return val;
63426: }
63427: SQLITE_API double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
63428:   double val = sqlite3_value_double( columnMem(pStmt,i) );
63429:   columnMallocFailure(pStmt);
63430:   return val;
63431: }
63432: SQLITE_API int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
63433:   int val = sqlite3_value_int( columnMem(pStmt,i) );
63434:   columnMallocFailure(pStmt);
63435:   return val;
63436: }
63437: SQLITE_API sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
63438:   sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
63439:   columnMallocFailure(pStmt);
63440:   return val;
63441: }
63442: SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
63443:   const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
63444:   columnMallocFailure(pStmt);
63445:   return val;
63446: }
63447: SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
63448:   Mem *pOut = columnMem(pStmt, i);
63449:   if( pOut->flags&MEM_Static ){
63450:     pOut->flags &= ~MEM_Static;
63451:     pOut->flags |= MEM_Ephem;
63452:   }
63453:   columnMallocFailure(pStmt);
63454:   return (sqlite3_value *)pOut;
63455: }
63456: #ifndef SQLITE_OMIT_UTF16
63457: SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
63458:   const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
63459:   columnMallocFailure(pStmt);
63460:   return val;
63461: }
63462: #endif /* SQLITE_OMIT_UTF16 */
63463: SQLITE_API int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
63464:   int iType = sqlite3_value_type( columnMem(pStmt,i) );
63465:   columnMallocFailure(pStmt);
63466:   return iType;
63467: }
63468: 
63469: /* The following function is experimental and subject to change or
63470: ** removal */
63471: /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
63472: **  return sqlite3_value_numeric_type( columnMem(pStmt,i) );
63473: **}
63474: */
63475: 
63476: /*
63477: ** Convert the N-th element of pStmt->pColName[] into a string using
63478: ** xFunc() then return that string.  If N is out of range, return 0.
63479: **
63480: ** There are up to 5 names for each column.  useType determines which
63481: ** name is returned.  Here are the names:
63482: **
63483: **    0      The column name as it should be displayed for output
63484: **    1      The datatype name for the column
63485: **    2      The name of the database that the column derives from
63486: **    3      The name of the table that the column derives from
63487: **    4      The name of the table column that the result column derives from
63488: **
63489: ** If the result is not a simple column reference (if it is an expression
63490: ** or a constant) then useTypes 2, 3, and 4 return NULL.
63491: */
63492: static const void *columnName(
63493:   sqlite3_stmt *pStmt,
63494:   int N,
63495:   const void *(*xFunc)(Mem*),
63496:   int useType
63497: ){
63498:   const void *ret = 0;
63499:   Vdbe *p = (Vdbe *)pStmt;
63500:   int n;
63501:   sqlite3 *db = p->db;
63502:   
63503:   assert( db!=0 );
63504:   n = sqlite3_column_count(pStmt);
63505:   if( N<n && N>=0 ){
63506:     N += useType*n;
63507:     sqlite3_mutex_enter(db->mutex);
63508:     assert( db->mallocFailed==0 );
63509:     ret = xFunc(&p->aColName[N]);
63510:      /* A malloc may have failed inside of the xFunc() call. If this
63511:     ** is the case, clear the mallocFailed flag and return NULL.
63512:     */
63513:     if( db->mallocFailed ){
63514:       db->mallocFailed = 0;
63515:       ret = 0;
63516:     }
63517:     sqlite3_mutex_leave(db->mutex);
63518:   }
63519:   return ret;
63520: }
63521: 
63522: /*
63523: ** Return the name of the Nth column of the result set returned by SQL
63524: ** statement pStmt.
63525: */
63526: SQLITE_API const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
63527:   return columnName(
63528:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
63529: }
63530: #ifndef SQLITE_OMIT_UTF16
63531: SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
63532:   return columnName(
63533:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
63534: }
63535: #endif
63536: 
63537: /*
63538: ** Constraint:  If you have ENABLE_COLUMN_METADATA then you must
63539: ** not define OMIT_DECLTYPE.
63540: */
63541: #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
63542: # error "Must not define both SQLITE_OMIT_DECLTYPE \
63543:          and SQLITE_ENABLE_COLUMN_METADATA"
63544: #endif
63545: 
63546: #ifndef SQLITE_OMIT_DECLTYPE
63547: /*
63548: ** Return the column declaration type (if applicable) of the 'i'th column
63549: ** of the result set of SQL statement pStmt.
63550: */
63551: SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
63552:   return columnName(
63553:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
63554: }
63555: #ifndef SQLITE_OMIT_UTF16
63556: SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
63557:   return columnName(
63558:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
63559: }
63560: #endif /* SQLITE_OMIT_UTF16 */
63561: #endif /* SQLITE_OMIT_DECLTYPE */
63562: 
63563: #ifdef SQLITE_ENABLE_COLUMN_METADATA
63564: /*
63565: ** Return the name of the database from which a result column derives.
63566: ** NULL is returned if the result column is an expression or constant or
63567: ** anything else which is not an unabiguous reference to a database column.
63568: */
63569: SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
63570:   return columnName(
63571:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
63572: }
63573: #ifndef SQLITE_OMIT_UTF16
63574: SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
63575:   return columnName(
63576:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
63577: }
63578: #endif /* SQLITE_OMIT_UTF16 */
63579: 
63580: /*
63581: ** Return the name of the table from which a result column derives.
63582: ** NULL is returned if the result column is an expression or constant or
63583: ** anything else which is not an unabiguous reference to a database column.
63584: */
63585: SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
63586:   return columnName(
63587:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
63588: }
63589: #ifndef SQLITE_OMIT_UTF16
63590: SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
63591:   return columnName(
63592:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
63593: }
63594: #endif /* SQLITE_OMIT_UTF16 */
63595: 
63596: /*
63597: ** Return the name of the table column from which a result column derives.
63598: ** NULL is returned if the result column is an expression or constant or
63599: ** anything else which is not an unabiguous reference to a database column.
63600: */
63601: SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
63602:   return columnName(
63603:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
63604: }
63605: #ifndef SQLITE_OMIT_UTF16
63606: SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
63607:   return columnName(
63608:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
63609: }
63610: #endif /* SQLITE_OMIT_UTF16 */
63611: #endif /* SQLITE_ENABLE_COLUMN_METADATA */
63612: 
63613: 
63614: /******************************* sqlite3_bind_  ***************************
63615: ** 
63616: ** Routines used to attach values to wildcards in a compiled SQL statement.
63617: */
63618: /*
63619: ** Unbind the value bound to variable i in virtual machine p. This is the 
63620: ** the same as binding a NULL value to the column. If the "i" parameter is
63621: ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
63622: **
63623: ** A successful evaluation of this routine acquires the mutex on p.
63624: ** the mutex is released if any kind of error occurs.
63625: **
63626: ** The error code stored in database p->db is overwritten with the return
63627: ** value in any case.
63628: */
63629: static int vdbeUnbind(Vdbe *p, int i){
63630:   Mem *pVar;
63631:   if( vdbeSafetyNotNull(p) ){
63632:     return SQLITE_MISUSE_BKPT;
63633:   }
63634:   sqlite3_mutex_enter(p->db->mutex);
63635:   if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
63636:     sqlite3Error(p->db, SQLITE_MISUSE, 0);
63637:     sqlite3_mutex_leave(p->db->mutex);
63638:     sqlite3_log(SQLITE_MISUSE, 
63639:         "bind on a busy prepared statement: [%s]", p->zSql);
63640:     return SQLITE_MISUSE_BKPT;
63641:   }
63642:   if( i<1 || i>p->nVar ){
63643:     sqlite3Error(p->db, SQLITE_RANGE, 0);
63644:     sqlite3_mutex_leave(p->db->mutex);
63645:     return SQLITE_RANGE;
63646:   }
63647:   i--;
63648:   pVar = &p->aVar[i];
63649:   sqlite3VdbeMemRelease(pVar);
63650:   pVar->flags = MEM_Null;
63651:   sqlite3Error(p->db, SQLITE_OK, 0);
63652: 
63653:   /* If the bit corresponding to this variable in Vdbe.expmask is set, then 
63654:   ** binding a new value to this variable invalidates the current query plan.
63655:   **
63656:   ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host
63657:   ** parameter in the WHERE clause might influence the choice of query plan
63658:   ** for a statement, then the statement will be automatically recompiled,
63659:   ** as if there had been a schema change, on the first sqlite3_step() call
63660:   ** following any change to the bindings of that parameter.
63661:   */
63662:   if( p->isPrepareV2 &&
63663:      ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff)
63664:   ){
63665:     p->expired = 1;
63666:   }
63667:   return SQLITE_OK;
63668: }
63669: 
63670: /*
63671: ** Bind a text or BLOB value.
63672: */
63673: static int bindText(
63674:   sqlite3_stmt *pStmt,   /* The statement to bind against */
63675:   int i,                 /* Index of the parameter to bind */
63676:   const void *zData,     /* Pointer to the data to be bound */
63677:   int nData,             /* Number of bytes of data to be bound */
63678:   void (*xDel)(void*),   /* Destructor for the data */
63679:   u8 encoding            /* Encoding for the data */
63680: ){
63681:   Vdbe *p = (Vdbe *)pStmt;
63682:   Mem *pVar;
63683:   int rc;
63684: 
63685:   rc = vdbeUnbind(p, i);
63686:   if( rc==SQLITE_OK ){
63687:     if( zData!=0 ){
63688:       pVar = &p->aVar[i-1];
63689:       rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
63690:       if( rc==SQLITE_OK && encoding!=0 ){
63691:         rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
63692:       }
63693:       sqlite3Error(p->db, rc, 0);
63694:       rc = sqlite3ApiExit(p->db, rc);
63695:     }
63696:     sqlite3_mutex_leave(p->db->mutex);
63697:   }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
63698:     xDel((void*)zData);
63699:   }
63700:   return rc;
63701: }
63702: 
63703: 
63704: /*
63705: ** Bind a blob value to an SQL statement variable.
63706: */
63707: SQLITE_API int sqlite3_bind_blob(
63708:   sqlite3_stmt *pStmt, 
63709:   int i, 
63710:   const void *zData, 
63711:   int nData, 
63712:   void (*xDel)(void*)
63713: ){
63714:   return bindText(pStmt, i, zData, nData, xDel, 0);
63715: }
63716: SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
63717:   int rc;
63718:   Vdbe *p = (Vdbe *)pStmt;
63719:   rc = vdbeUnbind(p, i);
63720:   if( rc==SQLITE_OK ){
63721:     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
63722:     sqlite3_mutex_leave(p->db->mutex);
63723:   }
63724:   return rc;
63725: }
63726: SQLITE_API int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
63727:   return sqlite3_bind_int64(p, i, (i64)iValue);
63728: }
63729: SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
63730:   int rc;
63731:   Vdbe *p = (Vdbe *)pStmt;
63732:   rc = vdbeUnbind(p, i);
63733:   if( rc==SQLITE_OK ){
63734:     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
63735:     sqlite3_mutex_leave(p->db->mutex);
63736:   }
63737:   return rc;
63738: }
63739: SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
63740:   int rc;
63741:   Vdbe *p = (Vdbe*)pStmt;
63742:   rc = vdbeUnbind(p, i);
63743:   if( rc==SQLITE_OK ){
63744:     sqlite3_mutex_leave(p->db->mutex);
63745:   }
63746:   return rc;
63747: }
63748: SQLITE_API int sqlite3_bind_text( 
63749:   sqlite3_stmt *pStmt, 
63750:   int i, 
63751:   const char *zData, 
63752:   int nData, 
63753:   void (*xDel)(void*)
63754: ){
63755:   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
63756: }
63757: #ifndef SQLITE_OMIT_UTF16
63758: SQLITE_API int sqlite3_bind_text16(
63759:   sqlite3_stmt *pStmt, 
63760:   int i, 
63761:   const void *zData, 
63762:   int nData, 
63763:   void (*xDel)(void*)
63764: ){
63765:   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
63766: }
63767: #endif /* SQLITE_OMIT_UTF16 */
63768: SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
63769:   int rc;
63770:   switch( pValue->type ){
63771:     case SQLITE_INTEGER: {
63772:       rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
63773:       break;
63774:     }
63775:     case SQLITE_FLOAT: {
63776:       rc = sqlite3_bind_double(pStmt, i, pValue->r);
63777:       break;
63778:     }
63779:     case SQLITE_BLOB: {
63780:       if( pValue->flags & MEM_Zero ){
63781:         rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
63782:       }else{
63783:         rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
63784:       }
63785:       break;
63786:     }
63787:     case SQLITE_TEXT: {
63788:       rc = bindText(pStmt,i,  pValue->z, pValue->n, SQLITE_TRANSIENT,
63789:                               pValue->enc);
63790:       break;
63791:     }
63792:     default: {
63793:       rc = sqlite3_bind_null(pStmt, i);
63794:       break;
63795:     }
63796:   }
63797:   return rc;
63798: }
63799: SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
63800:   int rc;
63801:   Vdbe *p = (Vdbe *)pStmt;
63802:   rc = vdbeUnbind(p, i);
63803:   if( rc==SQLITE_OK ){
63804:     sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
63805:     sqlite3_mutex_leave(p->db->mutex);
63806:   }
63807:   return rc;
63808: }
63809: 
63810: /*
63811: ** Return the number of wildcards that can be potentially bound to.
63812: ** This routine is added to support DBD::SQLite.  
63813: */
63814: SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
63815:   Vdbe *p = (Vdbe*)pStmt;
63816:   return p ? p->nVar : 0;
63817: }
63818: 
63819: /*
63820: ** Return the name of a wildcard parameter.  Return NULL if the index
63821: ** is out of range or if the wildcard is unnamed.
63822: **
63823: ** The result is always UTF-8.
63824: */
63825: SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
63826:   Vdbe *p = (Vdbe*)pStmt;
63827:   if( p==0 || i<1 || i>p->nzVar ){
63828:     return 0;
63829:   }
63830:   return p->azVar[i-1];
63831: }
63832: 
63833: /*
63834: ** Given a wildcard parameter name, return the index of the variable
63835: ** with that name.  If there is no variable with the given name,
63836: ** return 0.
63837: */
63838: SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
63839:   int i;
63840:   if( p==0 ){
63841:     return 0;
63842:   }
63843:   if( zName ){
63844:     for(i=0; i<p->nzVar; i++){
63845:       const char *z = p->azVar[i];
63846:       if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){
63847:         return i+1;
63848:       }
63849:     }
63850:   }
63851:   return 0;
63852: }
63853: SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
63854:   return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
63855: }
63856: 
63857: /*
63858: ** Transfer all bindings from the first statement over to the second.
63859: */
63860: SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
63861:   Vdbe *pFrom = (Vdbe*)pFromStmt;
63862:   Vdbe *pTo = (Vdbe*)pToStmt;
63863:   int i;
63864:   assert( pTo->db==pFrom->db );
63865:   assert( pTo->nVar==pFrom->nVar );
63866:   sqlite3_mutex_enter(pTo->db->mutex);
63867:   for(i=0; i<pFrom->nVar; i++){
63868:     sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
63869:   }
63870:   sqlite3_mutex_leave(pTo->db->mutex);
63871:   return SQLITE_OK;
63872: }
63873: 
63874: #ifndef SQLITE_OMIT_DEPRECATED
63875: /*
63876: ** Deprecated external interface.  Internal/core SQLite code
63877: ** should call sqlite3TransferBindings.
63878: **
63879: ** Is is misuse to call this routine with statements from different
63880: ** database connections.  But as this is a deprecated interface, we
63881: ** will not bother to check for that condition.
63882: **
63883: ** If the two statements contain a different number of bindings, then
63884: ** an SQLITE_ERROR is returned.  Nothing else can go wrong, so otherwise
63885: ** SQLITE_OK is returned.
63886: */
63887: SQLITE_API int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
63888:   Vdbe *pFrom = (Vdbe*)pFromStmt;
63889:   Vdbe *pTo = (Vdbe*)pToStmt;
63890:   if( pFrom->nVar!=pTo->nVar ){
63891:     return SQLITE_ERROR;
63892:   }
63893:   if( pTo->isPrepareV2 && pTo->expmask ){
63894:     pTo->expired = 1;
63895:   }
63896:   if( pFrom->isPrepareV2 && pFrom->expmask ){
63897:     pFrom->expired = 1;
63898:   }
63899:   return sqlite3TransferBindings(pFromStmt, pToStmt);
63900: }
63901: #endif
63902: 
63903: /*
63904: ** Return the sqlite3* database handle to which the prepared statement given
63905: ** in the argument belongs.  This is the same database handle that was
63906: ** the first argument to the sqlite3_prepare() that was used to create
63907: ** the statement in the first place.
63908: */
63909: SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
63910:   return pStmt ? ((Vdbe*)pStmt)->db : 0;
63911: }
63912: 
63913: /*
63914: ** Return true if the prepared statement is guaranteed to not modify the
63915: ** database.
63916: */
63917: SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
63918:   return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;
63919: }
63920: 
63921: /*
63922: ** Return true if the prepared statement is in need of being reset.
63923: */
63924: SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt *pStmt){
63925:   Vdbe *v = (Vdbe*)pStmt;
63926:   return v!=0 && v->pc>0 && v->magic==VDBE_MAGIC_RUN;
63927: }
63928: 
63929: /*
63930: ** Return a pointer to the next prepared statement after pStmt associated
63931: ** with database connection pDb.  If pStmt is NULL, return the first
63932: ** prepared statement for the database connection.  Return NULL if there
63933: ** are no more.
63934: */
63935: SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
63936:   sqlite3_stmt *pNext;
63937:   sqlite3_mutex_enter(pDb->mutex);
63938:   if( pStmt==0 ){
63939:     pNext = (sqlite3_stmt*)pDb->pVdbe;
63940:   }else{
63941:     pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
63942:   }
63943:   sqlite3_mutex_leave(pDb->mutex);
63944:   return pNext;
63945: }
63946: 
63947: /*
63948: ** Return the value of a status counter for a prepared statement
63949: */
63950: SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
63951:   Vdbe *pVdbe = (Vdbe*)pStmt;
63952:   int v = pVdbe->aCounter[op-1];
63953:   if( resetFlag ) pVdbe->aCounter[op-1] = 0;
63954:   return v;
63955: }
63956: 
63957: /************** End of vdbeapi.c *********************************************/
63958: /************** Begin file vdbetrace.c ***************************************/
63959: /*
63960: ** 2009 November 25
63961: **
63962: ** The author disclaims copyright to this source code.  In place of
63963: ** a legal notice, here is a blessing:
63964: **
63965: **    May you do good and not evil.
63966: **    May you find forgiveness for yourself and forgive others.
63967: **    May you share freely, never taking more than you give.
63968: **
63969: *************************************************************************
63970: **
63971: ** This file contains code used to insert the values of host parameters
63972: ** (aka "wildcards") into the SQL text output by sqlite3_trace().
63973: **
63974: ** The Vdbe parse-tree explainer is also found here.
63975: */
63976: 
63977: #ifndef SQLITE_OMIT_TRACE
63978: 
63979: /*
63980: ** zSql is a zero-terminated string of UTF-8 SQL text.  Return the number of
63981: ** bytes in this text up to but excluding the first character in
63982: ** a host parameter.  If the text contains no host parameters, return
63983: ** the total number of bytes in the text.
63984: */
63985: static int findNextHostParameter(const char *zSql, int *pnToken){
63986:   int tokenType;
63987:   int nTotal = 0;
63988:   int n;
63989: 
63990:   *pnToken = 0;
63991:   while( zSql[0] ){
63992:     n = sqlite3GetToken((u8*)zSql, &tokenType);
63993:     assert( n>0 && tokenType!=TK_ILLEGAL );
63994:     if( tokenType==TK_VARIABLE ){
63995:       *pnToken = n;
63996:       break;
63997:     }
63998:     nTotal += n;
63999:     zSql += n;
64000:   }
64001:   return nTotal;
64002: }
64003: 
64004: /*
64005: ** This function returns a pointer to a nul-terminated string in memory
64006: ** obtained from sqlite3DbMalloc(). If sqlite3.vdbeExecCnt is 1, then the
64007: ** string contains a copy of zRawSql but with host parameters expanded to 
64008: ** their current bindings. Or, if sqlite3.vdbeExecCnt is greater than 1, 
64009: ** then the returned string holds a copy of zRawSql with "-- " prepended
64010: ** to each line of text.
64011: **
64012: ** The calling function is responsible for making sure the memory returned
64013: ** is eventually freed.
64014: **
64015: ** ALGORITHM:  Scan the input string looking for host parameters in any of
64016: ** these forms:  ?, ?N, $A, @A, :A.  Take care to avoid text within
64017: ** string literals, quoted identifier names, and comments.  For text forms,
64018: ** the host parameter index is found by scanning the perpared
64019: ** statement for the corresponding OP_Variable opcode.  Once the host
64020: ** parameter index is known, locate the value in p->aVar[].  Then render
64021: ** the value as a literal in place of the host parameter name.
64022: */
64023: SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
64024:   Vdbe *p,                 /* The prepared statement being evaluated */
64025:   const char *zRawSql      /* Raw text of the SQL statement */
64026: ){
64027:   sqlite3 *db;             /* The database connection */
64028:   int idx = 0;             /* Index of a host parameter */
64029:   int nextIndex = 1;       /* Index of next ? host parameter */
64030:   int n;                   /* Length of a token prefix */
64031:   int nToken;              /* Length of the parameter token */
64032:   int i;                   /* Loop counter */
64033:   Mem *pVar;               /* Value of a host parameter */
64034:   StrAccum out;            /* Accumulate the output here */
64035:   char zBase[100];         /* Initial working space */
64036: 
64037:   db = p->db;
64038:   sqlite3StrAccumInit(&out, zBase, sizeof(zBase), 
64039:                       db->aLimit[SQLITE_LIMIT_LENGTH]);
64040:   out.db = db;
64041:   if( db->vdbeExecCnt>1 ){
64042:     while( *zRawSql ){
64043:       const char *zStart = zRawSql;
64044:       while( *(zRawSql++)!='\n' && *zRawSql );
64045:       sqlite3StrAccumAppend(&out, "-- ", 3);
64046:       sqlite3StrAccumAppend(&out, zStart, (int)(zRawSql-zStart));
64047:     }
64048:   }else{
64049:     while( zRawSql[0] ){
64050:       n = findNextHostParameter(zRawSql, &nToken);
64051:       assert( n>0 );
64052:       sqlite3StrAccumAppend(&out, zRawSql, n);
64053:       zRawSql += n;
64054:       assert( zRawSql[0] || nToken==0 );
64055:       if( nToken==0 ) break;
64056:       if( zRawSql[0]=='?' ){
64057:         if( nToken>1 ){
64058:           assert( sqlite3Isdigit(zRawSql[1]) );
64059:           sqlite3GetInt32(&zRawSql[1], &idx);
64060:         }else{
64061:           idx = nextIndex;
64062:         }
64063:       }else{
64064:         assert( zRawSql[0]==':' || zRawSql[0]=='$' || zRawSql[0]=='@' );
64065:         testcase( zRawSql[0]==':' );
64066:         testcase( zRawSql[0]=='$' );
64067:         testcase( zRawSql[0]=='@' );
64068:         idx = sqlite3VdbeParameterIndex(p, zRawSql, nToken);
64069:         assert( idx>0 );
64070:       }
64071:       zRawSql += nToken;
64072:       nextIndex = idx + 1;
64073:       assert( idx>0 && idx<=p->nVar );
64074:       pVar = &p->aVar[idx-1];
64075:       if( pVar->flags & MEM_Null ){
64076:         sqlite3StrAccumAppend(&out, "NULL", 4);
64077:       }else if( pVar->flags & MEM_Int ){
64078:         sqlite3XPrintf(&out, "%lld", pVar->u.i);
64079:       }else if( pVar->flags & MEM_Real ){
64080:         sqlite3XPrintf(&out, "%!.15g", pVar->r);
64081:       }else if( pVar->flags & MEM_Str ){
64082: #ifndef SQLITE_OMIT_UTF16
64083:         u8 enc = ENC(db);
64084:         if( enc!=SQLITE_UTF8 ){
64085:           Mem utf8;
64086:           memset(&utf8, 0, sizeof(utf8));
64087:           utf8.db = db;
64088:           sqlite3VdbeMemSetStr(&utf8, pVar->z, pVar->n, enc, SQLITE_STATIC);
64089:           sqlite3VdbeChangeEncoding(&utf8, SQLITE_UTF8);
64090:           sqlite3XPrintf(&out, "'%.*q'", utf8.n, utf8.z);
64091:           sqlite3VdbeMemRelease(&utf8);
64092:         }else
64093: #endif
64094:         {
64095:           sqlite3XPrintf(&out, "'%.*q'", pVar->n, pVar->z);
64096:         }
64097:       }else if( pVar->flags & MEM_Zero ){
64098:         sqlite3XPrintf(&out, "zeroblob(%d)", pVar->u.nZero);
64099:       }else{
64100:         assert( pVar->flags & MEM_Blob );
64101:         sqlite3StrAccumAppend(&out, "x'", 2);
64102:         for(i=0; i<pVar->n; i++){
64103:           sqlite3XPrintf(&out, "%02x", pVar->z[i]&0xff);
64104:         }
64105:         sqlite3StrAccumAppend(&out, "'", 1);
64106:       }
64107:     }
64108:   }
64109:   return sqlite3StrAccumFinish(&out);
64110: }
64111: 
64112: #endif /* #ifndef SQLITE_OMIT_TRACE */
64113: 
64114: /*****************************************************************************
64115: ** The following code implements the data-structure explaining logic
64116: ** for the Vdbe.
64117: */
64118: 
64119: #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
64120: 
64121: /*
64122: ** Allocate a new Explain object
64123: */
64124: SQLITE_PRIVATE void sqlite3ExplainBegin(Vdbe *pVdbe){
64125:   if( pVdbe ){
64126:     sqlite3BeginBenignMalloc();
64127:     Explain *p = sqlite3_malloc( sizeof(Explain) );
64128:     if( p ){
64129:       memset(p, 0, sizeof(*p));
64130:       p->pVdbe = pVdbe;
64131:       sqlite3_free(pVdbe->pExplain);
64132:       pVdbe->pExplain = p;
64133:       sqlite3StrAccumInit(&p->str, p->zBase, sizeof(p->zBase),
64134:                           SQLITE_MAX_LENGTH);
64135:       p->str.useMalloc = 2;
64136:     }else{
64137:       sqlite3EndBenignMalloc();
64138:     }
64139:   }
64140: }
64141: 
64142: /*
64143: ** Return true if the Explain ends with a new-line.
64144: */
64145: static int endsWithNL(Explain *p){
64146:   return p && p->str.zText && p->str.nChar
64147:            && p->str.zText[p->str.nChar-1]=='\n';
64148: }
64149:     
64150: /*
64151: ** Append text to the indentation
64152: */
64153: SQLITE_PRIVATE void sqlite3ExplainPrintf(Vdbe *pVdbe, const char *zFormat, ...){
64154:   Explain *p;
64155:   if( pVdbe && (p = pVdbe->pExplain)!=0 ){
64156:     va_list ap;
64157:     if( p->nIndent && endsWithNL(p) ){
64158:       int n = p->nIndent;
64159:       if( n>ArraySize(p->aIndent) ) n = ArraySize(p->aIndent);
64160:       sqlite3AppendSpace(&p->str, p->aIndent[n-1]);
64161:     }   
64162:     va_start(ap, zFormat);
64163:     sqlite3VXPrintf(&p->str, 1, zFormat, ap);
64164:     va_end(ap);
64165:   }
64166: }
64167: 
64168: /*
64169: ** Append a '\n' if there is not already one.
64170: */
64171: SQLITE_PRIVATE void sqlite3ExplainNL(Vdbe *pVdbe){
64172:   Explain *p;
64173:   if( pVdbe && (p = pVdbe->pExplain)!=0 && !endsWithNL(p) ){
64174:     sqlite3StrAccumAppend(&p->str, "\n", 1);
64175:   }
64176: }
64177: 
64178: /*
64179: ** Push a new indentation level.  Subsequent lines will be indented
64180: ** so that they begin at the current cursor position.
64181: */
64182: SQLITE_PRIVATE void sqlite3ExplainPush(Vdbe *pVdbe){
64183:   Explain *p;
64184:   if( pVdbe && (p = pVdbe->pExplain)!=0 ){
64185:     if( p->str.zText && p->nIndent<ArraySize(p->aIndent) ){
64186:       const char *z = p->str.zText;
64187:       int i = p->str.nChar-1;
64188:       int x;
64189:       while( i>=0 && z[i]!='\n' ){ i--; }
64190:       x = (p->str.nChar - 1) - i;
64191:       if( p->nIndent && x<p->aIndent[p->nIndent-1] ){
64192:         x = p->aIndent[p->nIndent-1];
64193:       }
64194:       p->aIndent[p->nIndent] = x;
64195:     }
64196:     p->nIndent++;
64197:   }
64198: }
64199: 
64200: /*
64201: ** Pop the indentation stack by one level.
64202: */
64203: SQLITE_PRIVATE void sqlite3ExplainPop(Vdbe *p){
64204:   if( p && p->pExplain ) p->pExplain->nIndent--;
64205: }
64206: 
64207: /*
64208: ** Free the indentation structure
64209: */
64210: SQLITE_PRIVATE void sqlite3ExplainFinish(Vdbe *pVdbe){
64211:   if( pVdbe && pVdbe->pExplain ){
64212:     sqlite3_free(pVdbe->zExplain);
64213:     sqlite3ExplainNL(pVdbe);
64214:     pVdbe->zExplain = sqlite3StrAccumFinish(&pVdbe->pExplain->str);
64215:     sqlite3_free(pVdbe->pExplain);
64216:     pVdbe->pExplain = 0;
64217:     sqlite3EndBenignMalloc();
64218:   }
64219: }
64220: 
64221: /*
64222: ** Return the explanation of a virtual machine.
64223: */
64224: SQLITE_PRIVATE const char *sqlite3VdbeExplanation(Vdbe *pVdbe){
64225:   return (pVdbe && pVdbe->zExplain) ? pVdbe->zExplain : 0;
64226: }
64227: #endif /* defined(SQLITE_DEBUG) */
64228: 
64229: /************** End of vdbetrace.c *******************************************/
64230: /************** Begin file vdbe.c ********************************************/
64231: /*
64232: ** 2001 September 15
64233: **
64234: ** The author disclaims copyright to this source code.  In place of
64235: ** a legal notice, here is a blessing:
64236: **
64237: **    May you do good and not evil.
64238: **    May you find forgiveness for yourself and forgive others.
64239: **    May you share freely, never taking more than you give.
64240: **
64241: *************************************************************************
64242: ** The code in this file implements execution method of the 
64243: ** Virtual Database Engine (VDBE).  A separate file ("vdbeaux.c")
64244: ** handles housekeeping details such as creating and deleting
64245: ** VDBE instances.  This file is solely interested in executing
64246: ** the VDBE program.
64247: **
64248: ** In the external interface, an "sqlite3_stmt*" is an opaque pointer
64249: ** to a VDBE.
64250: **
64251: ** The SQL parser generates a program which is then executed by
64252: ** the VDBE to do the work of the SQL statement.  VDBE programs are 
64253: ** similar in form to assembly language.  The program consists of
64254: ** a linear sequence of operations.  Each operation has an opcode 
64255: ** and 5 operands.  Operands P1, P2, and P3 are integers.  Operand P4 
64256: ** is a null-terminated string.  Operand P5 is an unsigned character.
64257: ** Few opcodes use all 5 operands.
64258: **
64259: ** Computation results are stored on a set of registers numbered beginning
64260: ** with 1 and going up to Vdbe.nMem.  Each register can store
64261: ** either an integer, a null-terminated string, a floating point
64262: ** number, or the SQL "NULL" value.  An implicit conversion from one
64263: ** type to the other occurs as necessary.
64264: ** 
64265: ** Most of the code in this file is taken up by the sqlite3VdbeExec()
64266: ** function which does the work of interpreting a VDBE program.
64267: ** But other routines are also provided to help in building up
64268: ** a program instruction by instruction.
64269: **
64270: ** Various scripts scan this source file in order to generate HTML
64271: ** documentation, headers files, or other derived files.  The formatting
64272: ** of the code in this file is, therefore, important.  See other comments
64273: ** in this file for details.  If in doubt, do not deviate from existing
64274: ** commenting and indentation practices when changing or adding code.
64275: */
64276: 
64277: /*
64278: ** Invoke this macro on memory cells just prior to changing the
64279: ** value of the cell.  This macro verifies that shallow copies are
64280: ** not misused.
64281: */
64282: #ifdef SQLITE_DEBUG
64283: # define memAboutToChange(P,M) sqlite3VdbeMemAboutToChange(P,M)
64284: #else
64285: # define memAboutToChange(P,M)
64286: #endif
64287: 
64288: /*
64289: ** The following global variable is incremented every time a cursor
64290: ** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes.  The test
64291: ** procedures use this information to make sure that indices are
64292: ** working correctly.  This variable has no function other than to
64293: ** help verify the correct operation of the library.
64294: */
64295: #ifdef SQLITE_TEST
64296: SQLITE_API int sqlite3_search_count = 0;
64297: #endif
64298: 
64299: /*
64300: ** When this global variable is positive, it gets decremented once before
64301: ** each instruction in the VDBE.  When it reaches zero, the u1.isInterrupted
64302: ** field of the sqlite3 structure is set in order to simulate an interrupt.
64303: **
64304: ** This facility is used for testing purposes only.  It does not function
64305: ** in an ordinary build.
64306: */
64307: #ifdef SQLITE_TEST
64308: SQLITE_API int sqlite3_interrupt_count = 0;
64309: #endif
64310: 
64311: /*
64312: ** The next global variable is incremented each type the OP_Sort opcode
64313: ** is executed.  The test procedures use this information to make sure that
64314: ** sorting is occurring or not occurring at appropriate times.   This variable
64315: ** has no function other than to help verify the correct operation of the
64316: ** library.
64317: */
64318: #ifdef SQLITE_TEST
64319: SQLITE_API int sqlite3_sort_count = 0;
64320: #endif
64321: 
64322: /*
64323: ** The next global variable records the size of the largest MEM_Blob
64324: ** or MEM_Str that has been used by a VDBE opcode.  The test procedures
64325: ** use this information to make sure that the zero-blob functionality
64326: ** is working correctly.   This variable has no function other than to
64327: ** help verify the correct operation of the library.
64328: */
64329: #ifdef SQLITE_TEST
64330: SQLITE_API int sqlite3_max_blobsize = 0;
64331: static void updateMaxBlobsize(Mem *p){
64332:   if( (p->flags & (MEM_Str|MEM_Blob))!=0 && p->n>sqlite3_max_blobsize ){
64333:     sqlite3_max_blobsize = p->n;
64334:   }
64335: }
64336: #endif
64337: 
64338: /*
64339: ** The next global variable is incremented each type the OP_Found opcode
64340: ** is executed. This is used to test whether or not the foreign key
64341: ** operation implemented using OP_FkIsZero is working. This variable
64342: ** has no function other than to help verify the correct operation of the
64343: ** library.
64344: */
64345: #ifdef SQLITE_TEST
64346: SQLITE_API int sqlite3_found_count = 0;
64347: #endif
64348: 
64349: /*
64350: ** Test a register to see if it exceeds the current maximum blob size.
64351: ** If it does, record the new maximum blob size.
64352: */
64353: #if defined(SQLITE_TEST) && !defined(SQLITE_OMIT_BUILTIN_TEST)
64354: # define UPDATE_MAX_BLOBSIZE(P)  updateMaxBlobsize(P)
64355: #else
64356: # define UPDATE_MAX_BLOBSIZE(P)
64357: #endif
64358: 
64359: /*
64360: ** Convert the given register into a string if it isn't one
64361: ** already. Return non-zero if a malloc() fails.
64362: */
64363: #define Stringify(P, enc) \
64364:    if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc)) \
64365:      { goto no_mem; }
64366: 
64367: /*
64368: ** An ephemeral string value (signified by the MEM_Ephem flag) contains
64369: ** a pointer to a dynamically allocated string where some other entity
64370: ** is responsible for deallocating that string.  Because the register
64371: ** does not control the string, it might be deleted without the register
64372: ** knowing it.
64373: **
64374: ** This routine converts an ephemeral string into a dynamically allocated
64375: ** string that the register itself controls.  In other words, it
64376: ** converts an MEM_Ephem string into an MEM_Dyn string.
64377: */
64378: #define Deephemeralize(P) \
64379:    if( ((P)->flags&MEM_Ephem)!=0 \
64380:        && sqlite3VdbeMemMakeWriteable(P) ){ goto no_mem;}
64381: 
64382: /* Return true if the cursor was opened using the OP_OpenSorter opcode. */
64383: #ifdef SQLITE_OMIT_MERGE_SORT
64384: # define isSorter(x) 0
64385: #else
64386: # define isSorter(x) ((x)->pSorter!=0)
64387: #endif
64388: 
64389: /*
64390: ** Argument pMem points at a register that will be passed to a
64391: ** user-defined function or returned to the user as the result of a query.
64392: ** This routine sets the pMem->type variable used by the sqlite3_value_*() 
64393: ** routines.
64394: */
64395: SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem){
64396:   int flags = pMem->flags;
64397:   if( flags & MEM_Null ){
64398:     pMem->type = SQLITE_NULL;
64399:   }
64400:   else if( flags & MEM_Int ){
64401:     pMem->type = SQLITE_INTEGER;
64402:   }
64403:   else if( flags & MEM_Real ){
64404:     pMem->type = SQLITE_FLOAT;
64405:   }
64406:   else if( flags & MEM_Str ){
64407:     pMem->type = SQLITE_TEXT;
64408:   }else{
64409:     pMem->type = SQLITE_BLOB;
64410:   }
64411: }
64412: 
64413: /*
64414: ** Allocate VdbeCursor number iCur.  Return a pointer to it.  Return NULL
64415: ** if we run out of memory.
64416: */
64417: static VdbeCursor *allocateCursor(
64418:   Vdbe *p,              /* The virtual machine */
64419:   int iCur,             /* Index of the new VdbeCursor */
64420:   int nField,           /* Number of fields in the table or index */
64421:   int iDb,              /* Database the cursor belongs to, or -1 */
64422:   int isBtreeCursor     /* True for B-Tree.  False for pseudo-table or vtab */
64423: ){
64424:   /* Find the memory cell that will be used to store the blob of memory
64425:   ** required for this VdbeCursor structure. It is convenient to use a 
64426:   ** vdbe memory cell to manage the memory allocation required for a
64427:   ** VdbeCursor structure for the following reasons:
64428:   **
64429:   **   * Sometimes cursor numbers are used for a couple of different
64430:   **     purposes in a vdbe program. The different uses might require
64431:   **     different sized allocations. Memory cells provide growable
64432:   **     allocations.
64433:   **
64434:   **   * When using ENABLE_MEMORY_MANAGEMENT, memory cell buffers can
64435:   **     be freed lazily via the sqlite3_release_memory() API. This
64436:   **     minimizes the number of malloc calls made by the system.
64437:   **
64438:   ** Memory cells for cursors are allocated at the top of the address
64439:   ** space. Memory cell (p->nMem) corresponds to cursor 0. Space for
64440:   ** cursor 1 is managed by memory cell (p->nMem-1), etc.
64441:   */
64442:   Mem *pMem = &p->aMem[p->nMem-iCur];
64443: 
64444:   int nByte;
64445:   VdbeCursor *pCx = 0;
64446:   nByte = 
64447:       ROUND8(sizeof(VdbeCursor)) + 
64448:       (isBtreeCursor?sqlite3BtreeCursorSize():0) + 
64449:       2*nField*sizeof(u32);
64450: 
64451:   assert( iCur<p->nCursor );
64452:   if( p->apCsr[iCur] ){
64453:     sqlite3VdbeFreeCursor(p, p->apCsr[iCur]);
64454:     p->apCsr[iCur] = 0;
64455:   }
64456:   if( SQLITE_OK==sqlite3VdbeMemGrow(pMem, nByte, 0) ){
64457:     p->apCsr[iCur] = pCx = (VdbeCursor*)pMem->z;
64458:     memset(pCx, 0, sizeof(VdbeCursor));
64459:     pCx->iDb = iDb;
64460:     pCx->nField = nField;
64461:     if( nField ){
64462:       pCx->aType = (u32 *)&pMem->z[ROUND8(sizeof(VdbeCursor))];
64463:     }
64464:     if( isBtreeCursor ){
64465:       pCx->pCursor = (BtCursor*)
64466:           &pMem->z[ROUND8(sizeof(VdbeCursor))+2*nField*sizeof(u32)];
64467:       sqlite3BtreeCursorZero(pCx->pCursor);
64468:     }
64469:   }
64470:   return pCx;
64471: }
64472: 
64473: /*
64474: ** Try to convert a value into a numeric representation if we can
64475: ** do so without loss of information.  In other words, if the string
64476: ** looks like a number, convert it into a number.  If it does not
64477: ** look like a number, leave it alone.
64478: */
64479: static void applyNumericAffinity(Mem *pRec){
64480:   if( (pRec->flags & (MEM_Real|MEM_Int))==0 ){
64481:     double rValue;
64482:     i64 iValue;
64483:     u8 enc = pRec->enc;
64484:     if( (pRec->flags&MEM_Str)==0 ) return;
64485:     if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return;
64486:     if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){
64487:       pRec->u.i = iValue;
64488:       pRec->flags |= MEM_Int;
64489:     }else{
64490:       pRec->r = rValue;
64491:       pRec->flags |= MEM_Real;
64492:     }
64493:   }
64494: }
64495: 
64496: /*
64497: ** Processing is determine by the affinity parameter:
64498: **
64499: ** SQLITE_AFF_INTEGER:
64500: ** SQLITE_AFF_REAL:
64501: ** SQLITE_AFF_NUMERIC:
64502: **    Try to convert pRec to an integer representation or a 
64503: **    floating-point representation if an integer representation
64504: **    is not possible.  Note that the integer representation is
64505: **    always preferred, even if the affinity is REAL, because
64506: **    an integer representation is more space efficient on disk.
64507: **
64508: ** SQLITE_AFF_TEXT:
64509: **    Convert pRec to a text representation.
64510: **
64511: ** SQLITE_AFF_NONE:
64512: **    No-op.  pRec is unchanged.
64513: */
64514: static void applyAffinity(
64515:   Mem *pRec,          /* The value to apply affinity to */
64516:   char affinity,      /* The affinity to be applied */
64517:   u8 enc              /* Use this text encoding */
64518: ){
64519:   if( affinity==SQLITE_AFF_TEXT ){
64520:     /* Only attempt the conversion to TEXT if there is an integer or real
64521:     ** representation (blob and NULL do not get converted) but no string
64522:     ** representation.
64523:     */
64524:     if( 0==(pRec->flags&MEM_Str) && (pRec->flags&(MEM_Real|MEM_Int)) ){
64525:       sqlite3VdbeMemStringify(pRec, enc);
64526:     }
64527:     pRec->flags &= ~(MEM_Real|MEM_Int);
64528:   }else if( affinity!=SQLITE_AFF_NONE ){
64529:     assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL
64530:              || affinity==SQLITE_AFF_NUMERIC );
64531:     applyNumericAffinity(pRec);
64532:     if( pRec->flags & MEM_Real ){
64533:       sqlite3VdbeIntegerAffinity(pRec);
64534:     }
64535:   }
64536: }
64537: 
64538: /*
64539: ** Try to convert the type of a function argument or a result column
64540: ** into a numeric representation.  Use either INTEGER or REAL whichever
64541: ** is appropriate.  But only do the conversion if it is possible without
64542: ** loss of information and return the revised type of the argument.
64543: */
64544: SQLITE_API int sqlite3_value_numeric_type(sqlite3_value *pVal){
64545:   Mem *pMem = (Mem*)pVal;
64546:   if( pMem->type==SQLITE_TEXT ){
64547:     applyNumericAffinity(pMem);
64548:     sqlite3VdbeMemStoreType(pMem);
64549:   }
64550:   return pMem->type;
64551: }
64552: 
64553: /*
64554: ** Exported version of applyAffinity(). This one works on sqlite3_value*, 
64555: ** not the internal Mem* type.
64556: */
64557: SQLITE_PRIVATE void sqlite3ValueApplyAffinity(
64558:   sqlite3_value *pVal, 
64559:   u8 affinity, 
64560:   u8 enc
64561: ){
64562:   applyAffinity((Mem *)pVal, affinity, enc);
64563: }
64564: 
64565: #ifdef SQLITE_DEBUG
64566: /*
64567: ** Write a nice string representation of the contents of cell pMem
64568: ** into buffer zBuf, length nBuf.
64569: */
64570: SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){
64571:   char *zCsr = zBuf;
64572:   int f = pMem->flags;
64573: 
64574:   static const char *const encnames[] = {"(X)", "(8)", "(16LE)", "(16BE)"};
64575: 
64576:   if( f&MEM_Blob ){
64577:     int i;
64578:     char c;
64579:     if( f & MEM_Dyn ){
64580:       c = 'z';
64581:       assert( (f & (MEM_Static|MEM_Ephem))==0 );
64582:     }else if( f & MEM_Static ){
64583:       c = 't';
64584:       assert( (f & (MEM_Dyn|MEM_Ephem))==0 );
64585:     }else if( f & MEM_Ephem ){
64586:       c = 'e';
64587:       assert( (f & (MEM_Static|MEM_Dyn))==0 );
64588:     }else{
64589:       c = 's';
64590:     }
64591: 
64592:     sqlite3_snprintf(100, zCsr, "%c", c);
64593:     zCsr += sqlite3Strlen30(zCsr);
64594:     sqlite3_snprintf(100, zCsr, "%d[", pMem->n);
64595:     zCsr += sqlite3Strlen30(zCsr);
64596:     for(i=0; i<16 && i<pMem->n; i++){
64597:       sqlite3_snprintf(100, zCsr, "%02X", ((int)pMem->z[i] & 0xFF));
64598:       zCsr += sqlite3Strlen30(zCsr);
64599:     }
64600:     for(i=0; i<16 && i<pMem->n; i++){
64601:       char z = pMem->z[i];
64602:       if( z<32 || z>126 ) *zCsr++ = '.';
64603:       else *zCsr++ = z;
64604:     }
64605: 
64606:     sqlite3_snprintf(100, zCsr, "]%s", encnames[pMem->enc]);
64607:     zCsr += sqlite3Strlen30(zCsr);
64608:     if( f & MEM_Zero ){
64609:       sqlite3_snprintf(100, zCsr,"+%dz",pMem->u.nZero);
64610:       zCsr += sqlite3Strlen30(zCsr);
64611:     }
64612:     *zCsr = '\0';
64613:   }else if( f & MEM_Str ){
64614:     int j, k;
64615:     zBuf[0] = ' ';
64616:     if( f & MEM_Dyn ){
64617:       zBuf[1] = 'z';
64618:       assert( (f & (MEM_Static|MEM_Ephem))==0 );
64619:     }else if( f & MEM_Static ){
64620:       zBuf[1] = 't';
64621:       assert( (f & (MEM_Dyn|MEM_Ephem))==0 );
64622:     }else if( f & MEM_Ephem ){
64623:       zBuf[1] = 'e';
64624:       assert( (f & (MEM_Static|MEM_Dyn))==0 );
64625:     }else{
64626:       zBuf[1] = 's';
64627:     }
64628:     k = 2;
64629:     sqlite3_snprintf(100, &zBuf[k], "%d", pMem->n);
64630:     k += sqlite3Strlen30(&zBuf[k]);
64631:     zBuf[k++] = '[';
64632:     for(j=0; j<15 && j<pMem->n; j++){
64633:       u8 c = pMem->z[j];
64634:       if( c>=0x20 && c<0x7f ){
64635:         zBuf[k++] = c;
64636:       }else{
64637:         zBuf[k++] = '.';
64638:       }
64639:     }
64640:     zBuf[k++] = ']';
64641:     sqlite3_snprintf(100,&zBuf[k], encnames[pMem->enc]);
64642:     k += sqlite3Strlen30(&zBuf[k]);
64643:     zBuf[k++] = 0;
64644:   }
64645: }
64646: #endif
64647: 
64648: #ifdef SQLITE_DEBUG
64649: /*
64650: ** Print the value of a register for tracing purposes:
64651: */
64652: static void memTracePrint(FILE *out, Mem *p){
64653:   if( p->flags & MEM_Null ){
64654:     fprintf(out, " NULL");
64655:   }else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){
64656:     fprintf(out, " si:%lld", p->u.i);
64657:   }else if( p->flags & MEM_Int ){
64658:     fprintf(out, " i:%lld", p->u.i);
64659: #ifndef SQLITE_OMIT_FLOATING_POINT
64660:   }else if( p->flags & MEM_Real ){
64661:     fprintf(out, " r:%g", p->r);
64662: #endif
64663:   }else if( p->flags & MEM_RowSet ){
64664:     fprintf(out, " (rowset)");
64665:   }else{
64666:     char zBuf[200];
64667:     sqlite3VdbeMemPrettyPrint(p, zBuf);
64668:     fprintf(out, " ");
64669:     fprintf(out, "%s", zBuf);
64670:   }
64671: }
64672: static void registerTrace(FILE *out, int iReg, Mem *p){
64673:   fprintf(out, "REG[%d] = ", iReg);
64674:   memTracePrint(out, p);
64675:   fprintf(out, "\n");
64676: }
64677: #endif
64678: 
64679: #ifdef SQLITE_DEBUG
64680: #  define REGISTER_TRACE(R,M) if(p->trace)registerTrace(p->trace,R,M)
64681: #else
64682: #  define REGISTER_TRACE(R,M)
64683: #endif
64684: 
64685: 
64686: #ifdef VDBE_PROFILE
64687: 
64688: /* 
64689: ** hwtime.h contains inline assembler code for implementing 
64690: ** high-performance timing routines.
64691: */
64692: /************** Include hwtime.h in the middle of vdbe.c *********************/
64693: /************** Begin file hwtime.h ******************************************/
64694: /*
64695: ** 2008 May 27
64696: **
64697: ** The author disclaims copyright to this source code.  In place of
64698: ** a legal notice, here is a blessing:
64699: **
64700: **    May you do good and not evil.
64701: **    May you find forgiveness for yourself and forgive others.
64702: **    May you share freely, never taking more than you give.
64703: **
64704: ******************************************************************************
64705: **
64706: ** This file contains inline asm code for retrieving "high-performance"
64707: ** counters for x86 class CPUs.
64708: */
64709: #ifndef _HWTIME_H_
64710: #define _HWTIME_H_
64711: 
64712: /*
64713: ** The following routine only works on pentium-class (or newer) processors.
64714: ** It uses the RDTSC opcode to read the cycle count value out of the
64715: ** processor and returns that value.  This can be used for high-res
64716: ** profiling.
64717: */
64718: #if (defined(__GNUC__) || defined(_MSC_VER)) && \
64719:       (defined(i386) || defined(__i386__) || defined(_M_IX86))
64720: 
64721:   #if defined(__GNUC__)
64722: 
64723:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
64724:      unsigned int lo, hi;
64725:      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
64726:      return (sqlite_uint64)hi << 32 | lo;
64727:   }
64728: 
64729:   #elif defined(_MSC_VER)
64730: 
64731:   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
64732:      __asm {
64733:         rdtsc
64734:         ret       ; return value at EDX:EAX
64735:      }
64736:   }
64737: 
64738:   #endif
64739: 
64740: #elif (defined(__GNUC__) && defined(__x86_64__))
64741: 
64742:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
64743:       unsigned long val;
64744:       __asm__ __volatile__ ("rdtsc" : "=A" (val));
64745:       return val;
64746:   }
64747:  
64748: #elif (defined(__GNUC__) && defined(__ppc__))
64749: 
64750:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
64751:       unsigned long long retval;
64752:       unsigned long junk;
64753:       __asm__ __volatile__ ("\n\
64754:           1:      mftbu   %1\n\
64755:                   mftb    %L0\n\
64756:                   mftbu   %0\n\
64757:                   cmpw    %0,%1\n\
64758:                   bne     1b"
64759:                   : "=r" (retval), "=r" (junk));
64760:       return retval;
64761:   }
64762: 
64763: #else
64764: 
64765:   #error Need implementation of sqlite3Hwtime() for your platform.
64766: 
64767:   /*
64768:   ** To compile without implementing sqlite3Hwtime() for your platform,
64769:   ** you can remove the above #error and use the following
64770:   ** stub function.  You will lose timing support for many
64771:   ** of the debugging and testing utilities, but it should at
64772:   ** least compile and run.
64773:   */
64774: SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
64775: 
64776: #endif
64777: 
64778: #endif /* !defined(_HWTIME_H_) */
64779: 
64780: /************** End of hwtime.h **********************************************/
64781: /************** Continuing where we left off in vdbe.c ***********************/
64782: 
64783: #endif
64784: 
64785: /*
64786: ** The CHECK_FOR_INTERRUPT macro defined here looks to see if the
64787: ** sqlite3_interrupt() routine has been called.  If it has been, then
64788: ** processing of the VDBE program is interrupted.
64789: **
64790: ** This macro added to every instruction that does a jump in order to
64791: ** implement a loop.  This test used to be on every single instruction,
64792: ** but that meant we more testing than we needed.  By only testing the
64793: ** flag on jump instructions, we get a (small) speed improvement.
64794: */
64795: #define CHECK_FOR_INTERRUPT \
64796:    if( db->u1.isInterrupted ) goto abort_due_to_interrupt;
64797: 
64798: 
64799: #ifndef NDEBUG
64800: /*
64801: ** This function is only called from within an assert() expression. It
64802: ** checks that the sqlite3.nTransaction variable is correctly set to
64803: ** the number of non-transaction savepoints currently in the 
64804: ** linked list starting at sqlite3.pSavepoint.
64805: ** 
64806: ** Usage:
64807: **
64808: **     assert( checkSavepointCount(db) );
64809: */
64810: static int checkSavepointCount(sqlite3 *db){
64811:   int n = 0;
64812:   Savepoint *p;
64813:   for(p=db->pSavepoint; p; p=p->pNext) n++;
64814:   assert( n==(db->nSavepoint + db->isTransactionSavepoint) );
64815:   return 1;
64816: }
64817: #endif
64818: 
64819: /*
64820: ** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored
64821: ** in memory obtained from sqlite3_malloc) into a Vdbe.zErrMsg (text stored
64822: ** in memory obtained from sqlite3DbMalloc).
64823: */
64824: static void importVtabErrMsg(Vdbe *p, sqlite3_vtab *pVtab){
64825:   sqlite3 *db = p->db;
64826:   sqlite3DbFree(db, p->zErrMsg);
64827:   p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
64828:   sqlite3_free(pVtab->zErrMsg);
64829:   pVtab->zErrMsg = 0;
64830: }
64831: 
64832: 
64833: /*
64834: ** Execute as much of a VDBE program as we can then return.
64835: **
64836: ** sqlite3VdbeMakeReady() must be called before this routine in order to
64837: ** close the program with a final OP_Halt and to set up the callbacks
64838: ** and the error message pointer.
64839: **
64840: ** Whenever a row or result data is available, this routine will either
64841: ** invoke the result callback (if there is one) or return with
64842: ** SQLITE_ROW.
64843: **
64844: ** If an attempt is made to open a locked database, then this routine
64845: ** will either invoke the busy callback (if there is one) or it will
64846: ** return SQLITE_BUSY.
64847: **
64848: ** If an error occurs, an error message is written to memory obtained
64849: ** from sqlite3_malloc() and p->zErrMsg is made to point to that memory.
64850: ** The error code is stored in p->rc and this routine returns SQLITE_ERROR.
64851: **
64852: ** If the callback ever returns non-zero, then the program exits
64853: ** immediately.  There will be no error message but the p->rc field is
64854: ** set to SQLITE_ABORT and this routine will return SQLITE_ERROR.
64855: **
64856: ** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this
64857: ** routine to return SQLITE_ERROR.
64858: **
64859: ** Other fatal errors return SQLITE_ERROR.
64860: **
64861: ** After this routine has finished, sqlite3VdbeFinalize() should be
64862: ** used to clean up the mess that was left behind.
64863: */
64864: SQLITE_PRIVATE int sqlite3VdbeExec(
64865:   Vdbe *p                    /* The VDBE */
64866: ){
64867:   int pc=0;                  /* The program counter */
64868:   Op *aOp = p->aOp;          /* Copy of p->aOp */
64869:   Op *pOp;                   /* Current operation */
64870:   int rc = SQLITE_OK;        /* Value to return */
64871:   sqlite3 *db = p->db;       /* The database */
64872:   u8 resetSchemaOnFault = 0; /* Reset schema after an error if positive */
64873:   u8 encoding = ENC(db);     /* The database encoding */
64874: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
64875:   int checkProgress;         /* True if progress callbacks are enabled */
64876:   int nProgressOps = 0;      /* Opcodes executed since progress callback. */
64877: #endif
64878:   Mem *aMem = p->aMem;       /* Copy of p->aMem */
64879:   Mem *pIn1 = 0;             /* 1st input operand */
64880:   Mem *pIn2 = 0;             /* 2nd input operand */
64881:   Mem *pIn3 = 0;             /* 3rd input operand */
64882:   Mem *pOut = 0;             /* Output operand */
64883:   int iCompare = 0;          /* Result of last OP_Compare operation */
64884:   int *aPermute = 0;         /* Permutation of columns for OP_Compare */
64885:   i64 lastRowid = db->lastRowid;  /* Saved value of the last insert ROWID */
64886: #ifdef VDBE_PROFILE
64887:   u64 start;                 /* CPU clock count at start of opcode */
64888:   int origPc;                /* Program counter at start of opcode */
64889: #endif
64890:   /********************************************************************
64891:   ** Automatically generated code
64892:   **
64893:   ** The following union is automatically generated by the
64894:   ** vdbe-compress.tcl script.  The purpose of this union is to
64895:   ** reduce the amount of stack space required by this function.
64896:   ** See comments in the vdbe-compress.tcl script for details.
64897:   */
64898:   union vdbeExecUnion {
64899:     struct OP_Yield_stack_vars {
64900:       int pcDest;
64901:     } aa;
64902:     struct OP_Null_stack_vars {
64903:       int cnt;
64904:     } ab;
64905:     struct OP_Variable_stack_vars {
64906:       Mem *pVar;       /* Value being transferred */
64907:     } ac;
64908:     struct OP_Move_stack_vars {
64909:       char *zMalloc;   /* Holding variable for allocated memory */
64910:       int n;           /* Number of registers left to copy */
64911:       int p1;          /* Register to copy from */
64912:       int p2;          /* Register to copy to */
64913:     } ad;
64914:     struct OP_ResultRow_stack_vars {
64915:       Mem *pMem;
64916:       int i;
64917:     } ae;
64918:     struct OP_Concat_stack_vars {
64919:       i64 nByte;
64920:     } af;
64921:     struct OP_Remainder_stack_vars {
64922:       int flags;      /* Combined MEM_* flags from both inputs */
64923:       i64 iA;         /* Integer value of left operand */
64924:       i64 iB;         /* Integer value of right operand */
64925:       double rA;      /* Real value of left operand */
64926:       double rB;      /* Real value of right operand */
64927:     } ag;
64928:     struct OP_Function_stack_vars {
64929:       int i;
64930:       Mem *pArg;
64931:       sqlite3_context ctx;
64932:       sqlite3_value **apVal;
64933:       int n;
64934:     } ah;
64935:     struct OP_ShiftRight_stack_vars {
64936:       i64 iA;
64937:       u64 uA;
64938:       i64 iB;
64939:       u8 op;
64940:     } ai;
64941:     struct OP_Ge_stack_vars {
64942:       int res;            /* Result of the comparison of pIn1 against pIn3 */
64943:       char affinity;      /* Affinity to use for comparison */
64944:       u16 flags1;         /* Copy of initial value of pIn1->flags */
64945:       u16 flags3;         /* Copy of initial value of pIn3->flags */
64946:     } aj;
64947:     struct OP_Compare_stack_vars {
64948:       int n;
64949:       int i;
64950:       int p1;
64951:       int p2;
64952:       const KeyInfo *pKeyInfo;
64953:       int idx;
64954:       CollSeq *pColl;    /* Collating sequence to use on this term */
64955:       int bRev;          /* True for DESCENDING sort order */
64956:     } ak;
64957:     struct OP_Or_stack_vars {
64958:       int v1;    /* Left operand:  0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
64959:       int v2;    /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
64960:     } al;
64961:     struct OP_IfNot_stack_vars {
64962:       int c;
64963:     } am;
64964:     struct OP_Column_stack_vars {
64965:       u32 payloadSize;   /* Number of bytes in the record */
64966:       i64 payloadSize64; /* Number of bytes in the record */
64967:       int p1;            /* P1 value of the opcode */
64968:       int p2;            /* column number to retrieve */
64969:       VdbeCursor *pC;    /* The VDBE cursor */
64970:       char *zRec;        /* Pointer to complete record-data */
64971:       BtCursor *pCrsr;   /* The BTree cursor */
64972:       u32 *aType;        /* aType[i] holds the numeric type of the i-th column */
64973:       u32 *aOffset;      /* aOffset[i] is offset to start of data for i-th column */
64974:       int nField;        /* number of fields in the record */
64975:       int len;           /* The length of the serialized data for the column */
64976:       int i;             /* Loop counter */
64977:       char *zData;       /* Part of the record being decoded */
64978:       Mem *pDest;        /* Where to write the extracted value */
64979:       Mem sMem;          /* For storing the record being decoded */
64980:       u8 *zIdx;          /* Index into header */
64981:       u8 *zEndHdr;       /* Pointer to first byte after the header */
64982:       u32 offset;        /* Offset into the data */
64983:       u32 szField;       /* Number of bytes in the content of a field */
64984:       int szHdr;         /* Size of the header size field at start of record */
64985:       int avail;         /* Number of bytes of available data */
64986:       u32 t;             /* A type code from the record header */
64987:       Mem *pReg;         /* PseudoTable input register */
64988:     } an;
64989:     struct OP_Affinity_stack_vars {
64990:       const char *zAffinity;   /* The affinity to be applied */
64991:       char cAff;               /* A single character of affinity */
64992:     } ao;
64993:     struct OP_MakeRecord_stack_vars {
64994:       u8 *zNewRecord;        /* A buffer to hold the data for the new record */
64995:       Mem *pRec;             /* The new record */
64996:       u64 nData;             /* Number of bytes of data space */
64997:       int nHdr;              /* Number of bytes of header space */
64998:       i64 nByte;             /* Data space required for this record */
64999:       int nZero;             /* Number of zero bytes at the end of the record */
65000:       int nVarint;           /* Number of bytes in a varint */
65001:       u32 serial_type;       /* Type field */
65002:       Mem *pData0;           /* First field to be combined into the record */
65003:       Mem *pLast;            /* Last field of the record */
65004:       int nField;            /* Number of fields in the record */
65005:       char *zAffinity;       /* The affinity string for the record */
65006:       int file_format;       /* File format to use for encoding */
65007:       int i;                 /* Space used in zNewRecord[] */
65008:       int len;               /* Length of a field */
65009:     } ap;
65010:     struct OP_Count_stack_vars {
65011:       i64 nEntry;
65012:       BtCursor *pCrsr;
65013:     } aq;
65014:     struct OP_Savepoint_stack_vars {
65015:       int p1;                         /* Value of P1 operand */
65016:       char *zName;                    /* Name of savepoint */
65017:       int nName;
65018:       Savepoint *pNew;
65019:       Savepoint *pSavepoint;
65020:       Savepoint *pTmp;
65021:       int iSavepoint;
65022:       int ii;
65023:     } ar;
65024:     struct OP_AutoCommit_stack_vars {
65025:       int desiredAutoCommit;
65026:       int iRollback;
65027:       int turnOnAC;
65028:     } as;
65029:     struct OP_Transaction_stack_vars {
65030:       Btree *pBt;
65031:     } at;
65032:     struct OP_ReadCookie_stack_vars {
65033:       int iMeta;
65034:       int iDb;
65035:       int iCookie;
65036:     } au;
65037:     struct OP_SetCookie_stack_vars {
65038:       Db *pDb;
65039:     } av;
65040:     struct OP_VerifyCookie_stack_vars {
65041:       int iMeta;
65042:       int iGen;
65043:       Btree *pBt;
65044:     } aw;
65045:     struct OP_OpenWrite_stack_vars {
65046:       int nField;
65047:       KeyInfo *pKeyInfo;
65048:       int p2;
65049:       int iDb;
65050:       int wrFlag;
65051:       Btree *pX;
65052:       VdbeCursor *pCur;
65053:       Db *pDb;
65054:     } ax;
65055:     struct OP_OpenEphemeral_stack_vars {
65056:       VdbeCursor *pCx;
65057:     } ay;
65058:     struct OP_SorterOpen_stack_vars {
65059:       VdbeCursor *pCx;
65060:     } az;
65061:     struct OP_OpenPseudo_stack_vars {
65062:       VdbeCursor *pCx;
65063:     } ba;
65064:     struct OP_SeekGt_stack_vars {
65065:       int res;
65066:       int oc;
65067:       VdbeCursor *pC;
65068:       UnpackedRecord r;
65069:       int nField;
65070:       i64 iKey;      /* The rowid we are to seek to */
65071:     } bb;
65072:     struct OP_Seek_stack_vars {
65073:       VdbeCursor *pC;
65074:     } bc;
65075:     struct OP_Found_stack_vars {
65076:       int alreadyExists;
65077:       VdbeCursor *pC;
65078:       int res;
65079:       char *pFree;
65080:       UnpackedRecord *pIdxKey;
65081:       UnpackedRecord r;
65082:       char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7];
65083:     } bd;
65084:     struct OP_IsUnique_stack_vars {
65085:       u16 ii;
65086:       VdbeCursor *pCx;
65087:       BtCursor *pCrsr;
65088:       u16 nField;
65089:       Mem *aMx;
65090:       UnpackedRecord r;                  /* B-Tree index search key */
65091:       i64 R;                             /* Rowid stored in register P3 */
65092:     } be;
65093:     struct OP_NotExists_stack_vars {
65094:       VdbeCursor *pC;
65095:       BtCursor *pCrsr;
65096:       int res;
65097:       u64 iKey;
65098:     } bf;
65099:     struct OP_NewRowid_stack_vars {
65100:       i64 v;                 /* The new rowid */
65101:       VdbeCursor *pC;        /* Cursor of table to get the new rowid */
65102:       int res;               /* Result of an sqlite3BtreeLast() */
65103:       int cnt;               /* Counter to limit the number of searches */
65104:       Mem *pMem;             /* Register holding largest rowid for AUTOINCREMENT */
65105:       VdbeFrame *pFrame;     /* Root frame of VDBE */
65106:     } bg;
65107:     struct OP_InsertInt_stack_vars {
65108:       Mem *pData;       /* MEM cell holding data for the record to be inserted */
65109:       Mem *pKey;        /* MEM cell holding key  for the record */
65110:       i64 iKey;         /* The integer ROWID or key for the record to be inserted */
65111:       VdbeCursor *pC;   /* Cursor to table into which insert is written */
65112:       int nZero;        /* Number of zero-bytes to append */
65113:       int seekResult;   /* Result of prior seek or 0 if no USESEEKRESULT flag */
65114:       const char *zDb;  /* database name - used by the update hook */
65115:       const char *zTbl; /* Table name - used by the opdate hook */
65116:       int op;           /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
65117:     } bh;
65118:     struct OP_Delete_stack_vars {
65119:       i64 iKey;
65120:       VdbeCursor *pC;
65121:     } bi;
65122:     struct OP_SorterCompare_stack_vars {
65123:       VdbeCursor *pC;
65124:       int res;
65125:     } bj;
65126:     struct OP_SorterData_stack_vars {
65127:       VdbeCursor *pC;
65128:     } bk;
65129:     struct OP_RowData_stack_vars {
65130:       VdbeCursor *pC;
65131:       BtCursor *pCrsr;
65132:       u32 n;
65133:       i64 n64;
65134:     } bl;
65135:     struct OP_Rowid_stack_vars {
65136:       VdbeCursor *pC;
65137:       i64 v;
65138:       sqlite3_vtab *pVtab;
65139:       const sqlite3_module *pModule;
65140:     } bm;
65141:     struct OP_NullRow_stack_vars {
65142:       VdbeCursor *pC;
65143:     } bn;
65144:     struct OP_Last_stack_vars {
65145:       VdbeCursor *pC;
65146:       BtCursor *pCrsr;
65147:       int res;
65148:     } bo;
65149:     struct OP_Rewind_stack_vars {
65150:       VdbeCursor *pC;
65151:       BtCursor *pCrsr;
65152:       int res;
65153:     } bp;
65154:     struct OP_Next_stack_vars {
65155:       VdbeCursor *pC;
65156:       int res;
65157:     } bq;
65158:     struct OP_IdxInsert_stack_vars {
65159:       VdbeCursor *pC;
65160:       BtCursor *pCrsr;
65161:       int nKey;
65162:       const char *zKey;
65163:     } br;
65164:     struct OP_IdxDelete_stack_vars {
65165:       VdbeCursor *pC;
65166:       BtCursor *pCrsr;
65167:       int res;
65168:       UnpackedRecord r;
65169:     } bs;
65170:     struct OP_IdxRowid_stack_vars {
65171:       BtCursor *pCrsr;
65172:       VdbeCursor *pC;
65173:       i64 rowid;
65174:     } bt;
65175:     struct OP_IdxGE_stack_vars {
65176:       VdbeCursor *pC;
65177:       int res;
65178:       UnpackedRecord r;
65179:     } bu;
65180:     struct OP_Destroy_stack_vars {
65181:       int iMoved;
65182:       int iCnt;
65183:       Vdbe *pVdbe;
65184:       int iDb;
65185:     } bv;
65186:     struct OP_Clear_stack_vars {
65187:       int nChange;
65188:     } bw;
65189:     struct OP_CreateTable_stack_vars {
65190:       int pgno;
65191:       int flags;
65192:       Db *pDb;
65193:     } bx;
65194:     struct OP_ParseSchema_stack_vars {
65195:       int iDb;
65196:       const char *zMaster;
65197:       char *zSql;
65198:       InitData initData;
65199:     } by;
65200:     struct OP_IntegrityCk_stack_vars {
65201:       int nRoot;      /* Number of tables to check.  (Number of root pages.) */
65202:       int *aRoot;     /* Array of rootpage numbers for tables to be checked */
65203:       int j;          /* Loop counter */
65204:       int nErr;       /* Number of errors reported */
65205:       char *z;        /* Text of the error report */
65206:       Mem *pnErr;     /* Register keeping track of errors remaining */
65207:     } bz;
65208:     struct OP_RowSetRead_stack_vars {
65209:       i64 val;
65210:     } ca;
65211:     struct OP_RowSetTest_stack_vars {
65212:       int iSet;
65213:       int exists;
65214:     } cb;
65215:     struct OP_Program_stack_vars {
65216:       int nMem;               /* Number of memory registers for sub-program */
65217:       int nByte;              /* Bytes of runtime space required for sub-program */
65218:       Mem *pRt;               /* Register to allocate runtime space */
65219:       Mem *pMem;              /* Used to iterate through memory cells */
65220:       Mem *pEnd;              /* Last memory cell in new array */
65221:       VdbeFrame *pFrame;      /* New vdbe frame to execute in */
65222:       SubProgram *pProgram;   /* Sub-program to execute */
65223:       void *t;                /* Token identifying trigger */
65224:     } cc;
65225:     struct OP_Param_stack_vars {
65226:       VdbeFrame *pFrame;
65227:       Mem *pIn;
65228:     } cd;
65229:     struct OP_MemMax_stack_vars {
65230:       Mem *pIn1;
65231:       VdbeFrame *pFrame;
65232:     } ce;
65233:     struct OP_AggStep_stack_vars {
65234:       int n;
65235:       int i;
65236:       Mem *pMem;
65237:       Mem *pRec;
65238:       sqlite3_context ctx;
65239:       sqlite3_value **apVal;
65240:     } cf;
65241:     struct OP_AggFinal_stack_vars {
65242:       Mem *pMem;
65243:     } cg;
65244:     struct OP_Checkpoint_stack_vars {
65245:       int i;                          /* Loop counter */
65246:       int aRes[3];                    /* Results */
65247:       Mem *pMem;                      /* Write results here */
65248:     } ch;
65249:     struct OP_JournalMode_stack_vars {
65250:       Btree *pBt;                     /* Btree to change journal mode of */
65251:       Pager *pPager;                  /* Pager associated with pBt */
65252:       int eNew;                       /* New journal mode */
65253:       int eOld;                       /* The old journal mode */
65254:       const char *zFilename;          /* Name of database file for pPager */
65255:     } ci;
65256:     struct OP_IncrVacuum_stack_vars {
65257:       Btree *pBt;
65258:     } cj;
65259:     struct OP_VBegin_stack_vars {
65260:       VTable *pVTab;
65261:     } ck;
65262:     struct OP_VOpen_stack_vars {
65263:       VdbeCursor *pCur;
65264:       sqlite3_vtab_cursor *pVtabCursor;
65265:       sqlite3_vtab *pVtab;
65266:       sqlite3_module *pModule;
65267:     } cl;
65268:     struct OP_VFilter_stack_vars {
65269:       int nArg;
65270:       int iQuery;
65271:       const sqlite3_module *pModule;
65272:       Mem *pQuery;
65273:       Mem *pArgc;
65274:       sqlite3_vtab_cursor *pVtabCursor;
65275:       sqlite3_vtab *pVtab;
65276:       VdbeCursor *pCur;
65277:       int res;
65278:       int i;
65279:       Mem **apArg;
65280:     } cm;
65281:     struct OP_VColumn_stack_vars {
65282:       sqlite3_vtab *pVtab;
65283:       const sqlite3_module *pModule;
65284:       Mem *pDest;
65285:       sqlite3_context sContext;
65286:     } cn;
65287:     struct OP_VNext_stack_vars {
65288:       sqlite3_vtab *pVtab;
65289:       const sqlite3_module *pModule;
65290:       int res;
65291:       VdbeCursor *pCur;
65292:     } co;
65293:     struct OP_VRename_stack_vars {
65294:       sqlite3_vtab *pVtab;
65295:       Mem *pName;
65296:     } cp;
65297:     struct OP_VUpdate_stack_vars {
65298:       sqlite3_vtab *pVtab;
65299:       sqlite3_module *pModule;
65300:       int nArg;
65301:       int i;
65302:       sqlite_int64 rowid;
65303:       Mem **apArg;
65304:       Mem *pX;
65305:     } cq;
65306:     struct OP_Trace_stack_vars {
65307:       char *zTrace;
65308:       char *z;
65309:     } cr;
65310:   } u;
65311:   /* End automatically generated code
65312:   ********************************************************************/
65313: 
65314:   assert( p->magic==VDBE_MAGIC_RUN );  /* sqlite3_step() verifies this */
65315:   sqlite3VdbeEnter(p);
65316:   if( p->rc==SQLITE_NOMEM ){
65317:     /* This happens if a malloc() inside a call to sqlite3_column_text() or
65318:     ** sqlite3_column_text16() failed.  */
65319:     goto no_mem;
65320:   }
65321:   assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY );
65322:   p->rc = SQLITE_OK;
65323:   assert( p->explain==0 );
65324:   p->pResultSet = 0;
65325:   db->busyHandler.nBusy = 0;
65326:   CHECK_FOR_INTERRUPT;
65327:   sqlite3VdbeIOTraceSql(p);
65328: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
65329:   checkProgress = db->xProgress!=0;
65330: #endif
65331: #ifdef SQLITE_DEBUG
65332:   sqlite3BeginBenignMalloc();
65333:   if( p->pc==0  && (p->db->flags & SQLITE_VdbeListing)!=0 ){
65334:     int i;
65335:     printf("VDBE Program Listing:\n");
65336:     sqlite3VdbePrintSql(p);
65337:     for(i=0; i<p->nOp; i++){
65338:       sqlite3VdbePrintOp(stdout, i, &aOp[i]);
65339:     }
65340:   }
65341:   sqlite3EndBenignMalloc();
65342: #endif
65343:   for(pc=p->pc; rc==SQLITE_OK; pc++){
65344:     assert( pc>=0 && pc<p->nOp );
65345:     if( db->mallocFailed ) goto no_mem;
65346: #ifdef VDBE_PROFILE
65347:     origPc = pc;
65348:     start = sqlite3Hwtime();
65349: #endif
65350:     pOp = &aOp[pc];
65351: 
65352:     /* Only allow tracing if SQLITE_DEBUG is defined.
65353:     */
65354: #ifdef SQLITE_DEBUG
65355:     if( p->trace ){
65356:       if( pc==0 ){
65357:         printf("VDBE Execution Trace:\n");
65358:         sqlite3VdbePrintSql(p);
65359:       }
65360:       sqlite3VdbePrintOp(p->trace, pc, pOp);
65361:     }
65362: #endif
65363:       
65364: 
65365:     /* Check to see if we need to simulate an interrupt.  This only happens
65366:     ** if we have a special test build.
65367:     */
65368: #ifdef SQLITE_TEST
65369:     if( sqlite3_interrupt_count>0 ){
65370:       sqlite3_interrupt_count--;
65371:       if( sqlite3_interrupt_count==0 ){
65372:         sqlite3_interrupt(db);
65373:       }
65374:     }
65375: #endif
65376: 
65377: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
65378:     /* Call the progress callback if it is configured and the required number
65379:     ** of VDBE ops have been executed (either since this invocation of
65380:     ** sqlite3VdbeExec() or since last time the progress callback was called).
65381:     ** If the progress callback returns non-zero, exit the virtual machine with
65382:     ** a return code SQLITE_ABORT.
65383:     */
65384:     if( checkProgress ){
65385:       if( db->nProgressOps==nProgressOps ){
65386:         int prc;
65387:         prc = db->xProgress(db->pProgressArg);
65388:         if( prc!=0 ){
65389:           rc = SQLITE_INTERRUPT;
65390:           goto vdbe_error_halt;
65391:         }
65392:         nProgressOps = 0;
65393:       }
65394:       nProgressOps++;
65395:     }
65396: #endif
65397: 
65398:     /* On any opcode with the "out2-prerelase" tag, free any
65399:     ** external allocations out of mem[p2] and set mem[p2] to be
65400:     ** an undefined integer.  Opcodes will either fill in the integer
65401:     ** value or convert mem[p2] to a different type.
65402:     */
65403:     assert( pOp->opflags==sqlite3OpcodeProperty[pOp->opcode] );
65404:     if( pOp->opflags & OPFLG_OUT2_PRERELEASE ){
65405:       assert( pOp->p2>0 );
65406:       assert( pOp->p2<=p->nMem );
65407:       pOut = &aMem[pOp->p2];
65408:       memAboutToChange(p, pOut);
65409:       VdbeMemRelease(pOut);
65410:       pOut->flags = MEM_Int;
65411:     }
65412: 
65413:     /* Sanity checking on other operands */
65414: #ifdef SQLITE_DEBUG
65415:     if( (pOp->opflags & OPFLG_IN1)!=0 ){
65416:       assert( pOp->p1>0 );
65417:       assert( pOp->p1<=p->nMem );
65418:       assert( memIsValid(&aMem[pOp->p1]) );
65419:       REGISTER_TRACE(pOp->p1, &aMem[pOp->p1]);
65420:     }
65421:     if( (pOp->opflags & OPFLG_IN2)!=0 ){
65422:       assert( pOp->p2>0 );
65423:       assert( pOp->p2<=p->nMem );
65424:       assert( memIsValid(&aMem[pOp->p2]) );
65425:       REGISTER_TRACE(pOp->p2, &aMem[pOp->p2]);
65426:     }
65427:     if( (pOp->opflags & OPFLG_IN3)!=0 ){
65428:       assert( pOp->p3>0 );
65429:       assert( pOp->p3<=p->nMem );
65430:       assert( memIsValid(&aMem[pOp->p3]) );
65431:       REGISTER_TRACE(pOp->p3, &aMem[pOp->p3]);
65432:     }
65433:     if( (pOp->opflags & OPFLG_OUT2)!=0 ){
65434:       assert( pOp->p2>0 );
65435:       assert( pOp->p2<=p->nMem );
65436:       memAboutToChange(p, &aMem[pOp->p2]);
65437:     }
65438:     if( (pOp->opflags & OPFLG_OUT3)!=0 ){
65439:       assert( pOp->p3>0 );
65440:       assert( pOp->p3<=p->nMem );
65441:       memAboutToChange(p, &aMem[pOp->p3]);
65442:     }
65443: #endif
65444:   
65445:     switch( pOp->opcode ){
65446: 
65447: /*****************************************************************************
65448: ** What follows is a massive switch statement where each case implements a
65449: ** separate instruction in the virtual machine.  If we follow the usual
65450: ** indentation conventions, each case should be indented by 6 spaces.  But
65451: ** that is a lot of wasted space on the left margin.  So the code within
65452: ** the switch statement will break with convention and be flush-left. Another
65453: ** big comment (similar to this one) will mark the point in the code where
65454: ** we transition back to normal indentation.
65455: **
65456: ** The formatting of each case is important.  The makefile for SQLite
65457: ** generates two C files "opcodes.h" and "opcodes.c" by scanning this
65458: ** file looking for lines that begin with "case OP_".  The opcodes.h files
65459: ** will be filled with #defines that give unique integer values to each
65460: ** opcode and the opcodes.c file is filled with an array of strings where
65461: ** each string is the symbolic name for the corresponding opcode.  If the
65462: ** case statement is followed by a comment of the form "/# same as ... #/"
65463: ** that comment is used to determine the particular value of the opcode.
65464: **
65465: ** Other keywords in the comment that follows each case are used to
65466: ** construct the OPFLG_INITIALIZER value that initializes opcodeProperty[].
65467: ** Keywords include: in1, in2, in3, out2_prerelease, out2, out3.  See
65468: ** the mkopcodeh.awk script for additional information.
65469: **
65470: ** Documentation about VDBE opcodes is generated by scanning this file
65471: ** for lines of that contain "Opcode:".  That line and all subsequent
65472: ** comment lines are used in the generation of the opcode.html documentation
65473: ** file.
65474: **
65475: ** SUMMARY:
65476: **
65477: **     Formatting is important to scripts that scan this file.
65478: **     Do not deviate from the formatting style currently in use.
65479: **
65480: *****************************************************************************/
65481: 
65482: /* Opcode:  Goto * P2 * * *
65483: **
65484: ** An unconditional jump to address P2.
65485: ** The next instruction executed will be 
65486: ** the one at index P2 from the beginning of
65487: ** the program.
65488: */
65489: case OP_Goto: {             /* jump */
65490:   CHECK_FOR_INTERRUPT;
65491:   pc = pOp->p2 - 1;
65492:   break;
65493: }
65494: 
65495: /* Opcode:  Gosub P1 P2 * * *
65496: **
65497: ** Write the current address onto register P1
65498: ** and then jump to address P2.
65499: */
65500: case OP_Gosub: {            /* jump */
65501:   assert( pOp->p1>0 && pOp->p1<=p->nMem );
65502:   pIn1 = &aMem[pOp->p1];
65503:   assert( (pIn1->flags & MEM_Dyn)==0 );
65504:   memAboutToChange(p, pIn1);
65505:   pIn1->flags = MEM_Int;
65506:   pIn1->u.i = pc;
65507:   REGISTER_TRACE(pOp->p1, pIn1);
65508:   pc = pOp->p2 - 1;
65509:   break;
65510: }
65511: 
65512: /* Opcode:  Return P1 * * * *
65513: **
65514: ** Jump to the next instruction after the address in register P1.
65515: */
65516: case OP_Return: {           /* in1 */
65517:   pIn1 = &aMem[pOp->p1];
65518:   assert( pIn1->flags & MEM_Int );
65519:   pc = (int)pIn1->u.i;
65520:   break;
65521: }
65522: 
65523: /* Opcode:  Yield P1 * * * *
65524: **
65525: ** Swap the program counter with the value in register P1.
65526: */
65527: case OP_Yield: {            /* in1 */
65528: #if 0  /* local variables moved into u.aa */
65529:   int pcDest;
65530: #endif /* local variables moved into u.aa */
65531:   pIn1 = &aMem[pOp->p1];
65532:   assert( (pIn1->flags & MEM_Dyn)==0 );
65533:   pIn1->flags = MEM_Int;
65534:   u.aa.pcDest = (int)pIn1->u.i;
65535:   pIn1->u.i = pc;
65536:   REGISTER_TRACE(pOp->p1, pIn1);
65537:   pc = u.aa.pcDest;
65538:   break;
65539: }
65540: 
65541: /* Opcode:  HaltIfNull  P1 P2 P3 P4 *
65542: **
65543: ** Check the value in register P3.  If it is NULL then Halt using
65544: ** parameter P1, P2, and P4 as if this were a Halt instruction.  If the
65545: ** value in register P3 is not NULL, then this routine is a no-op.
65546: */
65547: case OP_HaltIfNull: {      /* in3 */
65548:   pIn3 = &aMem[pOp->p3];
65549:   if( (pIn3->flags & MEM_Null)==0 ) break;
65550:   /* Fall through into OP_Halt */
65551: }
65552: 
65553: /* Opcode:  Halt P1 P2 * P4 *
65554: **
65555: ** Exit immediately.  All open cursors, etc are closed
65556: ** automatically.
65557: **
65558: ** P1 is the result code returned by sqlite3_exec(), sqlite3_reset(),
65559: ** or sqlite3_finalize().  For a normal halt, this should be SQLITE_OK (0).
65560: ** For errors, it can be some other value.  If P1!=0 then P2 will determine
65561: ** whether or not to rollback the current transaction.  Do not rollback
65562: ** if P2==OE_Fail. Do the rollback if P2==OE_Rollback.  If P2==OE_Abort,
65563: ** then back out all changes that have occurred during this execution of the
65564: ** VDBE, but do not rollback the transaction. 
65565: **
65566: ** If P4 is not null then it is an error message string.
65567: **
65568: ** There is an implied "Halt 0 0 0" instruction inserted at the very end of
65569: ** every program.  So a jump past the last instruction of the program
65570: ** is the same as executing Halt.
65571: */
65572: case OP_Halt: {
65573:   if( pOp->p1==SQLITE_OK && p->pFrame ){
65574:     /* Halt the sub-program. Return control to the parent frame. */
65575:     VdbeFrame *pFrame = p->pFrame;
65576:     p->pFrame = pFrame->pParent;
65577:     p->nFrame--;
65578:     sqlite3VdbeSetChanges(db, p->nChange);
65579:     pc = sqlite3VdbeFrameRestore(pFrame);
65580:     lastRowid = db->lastRowid;
65581:     if( pOp->p2==OE_Ignore ){
65582:       /* Instruction pc is the OP_Program that invoked the sub-program 
65583:       ** currently being halted. If the p2 instruction of this OP_Halt
65584:       ** instruction is set to OE_Ignore, then the sub-program is throwing
65585:       ** an IGNORE exception. In this case jump to the address specified
65586:       ** as the p2 of the calling OP_Program.  */
65587:       pc = p->aOp[pc].p2-1;
65588:     }
65589:     aOp = p->aOp;
65590:     aMem = p->aMem;
65591:     break;
65592:   }
65593: 
65594:   p->rc = pOp->p1;
65595:   p->errorAction = (u8)pOp->p2;
65596:   p->pc = pc;
65597:   if( pOp->p4.z ){
65598:     assert( p->rc!=SQLITE_OK );
65599:     sqlite3SetString(&p->zErrMsg, db, "%s", pOp->p4.z);
65600:     testcase( sqlite3GlobalConfig.xLog!=0 );
65601:     sqlite3_log(pOp->p1, "abort at %d in [%s]: %s", pc, p->zSql, pOp->p4.z);
65602:   }else if( p->rc ){
65603:     testcase( sqlite3GlobalConfig.xLog!=0 );
65604:     sqlite3_log(pOp->p1, "constraint failed at %d in [%s]", pc, p->zSql);
65605:   }
65606:   rc = sqlite3VdbeHalt(p);
65607:   assert( rc==SQLITE_BUSY || rc==SQLITE_OK || rc==SQLITE_ERROR );
65608:   if( rc==SQLITE_BUSY ){
65609:     p->rc = rc = SQLITE_BUSY;
65610:   }else{
65611:     assert( rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT );
65612:     assert( rc==SQLITE_OK || db->nDeferredCons>0 );
65613:     rc = p->rc ? SQLITE_ERROR : SQLITE_DONE;
65614:   }
65615:   goto vdbe_return;
65616: }
65617: 
65618: /* Opcode: Integer P1 P2 * * *
65619: **
65620: ** The 32-bit integer value P1 is written into register P2.
65621: */
65622: case OP_Integer: {         /* out2-prerelease */
65623:   pOut->u.i = pOp->p1;
65624:   break;
65625: }
65626: 
65627: /* Opcode: Int64 * P2 * P4 *
65628: **
65629: ** P4 is a pointer to a 64-bit integer value.
65630: ** Write that value into register P2.
65631: */
65632: case OP_Int64: {           /* out2-prerelease */
65633:   assert( pOp->p4.pI64!=0 );
65634:   pOut->u.i = *pOp->p4.pI64;
65635:   break;
65636: }
65637: 
65638: #ifndef SQLITE_OMIT_FLOATING_POINT
65639: /* Opcode: Real * P2 * P4 *
65640: **
65641: ** P4 is a pointer to a 64-bit floating point value.
65642: ** Write that value into register P2.
65643: */
65644: case OP_Real: {            /* same as TK_FLOAT, out2-prerelease */
65645:   pOut->flags = MEM_Real;
65646:   assert( !sqlite3IsNaN(*pOp->p4.pReal) );
65647:   pOut->r = *pOp->p4.pReal;
65648:   break;
65649: }
65650: #endif
65651: 
65652: /* Opcode: String8 * P2 * P4 *
65653: **
65654: ** P4 points to a nul terminated UTF-8 string. This opcode is transformed 
65655: ** into an OP_String before it is executed for the first time.
65656: */
65657: case OP_String8: {         /* same as TK_STRING, out2-prerelease */
65658:   assert( pOp->p4.z!=0 );
65659:   pOp->opcode = OP_String;
65660:   pOp->p1 = sqlite3Strlen30(pOp->p4.z);
65661: 
65662: #ifndef SQLITE_OMIT_UTF16
65663:   if( encoding!=SQLITE_UTF8 ){
65664:     rc = sqlite3VdbeMemSetStr(pOut, pOp->p4.z, -1, SQLITE_UTF8, SQLITE_STATIC);
65665:     if( rc==SQLITE_TOOBIG ) goto too_big;
65666:     if( SQLITE_OK!=sqlite3VdbeChangeEncoding(pOut, encoding) ) goto no_mem;
65667:     assert( pOut->zMalloc==pOut->z );
65668:     assert( pOut->flags & MEM_Dyn );
65669:     pOut->zMalloc = 0;
65670:     pOut->flags |= MEM_Static;
65671:     pOut->flags &= ~MEM_Dyn;
65672:     if( pOp->p4type==P4_DYNAMIC ){
65673:       sqlite3DbFree(db, pOp->p4.z);
65674:     }
65675:     pOp->p4type = P4_DYNAMIC;
65676:     pOp->p4.z = pOut->z;
65677:     pOp->p1 = pOut->n;
65678:   }
65679: #endif
65680:   if( pOp->p1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
65681:     goto too_big;
65682:   }
65683:   /* Fall through to the next case, OP_String */
65684: }
65685:   
65686: /* Opcode: String P1 P2 * P4 *
65687: **
65688: ** The string value P4 of length P1 (bytes) is stored in register P2.
65689: */
65690: case OP_String: {          /* out2-prerelease */
65691:   assert( pOp->p4.z!=0 );
65692:   pOut->flags = MEM_Str|MEM_Static|MEM_Term;
65693:   pOut->z = pOp->p4.z;
65694:   pOut->n = pOp->p1;
65695:   pOut->enc = encoding;
65696:   UPDATE_MAX_BLOBSIZE(pOut);
65697:   break;
65698: }
65699: 
65700: /* Opcode: Null * P2 P3 * *
65701: **
65702: ** Write a NULL into registers P2.  If P3 greater than P2, then also write
65703: ** NULL into register P3 and ever register in between P2 and P3.  If P3
65704: ** is less than P2 (typically P3 is zero) then only register P2 is
65705: ** set to NULL
65706: */
65707: case OP_Null: {           /* out2-prerelease */
65708: #if 0  /* local variables moved into u.ab */
65709:   int cnt;
65710: #endif /* local variables moved into u.ab */
65711:   u.ab.cnt = pOp->p3-pOp->p2;
65712:   assert( pOp->p3<=p->nMem );
65713:   pOut->flags = MEM_Null;
65714:   while( u.ab.cnt>0 ){
65715:     pOut++;
65716:     memAboutToChange(p, pOut);
65717:     VdbeMemRelease(pOut);
65718:     pOut->flags = MEM_Null;
65719:     u.ab.cnt--;
65720:   }
65721:   break;
65722: }
65723: 
65724: 
65725: /* Opcode: Blob P1 P2 * P4
65726: **
65727: ** P4 points to a blob of data P1 bytes long.  Store this
65728: ** blob in register P2.
65729: */
65730: case OP_Blob: {                /* out2-prerelease */
65731:   assert( pOp->p1 <= SQLITE_MAX_LENGTH );
65732:   sqlite3VdbeMemSetStr(pOut, pOp->p4.z, pOp->p1, 0, 0);
65733:   pOut->enc = encoding;
65734:   UPDATE_MAX_BLOBSIZE(pOut);
65735:   break;
65736: }
65737: 
65738: /* Opcode: Variable P1 P2 * P4 *
65739: **
65740: ** Transfer the values of bound parameter P1 into register P2
65741: **
65742: ** If the parameter is named, then its name appears in P4 and P3==1.
65743: ** The P4 value is used by sqlite3_bind_parameter_name().
65744: */
65745: case OP_Variable: {            /* out2-prerelease */
65746: #if 0  /* local variables moved into u.ac */
65747:   Mem *pVar;       /* Value being transferred */
65748: #endif /* local variables moved into u.ac */
65749: 
65750:   assert( pOp->p1>0 && pOp->p1<=p->nVar );
65751:   assert( pOp->p4.z==0 || pOp->p4.z==p->azVar[pOp->p1-1] );
65752:   u.ac.pVar = &p->aVar[pOp->p1 - 1];
65753:   if( sqlite3VdbeMemTooBig(u.ac.pVar) ){
65754:     goto too_big;
65755:   }
65756:   sqlite3VdbeMemShallowCopy(pOut, u.ac.pVar, MEM_Static);
65757:   UPDATE_MAX_BLOBSIZE(pOut);
65758:   break;
65759: }
65760: 
65761: /* Opcode: Move P1 P2 P3 * *
65762: **
65763: ** Move the values in register P1..P1+P3-1 over into
65764: ** registers P2..P2+P3-1.  Registers P1..P1+P1-1 are
65765: ** left holding a NULL.  It is an error for register ranges
65766: ** P1..P1+P3-1 and P2..P2+P3-1 to overlap.
65767: */
65768: case OP_Move: {
65769: #if 0  /* local variables moved into u.ad */
65770:   char *zMalloc;   /* Holding variable for allocated memory */
65771:   int n;           /* Number of registers left to copy */
65772:   int p1;          /* Register to copy from */
65773:   int p2;          /* Register to copy to */
65774: #endif /* local variables moved into u.ad */
65775: 
65776:   u.ad.n = pOp->p3;
65777:   u.ad.p1 = pOp->p1;
65778:   u.ad.p2 = pOp->p2;
65779:   assert( u.ad.n>0 && u.ad.p1>0 && u.ad.p2>0 );
65780:   assert( u.ad.p1+u.ad.n<=u.ad.p2 || u.ad.p2+u.ad.n<=u.ad.p1 );
65781: 
65782:   pIn1 = &aMem[u.ad.p1];
65783:   pOut = &aMem[u.ad.p2];
65784:   while( u.ad.n-- ){
65785:     assert( pOut<=&aMem[p->nMem] );
65786:     assert( pIn1<=&aMem[p->nMem] );
65787:     assert( memIsValid(pIn1) );
65788:     memAboutToChange(p, pOut);
65789:     u.ad.zMalloc = pOut->zMalloc;
65790:     pOut->zMalloc = 0;
65791:     sqlite3VdbeMemMove(pOut, pIn1);
65792: #ifdef SQLITE_DEBUG
65793:     if( pOut->pScopyFrom>=&aMem[u.ad.p1] && pOut->pScopyFrom<&aMem[u.ad.p1+pOp->p3] ){
65794:       pOut->pScopyFrom += u.ad.p1 - pOp->p2;
65795:     }
65796: #endif
65797:     pIn1->zMalloc = u.ad.zMalloc;
65798:     REGISTER_TRACE(u.ad.p2++, pOut);
65799:     pIn1++;
65800:     pOut++;
65801:   }
65802:   break;
65803: }
65804: 
65805: /* Opcode: Copy P1 P2 * * *
65806: **
65807: ** Make a copy of register P1 into register P2.
65808: **
65809: ** This instruction makes a deep copy of the value.  A duplicate
65810: ** is made of any string or blob constant.  See also OP_SCopy.
65811: */
65812: case OP_Copy: {             /* in1, out2 */
65813:   pIn1 = &aMem[pOp->p1];
65814:   pOut = &aMem[pOp->p2];
65815:   assert( pOut!=pIn1 );
65816:   sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
65817:   Deephemeralize(pOut);
65818:   REGISTER_TRACE(pOp->p2, pOut);
65819:   break;
65820: }
65821: 
65822: /* Opcode: SCopy P1 P2 * * *
65823: **
65824: ** Make a shallow copy of register P1 into register P2.
65825: **
65826: ** This instruction makes a shallow copy of the value.  If the value
65827: ** is a string or blob, then the copy is only a pointer to the
65828: ** original and hence if the original changes so will the copy.
65829: ** Worse, if the original is deallocated, the copy becomes invalid.
65830: ** Thus the program must guarantee that the original will not change
65831: ** during the lifetime of the copy.  Use OP_Copy to make a complete
65832: ** copy.
65833: */
65834: case OP_SCopy: {            /* in1, out2 */
65835:   pIn1 = &aMem[pOp->p1];
65836:   pOut = &aMem[pOp->p2];
65837:   assert( pOut!=pIn1 );
65838:   sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
65839: #ifdef SQLITE_DEBUG
65840:   if( pOut->pScopyFrom==0 ) pOut->pScopyFrom = pIn1;
65841: #endif
65842:   REGISTER_TRACE(pOp->p2, pOut);
65843:   break;
65844: }
65845: 
65846: /* Opcode: ResultRow P1 P2 * * *
65847: **
65848: ** The registers P1 through P1+P2-1 contain a single row of
65849: ** results. This opcode causes the sqlite3_step() call to terminate
65850: ** with an SQLITE_ROW return code and it sets up the sqlite3_stmt
65851: ** structure to provide access to the top P1 values as the result
65852: ** row.
65853: */
65854: case OP_ResultRow: {
65855: #if 0  /* local variables moved into u.ae */
65856:   Mem *pMem;
65857:   int i;
65858: #endif /* local variables moved into u.ae */
65859:   assert( p->nResColumn==pOp->p2 );
65860:   assert( pOp->p1>0 );
65861:   assert( pOp->p1+pOp->p2<=p->nMem+1 );
65862: 
65863:   /* If this statement has violated immediate foreign key constraints, do
65864:   ** not return the number of rows modified. And do not RELEASE the statement
65865:   ** transaction. It needs to be rolled back.  */
65866:   if( SQLITE_OK!=(rc = sqlite3VdbeCheckFk(p, 0)) ){
65867:     assert( db->flags&SQLITE_CountRows );
65868:     assert( p->usesStmtJournal );
65869:     break;
65870:   }
65871: 
65872:   /* If the SQLITE_CountRows flag is set in sqlite3.flags mask, then
65873:   ** DML statements invoke this opcode to return the number of rows
65874:   ** modified to the user. This is the only way that a VM that
65875:   ** opens a statement transaction may invoke this opcode.
65876:   **
65877:   ** In case this is such a statement, close any statement transaction
65878:   ** opened by this VM before returning control to the user. This is to
65879:   ** ensure that statement-transactions are always nested, not overlapping.
65880:   ** If the open statement-transaction is not closed here, then the user
65881:   ** may step another VM that opens its own statement transaction. This
65882:   ** may lead to overlapping statement transactions.
65883:   **
65884:   ** The statement transaction is never a top-level transaction.  Hence
65885:   ** the RELEASE call below can never fail.
65886:   */
65887:   assert( p->iStatement==0 || db->flags&SQLITE_CountRows );
65888:   rc = sqlite3VdbeCloseStatement(p, SAVEPOINT_RELEASE);
65889:   if( NEVER(rc!=SQLITE_OK) ){
65890:     break;
65891:   }
65892: 
65893:   /* Invalidate all ephemeral cursor row caches */
65894:   p->cacheCtr = (p->cacheCtr + 2)|1;
65895: 
65896:   /* Make sure the results of the current row are \000 terminated
65897:   ** and have an assigned type.  The results are de-ephemeralized as
65898:   ** a side effect.
65899:   */
65900:   u.ae.pMem = p->pResultSet = &aMem[pOp->p1];
65901:   for(u.ae.i=0; u.ae.i<pOp->p2; u.ae.i++){
65902:     assert( memIsValid(&u.ae.pMem[u.ae.i]) );
65903:     Deephemeralize(&u.ae.pMem[u.ae.i]);
65904:     assert( (u.ae.pMem[u.ae.i].flags & MEM_Ephem)==0
65905:             || (u.ae.pMem[u.ae.i].flags & (MEM_Str|MEM_Blob))==0 );
65906:     sqlite3VdbeMemNulTerminate(&u.ae.pMem[u.ae.i]);
65907:     sqlite3VdbeMemStoreType(&u.ae.pMem[u.ae.i]);
65908:     REGISTER_TRACE(pOp->p1+u.ae.i, &u.ae.pMem[u.ae.i]);
65909:   }
65910:   if( db->mallocFailed ) goto no_mem;
65911: 
65912:   /* Return SQLITE_ROW
65913:   */
65914:   p->pc = pc + 1;
65915:   rc = SQLITE_ROW;
65916:   goto vdbe_return;
65917: }
65918: 
65919: /* Opcode: Concat P1 P2 P3 * *
65920: **
65921: ** Add the text in register P1 onto the end of the text in
65922: ** register P2 and store the result in register P3.
65923: ** If either the P1 or P2 text are NULL then store NULL in P3.
65924: **
65925: **   P3 = P2 || P1
65926: **
65927: ** It is illegal for P1 and P3 to be the same register. Sometimes,
65928: ** if P3 is the same register as P2, the implementation is able
65929: ** to avoid a memcpy().
65930: */
65931: case OP_Concat: {           /* same as TK_CONCAT, in1, in2, out3 */
65932: #if 0  /* local variables moved into u.af */
65933:   i64 nByte;
65934: #endif /* local variables moved into u.af */
65935: 
65936:   pIn1 = &aMem[pOp->p1];
65937:   pIn2 = &aMem[pOp->p2];
65938:   pOut = &aMem[pOp->p3];
65939:   assert( pIn1!=pOut );
65940:   if( (pIn1->flags | pIn2->flags) & MEM_Null ){
65941:     sqlite3VdbeMemSetNull(pOut);
65942:     break;
65943:   }
65944:   if( ExpandBlob(pIn1) || ExpandBlob(pIn2) ) goto no_mem;
65945:   Stringify(pIn1, encoding);
65946:   Stringify(pIn2, encoding);
65947:   u.af.nByte = pIn1->n + pIn2->n;
65948:   if( u.af.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
65949:     goto too_big;
65950:   }
65951:   MemSetTypeFlag(pOut, MEM_Str);
65952:   if( sqlite3VdbeMemGrow(pOut, (int)u.af.nByte+2, pOut==pIn2) ){
65953:     goto no_mem;
65954:   }
65955:   if( pOut!=pIn2 ){
65956:     memcpy(pOut->z, pIn2->z, pIn2->n);
65957:   }
65958:   memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n);
65959:   pOut->z[u.af.nByte] = 0;
65960:   pOut->z[u.af.nByte+1] = 0;
65961:   pOut->flags |= MEM_Term;
65962:   pOut->n = (int)u.af.nByte;
65963:   pOut->enc = encoding;
65964:   UPDATE_MAX_BLOBSIZE(pOut);
65965:   break;
65966: }
65967: 
65968: /* Opcode: Add P1 P2 P3 * *
65969: **
65970: ** Add the value in register P1 to the value in register P2
65971: ** and store the result in register P3.
65972: ** If either input is NULL, the result is NULL.
65973: */
65974: /* Opcode: Multiply P1 P2 P3 * *
65975: **
65976: **
65977: ** Multiply the value in register P1 by the value in register P2
65978: ** and store the result in register P3.
65979: ** If either input is NULL, the result is NULL.
65980: */
65981: /* Opcode: Subtract P1 P2 P3 * *
65982: **
65983: ** Subtract the value in register P1 from the value in register P2
65984: ** and store the result in register P3.
65985: ** If either input is NULL, the result is NULL.
65986: */
65987: /* Opcode: Divide P1 P2 P3 * *
65988: **
65989: ** Divide the value in register P1 by the value in register P2
65990: ** and store the result in register P3 (P3=P2/P1). If the value in 
65991: ** register P1 is zero, then the result is NULL. If either input is 
65992: ** NULL, the result is NULL.
65993: */
65994: /* Opcode: Remainder P1 P2 P3 * *
65995: **
65996: ** Compute the remainder after integer division of the value in
65997: ** register P1 by the value in register P2 and store the result in P3. 
65998: ** If the value in register P2 is zero the result is NULL.
65999: ** If either operand is NULL, the result is NULL.
66000: */
66001: case OP_Add:                   /* same as TK_PLUS, in1, in2, out3 */
66002: case OP_Subtract:              /* same as TK_MINUS, in1, in2, out3 */
66003: case OP_Multiply:              /* same as TK_STAR, in1, in2, out3 */
66004: case OP_Divide:                /* same as TK_SLASH, in1, in2, out3 */
66005: case OP_Remainder: {           /* same as TK_REM, in1, in2, out3 */
66006: #if 0  /* local variables moved into u.ag */
66007:   int flags;      /* Combined MEM_* flags from both inputs */
66008:   i64 iA;         /* Integer value of left operand */
66009:   i64 iB;         /* Integer value of right operand */
66010:   double rA;      /* Real value of left operand */
66011:   double rB;      /* Real value of right operand */
66012: #endif /* local variables moved into u.ag */
66013: 
66014:   pIn1 = &aMem[pOp->p1];
66015:   applyNumericAffinity(pIn1);
66016:   pIn2 = &aMem[pOp->p2];
66017:   applyNumericAffinity(pIn2);
66018:   pOut = &aMem[pOp->p3];
66019:   u.ag.flags = pIn1->flags | pIn2->flags;
66020:   if( (u.ag.flags & MEM_Null)!=0 ) goto arithmetic_result_is_null;
66021:   if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){
66022:     u.ag.iA = pIn1->u.i;
66023:     u.ag.iB = pIn2->u.i;
66024:     switch( pOp->opcode ){
66025:       case OP_Add:       if( sqlite3AddInt64(&u.ag.iB,u.ag.iA) ) goto fp_math;  break;
66026:       case OP_Subtract:  if( sqlite3SubInt64(&u.ag.iB,u.ag.iA) ) goto fp_math;  break;
66027:       case OP_Multiply:  if( sqlite3MulInt64(&u.ag.iB,u.ag.iA) ) goto fp_math;  break;
66028:       case OP_Divide: {
66029:         if( u.ag.iA==0 ) goto arithmetic_result_is_null;
66030:         if( u.ag.iA==-1 && u.ag.iB==SMALLEST_INT64 ) goto fp_math;
66031:         u.ag.iB /= u.ag.iA;
66032:         break;
66033:       }
66034:       default: {
66035:         if( u.ag.iA==0 ) goto arithmetic_result_is_null;
66036:         if( u.ag.iA==-1 ) u.ag.iA = 1;
66037:         u.ag.iB %= u.ag.iA;
66038:         break;
66039:       }
66040:     }
66041:     pOut->u.i = u.ag.iB;
66042:     MemSetTypeFlag(pOut, MEM_Int);
66043:   }else{
66044: fp_math:
66045:     u.ag.rA = sqlite3VdbeRealValue(pIn1);
66046:     u.ag.rB = sqlite3VdbeRealValue(pIn2);
66047:     switch( pOp->opcode ){
66048:       case OP_Add:         u.ag.rB += u.ag.rA;       break;
66049:       case OP_Subtract:    u.ag.rB -= u.ag.rA;       break;
66050:       case OP_Multiply:    u.ag.rB *= u.ag.rA;       break;
66051:       case OP_Divide: {
66052:         /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
66053:         if( u.ag.rA==(double)0 ) goto arithmetic_result_is_null;
66054:         u.ag.rB /= u.ag.rA;
66055:         break;
66056:       }
66057:       default: {
66058:         u.ag.iA = (i64)u.ag.rA;
66059:         u.ag.iB = (i64)u.ag.rB;
66060:         if( u.ag.iA==0 ) goto arithmetic_result_is_null;
66061:         if( u.ag.iA==-1 ) u.ag.iA = 1;
66062:         u.ag.rB = (double)(u.ag.iB % u.ag.iA);
66063:         break;
66064:       }
66065:     }
66066: #ifdef SQLITE_OMIT_FLOATING_POINT
66067:     pOut->u.i = u.ag.rB;
66068:     MemSetTypeFlag(pOut, MEM_Int);
66069: #else
66070:     if( sqlite3IsNaN(u.ag.rB) ){
66071:       goto arithmetic_result_is_null;
66072:     }
66073:     pOut->r = u.ag.rB;
66074:     MemSetTypeFlag(pOut, MEM_Real);
66075:     if( (u.ag.flags & MEM_Real)==0 ){
66076:       sqlite3VdbeIntegerAffinity(pOut);
66077:     }
66078: #endif
66079:   }
66080:   break;
66081: 
66082: arithmetic_result_is_null:
66083:   sqlite3VdbeMemSetNull(pOut);
66084:   break;
66085: }
66086: 
66087: /* Opcode: CollSeq * * P4
66088: **
66089: ** P4 is a pointer to a CollSeq struct. If the next call to a user function
66090: ** or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will
66091: ** be returned. This is used by the built-in min(), max() and nullif()
66092: ** functions.
66093: **
66094: ** The interface used by the implementation of the aforementioned functions
66095: ** to retrieve the collation sequence set by this opcode is not available
66096: ** publicly, only to user functions defined in func.c.
66097: */
66098: case OP_CollSeq: {
66099:   assert( pOp->p4type==P4_COLLSEQ );
66100:   break;
66101: }
66102: 
66103: /* Opcode: Function P1 P2 P3 P4 P5
66104: **
66105: ** Invoke a user function (P4 is a pointer to a Function structure that
66106: ** defines the function) with P5 arguments taken from register P2 and
66107: ** successors.  The result of the function is stored in register P3.
66108: ** Register P3 must not be one of the function inputs.
66109: **
66110: ** P1 is a 32-bit bitmask indicating whether or not each argument to the 
66111: ** function was determined to be constant at compile time. If the first
66112: ** argument was constant then bit 0 of P1 is set. This is used to determine
66113: ** whether meta data associated with a user function argument using the
66114: ** sqlite3_set_auxdata() API may be safely retained until the next
66115: ** invocation of this opcode.
66116: **
66117: ** See also: AggStep and AggFinal
66118: */
66119: case OP_Function: {
66120: #if 0  /* local variables moved into u.ah */
66121:   int i;
66122:   Mem *pArg;
66123:   sqlite3_context ctx;
66124:   sqlite3_value **apVal;
66125:   int n;
66126: #endif /* local variables moved into u.ah */
66127: 
66128:   u.ah.n = pOp->p5;
66129:   u.ah.apVal = p->apArg;
66130:   assert( u.ah.apVal || u.ah.n==0 );
66131:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
66132:   pOut = &aMem[pOp->p3];
66133:   memAboutToChange(p, pOut);
66134: 
66135:   assert( u.ah.n==0 || (pOp->p2>0 && pOp->p2+u.ah.n<=p->nMem+1) );
66136:   assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+u.ah.n );
66137:   u.ah.pArg = &aMem[pOp->p2];
66138:   for(u.ah.i=0; u.ah.i<u.ah.n; u.ah.i++, u.ah.pArg++){
66139:     assert( memIsValid(u.ah.pArg) );
66140:     u.ah.apVal[u.ah.i] = u.ah.pArg;
66141:     Deephemeralize(u.ah.pArg);
66142:     sqlite3VdbeMemStoreType(u.ah.pArg);
66143:     REGISTER_TRACE(pOp->p2+u.ah.i, u.ah.pArg);
66144:   }
66145: 
66146:   assert( pOp->p4type==P4_FUNCDEF || pOp->p4type==P4_VDBEFUNC );
66147:   if( pOp->p4type==P4_FUNCDEF ){
66148:     u.ah.ctx.pFunc = pOp->p4.pFunc;
66149:     u.ah.ctx.pVdbeFunc = 0;
66150:   }else{
66151:     u.ah.ctx.pVdbeFunc = (VdbeFunc*)pOp->p4.pVdbeFunc;
66152:     u.ah.ctx.pFunc = u.ah.ctx.pVdbeFunc->pFunc;
66153:   }
66154: 
66155:   u.ah.ctx.s.flags = MEM_Null;
66156:   u.ah.ctx.s.db = db;
66157:   u.ah.ctx.s.xDel = 0;
66158:   u.ah.ctx.s.zMalloc = 0;
66159: 
66160:   /* The output cell may already have a buffer allocated. Move
66161:   ** the pointer to u.ah.ctx.s so in case the user-function can use
66162:   ** the already allocated buffer instead of allocating a new one.
66163:   */
66164:   sqlite3VdbeMemMove(&u.ah.ctx.s, pOut);
66165:   MemSetTypeFlag(&u.ah.ctx.s, MEM_Null);
66166: 
66167:   u.ah.ctx.isError = 0;
66168:   if( u.ah.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
66169:     assert( pOp>aOp );
66170:     assert( pOp[-1].p4type==P4_COLLSEQ );
66171:     assert( pOp[-1].opcode==OP_CollSeq );
66172:     u.ah.ctx.pColl = pOp[-1].p4.pColl;
66173:   }
66174:   db->lastRowid = lastRowid;
66175:   (*u.ah.ctx.pFunc->xFunc)(&u.ah.ctx, u.ah.n, u.ah.apVal); /* IMP: R-24505-23230 */
66176:   lastRowid = db->lastRowid;
66177: 
66178:   /* If any auxiliary data functions have been called by this user function,
66179:   ** immediately call the destructor for any non-static values.
66180:   */
66181:   if( u.ah.ctx.pVdbeFunc ){
66182:     sqlite3VdbeDeleteAuxData(u.ah.ctx.pVdbeFunc, pOp->p1);
66183:     pOp->p4.pVdbeFunc = u.ah.ctx.pVdbeFunc;
66184:     pOp->p4type = P4_VDBEFUNC;
66185:   }
66186: 
66187:   if( db->mallocFailed ){
66188:     /* Even though a malloc() has failed, the implementation of the
66189:     ** user function may have called an sqlite3_result_XXX() function
66190:     ** to return a value. The following call releases any resources
66191:     ** associated with such a value.
66192:     */
66193:     sqlite3VdbeMemRelease(&u.ah.ctx.s);
66194:     goto no_mem;
66195:   }
66196: 
66197:   /* If the function returned an error, throw an exception */
66198:   if( u.ah.ctx.isError ){
66199:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.ah.ctx.s));
66200:     rc = u.ah.ctx.isError;
66201:   }
66202: 
66203:   /* Copy the result of the function into register P3 */
66204:   sqlite3VdbeChangeEncoding(&u.ah.ctx.s, encoding);
66205:   sqlite3VdbeMemMove(pOut, &u.ah.ctx.s);
66206:   if( sqlite3VdbeMemTooBig(pOut) ){
66207:     goto too_big;
66208:   }
66209: 
66210: #if 0
66211:   /* The app-defined function has done something that as caused this
66212:   ** statement to expire.  (Perhaps the function called sqlite3_exec()
66213:   ** with a CREATE TABLE statement.)
66214:   */
66215:   if( p->expired ) rc = SQLITE_ABORT;
66216: #endif
66217: 
66218:   REGISTER_TRACE(pOp->p3, pOut);
66219:   UPDATE_MAX_BLOBSIZE(pOut);
66220:   break;
66221: }
66222: 
66223: /* Opcode: BitAnd P1 P2 P3 * *
66224: **
66225: ** Take the bit-wise AND of the values in register P1 and P2 and
66226: ** store the result in register P3.
66227: ** If either input is NULL, the result is NULL.
66228: */
66229: /* Opcode: BitOr P1 P2 P3 * *
66230: **
66231: ** Take the bit-wise OR of the values in register P1 and P2 and
66232: ** store the result in register P3.
66233: ** If either input is NULL, the result is NULL.
66234: */
66235: /* Opcode: ShiftLeft P1 P2 P3 * *
66236: **
66237: ** Shift the integer value in register P2 to the left by the
66238: ** number of bits specified by the integer in register P1.
66239: ** Store the result in register P3.
66240: ** If either input is NULL, the result is NULL.
66241: */
66242: /* Opcode: ShiftRight P1 P2 P3 * *
66243: **
66244: ** Shift the integer value in register P2 to the right by the
66245: ** number of bits specified by the integer in register P1.
66246: ** Store the result in register P3.
66247: ** If either input is NULL, the result is NULL.
66248: */
66249: case OP_BitAnd:                 /* same as TK_BITAND, in1, in2, out3 */
66250: case OP_BitOr:                  /* same as TK_BITOR, in1, in2, out3 */
66251: case OP_ShiftLeft:              /* same as TK_LSHIFT, in1, in2, out3 */
66252: case OP_ShiftRight: {           /* same as TK_RSHIFT, in1, in2, out3 */
66253: #if 0  /* local variables moved into u.ai */
66254:   i64 iA;
66255:   u64 uA;
66256:   i64 iB;
66257:   u8 op;
66258: #endif /* local variables moved into u.ai */
66259: 
66260:   pIn1 = &aMem[pOp->p1];
66261:   pIn2 = &aMem[pOp->p2];
66262:   pOut = &aMem[pOp->p3];
66263:   if( (pIn1->flags | pIn2->flags) & MEM_Null ){
66264:     sqlite3VdbeMemSetNull(pOut);
66265:     break;
66266:   }
66267:   u.ai.iA = sqlite3VdbeIntValue(pIn2);
66268:   u.ai.iB = sqlite3VdbeIntValue(pIn1);
66269:   u.ai.op = pOp->opcode;
66270:   if( u.ai.op==OP_BitAnd ){
66271:     u.ai.iA &= u.ai.iB;
66272:   }else if( u.ai.op==OP_BitOr ){
66273:     u.ai.iA |= u.ai.iB;
66274:   }else if( u.ai.iB!=0 ){
66275:     assert( u.ai.op==OP_ShiftRight || u.ai.op==OP_ShiftLeft );
66276: 
66277:     /* If shifting by a negative amount, shift in the other direction */
66278:     if( u.ai.iB<0 ){
66279:       assert( OP_ShiftRight==OP_ShiftLeft+1 );
66280:       u.ai.op = 2*OP_ShiftLeft + 1 - u.ai.op;
66281:       u.ai.iB = u.ai.iB>(-64) ? -u.ai.iB : 64;
66282:     }
66283: 
66284:     if( u.ai.iB>=64 ){
66285:       u.ai.iA = (u.ai.iA>=0 || u.ai.op==OP_ShiftLeft) ? 0 : -1;
66286:     }else{
66287:       memcpy(&u.ai.uA, &u.ai.iA, sizeof(u.ai.uA));
66288:       if( u.ai.op==OP_ShiftLeft ){
66289:         u.ai.uA <<= u.ai.iB;
66290:       }else{
66291:         u.ai.uA >>= u.ai.iB;
66292:         /* Sign-extend on a right shift of a negative number */
66293:         if( u.ai.iA<0 ) u.ai.uA |= ((((u64)0xffffffff)<<32)|0xffffffff) << (64-u.ai.iB);
66294:       }
66295:       memcpy(&u.ai.iA, &u.ai.uA, sizeof(u.ai.iA));
66296:     }
66297:   }
66298:   pOut->u.i = u.ai.iA;
66299:   MemSetTypeFlag(pOut, MEM_Int);
66300:   break;
66301: }
66302: 
66303: /* Opcode: AddImm  P1 P2 * * *
66304: ** 
66305: ** Add the constant P2 to the value in register P1.
66306: ** The result is always an integer.
66307: **
66308: ** To force any register to be an integer, just add 0.
66309: */
66310: case OP_AddImm: {            /* in1 */
66311:   pIn1 = &aMem[pOp->p1];
66312:   memAboutToChange(p, pIn1);
66313:   sqlite3VdbeMemIntegerify(pIn1);
66314:   pIn1->u.i += pOp->p2;
66315:   break;
66316: }
66317: 
66318: /* Opcode: MustBeInt P1 P2 * * *
66319: ** 
66320: ** Force the value in register P1 to be an integer.  If the value
66321: ** in P1 is not an integer and cannot be converted into an integer
66322: ** without data loss, then jump immediately to P2, or if P2==0
66323: ** raise an SQLITE_MISMATCH exception.
66324: */
66325: case OP_MustBeInt: {            /* jump, in1 */
66326:   pIn1 = &aMem[pOp->p1];
66327:   applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
66328:   if( (pIn1->flags & MEM_Int)==0 ){
66329:     if( pOp->p2==0 ){
66330:       rc = SQLITE_MISMATCH;
66331:       goto abort_due_to_error;
66332:     }else{
66333:       pc = pOp->p2 - 1;
66334:     }
66335:   }else{
66336:     MemSetTypeFlag(pIn1, MEM_Int);
66337:   }
66338:   break;
66339: }
66340: 
66341: #ifndef SQLITE_OMIT_FLOATING_POINT
66342: /* Opcode: RealAffinity P1 * * * *
66343: **
66344: ** If register P1 holds an integer convert it to a real value.
66345: **
66346: ** This opcode is used when extracting information from a column that
66347: ** has REAL affinity.  Such column values may still be stored as
66348: ** integers, for space efficiency, but after extraction we want them
66349: ** to have only a real value.
66350: */
66351: case OP_RealAffinity: {                  /* in1 */
66352:   pIn1 = &aMem[pOp->p1];
66353:   if( pIn1->flags & MEM_Int ){
66354:     sqlite3VdbeMemRealify(pIn1);
66355:   }
66356:   break;
66357: }
66358: #endif
66359: 
66360: #ifndef SQLITE_OMIT_CAST
66361: /* Opcode: ToText P1 * * * *
66362: **
66363: ** Force the value in register P1 to be text.
66364: ** If the value is numeric, convert it to a string using the
66365: ** equivalent of printf().  Blob values are unchanged and
66366: ** are afterwards simply interpreted as text.
66367: **
66368: ** A NULL value is not changed by this routine.  It remains NULL.
66369: */
66370: case OP_ToText: {                  /* same as TK_TO_TEXT, in1 */
66371:   pIn1 = &aMem[pOp->p1];
66372:   memAboutToChange(p, pIn1);
66373:   if( pIn1->flags & MEM_Null ) break;
66374:   assert( MEM_Str==(MEM_Blob>>3) );
66375:   pIn1->flags |= (pIn1->flags&MEM_Blob)>>3;
66376:   applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
66377:   rc = ExpandBlob(pIn1);
66378:   assert( pIn1->flags & MEM_Str || db->mallocFailed );
66379:   pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero);
66380:   UPDATE_MAX_BLOBSIZE(pIn1);
66381:   break;
66382: }
66383: 
66384: /* Opcode: ToBlob P1 * * * *
66385: **
66386: ** Force the value in register P1 to be a BLOB.
66387: ** If the value is numeric, convert it to a string first.
66388: ** Strings are simply reinterpreted as blobs with no change
66389: ** to the underlying data.
66390: **
66391: ** A NULL value is not changed by this routine.  It remains NULL.
66392: */
66393: case OP_ToBlob: {                  /* same as TK_TO_BLOB, in1 */
66394:   pIn1 = &aMem[pOp->p1];
66395:   if( pIn1->flags & MEM_Null ) break;
66396:   if( (pIn1->flags & MEM_Blob)==0 ){
66397:     applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
66398:     assert( pIn1->flags & MEM_Str || db->mallocFailed );
66399:     MemSetTypeFlag(pIn1, MEM_Blob);
66400:   }else{
66401:     pIn1->flags &= ~(MEM_TypeMask&~MEM_Blob);
66402:   }
66403:   UPDATE_MAX_BLOBSIZE(pIn1);
66404:   break;
66405: }
66406: 
66407: /* Opcode: ToNumeric P1 * * * *
66408: **
66409: ** Force the value in register P1 to be numeric (either an
66410: ** integer or a floating-point number.)
66411: ** If the value is text or blob, try to convert it to an using the
66412: ** equivalent of atoi() or atof() and store 0 if no such conversion 
66413: ** is possible.
66414: **
66415: ** A NULL value is not changed by this routine.  It remains NULL.
66416: */
66417: case OP_ToNumeric: {                  /* same as TK_TO_NUMERIC, in1 */
66418:   pIn1 = &aMem[pOp->p1];
66419:   sqlite3VdbeMemNumerify(pIn1);
66420:   break;
66421: }
66422: #endif /* SQLITE_OMIT_CAST */
66423: 
66424: /* Opcode: ToInt P1 * * * *
66425: **
66426: ** Force the value in register P1 to be an integer.  If
66427: ** The value is currently a real number, drop its fractional part.
66428: ** If the value is text or blob, try to convert it to an integer using the
66429: ** equivalent of atoi() and store 0 if no such conversion is possible.
66430: **
66431: ** A NULL value is not changed by this routine.  It remains NULL.
66432: */
66433: case OP_ToInt: {                  /* same as TK_TO_INT, in1 */
66434:   pIn1 = &aMem[pOp->p1];
66435:   if( (pIn1->flags & MEM_Null)==0 ){
66436:     sqlite3VdbeMemIntegerify(pIn1);
66437:   }
66438:   break;
66439: }
66440: 
66441: #if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT)
66442: /* Opcode: ToReal P1 * * * *
66443: **
66444: ** Force the value in register P1 to be a floating point number.
66445: ** If The value is currently an integer, convert it.
66446: ** If the value is text or blob, try to convert it to an integer using the
66447: ** equivalent of atoi() and store 0.0 if no such conversion is possible.
66448: **
66449: ** A NULL value is not changed by this routine.  It remains NULL.
66450: */
66451: case OP_ToReal: {                  /* same as TK_TO_REAL, in1 */
66452:   pIn1 = &aMem[pOp->p1];
66453:   memAboutToChange(p, pIn1);
66454:   if( (pIn1->flags & MEM_Null)==0 ){
66455:     sqlite3VdbeMemRealify(pIn1);
66456:   }
66457:   break;
66458: }
66459: #endif /* !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT) */
66460: 
66461: /* Opcode: Lt P1 P2 P3 P4 P5
66462: **
66463: ** Compare the values in register P1 and P3.  If reg(P3)<reg(P1) then
66464: ** jump to address P2.  
66465: **
66466: ** If the SQLITE_JUMPIFNULL bit of P5 is set and either reg(P1) or
66467: ** reg(P3) is NULL then take the jump.  If the SQLITE_JUMPIFNULL 
66468: ** bit is clear then fall through if either operand is NULL.
66469: **
66470: ** The SQLITE_AFF_MASK portion of P5 must be an affinity character -
66471: ** SQLITE_AFF_TEXT, SQLITE_AFF_INTEGER, and so forth. An attempt is made 
66472: ** to coerce both inputs according to this affinity before the
66473: ** comparison is made. If the SQLITE_AFF_MASK is 0x00, then numeric
66474: ** affinity is used. Note that the affinity conversions are stored
66475: ** back into the input registers P1 and P3.  So this opcode can cause
66476: ** persistent changes to registers P1 and P3.
66477: **
66478: ** Once any conversions have taken place, and neither value is NULL, 
66479: ** the values are compared. If both values are blobs then memcmp() is
66480: ** used to determine the results of the comparison.  If both values
66481: ** are text, then the appropriate collating function specified in
66482: ** P4 is  used to do the comparison.  If P4 is not specified then
66483: ** memcmp() is used to compare text string.  If both values are
66484: ** numeric, then a numeric comparison is used. If the two values
66485: ** are of different types, then numbers are considered less than
66486: ** strings and strings are considered less than blobs.
66487: **
66488: ** If the SQLITE_STOREP2 bit of P5 is set, then do not jump.  Instead,
66489: ** store a boolean result (either 0, or 1, or NULL) in register P2.
66490: */
66491: /* Opcode: Ne P1 P2 P3 P4 P5
66492: **
66493: ** This works just like the Lt opcode except that the jump is taken if
66494: ** the operands in registers P1 and P3 are not equal.  See the Lt opcode for
66495: ** additional information.
66496: **
66497: ** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
66498: ** true or false and is never NULL.  If both operands are NULL then the result
66499: ** of comparison is false.  If either operand is NULL then the result is true.
66500: ** If neither operand is NULL the result is the same as it would be if
66501: ** the SQLITE_NULLEQ flag were omitted from P5.
66502: */
66503: /* Opcode: Eq P1 P2 P3 P4 P5
66504: **
66505: ** This works just like the Lt opcode except that the jump is taken if
66506: ** the operands in registers P1 and P3 are equal.
66507: ** See the Lt opcode for additional information.
66508: **
66509: ** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
66510: ** true or false and is never NULL.  If both operands are NULL then the result
66511: ** of comparison is true.  If either operand is NULL then the result is false.
66512: ** If neither operand is NULL the result is the same as it would be if
66513: ** the SQLITE_NULLEQ flag were omitted from P5.
66514: */
66515: /* Opcode: Le P1 P2 P3 P4 P5
66516: **
66517: ** This works just like the Lt opcode except that the jump is taken if
66518: ** the content of register P3 is less than or equal to the content of
66519: ** register P1.  See the Lt opcode for additional information.
66520: */
66521: /* Opcode: Gt P1 P2 P3 P4 P5
66522: **
66523: ** This works just like the Lt opcode except that the jump is taken if
66524: ** the content of register P3 is greater than the content of
66525: ** register P1.  See the Lt opcode for additional information.
66526: */
66527: /* Opcode: Ge P1 P2 P3 P4 P5
66528: **
66529: ** This works just like the Lt opcode except that the jump is taken if
66530: ** the content of register P3 is greater than or equal to the content of
66531: ** register P1.  See the Lt opcode for additional information.
66532: */
66533: case OP_Eq:               /* same as TK_EQ, jump, in1, in3 */
66534: case OP_Ne:               /* same as TK_NE, jump, in1, in3 */
66535: case OP_Lt:               /* same as TK_LT, jump, in1, in3 */
66536: case OP_Le:               /* same as TK_LE, jump, in1, in3 */
66537: case OP_Gt:               /* same as TK_GT, jump, in1, in3 */
66538: case OP_Ge: {             /* same as TK_GE, jump, in1, in3 */
66539: #if 0  /* local variables moved into u.aj */
66540:   int res;            /* Result of the comparison of pIn1 against pIn3 */
66541:   char affinity;      /* Affinity to use for comparison */
66542:   u16 flags1;         /* Copy of initial value of pIn1->flags */
66543:   u16 flags3;         /* Copy of initial value of pIn3->flags */
66544: #endif /* local variables moved into u.aj */
66545: 
66546:   pIn1 = &aMem[pOp->p1];
66547:   pIn3 = &aMem[pOp->p3];
66548:   u.aj.flags1 = pIn1->flags;
66549:   u.aj.flags3 = pIn3->flags;
66550:   if( (u.aj.flags1 | u.aj.flags3)&MEM_Null ){
66551:     /* One or both operands are NULL */
66552:     if( pOp->p5 & SQLITE_NULLEQ ){
66553:       /* If SQLITE_NULLEQ is set (which will only happen if the operator is
66554:       ** OP_Eq or OP_Ne) then take the jump or not depending on whether
66555:       ** or not both operands are null.
66556:       */
66557:       assert( pOp->opcode==OP_Eq || pOp->opcode==OP_Ne );
66558:       u.aj.res = (u.aj.flags1 & u.aj.flags3 & MEM_Null)==0;
66559:     }else{
66560:       /* SQLITE_NULLEQ is clear and at least one operand is NULL,
66561:       ** then the result is always NULL.
66562:       ** The jump is taken if the SQLITE_JUMPIFNULL bit is set.
66563:       */
66564:       if( pOp->p5 & SQLITE_STOREP2 ){
66565:         pOut = &aMem[pOp->p2];
66566:         MemSetTypeFlag(pOut, MEM_Null);
66567:         REGISTER_TRACE(pOp->p2, pOut);
66568:       }else if( pOp->p5 & SQLITE_JUMPIFNULL ){
66569:         pc = pOp->p2-1;
66570:       }
66571:       break;
66572:     }
66573:   }else{
66574:     /* Neither operand is NULL.  Do a comparison. */
66575:     u.aj.affinity = pOp->p5 & SQLITE_AFF_MASK;
66576:     if( u.aj.affinity ){
66577:       applyAffinity(pIn1, u.aj.affinity, encoding);
66578:       applyAffinity(pIn3, u.aj.affinity, encoding);
66579:       if( db->mallocFailed ) goto no_mem;
66580:     }
66581: 
66582:     assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 );
66583:     ExpandBlob(pIn1);
66584:     ExpandBlob(pIn3);
66585:     u.aj.res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl);
66586:   }
66587:   switch( pOp->opcode ){
66588:     case OP_Eq:    u.aj.res = u.aj.res==0;     break;
66589:     case OP_Ne:    u.aj.res = u.aj.res!=0;     break;
66590:     case OP_Lt:    u.aj.res = u.aj.res<0;      break;
66591:     case OP_Le:    u.aj.res = u.aj.res<=0;     break;
66592:     case OP_Gt:    u.aj.res = u.aj.res>0;      break;
66593:     default:       u.aj.res = u.aj.res>=0;     break;
66594:   }
66595: 
66596:   if( pOp->p5 & SQLITE_STOREP2 ){
66597:     pOut = &aMem[pOp->p2];
66598:     memAboutToChange(p, pOut);
66599:     MemSetTypeFlag(pOut, MEM_Int);
66600:     pOut->u.i = u.aj.res;
66601:     REGISTER_TRACE(pOp->p2, pOut);
66602:   }else if( u.aj.res ){
66603:     pc = pOp->p2-1;
66604:   }
66605: 
66606:   /* Undo any changes made by applyAffinity() to the input registers. */
66607:   pIn1->flags = (pIn1->flags&~MEM_TypeMask) | (u.aj.flags1&MEM_TypeMask);
66608:   pIn3->flags = (pIn3->flags&~MEM_TypeMask) | (u.aj.flags3&MEM_TypeMask);
66609:   break;
66610: }
66611: 
66612: /* Opcode: Permutation * * * P4 *
66613: **
66614: ** Set the permutation used by the OP_Compare operator to be the array
66615: ** of integers in P4.
66616: **
66617: ** The permutation is only valid until the next OP_Permutation, OP_Compare,
66618: ** OP_Halt, or OP_ResultRow.  Typically the OP_Permutation should occur
66619: ** immediately prior to the OP_Compare.
66620: */
66621: case OP_Permutation: {
66622:   assert( pOp->p4type==P4_INTARRAY );
66623:   assert( pOp->p4.ai );
66624:   aPermute = pOp->p4.ai;
66625:   break;
66626: }
66627: 
66628: /* Opcode: Compare P1 P2 P3 P4 *
66629: **
66630: ** Compare two vectors of registers in reg(P1)..reg(P1+P3-1) (call this
66631: ** vector "A") and in reg(P2)..reg(P2+P3-1) ("B").  Save the result of
66632: ** the comparison for use by the next OP_Jump instruct.
66633: **
66634: ** P4 is a KeyInfo structure that defines collating sequences and sort
66635: ** orders for the comparison.  The permutation applies to registers
66636: ** only.  The KeyInfo elements are used sequentially.
66637: **
66638: ** The comparison is a sort comparison, so NULLs compare equal,
66639: ** NULLs are less than numbers, numbers are less than strings,
66640: ** and strings are less than blobs.
66641: */
66642: case OP_Compare: {
66643: #if 0  /* local variables moved into u.ak */
66644:   int n;
66645:   int i;
66646:   int p1;
66647:   int p2;
66648:   const KeyInfo *pKeyInfo;
66649:   int idx;
66650:   CollSeq *pColl;    /* Collating sequence to use on this term */
66651:   int bRev;          /* True for DESCENDING sort order */
66652: #endif /* local variables moved into u.ak */
66653: 
66654:   u.ak.n = pOp->p3;
66655:   u.ak.pKeyInfo = pOp->p4.pKeyInfo;
66656:   assert( u.ak.n>0 );
66657:   assert( u.ak.pKeyInfo!=0 );
66658:   u.ak.p1 = pOp->p1;
66659:   u.ak.p2 = pOp->p2;
66660: #if SQLITE_DEBUG
66661:   if( aPermute ){
66662:     int k, mx = 0;
66663:     for(k=0; k<u.ak.n; k++) if( aPermute[k]>mx ) mx = aPermute[k];
66664:     assert( u.ak.p1>0 && u.ak.p1+mx<=p->nMem+1 );
66665:     assert( u.ak.p2>0 && u.ak.p2+mx<=p->nMem+1 );
66666:   }else{
66667:     assert( u.ak.p1>0 && u.ak.p1+u.ak.n<=p->nMem+1 );
66668:     assert( u.ak.p2>0 && u.ak.p2+u.ak.n<=p->nMem+1 );
66669:   }
66670: #endif /* SQLITE_DEBUG */
66671:   for(u.ak.i=0; u.ak.i<u.ak.n; u.ak.i++){
66672:     u.ak.idx = aPermute ? aPermute[u.ak.i] : u.ak.i;
66673:     assert( memIsValid(&aMem[u.ak.p1+u.ak.idx]) );
66674:     assert( memIsValid(&aMem[u.ak.p2+u.ak.idx]) );
66675:     REGISTER_TRACE(u.ak.p1+u.ak.idx, &aMem[u.ak.p1+u.ak.idx]);
66676:     REGISTER_TRACE(u.ak.p2+u.ak.idx, &aMem[u.ak.p2+u.ak.idx]);
66677:     assert( u.ak.i<u.ak.pKeyInfo->nField );
66678:     u.ak.pColl = u.ak.pKeyInfo->aColl[u.ak.i];
66679:     u.ak.bRev = u.ak.pKeyInfo->aSortOrder[u.ak.i];
66680:     iCompare = sqlite3MemCompare(&aMem[u.ak.p1+u.ak.idx], &aMem[u.ak.p2+u.ak.idx], u.ak.pColl);
66681:     if( iCompare ){
66682:       if( u.ak.bRev ) iCompare = -iCompare;
66683:       break;
66684:     }
66685:   }
66686:   aPermute = 0;
66687:   break;
66688: }
66689: 
66690: /* Opcode: Jump P1 P2 P3 * *
66691: **
66692: ** Jump to the instruction at address P1, P2, or P3 depending on whether
66693: ** in the most recent OP_Compare instruction the P1 vector was less than
66694: ** equal to, or greater than the P2 vector, respectively.
66695: */
66696: case OP_Jump: {             /* jump */
66697:   if( iCompare<0 ){
66698:     pc = pOp->p1 - 1;
66699:   }else if( iCompare==0 ){
66700:     pc = pOp->p2 - 1;
66701:   }else{
66702:     pc = pOp->p3 - 1;
66703:   }
66704:   break;
66705: }
66706: 
66707: /* Opcode: And P1 P2 P3 * *
66708: **
66709: ** Take the logical AND of the values in registers P1 and P2 and
66710: ** write the result into register P3.
66711: **
66712: ** If either P1 or P2 is 0 (false) then the result is 0 even if
66713: ** the other input is NULL.  A NULL and true or two NULLs give
66714: ** a NULL output.
66715: */
66716: /* Opcode: Or P1 P2 P3 * *
66717: **
66718: ** Take the logical OR of the values in register P1 and P2 and
66719: ** store the answer in register P3.
66720: **
66721: ** If either P1 or P2 is nonzero (true) then the result is 1 (true)
66722: ** even if the other input is NULL.  A NULL and false or two NULLs
66723: ** give a NULL output.
66724: */
66725: case OP_And:              /* same as TK_AND, in1, in2, out3 */
66726: case OP_Or: {             /* same as TK_OR, in1, in2, out3 */
66727: #if 0  /* local variables moved into u.al */
66728:   int v1;    /* Left operand:  0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
66729:   int v2;    /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
66730: #endif /* local variables moved into u.al */
66731: 
66732:   pIn1 = &aMem[pOp->p1];
66733:   if( pIn1->flags & MEM_Null ){
66734:     u.al.v1 = 2;
66735:   }else{
66736:     u.al.v1 = sqlite3VdbeIntValue(pIn1)!=0;
66737:   }
66738:   pIn2 = &aMem[pOp->p2];
66739:   if( pIn2->flags & MEM_Null ){
66740:     u.al.v2 = 2;
66741:   }else{
66742:     u.al.v2 = sqlite3VdbeIntValue(pIn2)!=0;
66743:   }
66744:   if( pOp->opcode==OP_And ){
66745:     static const unsigned char and_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 };
66746:     u.al.v1 = and_logic[u.al.v1*3+u.al.v2];
66747:   }else{
66748:     static const unsigned char or_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 };
66749:     u.al.v1 = or_logic[u.al.v1*3+u.al.v2];
66750:   }
66751:   pOut = &aMem[pOp->p3];
66752:   if( u.al.v1==2 ){
66753:     MemSetTypeFlag(pOut, MEM_Null);
66754:   }else{
66755:     pOut->u.i = u.al.v1;
66756:     MemSetTypeFlag(pOut, MEM_Int);
66757:   }
66758:   break;
66759: }
66760: 
66761: /* Opcode: Not P1 P2 * * *
66762: **
66763: ** Interpret the value in register P1 as a boolean value.  Store the
66764: ** boolean complement in register P2.  If the value in register P1 is 
66765: ** NULL, then a NULL is stored in P2.
66766: */
66767: case OP_Not: {                /* same as TK_NOT, in1, out2 */
66768:   pIn1 = &aMem[pOp->p1];
66769:   pOut = &aMem[pOp->p2];
66770:   if( pIn1->flags & MEM_Null ){
66771:     sqlite3VdbeMemSetNull(pOut);
66772:   }else{
66773:     sqlite3VdbeMemSetInt64(pOut, !sqlite3VdbeIntValue(pIn1));
66774:   }
66775:   break;
66776: }
66777: 
66778: /* Opcode: BitNot P1 P2 * * *
66779: **
66780: ** Interpret the content of register P1 as an integer.  Store the
66781: ** ones-complement of the P1 value into register P2.  If P1 holds
66782: ** a NULL then store a NULL in P2.
66783: */
66784: case OP_BitNot: {             /* same as TK_BITNOT, in1, out2 */
66785:   pIn1 = &aMem[pOp->p1];
66786:   pOut = &aMem[pOp->p2];
66787:   if( pIn1->flags & MEM_Null ){
66788:     sqlite3VdbeMemSetNull(pOut);
66789:   }else{
66790:     sqlite3VdbeMemSetInt64(pOut, ~sqlite3VdbeIntValue(pIn1));
66791:   }
66792:   break;
66793: }
66794: 
66795: /* Opcode: Once P1 P2 * * *
66796: **
66797: ** Check if OP_Once flag P1 is set. If so, jump to instruction P2. Otherwise,
66798: ** set the flag and fall through to the next instruction.
66799: **
66800: ** See also: JumpOnce
66801: */
66802: case OP_Once: {             /* jump */
66803:   assert( pOp->p1<p->nOnceFlag );
66804:   if( p->aOnceFlag[pOp->p1] ){
66805:     pc = pOp->p2-1;
66806:   }else{
66807:     p->aOnceFlag[pOp->p1] = 1;
66808:   }
66809:   break;
66810: }
66811: 
66812: /* Opcode: If P1 P2 P3 * *
66813: **
66814: ** Jump to P2 if the value in register P1 is true.  The value
66815: ** is considered true if it is numeric and non-zero.  If the value
66816: ** in P1 is NULL then take the jump if P3 is non-zero.
66817: */
66818: /* Opcode: IfNot P1 P2 P3 * *
66819: **
66820: ** Jump to P2 if the value in register P1 is False.  The value
66821: ** is considered false if it has a numeric value of zero.  If the value
66822: ** in P1 is NULL then take the jump if P3 is zero.
66823: */
66824: case OP_If:                 /* jump, in1 */
66825: case OP_IfNot: {            /* jump, in1 */
66826: #if 0  /* local variables moved into u.am */
66827:   int c;
66828: #endif /* local variables moved into u.am */
66829:   pIn1 = &aMem[pOp->p1];
66830:   if( pIn1->flags & MEM_Null ){
66831:     u.am.c = pOp->p3;
66832:   }else{
66833: #ifdef SQLITE_OMIT_FLOATING_POINT
66834:     u.am.c = sqlite3VdbeIntValue(pIn1)!=0;
66835: #else
66836:     u.am.c = sqlite3VdbeRealValue(pIn1)!=0.0;
66837: #endif
66838:     if( pOp->opcode==OP_IfNot ) u.am.c = !u.am.c;
66839:   }
66840:   if( u.am.c ){
66841:     pc = pOp->p2-1;
66842:   }
66843:   break;
66844: }
66845: 
66846: /* Opcode: IsNull P1 P2 * * *
66847: **
66848: ** Jump to P2 if the value in register P1 is NULL.
66849: */
66850: case OP_IsNull: {            /* same as TK_ISNULL, jump, in1 */
66851:   pIn1 = &aMem[pOp->p1];
66852:   if( (pIn1->flags & MEM_Null)!=0 ){
66853:     pc = pOp->p2 - 1;
66854:   }
66855:   break;
66856: }
66857: 
66858: /* Opcode: NotNull P1 P2 * * *
66859: **
66860: ** Jump to P2 if the value in register P1 is not NULL.  
66861: */
66862: case OP_NotNull: {            /* same as TK_NOTNULL, jump, in1 */
66863:   pIn1 = &aMem[pOp->p1];
66864:   if( (pIn1->flags & MEM_Null)==0 ){
66865:     pc = pOp->p2 - 1;
66866:   }
66867:   break;
66868: }
66869: 
66870: /* Opcode: Column P1 P2 P3 P4 P5
66871: **
66872: ** Interpret the data that cursor P1 points to as a structure built using
66873: ** the MakeRecord instruction.  (See the MakeRecord opcode for additional
66874: ** information about the format of the data.)  Extract the P2-th column
66875: ** from this record.  If there are less that (P2+1) 
66876: ** values in the record, extract a NULL.
66877: **
66878: ** The value extracted is stored in register P3.
66879: **
66880: ** If the column contains fewer than P2 fields, then extract a NULL.  Or,
66881: ** if the P4 argument is a P4_MEM use the value of the P4 argument as
66882: ** the result.
66883: **
66884: ** If the OPFLAG_CLEARCACHE bit is set on P5 and P1 is a pseudo-table cursor,
66885: ** then the cache of the cursor is reset prior to extracting the column.
66886: ** The first OP_Column against a pseudo-table after the value of the content
66887: ** register has changed should have this bit set.
66888: */
66889: case OP_Column: {
66890: #if 0  /* local variables moved into u.an */
66891:   u32 payloadSize;   /* Number of bytes in the record */
66892:   i64 payloadSize64; /* Number of bytes in the record */
66893:   int p1;            /* P1 value of the opcode */
66894:   int p2;            /* column number to retrieve */
66895:   VdbeCursor *pC;    /* The VDBE cursor */
66896:   char *zRec;        /* Pointer to complete record-data */
66897:   BtCursor *pCrsr;   /* The BTree cursor */
66898:   u32 *aType;        /* aType[i] holds the numeric type of the i-th column */
66899:   u32 *aOffset;      /* aOffset[i] is offset to start of data for i-th column */
66900:   int nField;        /* number of fields in the record */
66901:   int len;           /* The length of the serialized data for the column */
66902:   int i;             /* Loop counter */
66903:   char *zData;       /* Part of the record being decoded */
66904:   Mem *pDest;        /* Where to write the extracted value */
66905:   Mem sMem;          /* For storing the record being decoded */
66906:   u8 *zIdx;          /* Index into header */
66907:   u8 *zEndHdr;       /* Pointer to first byte after the header */
66908:   u32 offset;        /* Offset into the data */
66909:   u32 szField;       /* Number of bytes in the content of a field */
66910:   int szHdr;         /* Size of the header size field at start of record */
66911:   int avail;         /* Number of bytes of available data */
66912:   u32 t;             /* A type code from the record header */
66913:   Mem *pReg;         /* PseudoTable input register */
66914: #endif /* local variables moved into u.an */
66915: 
66916: 
66917:   u.an.p1 = pOp->p1;
66918:   u.an.p2 = pOp->p2;
66919:   u.an.pC = 0;
66920:   memset(&u.an.sMem, 0, sizeof(u.an.sMem));
66921:   assert( u.an.p1<p->nCursor );
66922:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
66923:   u.an.pDest = &aMem[pOp->p3];
66924:   memAboutToChange(p, u.an.pDest);
66925:   u.an.zRec = 0;
66926: 
66927:   /* This block sets the variable u.an.payloadSize to be the total number of
66928:   ** bytes in the record.
66929:   **
66930:   ** u.an.zRec is set to be the complete text of the record if it is available.
66931:   ** The complete record text is always available for pseudo-tables
66932:   ** If the record is stored in a cursor, the complete record text
66933:   ** might be available in the  u.an.pC->aRow cache.  Or it might not be.
66934:   ** If the data is unavailable,  u.an.zRec is set to NULL.
66935:   **
66936:   ** We also compute the number of columns in the record.  For cursors,
66937:   ** the number of columns is stored in the VdbeCursor.nField element.
66938:   */
66939:   u.an.pC = p->apCsr[u.an.p1];
66940:   assert( u.an.pC!=0 );
66941: #ifndef SQLITE_OMIT_VIRTUALTABLE
66942:   assert( u.an.pC->pVtabCursor==0 );
66943: #endif
66944:   u.an.pCrsr = u.an.pC->pCursor;
66945:   if( u.an.pCrsr!=0 ){
66946:     /* The record is stored in a B-Tree */
66947:     rc = sqlite3VdbeCursorMoveto(u.an.pC);
66948:     if( rc ) goto abort_due_to_error;
66949:     if( u.an.pC->nullRow ){
66950:       u.an.payloadSize = 0;
66951:     }else if( u.an.pC->cacheStatus==p->cacheCtr ){
66952:       u.an.payloadSize = u.an.pC->payloadSize;
66953:       u.an.zRec = (char*)u.an.pC->aRow;
66954:     }else if( u.an.pC->isIndex ){
66955:       assert( sqlite3BtreeCursorIsValid(u.an.pCrsr) );
66956:       VVA_ONLY(rc =) sqlite3BtreeKeySize(u.an.pCrsr, &u.an.payloadSize64);
66957:       assert( rc==SQLITE_OK );   /* True because of CursorMoveto() call above */
66958:       /* sqlite3BtreeParseCellPtr() uses getVarint32() to extract the
66959:       ** payload size, so it is impossible for u.an.payloadSize64 to be
66960:       ** larger than 32 bits. */
66961:       assert( (u.an.payloadSize64 & SQLITE_MAX_U32)==(u64)u.an.payloadSize64 );
66962:       u.an.payloadSize = (u32)u.an.payloadSize64;
66963:     }else{
66964:       assert( sqlite3BtreeCursorIsValid(u.an.pCrsr) );
66965:       VVA_ONLY(rc =) sqlite3BtreeDataSize(u.an.pCrsr, &u.an.payloadSize);
66966:       assert( rc==SQLITE_OK );   /* DataSize() cannot fail */
66967:     }
66968:   }else if( ALWAYS(u.an.pC->pseudoTableReg>0) ){
66969:     u.an.pReg = &aMem[u.an.pC->pseudoTableReg];
66970:     assert( u.an.pReg->flags & MEM_Blob );
66971:     assert( memIsValid(u.an.pReg) );
66972:     u.an.payloadSize = u.an.pReg->n;
66973:     u.an.zRec = u.an.pReg->z;
66974:     u.an.pC->cacheStatus = (pOp->p5&OPFLAG_CLEARCACHE) ? CACHE_STALE : p->cacheCtr;
66975:     assert( u.an.payloadSize==0 || u.an.zRec!=0 );
66976:   }else{
66977:     /* Consider the row to be NULL */
66978:     u.an.payloadSize = 0;
66979:   }
66980: 
66981:   /* If u.an.payloadSize is 0, then just store a NULL.  This can happen because of
66982:   ** nullRow or because of a corrupt database. */
66983:   if( u.an.payloadSize==0 ){
66984:     MemSetTypeFlag(u.an.pDest, MEM_Null);
66985:     goto op_column_out;
66986:   }
66987:   assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 );
66988:   if( u.an.payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
66989:     goto too_big;
66990:   }
66991: 
66992:   u.an.nField = u.an.pC->nField;
66993:   assert( u.an.p2<u.an.nField );
66994: 
66995:   /* Read and parse the table header.  Store the results of the parse
66996:   ** into the record header cache fields of the cursor.
66997:   */
66998:   u.an.aType = u.an.pC->aType;
66999:   if( u.an.pC->cacheStatus==p->cacheCtr ){
67000:     u.an.aOffset = u.an.pC->aOffset;
67001:   }else{
67002:     assert(u.an.aType);
67003:     u.an.avail = 0;
67004:     u.an.pC->aOffset = u.an.aOffset = &u.an.aType[u.an.nField];
67005:     u.an.pC->payloadSize = u.an.payloadSize;
67006:     u.an.pC->cacheStatus = p->cacheCtr;
67007: 
67008:     /* Figure out how many bytes are in the header */
67009:     if( u.an.zRec ){
67010:       u.an.zData = u.an.zRec;
67011:     }else{
67012:       if( u.an.pC->isIndex ){
67013:         u.an.zData = (char*)sqlite3BtreeKeyFetch(u.an.pCrsr, &u.an.avail);
67014:       }else{
67015:         u.an.zData = (char*)sqlite3BtreeDataFetch(u.an.pCrsr, &u.an.avail);
67016:       }
67017:       /* If KeyFetch()/DataFetch() managed to get the entire payload,
67018:       ** save the payload in the u.an.pC->aRow cache.  That will save us from
67019:       ** having to make additional calls to fetch the content portion of
67020:       ** the record.
67021:       */
67022:       assert( u.an.avail>=0 );
67023:       if( u.an.payloadSize <= (u32)u.an.avail ){
67024:         u.an.zRec = u.an.zData;
67025:         u.an.pC->aRow = (u8*)u.an.zData;
67026:       }else{
67027:         u.an.pC->aRow = 0;
67028:       }
67029:     }
67030:     /* The following assert is true in all cases accept when
67031:     ** the database file has been corrupted externally.
67032:     **    assert( u.an.zRec!=0 || u.an.avail>=u.an.payloadSize || u.an.avail>=9 ); */
67033:     u.an.szHdr = getVarint32((u8*)u.an.zData, u.an.offset);
67034: 
67035:     /* Make sure a corrupt database has not given us an oversize header.
67036:     ** Do this now to avoid an oversize memory allocation.
67037:     **
67038:     ** Type entries can be between 1 and 5 bytes each.  But 4 and 5 byte
67039:     ** types use so much data space that there can only be 4096 and 32 of
67040:     ** them, respectively.  So the maximum header length results from a
67041:     ** 3-byte type for each of the maximum of 32768 columns plus three
67042:     ** extra bytes for the header length itself.  32768*3 + 3 = 98307.
67043:     */
67044:     if( u.an.offset > 98307 ){
67045:       rc = SQLITE_CORRUPT_BKPT;
67046:       goto op_column_out;
67047:     }
67048: 
67049:     /* Compute in u.an.len the number of bytes of data we need to read in order
67050:     ** to get u.an.nField type values.  u.an.offset is an upper bound on this.  But
67051:     ** u.an.nField might be significantly less than the true number of columns
67052:     ** in the table, and in that case, 5*u.an.nField+3 might be smaller than u.an.offset.
67053:     ** We want to minimize u.an.len in order to limit the size of the memory
67054:     ** allocation, especially if a corrupt database file has caused u.an.offset
67055:     ** to be oversized. Offset is limited to 98307 above.  But 98307 might
67056:     ** still exceed Robson memory allocation limits on some configurations.
67057:     ** On systems that cannot tolerate large memory allocations, u.an.nField*5+3
67058:     ** will likely be much smaller since u.an.nField will likely be less than
67059:     ** 20 or so.  This insures that Robson memory allocation limits are
67060:     ** not exceeded even for corrupt database files.
67061:     */
67062:     u.an.len = u.an.nField*5 + 3;
67063:     if( u.an.len > (int)u.an.offset ) u.an.len = (int)u.an.offset;
67064: 
67065:     /* The KeyFetch() or DataFetch() above are fast and will get the entire
67066:     ** record header in most cases.  But they will fail to get the complete
67067:     ** record header if the record header does not fit on a single page
67068:     ** in the B-Tree.  When that happens, use sqlite3VdbeMemFromBtree() to
67069:     ** acquire the complete header text.
67070:     */
67071:     if( !u.an.zRec && u.an.avail<u.an.len ){
67072:       u.an.sMem.flags = 0;
67073:       u.an.sMem.db = 0;
67074:       rc = sqlite3VdbeMemFromBtree(u.an.pCrsr, 0, u.an.len, u.an.pC->isIndex, &u.an.sMem);
67075:       if( rc!=SQLITE_OK ){
67076:         goto op_column_out;
67077:       }
67078:       u.an.zData = u.an.sMem.z;
67079:     }
67080:     u.an.zEndHdr = (u8 *)&u.an.zData[u.an.len];
67081:     u.an.zIdx = (u8 *)&u.an.zData[u.an.szHdr];
67082: 
67083:     /* Scan the header and use it to fill in the u.an.aType[] and u.an.aOffset[]
67084:     ** arrays.  u.an.aType[u.an.i] will contain the type integer for the u.an.i-th
67085:     ** column and u.an.aOffset[u.an.i] will contain the u.an.offset from the beginning
67086:     ** of the record to the start of the data for the u.an.i-th column
67087:     */
67088:     for(u.an.i=0; u.an.i<u.an.nField; u.an.i++){
67089:       if( u.an.zIdx<u.an.zEndHdr ){
67090:         u.an.aOffset[u.an.i] = u.an.offset;
67091:         if( u.an.zIdx[0]<0x80 ){
67092:           u.an.t = u.an.zIdx[0];
67093:           u.an.zIdx++;
67094:         }else{
67095:           u.an.zIdx += sqlite3GetVarint32(u.an.zIdx, &u.an.t);
67096:         }
67097:         u.an.aType[u.an.i] = u.an.t;
67098:         u.an.szField = sqlite3VdbeSerialTypeLen(u.an.t);
67099:         u.an.offset += u.an.szField;
67100:         if( u.an.offset<u.an.szField ){  /* True if u.an.offset overflows */
67101:           u.an.zIdx = &u.an.zEndHdr[1];  /* Forces SQLITE_CORRUPT return below */
67102:           break;
67103:         }
67104:       }else{
67105:         /* If u.an.i is less that u.an.nField, then there are less fields in this
67106:         ** record than SetNumColumns indicated there are columns in the
67107:         ** table. Set the u.an.offset for any extra columns not present in
67108:         ** the record to 0. This tells code below to store a NULL
67109:         ** instead of deserializing a value from the record.
67110:         */
67111:         u.an.aOffset[u.an.i] = 0;
67112:       }
67113:     }
67114:     sqlite3VdbeMemRelease(&u.an.sMem);
67115:     u.an.sMem.flags = MEM_Null;
67116: 
67117:     /* If we have read more header data than was contained in the header,
67118:     ** or if the end of the last field appears to be past the end of the
67119:     ** record, or if the end of the last field appears to be before the end
67120:     ** of the record (when all fields present), then we must be dealing
67121:     ** with a corrupt database.
67122:     */
67123:     if( (u.an.zIdx > u.an.zEndHdr) || (u.an.offset > u.an.payloadSize)
67124:          || (u.an.zIdx==u.an.zEndHdr && u.an.offset!=u.an.payloadSize) ){
67125:       rc = SQLITE_CORRUPT_BKPT;
67126:       goto op_column_out;
67127:     }
67128:   }
67129: 
67130:   /* Get the column information. If u.an.aOffset[u.an.p2] is non-zero, then
67131:   ** deserialize the value from the record. If u.an.aOffset[u.an.p2] is zero,
67132:   ** then there are not enough fields in the record to satisfy the
67133:   ** request.  In this case, set the value NULL or to P4 if P4 is
67134:   ** a pointer to a Mem object.
67135:   */
67136:   if( u.an.aOffset[u.an.p2] ){
67137:     assert( rc==SQLITE_OK );
67138:     if( u.an.zRec ){
67139:       VdbeMemRelease(u.an.pDest);
67140:       sqlite3VdbeSerialGet((u8 *)&u.an.zRec[u.an.aOffset[u.an.p2]], u.an.aType[u.an.p2], u.an.pDest);
67141:     }else{
67142:       u.an.len = sqlite3VdbeSerialTypeLen(u.an.aType[u.an.p2]);
67143:       sqlite3VdbeMemMove(&u.an.sMem, u.an.pDest);
67144:       rc = sqlite3VdbeMemFromBtree(u.an.pCrsr, u.an.aOffset[u.an.p2], u.an.len, u.an.pC->isIndex, &u.an.sMem);
67145:       if( rc!=SQLITE_OK ){
67146:         goto op_column_out;
67147:       }
67148:       u.an.zData = u.an.sMem.z;
67149:       sqlite3VdbeSerialGet((u8*)u.an.zData, u.an.aType[u.an.p2], u.an.pDest);
67150:     }
67151:     u.an.pDest->enc = encoding;
67152:   }else{
67153:     if( pOp->p4type==P4_MEM ){
67154:       sqlite3VdbeMemShallowCopy(u.an.pDest, pOp->p4.pMem, MEM_Static);
67155:     }else{
67156:       MemSetTypeFlag(u.an.pDest, MEM_Null);
67157:     }
67158:   }
67159: 
67160:   /* If we dynamically allocated space to hold the data (in the
67161:   ** sqlite3VdbeMemFromBtree() call above) then transfer control of that
67162:   ** dynamically allocated space over to the u.an.pDest structure.
67163:   ** This prevents a memory copy.
67164:   */
67165:   if( u.an.sMem.zMalloc ){
67166:     assert( u.an.sMem.z==u.an.sMem.zMalloc );
67167:     assert( !(u.an.pDest->flags & MEM_Dyn) );
67168:     assert( !(u.an.pDest->flags & (MEM_Blob|MEM_Str)) || u.an.pDest->z==u.an.sMem.z );
67169:     u.an.pDest->flags &= ~(MEM_Ephem|MEM_Static);
67170:     u.an.pDest->flags |= MEM_Term;
67171:     u.an.pDest->z = u.an.sMem.z;
67172:     u.an.pDest->zMalloc = u.an.sMem.zMalloc;
67173:   }
67174: 
67175:   rc = sqlite3VdbeMemMakeWriteable(u.an.pDest);
67176: 
67177: op_column_out:
67178:   UPDATE_MAX_BLOBSIZE(u.an.pDest);
67179:   REGISTER_TRACE(pOp->p3, u.an.pDest);
67180:   break;
67181: }
67182: 
67183: /* Opcode: Affinity P1 P2 * P4 *
67184: **
67185: ** Apply affinities to a range of P2 registers starting with P1.
67186: **
67187: ** P4 is a string that is P2 characters long. The nth character of the
67188: ** string indicates the column affinity that should be used for the nth
67189: ** memory cell in the range.
67190: */
67191: case OP_Affinity: {
67192: #if 0  /* local variables moved into u.ao */
67193:   const char *zAffinity;   /* The affinity to be applied */
67194:   char cAff;               /* A single character of affinity */
67195: #endif /* local variables moved into u.ao */
67196: 
67197:   u.ao.zAffinity = pOp->p4.z;
67198:   assert( u.ao.zAffinity!=0 );
67199:   assert( u.ao.zAffinity[pOp->p2]==0 );
67200:   pIn1 = &aMem[pOp->p1];
67201:   while( (u.ao.cAff = *(u.ao.zAffinity++))!=0 ){
67202:     assert( pIn1 <= &p->aMem[p->nMem] );
67203:     assert( memIsValid(pIn1) );
67204:     ExpandBlob(pIn1);
67205:     applyAffinity(pIn1, u.ao.cAff, encoding);
67206:     pIn1++;
67207:   }
67208:   break;
67209: }
67210: 
67211: /* Opcode: MakeRecord P1 P2 P3 P4 *
67212: **
67213: ** Convert P2 registers beginning with P1 into the [record format]
67214: ** use as a data record in a database table or as a key
67215: ** in an index.  The OP_Column opcode can decode the record later.
67216: **
67217: ** P4 may be a string that is P2 characters long.  The nth character of the
67218: ** string indicates the column affinity that should be used for the nth
67219: ** field of the index key.
67220: **
67221: ** The mapping from character to affinity is given by the SQLITE_AFF_
67222: ** macros defined in sqliteInt.h.
67223: **
67224: ** If P4 is NULL then all index fields have the affinity NONE.
67225: */
67226: case OP_MakeRecord: {
67227: #if 0  /* local variables moved into u.ap */
67228:   u8 *zNewRecord;        /* A buffer to hold the data for the new record */
67229:   Mem *pRec;             /* The new record */
67230:   u64 nData;             /* Number of bytes of data space */
67231:   int nHdr;              /* Number of bytes of header space */
67232:   i64 nByte;             /* Data space required for this record */
67233:   int nZero;             /* Number of zero bytes at the end of the record */
67234:   int nVarint;           /* Number of bytes in a varint */
67235:   u32 serial_type;       /* Type field */
67236:   Mem *pData0;           /* First field to be combined into the record */
67237:   Mem *pLast;            /* Last field of the record */
67238:   int nField;            /* Number of fields in the record */
67239:   char *zAffinity;       /* The affinity string for the record */
67240:   int file_format;       /* File format to use for encoding */
67241:   int i;                 /* Space used in zNewRecord[] */
67242:   int len;               /* Length of a field */
67243: #endif /* local variables moved into u.ap */
67244: 
67245:   /* Assuming the record contains N fields, the record format looks
67246:   ** like this:
67247:   **
67248:   ** ------------------------------------------------------------------------
67249:   ** | hdr-size | type 0 | type 1 | ... | type N-1 | data0 | ... | data N-1 |
67250:   ** ------------------------------------------------------------------------
67251:   **
67252:   ** Data(0) is taken from register P1.  Data(1) comes from register P1+1
67253:   ** and so froth.
67254:   **
67255:   ** Each type field is a varint representing the serial type of the
67256:   ** corresponding data element (see sqlite3VdbeSerialType()). The
67257:   ** hdr-size field is also a varint which is the offset from the beginning
67258:   ** of the record to data0.
67259:   */
67260:   u.ap.nData = 0;         /* Number of bytes of data space */
67261:   u.ap.nHdr = 0;          /* Number of bytes of header space */
67262:   u.ap.nZero = 0;         /* Number of zero bytes at the end of the record */
67263:   u.ap.nField = pOp->p1;
67264:   u.ap.zAffinity = pOp->p4.z;
67265:   assert( u.ap.nField>0 && pOp->p2>0 && pOp->p2+u.ap.nField<=p->nMem+1 );
67266:   u.ap.pData0 = &aMem[u.ap.nField];
67267:   u.ap.nField = pOp->p2;
67268:   u.ap.pLast = &u.ap.pData0[u.ap.nField-1];
67269:   u.ap.file_format = p->minWriteFileFormat;
67270: 
67271:   /* Identify the output register */
67272:   assert( pOp->p3<pOp->p1 || pOp->p3>=pOp->p1+pOp->p2 );
67273:   pOut = &aMem[pOp->p3];
67274:   memAboutToChange(p, pOut);
67275: 
67276:   /* Loop through the elements that will make up the record to figure
67277:   ** out how much space is required for the new record.
67278:   */
67279:   for(u.ap.pRec=u.ap.pData0; u.ap.pRec<=u.ap.pLast; u.ap.pRec++){
67280:     assert( memIsValid(u.ap.pRec) );
67281:     if( u.ap.zAffinity ){
67282:       applyAffinity(u.ap.pRec, u.ap.zAffinity[u.ap.pRec-u.ap.pData0], encoding);
67283:     }
67284:     if( u.ap.pRec->flags&MEM_Zero && u.ap.pRec->n>0 ){
67285:       sqlite3VdbeMemExpandBlob(u.ap.pRec);
67286:     }
67287:     u.ap.serial_type = sqlite3VdbeSerialType(u.ap.pRec, u.ap.file_format);
67288:     u.ap.len = sqlite3VdbeSerialTypeLen(u.ap.serial_type);
67289:     u.ap.nData += u.ap.len;
67290:     u.ap.nHdr += sqlite3VarintLen(u.ap.serial_type);
67291:     if( u.ap.pRec->flags & MEM_Zero ){
67292:       /* Only pure zero-filled BLOBs can be input to this Opcode.
67293:       ** We do not allow blobs with a prefix and a zero-filled tail. */
67294:       u.ap.nZero += u.ap.pRec->u.nZero;
67295:     }else if( u.ap.len ){
67296:       u.ap.nZero = 0;
67297:     }
67298:   }
67299: 
67300:   /* Add the initial header varint and total the size */
67301:   u.ap.nHdr += u.ap.nVarint = sqlite3VarintLen(u.ap.nHdr);
67302:   if( u.ap.nVarint<sqlite3VarintLen(u.ap.nHdr) ){
67303:     u.ap.nHdr++;
67304:   }
67305:   u.ap.nByte = u.ap.nHdr+u.ap.nData-u.ap.nZero;
67306:   if( u.ap.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
67307:     goto too_big;
67308:   }
67309: 
67310:   /* Make sure the output register has a buffer large enough to store
67311:   ** the new record. The output register (pOp->p3) is not allowed to
67312:   ** be one of the input registers (because the following call to
67313:   ** sqlite3VdbeMemGrow() could clobber the value before it is used).
67314:   */
67315:   if( sqlite3VdbeMemGrow(pOut, (int)u.ap.nByte, 0) ){
67316:     goto no_mem;
67317:   }
67318:   u.ap.zNewRecord = (u8 *)pOut->z;
67319: 
67320:   /* Write the record */
67321:   u.ap.i = putVarint32(u.ap.zNewRecord, u.ap.nHdr);
67322:   for(u.ap.pRec=u.ap.pData0; u.ap.pRec<=u.ap.pLast; u.ap.pRec++){
67323:     u.ap.serial_type = sqlite3VdbeSerialType(u.ap.pRec, u.ap.file_format);
67324:     u.ap.i += putVarint32(&u.ap.zNewRecord[u.ap.i], u.ap.serial_type);      /* serial type */
67325:   }
67326:   for(u.ap.pRec=u.ap.pData0; u.ap.pRec<=u.ap.pLast; u.ap.pRec++){  /* serial data */
67327:     u.ap.i += sqlite3VdbeSerialPut(&u.ap.zNewRecord[u.ap.i], (int)(u.ap.nByte-u.ap.i), u.ap.pRec,u.ap.file_format);
67328:   }
67329:   assert( u.ap.i==u.ap.nByte );
67330: 
67331:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
67332:   pOut->n = (int)u.ap.nByte;
67333:   pOut->flags = MEM_Blob | MEM_Dyn;
67334:   pOut->xDel = 0;
67335:   if( u.ap.nZero ){
67336:     pOut->u.nZero = u.ap.nZero;
67337:     pOut->flags |= MEM_Zero;
67338:   }
67339:   pOut->enc = SQLITE_UTF8;  /* In case the blob is ever converted to text */
67340:   REGISTER_TRACE(pOp->p3, pOut);
67341:   UPDATE_MAX_BLOBSIZE(pOut);
67342:   break;
67343: }
67344: 
67345: /* Opcode: Count P1 P2 * * *
67346: **
67347: ** Store the number of entries (an integer value) in the table or index 
67348: ** opened by cursor P1 in register P2
67349: */
67350: #ifndef SQLITE_OMIT_BTREECOUNT
67351: case OP_Count: {         /* out2-prerelease */
67352: #if 0  /* local variables moved into u.aq */
67353:   i64 nEntry;
67354:   BtCursor *pCrsr;
67355: #endif /* local variables moved into u.aq */
67356: 
67357:   u.aq.pCrsr = p->apCsr[pOp->p1]->pCursor;
67358:   if( ALWAYS(u.aq.pCrsr) ){
67359:     rc = sqlite3BtreeCount(u.aq.pCrsr, &u.aq.nEntry);
67360:   }else{
67361:     u.aq.nEntry = 0;
67362:   }
67363:   pOut->u.i = u.aq.nEntry;
67364:   break;
67365: }
67366: #endif
67367: 
67368: /* Opcode: Savepoint P1 * * P4 *
67369: **
67370: ** Open, release or rollback the savepoint named by parameter P4, depending
67371: ** on the value of P1. To open a new savepoint, P1==0. To release (commit) an
67372: ** existing savepoint, P1==1, or to rollback an existing savepoint P1==2.
67373: */
67374: case OP_Savepoint: {
67375: #if 0  /* local variables moved into u.ar */
67376:   int p1;                         /* Value of P1 operand */
67377:   char *zName;                    /* Name of savepoint */
67378:   int nName;
67379:   Savepoint *pNew;
67380:   Savepoint *pSavepoint;
67381:   Savepoint *pTmp;
67382:   int iSavepoint;
67383:   int ii;
67384: #endif /* local variables moved into u.ar */
67385: 
67386:   u.ar.p1 = pOp->p1;
67387:   u.ar.zName = pOp->p4.z;
67388: 
67389:   /* Assert that the u.ar.p1 parameter is valid. Also that if there is no open
67390:   ** transaction, then there cannot be any savepoints.
67391:   */
67392:   assert( db->pSavepoint==0 || db->autoCommit==0 );
67393:   assert( u.ar.p1==SAVEPOINT_BEGIN||u.ar.p1==SAVEPOINT_RELEASE||u.ar.p1==SAVEPOINT_ROLLBACK );
67394:   assert( db->pSavepoint || db->isTransactionSavepoint==0 );
67395:   assert( checkSavepointCount(db) );
67396: 
67397:   if( u.ar.p1==SAVEPOINT_BEGIN ){
67398:     if( db->writeVdbeCnt>0 ){
67399:       /* A new savepoint cannot be created if there are active write
67400:       ** statements (i.e. open read/write incremental blob handles).
67401:       */
67402:       sqlite3SetString(&p->zErrMsg, db, "cannot open savepoint - "
67403:         "SQL statements in progress");
67404:       rc = SQLITE_BUSY;
67405:     }else{
67406:       u.ar.nName = sqlite3Strlen30(u.ar.zName);
67407: 
67408: #ifndef SQLITE_OMIT_VIRTUALTABLE
67409:       /* This call is Ok even if this savepoint is actually a transaction
67410:       ** savepoint (and therefore should not prompt xSavepoint()) callbacks.
67411:       ** If this is a transaction savepoint being opened, it is guaranteed
67412:       ** that the db->aVTrans[] array is empty.  */
67413:       assert( db->autoCommit==0 || db->nVTrans==0 );
67414:       rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN,
67415:                                 db->nStatement+db->nSavepoint);
67416:       if( rc!=SQLITE_OK ) goto abort_due_to_error;
67417: #endif
67418: 
67419:       /* Create a new savepoint structure. */
67420:       u.ar.pNew = sqlite3DbMallocRaw(db, sizeof(Savepoint)+u.ar.nName+1);
67421:       if( u.ar.pNew ){
67422:         u.ar.pNew->zName = (char *)&u.ar.pNew[1];
67423:         memcpy(u.ar.pNew->zName, u.ar.zName, u.ar.nName+1);
67424: 
67425:         /* If there is no open transaction, then mark this as a special
67426:         ** "transaction savepoint". */
67427:         if( db->autoCommit ){
67428:           db->autoCommit = 0;
67429:           db->isTransactionSavepoint = 1;
67430:         }else{
67431:           db->nSavepoint++;
67432:         }
67433: 
67434:         /* Link the new savepoint into the database handle's list. */
67435:         u.ar.pNew->pNext = db->pSavepoint;
67436:         db->pSavepoint = u.ar.pNew;
67437:         u.ar.pNew->nDeferredCons = db->nDeferredCons;
67438:       }
67439:     }
67440:   }else{
67441:     u.ar.iSavepoint = 0;
67442: 
67443:     /* Find the named savepoint. If there is no such savepoint, then an
67444:     ** an error is returned to the user.  */
67445:     for(
67446:       u.ar.pSavepoint = db->pSavepoint;
67447:       u.ar.pSavepoint && sqlite3StrICmp(u.ar.pSavepoint->zName, u.ar.zName);
67448:       u.ar.pSavepoint = u.ar.pSavepoint->pNext
67449:     ){
67450:       u.ar.iSavepoint++;
67451:     }
67452:     if( !u.ar.pSavepoint ){
67453:       sqlite3SetString(&p->zErrMsg, db, "no such savepoint: %s", u.ar.zName);
67454:       rc = SQLITE_ERROR;
67455:     }else if(
67456:         db->writeVdbeCnt>0 || (u.ar.p1==SAVEPOINT_ROLLBACK && db->activeVdbeCnt>1)
67457:     ){
67458:       /* It is not possible to release (commit) a savepoint if there are
67459:       ** active write statements. It is not possible to rollback a savepoint
67460:       ** if there are any active statements at all.
67461:       */
67462:       sqlite3SetString(&p->zErrMsg, db,
67463:         "cannot %s savepoint - SQL statements in progress",
67464:         (u.ar.p1==SAVEPOINT_ROLLBACK ? "rollback": "release")
67465:       );
67466:       rc = SQLITE_BUSY;
67467:     }else{
67468: 
67469:       /* Determine whether or not this is a transaction savepoint. If so,
67470:       ** and this is a RELEASE command, then the current transaction
67471:       ** is committed.
67472:       */
67473:       int isTransaction = u.ar.pSavepoint->pNext==0 && db->isTransactionSavepoint;
67474:       if( isTransaction && u.ar.p1==SAVEPOINT_RELEASE ){
67475:         if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
67476:           goto vdbe_return;
67477:         }
67478:         db->autoCommit = 1;
67479:         if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
67480:           p->pc = pc;
67481:           db->autoCommit = 0;
67482:           p->rc = rc = SQLITE_BUSY;
67483:           goto vdbe_return;
67484:         }
67485:         db->isTransactionSavepoint = 0;
67486:         rc = p->rc;
67487:       }else{
67488:         u.ar.iSavepoint = db->nSavepoint - u.ar.iSavepoint - 1;
67489:         for(u.ar.ii=0; u.ar.ii<db->nDb; u.ar.ii++){
67490:           rc = sqlite3BtreeSavepoint(db->aDb[u.ar.ii].pBt, u.ar.p1, u.ar.iSavepoint);
67491:           if( rc!=SQLITE_OK ){
67492:             goto abort_due_to_error;
67493:           }
67494:         }
67495:         if( u.ar.p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){
67496:           sqlite3ExpirePreparedStatements(db);
67497:           sqlite3ResetInternalSchema(db, -1);
67498:           db->flags = (db->flags | SQLITE_InternChanges);
67499:         }
67500:       }
67501: 
67502:       /* Regardless of whether this is a RELEASE or ROLLBACK, destroy all
67503:       ** savepoints nested inside of the savepoint being operated on. */
67504:       while( db->pSavepoint!=u.ar.pSavepoint ){
67505:         u.ar.pTmp = db->pSavepoint;
67506:         db->pSavepoint = u.ar.pTmp->pNext;
67507:         sqlite3DbFree(db, u.ar.pTmp);
67508:         db->nSavepoint--;
67509:       }
67510: 
67511:       /* If it is a RELEASE, then destroy the savepoint being operated on
67512:       ** too. If it is a ROLLBACK TO, then set the number of deferred
67513:       ** constraint violations present in the database to the value stored
67514:       ** when the savepoint was created.  */
67515:       if( u.ar.p1==SAVEPOINT_RELEASE ){
67516:         assert( u.ar.pSavepoint==db->pSavepoint );
67517:         db->pSavepoint = u.ar.pSavepoint->pNext;
67518:         sqlite3DbFree(db, u.ar.pSavepoint);
67519:         if( !isTransaction ){
67520:           db->nSavepoint--;
67521:         }
67522:       }else{
67523:         db->nDeferredCons = u.ar.pSavepoint->nDeferredCons;
67524:       }
67525: 
67526:       if( !isTransaction ){
67527:         rc = sqlite3VtabSavepoint(db, u.ar.p1, u.ar.iSavepoint);
67528:         if( rc!=SQLITE_OK ) goto abort_due_to_error;
67529:       }
67530:     }
67531:   }
67532: 
67533:   break;
67534: }
67535: 
67536: /* Opcode: AutoCommit P1 P2 * * *
67537: **
67538: ** Set the database auto-commit flag to P1 (1 or 0). If P2 is true, roll
67539: ** back any currently active btree transactions. If there are any active
67540: ** VMs (apart from this one), then a ROLLBACK fails.  A COMMIT fails if
67541: ** there are active writing VMs or active VMs that use shared cache.
67542: **
67543: ** This instruction causes the VM to halt.
67544: */
67545: case OP_AutoCommit: {
67546: #if 0  /* local variables moved into u.as */
67547:   int desiredAutoCommit;
67548:   int iRollback;
67549:   int turnOnAC;
67550: #endif /* local variables moved into u.as */
67551: 
67552:   u.as.desiredAutoCommit = pOp->p1;
67553:   u.as.iRollback = pOp->p2;
67554:   u.as.turnOnAC = u.as.desiredAutoCommit && !db->autoCommit;
67555:   assert( u.as.desiredAutoCommit==1 || u.as.desiredAutoCommit==0 );
67556:   assert( u.as.desiredAutoCommit==1 || u.as.iRollback==0 );
67557:   assert( db->activeVdbeCnt>0 );  /* At least this one VM is active */
67558: 
67559:   if( u.as.turnOnAC && u.as.iRollback && db->activeVdbeCnt>1 ){
67560:     /* If this instruction implements a ROLLBACK and other VMs are
67561:     ** still running, and a transaction is active, return an error indicating
67562:     ** that the other VMs must complete first.
67563:     */
67564:     sqlite3SetString(&p->zErrMsg, db, "cannot rollback transaction - "
67565:         "SQL statements in progress");
67566:     rc = SQLITE_BUSY;
67567:   }else if( u.as.turnOnAC && !u.as.iRollback && db->writeVdbeCnt>0 ){
67568:     /* If this instruction implements a COMMIT and other VMs are writing
67569:     ** return an error indicating that the other VMs must complete first.
67570:     */
67571:     sqlite3SetString(&p->zErrMsg, db, "cannot commit transaction - "
67572:         "SQL statements in progress");
67573:     rc = SQLITE_BUSY;
67574:   }else if( u.as.desiredAutoCommit!=db->autoCommit ){
67575:     if( u.as.iRollback ){
67576:       assert( u.as.desiredAutoCommit==1 );
67577:       sqlite3RollbackAll(db);
67578:       db->autoCommit = 1;
67579:     }else if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
67580:       goto vdbe_return;
67581:     }else{
67582:       db->autoCommit = (u8)u.as.desiredAutoCommit;
67583:       if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
67584:         p->pc = pc;
67585:         db->autoCommit = (u8)(1-u.as.desiredAutoCommit);
67586:         p->rc = rc = SQLITE_BUSY;
67587:         goto vdbe_return;
67588:       }
67589:     }
67590:     assert( db->nStatement==0 );
67591:     sqlite3CloseSavepoints(db);
67592:     if( p->rc==SQLITE_OK ){
67593:       rc = SQLITE_DONE;
67594:     }else{
67595:       rc = SQLITE_ERROR;
67596:     }
67597:     goto vdbe_return;
67598:   }else{
67599:     sqlite3SetString(&p->zErrMsg, db,
67600:         (!u.as.desiredAutoCommit)?"cannot start a transaction within a transaction":(
67601:         (u.as.iRollback)?"cannot rollback - no transaction is active":
67602:                    "cannot commit - no transaction is active"));
67603: 
67604:     rc = SQLITE_ERROR;
67605:   }
67606:   break;
67607: }
67608: 
67609: /* Opcode: Transaction P1 P2 * * *
67610: **
67611: ** Begin a transaction.  The transaction ends when a Commit or Rollback
67612: ** opcode is encountered.  Depending on the ON CONFLICT setting, the
67613: ** transaction might also be rolled back if an error is encountered.
67614: **
67615: ** P1 is the index of the database file on which the transaction is
67616: ** started.  Index 0 is the main database file and index 1 is the
67617: ** file used for temporary tables.  Indices of 2 or more are used for
67618: ** attached databases.
67619: **
67620: ** If P2 is non-zero, then a write-transaction is started.  A RESERVED lock is
67621: ** obtained on the database file when a write-transaction is started.  No
67622: ** other process can start another write transaction while this transaction is
67623: ** underway.  Starting a write transaction also creates a rollback journal. A
67624: ** write transaction must be started before any changes can be made to the
67625: ** database.  If P2 is 2 or greater then an EXCLUSIVE lock is also obtained
67626: ** on the file.
67627: **
67628: ** If a write-transaction is started and the Vdbe.usesStmtJournal flag is
67629: ** true (this flag is set if the Vdbe may modify more than one row and may
67630: ** throw an ABORT exception), a statement transaction may also be opened.
67631: ** More specifically, a statement transaction is opened iff the database
67632: ** connection is currently not in autocommit mode, or if there are other
67633: ** active statements. A statement transaction allows the affects of this
67634: ** VDBE to be rolled back after an error without having to roll back the
67635: ** entire transaction. If no error is encountered, the statement transaction
67636: ** will automatically commit when the VDBE halts.
67637: **
67638: ** If P2 is zero, then a read-lock is obtained on the database file.
67639: */
67640: case OP_Transaction: {
67641: #if 0  /* local variables moved into u.at */
67642:   Btree *pBt;
67643: #endif /* local variables moved into u.at */
67644: 
67645:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
67646:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
67647:   u.at.pBt = db->aDb[pOp->p1].pBt;
67648: 
67649:   if( u.at.pBt ){
67650:     rc = sqlite3BtreeBeginTrans(u.at.pBt, pOp->p2);
67651:     if( rc==SQLITE_BUSY ){
67652:       p->pc = pc;
67653:       p->rc = rc = SQLITE_BUSY;
67654:       goto vdbe_return;
67655:     }
67656:     if( rc!=SQLITE_OK ){
67657:       goto abort_due_to_error;
67658:     }
67659: 
67660:     if( pOp->p2 && p->usesStmtJournal
67661:      && (db->autoCommit==0 || db->activeVdbeCnt>1)
67662:     ){
67663:       assert( sqlite3BtreeIsInTrans(u.at.pBt) );
67664:       if( p->iStatement==0 ){
67665:         assert( db->nStatement>=0 && db->nSavepoint>=0 );
67666:         db->nStatement++;
67667:         p->iStatement = db->nSavepoint + db->nStatement;
67668:       }
67669: 
67670:       rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN, p->iStatement-1);
67671:       if( rc==SQLITE_OK ){
67672:         rc = sqlite3BtreeBeginStmt(u.at.pBt, p->iStatement);
67673:       }
67674: 
67675:       /* Store the current value of the database handles deferred constraint
67676:       ** counter. If the statement transaction needs to be rolled back,
67677:       ** the value of this counter needs to be restored too.  */
67678:       p->nStmtDefCons = db->nDeferredCons;
67679:     }
67680:   }
67681:   break;
67682: }
67683: 
67684: /* Opcode: ReadCookie P1 P2 P3 * *
67685: **
67686: ** Read cookie number P3 from database P1 and write it into register P2.
67687: ** P3==1 is the schema version.  P3==2 is the database format.
67688: ** P3==3 is the recommended pager cache size, and so forth.  P1==0 is
67689: ** the main database file and P1==1 is the database file used to store
67690: ** temporary tables.
67691: **
67692: ** There must be a read-lock on the database (either a transaction
67693: ** must be started or there must be an open cursor) before
67694: ** executing this instruction.
67695: */
67696: case OP_ReadCookie: {               /* out2-prerelease */
67697: #if 0  /* local variables moved into u.au */
67698:   int iMeta;
67699:   int iDb;
67700:   int iCookie;
67701: #endif /* local variables moved into u.au */
67702: 
67703:   u.au.iDb = pOp->p1;
67704:   u.au.iCookie = pOp->p3;
67705:   assert( pOp->p3<SQLITE_N_BTREE_META );
67706:   assert( u.au.iDb>=0 && u.au.iDb<db->nDb );
67707:   assert( db->aDb[u.au.iDb].pBt!=0 );
67708:   assert( (p->btreeMask & (((yDbMask)1)<<u.au.iDb))!=0 );
67709: 
67710:   sqlite3BtreeGetMeta(db->aDb[u.au.iDb].pBt, u.au.iCookie, (u32 *)&u.au.iMeta);
67711:   pOut->u.i = u.au.iMeta;
67712:   break;
67713: }
67714: 
67715: /* Opcode: SetCookie P1 P2 P3 * *
67716: **
67717: ** Write the content of register P3 (interpreted as an integer)
67718: ** into cookie number P2 of database P1.  P2==1 is the schema version.  
67719: ** P2==2 is the database format. P2==3 is the recommended pager cache 
67720: ** size, and so forth.  P1==0 is the main database file and P1==1 is the 
67721: ** database file used to store temporary tables.
67722: **
67723: ** A transaction must be started before executing this opcode.
67724: */
67725: case OP_SetCookie: {       /* in3 */
67726: #if 0  /* local variables moved into u.av */
67727:   Db *pDb;
67728: #endif /* local variables moved into u.av */
67729:   assert( pOp->p2<SQLITE_N_BTREE_META );
67730:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
67731:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
67732:   u.av.pDb = &db->aDb[pOp->p1];
67733:   assert( u.av.pDb->pBt!=0 );
67734:   assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
67735:   pIn3 = &aMem[pOp->p3];
67736:   sqlite3VdbeMemIntegerify(pIn3);
67737:   /* See note about index shifting on OP_ReadCookie */
67738:   rc = sqlite3BtreeUpdateMeta(u.av.pDb->pBt, pOp->p2, (int)pIn3->u.i);
67739:   if( pOp->p2==BTREE_SCHEMA_VERSION ){
67740:     /* When the schema cookie changes, record the new cookie internally */
67741:     u.av.pDb->pSchema->schema_cookie = (int)pIn3->u.i;
67742:     db->flags |= SQLITE_InternChanges;
67743:   }else if( pOp->p2==BTREE_FILE_FORMAT ){
67744:     /* Record changes in the file format */
67745:     u.av.pDb->pSchema->file_format = (u8)pIn3->u.i;
67746:   }
67747:   if( pOp->p1==1 ){
67748:     /* Invalidate all prepared statements whenever the TEMP database
67749:     ** schema is changed.  Ticket #1644 */
67750:     sqlite3ExpirePreparedStatements(db);
67751:     p->expired = 0;
67752:   }
67753:   break;
67754: }
67755: 
67756: /* Opcode: VerifyCookie P1 P2 P3 * *
67757: **
67758: ** Check the value of global database parameter number 0 (the
67759: ** schema version) and make sure it is equal to P2 and that the
67760: ** generation counter on the local schema parse equals P3.
67761: **
67762: ** P1 is the database number which is 0 for the main database file
67763: ** and 1 for the file holding temporary tables and some higher number
67764: ** for auxiliary databases.
67765: **
67766: ** The cookie changes its value whenever the database schema changes.
67767: ** This operation is used to detect when that the cookie has changed
67768: ** and that the current process needs to reread the schema.
67769: **
67770: ** Either a transaction needs to have been started or an OP_Open needs
67771: ** to be executed (to establish a read lock) before this opcode is
67772: ** invoked.
67773: */
67774: case OP_VerifyCookie: {
67775: #if 0  /* local variables moved into u.aw */
67776:   int iMeta;
67777:   int iGen;
67778:   Btree *pBt;
67779: #endif /* local variables moved into u.aw */
67780: 
67781:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
67782:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
67783:   assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
67784:   u.aw.pBt = db->aDb[pOp->p1].pBt;
67785:   if( u.aw.pBt ){
67786:     sqlite3BtreeGetMeta(u.aw.pBt, BTREE_SCHEMA_VERSION, (u32 *)&u.aw.iMeta);
67787:     u.aw.iGen = db->aDb[pOp->p1].pSchema->iGeneration;
67788:   }else{
67789:     u.aw.iGen = u.aw.iMeta = 0;
67790:   }
67791:   if( u.aw.iMeta!=pOp->p2 || u.aw.iGen!=pOp->p3 ){
67792:     sqlite3DbFree(db, p->zErrMsg);
67793:     p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed");
67794:     /* If the schema-cookie from the database file matches the cookie
67795:     ** stored with the in-memory representation of the schema, do
67796:     ** not reload the schema from the database file.
67797:     **
67798:     ** If virtual-tables are in use, this is not just an optimization.
67799:     ** Often, v-tables store their data in other SQLite tables, which
67800:     ** are queried from within xNext() and other v-table methods using
67801:     ** prepared queries. If such a query is out-of-date, we do not want to
67802:     ** discard the database schema, as the user code implementing the
67803:     ** v-table would have to be ready for the sqlite3_vtab structure itself
67804:     ** to be invalidated whenever sqlite3_step() is called from within
67805:     ** a v-table method.
67806:     */
67807:     if( db->aDb[pOp->p1].pSchema->schema_cookie!=u.aw.iMeta ){
67808:       sqlite3ResetInternalSchema(db, pOp->p1);
67809:     }
67810: 
67811:     p->expired = 1;
67812:     rc = SQLITE_SCHEMA;
67813:   }
67814:   break;
67815: }
67816: 
67817: /* Opcode: OpenRead P1 P2 P3 P4 P5
67818: **
67819: ** Open a read-only cursor for the database table whose root page is
67820: ** P2 in a database file.  The database file is determined by P3. 
67821: ** P3==0 means the main database, P3==1 means the database used for 
67822: ** temporary tables, and P3>1 means used the corresponding attached
67823: ** database.  Give the new cursor an identifier of P1.  The P1
67824: ** values need not be contiguous but all P1 values should be small integers.
67825: ** It is an error for P1 to be negative.
67826: **
67827: ** If P5!=0 then use the content of register P2 as the root page, not
67828: ** the value of P2 itself.
67829: **
67830: ** There will be a read lock on the database whenever there is an
67831: ** open cursor.  If the database was unlocked prior to this instruction
67832: ** then a read lock is acquired as part of this instruction.  A read
67833: ** lock allows other processes to read the database but prohibits
67834: ** any other process from modifying the database.  The read lock is
67835: ** released when all cursors are closed.  If this instruction attempts
67836: ** to get a read lock but fails, the script terminates with an
67837: ** SQLITE_BUSY error code.
67838: **
67839: ** The P4 value may be either an integer (P4_INT32) or a pointer to
67840: ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo 
67841: ** structure, then said structure defines the content and collating 
67842: ** sequence of the index being opened. Otherwise, if P4 is an integer 
67843: ** value, it is set to the number of columns in the table.
67844: **
67845: ** See also OpenWrite.
67846: */
67847: /* Opcode: OpenWrite P1 P2 P3 P4 P5
67848: **
67849: ** Open a read/write cursor named P1 on the table or index whose root
67850: ** page is P2.  Or if P5!=0 use the content of register P2 to find the
67851: ** root page.
67852: **
67853: ** The P4 value may be either an integer (P4_INT32) or a pointer to
67854: ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo 
67855: ** structure, then said structure defines the content and collating 
67856: ** sequence of the index being opened. Otherwise, if P4 is an integer 
67857: ** value, it is set to the number of columns in the table, or to the
67858: ** largest index of any column of the table that is actually used.
67859: **
67860: ** This instruction works just like OpenRead except that it opens the cursor
67861: ** in read/write mode.  For a given table, there can be one or more read-only
67862: ** cursors or a single read/write cursor but not both.
67863: **
67864: ** See also OpenRead.
67865: */
67866: case OP_OpenRead:
67867: case OP_OpenWrite: {
67868: #if 0  /* local variables moved into u.ax */
67869:   int nField;
67870:   KeyInfo *pKeyInfo;
67871:   int p2;
67872:   int iDb;
67873:   int wrFlag;
67874:   Btree *pX;
67875:   VdbeCursor *pCur;
67876:   Db *pDb;
67877: #endif /* local variables moved into u.ax */
67878: 
67879:   if( p->expired ){
67880:     rc = SQLITE_ABORT;
67881:     break;
67882:   }
67883: 
67884:   u.ax.nField = 0;
67885:   u.ax.pKeyInfo = 0;
67886:   u.ax.p2 = pOp->p2;
67887:   u.ax.iDb = pOp->p3;
67888:   assert( u.ax.iDb>=0 && u.ax.iDb<db->nDb );
67889:   assert( (p->btreeMask & (((yDbMask)1)<<u.ax.iDb))!=0 );
67890:   u.ax.pDb = &db->aDb[u.ax.iDb];
67891:   u.ax.pX = u.ax.pDb->pBt;
67892:   assert( u.ax.pX!=0 );
67893:   if( pOp->opcode==OP_OpenWrite ){
67894:     u.ax.wrFlag = 1;
67895:     assert( sqlite3SchemaMutexHeld(db, u.ax.iDb, 0) );
67896:     if( u.ax.pDb->pSchema->file_format < p->minWriteFileFormat ){
67897:       p->minWriteFileFormat = u.ax.pDb->pSchema->file_format;
67898:     }
67899:   }else{
67900:     u.ax.wrFlag = 0;
67901:   }
67902:   if( pOp->p5 ){
67903:     assert( u.ax.p2>0 );
67904:     assert( u.ax.p2<=p->nMem );
67905:     pIn2 = &aMem[u.ax.p2];
67906:     assert( memIsValid(pIn2) );
67907:     assert( (pIn2->flags & MEM_Int)!=0 );
67908:     sqlite3VdbeMemIntegerify(pIn2);
67909:     u.ax.p2 = (int)pIn2->u.i;
67910:     /* The u.ax.p2 value always comes from a prior OP_CreateTable opcode and
67911:     ** that opcode will always set the u.ax.p2 value to 2 or more or else fail.
67912:     ** If there were a failure, the prepared statement would have halted
67913:     ** before reaching this instruction. */
67914:     if( NEVER(u.ax.p2<2) ) {
67915:       rc = SQLITE_CORRUPT_BKPT;
67916:       goto abort_due_to_error;
67917:     }
67918:   }
67919:   if( pOp->p4type==P4_KEYINFO ){
67920:     u.ax.pKeyInfo = pOp->p4.pKeyInfo;
67921:     u.ax.pKeyInfo->enc = ENC(p->db);
67922:     u.ax.nField = u.ax.pKeyInfo->nField+1;
67923:   }else if( pOp->p4type==P4_INT32 ){
67924:     u.ax.nField = pOp->p4.i;
67925:   }
67926:   assert( pOp->p1>=0 );
67927:   u.ax.pCur = allocateCursor(p, pOp->p1, u.ax.nField, u.ax.iDb, 1);
67928:   if( u.ax.pCur==0 ) goto no_mem;
67929:   u.ax.pCur->nullRow = 1;
67930:   u.ax.pCur->isOrdered = 1;
67931:   rc = sqlite3BtreeCursor(u.ax.pX, u.ax.p2, u.ax.wrFlag, u.ax.pKeyInfo, u.ax.pCur->pCursor);
67932:   u.ax.pCur->pKeyInfo = u.ax.pKeyInfo;
67933: 
67934:   /* Since it performs no memory allocation or IO, the only value that
67935:   ** sqlite3BtreeCursor() may return is SQLITE_OK. */
67936:   assert( rc==SQLITE_OK );
67937: 
67938:   /* Set the VdbeCursor.isTable and isIndex variables. Previous versions of
67939:   ** SQLite used to check if the root-page flags were sane at this point
67940:   ** and report database corruption if they were not, but this check has
67941:   ** since moved into the btree layer.  */
67942:   u.ax.pCur->isTable = pOp->p4type!=P4_KEYINFO;
67943:   u.ax.pCur->isIndex = !u.ax.pCur->isTable;
67944:   break;
67945: }
67946: 
67947: /* Opcode: OpenEphemeral P1 P2 * P4 P5
67948: **
67949: ** Open a new cursor P1 to a transient table.
67950: ** The cursor is always opened read/write even if 
67951: ** the main database is read-only.  The ephemeral
67952: ** table is deleted automatically when the cursor is closed.
67953: **
67954: ** P2 is the number of columns in the ephemeral table.
67955: ** The cursor points to a BTree table if P4==0 and to a BTree index
67956: ** if P4 is not 0.  If P4 is not NULL, it points to a KeyInfo structure
67957: ** that defines the format of keys in the index.
67958: **
67959: ** This opcode was once called OpenTemp.  But that created
67960: ** confusion because the term "temp table", might refer either
67961: ** to a TEMP table at the SQL level, or to a table opened by
67962: ** this opcode.  Then this opcode was call OpenVirtual.  But
67963: ** that created confusion with the whole virtual-table idea.
67964: **
67965: ** The P5 parameter can be a mask of the BTREE_* flags defined
67966: ** in btree.h.  These flags control aspects of the operation of
67967: ** the btree.  The BTREE_OMIT_JOURNAL and BTREE_SINGLE flags are
67968: ** added automatically.
67969: */
67970: /* Opcode: OpenAutoindex P1 P2 * P4 *
67971: **
67972: ** This opcode works the same as OP_OpenEphemeral.  It has a
67973: ** different name to distinguish its use.  Tables created using
67974: ** by this opcode will be used for automatically created transient
67975: ** indices in joins.
67976: */
67977: case OP_OpenAutoindex: 
67978: case OP_OpenEphemeral: {
67979: #if 0  /* local variables moved into u.ay */
67980:   VdbeCursor *pCx;
67981: #endif /* local variables moved into u.ay */
67982:   static const int vfsFlags =
67983:       SQLITE_OPEN_READWRITE |
67984:       SQLITE_OPEN_CREATE |
67985:       SQLITE_OPEN_EXCLUSIVE |
67986:       SQLITE_OPEN_DELETEONCLOSE |
67987:       SQLITE_OPEN_TRANSIENT_DB;
67988: 
67989:   assert( pOp->p1>=0 );
67990:   u.ay.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1);
67991:   if( u.ay.pCx==0 ) goto no_mem;
67992:   u.ay.pCx->nullRow = 1;
67993:   rc = sqlite3BtreeOpen(db->pVfs, 0, db, &u.ay.pCx->pBt,
67994:                         BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags);
67995:   if( rc==SQLITE_OK ){
67996:     rc = sqlite3BtreeBeginTrans(u.ay.pCx->pBt, 1);
67997:   }
67998:   if( rc==SQLITE_OK ){
67999:     /* If a transient index is required, create it by calling
68000:     ** sqlite3BtreeCreateTable() with the BTREE_BLOBKEY flag before
68001:     ** opening it. If a transient table is required, just use the
68002:     ** automatically created table with root-page 1 (an BLOB_INTKEY table).
68003:     */
68004:     if( pOp->p4.pKeyInfo ){
68005:       int pgno;
68006:       assert( pOp->p4type==P4_KEYINFO );
68007:       rc = sqlite3BtreeCreateTable(u.ay.pCx->pBt, &pgno, BTREE_BLOBKEY | pOp->p5);
68008:       if( rc==SQLITE_OK ){
68009:         assert( pgno==MASTER_ROOT+1 );
68010:         rc = sqlite3BtreeCursor(u.ay.pCx->pBt, pgno, 1,
68011:                                 (KeyInfo*)pOp->p4.z, u.ay.pCx->pCursor);
68012:         u.ay.pCx->pKeyInfo = pOp->p4.pKeyInfo;
68013:         u.ay.pCx->pKeyInfo->enc = ENC(p->db);
68014:       }
68015:       u.ay.pCx->isTable = 0;
68016:     }else{
68017:       rc = sqlite3BtreeCursor(u.ay.pCx->pBt, MASTER_ROOT, 1, 0, u.ay.pCx->pCursor);
68018:       u.ay.pCx->isTable = 1;
68019:     }
68020:   }
68021:   u.ay.pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
68022:   u.ay.pCx->isIndex = !u.ay.pCx->isTable;
68023:   break;
68024: }
68025: 
68026: /* Opcode: OpenSorter P1 P2 * P4 *
68027: **
68028: ** This opcode works like OP_OpenEphemeral except that it opens
68029: ** a transient index that is specifically designed to sort large
68030: ** tables using an external merge-sort algorithm.
68031: */
68032: case OP_SorterOpen: {
68033: #if 0  /* local variables moved into u.az */
68034:   VdbeCursor *pCx;
68035: #endif /* local variables moved into u.az */
68036: #ifndef SQLITE_OMIT_MERGE_SORT
68037:   u.az.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1);
68038:   if( u.az.pCx==0 ) goto no_mem;
68039:   u.az.pCx->pKeyInfo = pOp->p4.pKeyInfo;
68040:   u.az.pCx->pKeyInfo->enc = ENC(p->db);
68041:   u.az.pCx->isSorter = 1;
68042:   rc = sqlite3VdbeSorterInit(db, u.az.pCx);
68043: #else
68044:   pOp->opcode = OP_OpenEphemeral;
68045:   pc--;
68046: #endif
68047:   break;
68048: }
68049: 
68050: /* Opcode: OpenPseudo P1 P2 P3 * *
68051: **
68052: ** Open a new cursor that points to a fake table that contains a single
68053: ** row of data.  The content of that one row in the content of memory
68054: ** register P2.  In other words, cursor P1 becomes an alias for the 
68055: ** MEM_Blob content contained in register P2.
68056: **
68057: ** A pseudo-table created by this opcode is used to hold a single
68058: ** row output from the sorter so that the row can be decomposed into
68059: ** individual columns using the OP_Column opcode.  The OP_Column opcode
68060: ** is the only cursor opcode that works with a pseudo-table.
68061: **
68062: ** P3 is the number of fields in the records that will be stored by
68063: ** the pseudo-table.
68064: */
68065: case OP_OpenPseudo: {
68066: #if 0  /* local variables moved into u.ba */
68067:   VdbeCursor *pCx;
68068: #endif /* local variables moved into u.ba */
68069: 
68070:   assert( pOp->p1>=0 );
68071:   u.ba.pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, 0);
68072:   if( u.ba.pCx==0 ) goto no_mem;
68073:   u.ba.pCx->nullRow = 1;
68074:   u.ba.pCx->pseudoTableReg = pOp->p2;
68075:   u.ba.pCx->isTable = 1;
68076:   u.ba.pCx->isIndex = 0;
68077:   break;
68078: }
68079: 
68080: /* Opcode: Close P1 * * * *
68081: **
68082: ** Close a cursor previously opened as P1.  If P1 is not
68083: ** currently open, this instruction is a no-op.
68084: */
68085: case OP_Close: {
68086:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68087:   sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
68088:   p->apCsr[pOp->p1] = 0;
68089:   break;
68090: }
68091: 
68092: /* Opcode: SeekGe P1 P2 P3 P4 *
68093: **
68094: ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
68095: ** use the value in register P3 as the key.  If cursor P1 refers 
68096: ** to an SQL index, then P3 is the first in an array of P4 registers 
68097: ** that are used as an unpacked index key. 
68098: **
68099: ** Reposition cursor P1 so that  it points to the smallest entry that 
68100: ** is greater than or equal to the key value. If there are no records 
68101: ** greater than or equal to the key and P2 is not zero, then jump to P2.
68102: **
68103: ** See also: Found, NotFound, Distinct, SeekLt, SeekGt, SeekLe
68104: */
68105: /* Opcode: SeekGt P1 P2 P3 P4 *
68106: **
68107: ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
68108: ** use the value in register P3 as a key. If cursor P1 refers 
68109: ** to an SQL index, then P3 is the first in an array of P4 registers 
68110: ** that are used as an unpacked index key. 
68111: **
68112: ** Reposition cursor P1 so that  it points to the smallest entry that 
68113: ** is greater than the key value. If there are no records greater than 
68114: ** the key and P2 is not zero, then jump to P2.
68115: **
68116: ** See also: Found, NotFound, Distinct, SeekLt, SeekGe, SeekLe
68117: */
68118: /* Opcode: SeekLt P1 P2 P3 P4 * 
68119: **
68120: ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
68121: ** use the value in register P3 as a key. If cursor P1 refers 
68122: ** to an SQL index, then P3 is the first in an array of P4 registers 
68123: ** that are used as an unpacked index key. 
68124: **
68125: ** Reposition cursor P1 so that  it points to the largest entry that 
68126: ** is less than the key value. If there are no records less than 
68127: ** the key and P2 is not zero, then jump to P2.
68128: **
68129: ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLe
68130: */
68131: /* Opcode: SeekLe P1 P2 P3 P4 *
68132: **
68133: ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
68134: ** use the value in register P3 as a key. If cursor P1 refers 
68135: ** to an SQL index, then P3 is the first in an array of P4 registers 
68136: ** that are used as an unpacked index key. 
68137: **
68138: ** Reposition cursor P1 so that it points to the largest entry that 
68139: ** is less than or equal to the key value. If there are no records 
68140: ** less than or equal to the key and P2 is not zero, then jump to P2.
68141: **
68142: ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLt
68143: */
68144: case OP_SeekLt:         /* jump, in3 */
68145: case OP_SeekLe:         /* jump, in3 */
68146: case OP_SeekGe:         /* jump, in3 */
68147: case OP_SeekGt: {       /* jump, in3 */
68148: #if 0  /* local variables moved into u.bb */
68149:   int res;
68150:   int oc;
68151:   VdbeCursor *pC;
68152:   UnpackedRecord r;
68153:   int nField;
68154:   i64 iKey;      /* The rowid we are to seek to */
68155: #endif /* local variables moved into u.bb */
68156: 
68157:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68158:   assert( pOp->p2!=0 );
68159:   u.bb.pC = p->apCsr[pOp->p1];
68160:   assert( u.bb.pC!=0 );
68161:   assert( u.bb.pC->pseudoTableReg==0 );
68162:   assert( OP_SeekLe == OP_SeekLt+1 );
68163:   assert( OP_SeekGe == OP_SeekLt+2 );
68164:   assert( OP_SeekGt == OP_SeekLt+3 );
68165:   assert( u.bb.pC->isOrdered );
68166:   if( ALWAYS(u.bb.pC->pCursor!=0) ){
68167:     u.bb.oc = pOp->opcode;
68168:     u.bb.pC->nullRow = 0;
68169:     if( u.bb.pC->isTable ){
68170:       /* The input value in P3 might be of any type: integer, real, string,
68171:       ** blob, or NULL.  But it needs to be an integer before we can do
68172:       ** the seek, so covert it. */
68173:       pIn3 = &aMem[pOp->p3];
68174:       applyNumericAffinity(pIn3);
68175:       u.bb.iKey = sqlite3VdbeIntValue(pIn3);
68176:       u.bb.pC->rowidIsValid = 0;
68177: 
68178:       /* If the P3 value could not be converted into an integer without
68179:       ** loss of information, then special processing is required... */
68180:       if( (pIn3->flags & MEM_Int)==0 ){
68181:         if( (pIn3->flags & MEM_Real)==0 ){
68182:           /* If the P3 value cannot be converted into any kind of a number,
68183:           ** then the seek is not possible, so jump to P2 */
68184:           pc = pOp->p2 - 1;
68185:           break;
68186:         }
68187:         /* If we reach this point, then the P3 value must be a floating
68188:         ** point number. */
68189:         assert( (pIn3->flags & MEM_Real)!=0 );
68190: 
68191:         if( u.bb.iKey==SMALLEST_INT64 && (pIn3->r<(double)u.bb.iKey || pIn3->r>0) ){
68192:           /* The P3 value is too large in magnitude to be expressed as an
68193:           ** integer. */
68194:           u.bb.res = 1;
68195:           if( pIn3->r<0 ){
68196:             if( u.bb.oc>=OP_SeekGe ){  assert( u.bb.oc==OP_SeekGe || u.bb.oc==OP_SeekGt );
68197:               rc = sqlite3BtreeFirst(u.bb.pC->pCursor, &u.bb.res);
68198:               if( rc!=SQLITE_OK ) goto abort_due_to_error;
68199:             }
68200:           }else{
68201:             if( u.bb.oc<=OP_SeekLe ){  assert( u.bb.oc==OP_SeekLt || u.bb.oc==OP_SeekLe );
68202:               rc = sqlite3BtreeLast(u.bb.pC->pCursor, &u.bb.res);
68203:               if( rc!=SQLITE_OK ) goto abort_due_to_error;
68204:             }
68205:           }
68206:           if( u.bb.res ){
68207:             pc = pOp->p2 - 1;
68208:           }
68209:           break;
68210:         }else if( u.bb.oc==OP_SeekLt || u.bb.oc==OP_SeekGe ){
68211:           /* Use the ceiling() function to convert real->int */
68212:           if( pIn3->r > (double)u.bb.iKey ) u.bb.iKey++;
68213:         }else{
68214:           /* Use the floor() function to convert real->int */
68215:           assert( u.bb.oc==OP_SeekLe || u.bb.oc==OP_SeekGt );
68216:           if( pIn3->r < (double)u.bb.iKey ) u.bb.iKey--;
68217:         }
68218:       }
68219:       rc = sqlite3BtreeMovetoUnpacked(u.bb.pC->pCursor, 0, (u64)u.bb.iKey, 0, &u.bb.res);
68220:       if( rc!=SQLITE_OK ){
68221:         goto abort_due_to_error;
68222:       }
68223:       if( u.bb.res==0 ){
68224:         u.bb.pC->rowidIsValid = 1;
68225:         u.bb.pC->lastRowid = u.bb.iKey;
68226:       }
68227:     }else{
68228:       u.bb.nField = pOp->p4.i;
68229:       assert( pOp->p4type==P4_INT32 );
68230:       assert( u.bb.nField>0 );
68231:       u.bb.r.pKeyInfo = u.bb.pC->pKeyInfo;
68232:       u.bb.r.nField = (u16)u.bb.nField;
68233: 
68234:       /* The next line of code computes as follows, only faster:
68235:       **   if( u.bb.oc==OP_SeekGt || u.bb.oc==OP_SeekLe ){
68236:       **     u.bb.r.flags = UNPACKED_INCRKEY;
68237:       **   }else{
68238:       **     u.bb.r.flags = 0;
68239:       **   }
68240:       */
68241:       u.bb.r.flags = (u16)(UNPACKED_INCRKEY * (1 & (u.bb.oc - OP_SeekLt)));
68242:       assert( u.bb.oc!=OP_SeekGt || u.bb.r.flags==UNPACKED_INCRKEY );
68243:       assert( u.bb.oc!=OP_SeekLe || u.bb.r.flags==UNPACKED_INCRKEY );
68244:       assert( u.bb.oc!=OP_SeekGe || u.bb.r.flags==0 );
68245:       assert( u.bb.oc!=OP_SeekLt || u.bb.r.flags==0 );
68246: 
68247:       u.bb.r.aMem = &aMem[pOp->p3];
68248: #ifdef SQLITE_DEBUG
68249:       { int i; for(i=0; i<u.bb.r.nField; i++) assert( memIsValid(&u.bb.r.aMem[i]) ); }
68250: #endif
68251:       ExpandBlob(u.bb.r.aMem);
68252:       rc = sqlite3BtreeMovetoUnpacked(u.bb.pC->pCursor, &u.bb.r, 0, 0, &u.bb.res);
68253:       if( rc!=SQLITE_OK ){
68254:         goto abort_due_to_error;
68255:       }
68256:       u.bb.pC->rowidIsValid = 0;
68257:     }
68258:     u.bb.pC->deferredMoveto = 0;
68259:     u.bb.pC->cacheStatus = CACHE_STALE;
68260: #ifdef SQLITE_TEST
68261:     sqlite3_search_count++;
68262: #endif
68263:     if( u.bb.oc>=OP_SeekGe ){  assert( u.bb.oc==OP_SeekGe || u.bb.oc==OP_SeekGt );
68264:       if( u.bb.res<0 || (u.bb.res==0 && u.bb.oc==OP_SeekGt) ){
68265:         rc = sqlite3BtreeNext(u.bb.pC->pCursor, &u.bb.res);
68266:         if( rc!=SQLITE_OK ) goto abort_due_to_error;
68267:         u.bb.pC->rowidIsValid = 0;
68268:       }else{
68269:         u.bb.res = 0;
68270:       }
68271:     }else{
68272:       assert( u.bb.oc==OP_SeekLt || u.bb.oc==OP_SeekLe );
68273:       if( u.bb.res>0 || (u.bb.res==0 && u.bb.oc==OP_SeekLt) ){
68274:         rc = sqlite3BtreePrevious(u.bb.pC->pCursor, &u.bb.res);
68275:         if( rc!=SQLITE_OK ) goto abort_due_to_error;
68276:         u.bb.pC->rowidIsValid = 0;
68277:       }else{
68278:         /* u.bb.res might be negative because the table is empty.  Check to
68279:         ** see if this is the case.
68280:         */
68281:         u.bb.res = sqlite3BtreeEof(u.bb.pC->pCursor);
68282:       }
68283:     }
68284:     assert( pOp->p2>0 );
68285:     if( u.bb.res ){
68286:       pc = pOp->p2 - 1;
68287:     }
68288:   }else{
68289:     /* This happens when attempting to open the sqlite3_master table
68290:     ** for read access returns SQLITE_EMPTY. In this case always
68291:     ** take the jump (since there are no records in the table).
68292:     */
68293:     pc = pOp->p2 - 1;
68294:   }
68295:   break;
68296: }
68297: 
68298: /* Opcode: Seek P1 P2 * * *
68299: **
68300: ** P1 is an open table cursor and P2 is a rowid integer.  Arrange
68301: ** for P1 to move so that it points to the rowid given by P2.
68302: **
68303: ** This is actually a deferred seek.  Nothing actually happens until
68304: ** the cursor is used to read a record.  That way, if no reads
68305: ** occur, no unnecessary I/O happens.
68306: */
68307: case OP_Seek: {    /* in2 */
68308: #if 0  /* local variables moved into u.bc */
68309:   VdbeCursor *pC;
68310: #endif /* local variables moved into u.bc */
68311: 
68312:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68313:   u.bc.pC = p->apCsr[pOp->p1];
68314:   assert( u.bc.pC!=0 );
68315:   if( ALWAYS(u.bc.pC->pCursor!=0) ){
68316:     assert( u.bc.pC->isTable );
68317:     u.bc.pC->nullRow = 0;
68318:     pIn2 = &aMem[pOp->p2];
68319:     u.bc.pC->movetoTarget = sqlite3VdbeIntValue(pIn2);
68320:     u.bc.pC->rowidIsValid = 0;
68321:     u.bc.pC->deferredMoveto = 1;
68322:   }
68323:   break;
68324: }
68325:   
68326: 
68327: /* Opcode: Found P1 P2 P3 P4 *
68328: **
68329: ** If P4==0 then register P3 holds a blob constructed by MakeRecord.  If
68330: ** P4>0 then register P3 is the first of P4 registers that form an unpacked
68331: ** record.
68332: **
68333: ** Cursor P1 is on an index btree.  If the record identified by P3 and P4
68334: ** is a prefix of any entry in P1 then a jump is made to P2 and
68335: ** P1 is left pointing at the matching entry.
68336: */
68337: /* Opcode: NotFound P1 P2 P3 P4 *
68338: **
68339: ** If P4==0 then register P3 holds a blob constructed by MakeRecord.  If
68340: ** P4>0 then register P3 is the first of P4 registers that form an unpacked
68341: ** record.
68342: ** 
68343: ** Cursor P1 is on an index btree.  If the record identified by P3 and P4
68344: ** is not the prefix of any entry in P1 then a jump is made to P2.  If P1 
68345: ** does contain an entry whose prefix matches the P3/P4 record then control
68346: ** falls through to the next instruction and P1 is left pointing at the
68347: ** matching entry.
68348: **
68349: ** See also: Found, NotExists, IsUnique
68350: */
68351: case OP_NotFound:       /* jump, in3 */
68352: case OP_Found: {        /* jump, in3 */
68353: #if 0  /* local variables moved into u.bd */
68354:   int alreadyExists;
68355:   VdbeCursor *pC;
68356:   int res;
68357:   char *pFree;
68358:   UnpackedRecord *pIdxKey;
68359:   UnpackedRecord r;
68360:   char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7];
68361: #endif /* local variables moved into u.bd */
68362: 
68363: #ifdef SQLITE_TEST
68364:   sqlite3_found_count++;
68365: #endif
68366: 
68367:   u.bd.alreadyExists = 0;
68368:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68369:   assert( pOp->p4type==P4_INT32 );
68370:   u.bd.pC = p->apCsr[pOp->p1];
68371:   assert( u.bd.pC!=0 );
68372:   pIn3 = &aMem[pOp->p3];
68373:   if( ALWAYS(u.bd.pC->pCursor!=0) ){
68374: 
68375:     assert( u.bd.pC->isTable==0 );
68376:     if( pOp->p4.i>0 ){
68377:       u.bd.r.pKeyInfo = u.bd.pC->pKeyInfo;
68378:       u.bd.r.nField = (u16)pOp->p4.i;
68379:       u.bd.r.aMem = pIn3;
68380: #ifdef SQLITE_DEBUG
68381:       { int i; for(i=0; i<u.bd.r.nField; i++) assert( memIsValid(&u.bd.r.aMem[i]) ); }
68382: #endif
68383:       u.bd.r.flags = UNPACKED_PREFIX_MATCH;
68384:       u.bd.pIdxKey = &u.bd.r;
68385:     }else{
68386:       u.bd.pIdxKey = sqlite3VdbeAllocUnpackedRecord(
68387:           u.bd.pC->pKeyInfo, u.bd.aTempRec, sizeof(u.bd.aTempRec), &u.bd.pFree
68388:       );
68389:       if( u.bd.pIdxKey==0 ) goto no_mem;
68390:       assert( pIn3->flags & MEM_Blob );
68391:       assert( (pIn3->flags & MEM_Zero)==0 );  /* zeroblobs already expanded */
68392:       sqlite3VdbeRecordUnpack(u.bd.pC->pKeyInfo, pIn3->n, pIn3->z, u.bd.pIdxKey);
68393:       u.bd.pIdxKey->flags |= UNPACKED_PREFIX_MATCH;
68394:     }
68395:     rc = sqlite3BtreeMovetoUnpacked(u.bd.pC->pCursor, u.bd.pIdxKey, 0, 0, &u.bd.res);
68396:     if( pOp->p4.i==0 ){
68397:       sqlite3DbFree(db, u.bd.pFree);
68398:     }
68399:     if( rc!=SQLITE_OK ){
68400:       break;
68401:     }
68402:     u.bd.alreadyExists = (u.bd.res==0);
68403:     u.bd.pC->deferredMoveto = 0;
68404:     u.bd.pC->cacheStatus = CACHE_STALE;
68405:   }
68406:   if( pOp->opcode==OP_Found ){
68407:     if( u.bd.alreadyExists ) pc = pOp->p2 - 1;
68408:   }else{
68409:     if( !u.bd.alreadyExists ) pc = pOp->p2 - 1;
68410:   }
68411:   break;
68412: }
68413: 
68414: /* Opcode: IsUnique P1 P2 P3 P4 *
68415: **
68416: ** Cursor P1 is open on an index b-tree - that is to say, a btree which
68417: ** no data and where the key are records generated by OP_MakeRecord with
68418: ** the list field being the integer ROWID of the entry that the index
68419: ** entry refers to.
68420: **
68421: ** The P3 register contains an integer record number. Call this record 
68422: ** number R. Register P4 is the first in a set of N contiguous registers
68423: ** that make up an unpacked index key that can be used with cursor P1.
68424: ** The value of N can be inferred from the cursor. N includes the rowid
68425: ** value appended to the end of the index record. This rowid value may
68426: ** or may not be the same as R.
68427: **
68428: ** If any of the N registers beginning with register P4 contains a NULL
68429: ** value, jump immediately to P2.
68430: **
68431: ** Otherwise, this instruction checks if cursor P1 contains an entry
68432: ** where the first (N-1) fields match but the rowid value at the end
68433: ** of the index entry is not R. If there is no such entry, control jumps
68434: ** to instruction P2. Otherwise, the rowid of the conflicting index
68435: ** entry is copied to register P3 and control falls through to the next
68436: ** instruction.
68437: **
68438: ** See also: NotFound, NotExists, Found
68439: */
68440: case OP_IsUnique: {        /* jump, in3 */
68441: #if 0  /* local variables moved into u.be */
68442:   u16 ii;
68443:   VdbeCursor *pCx;
68444:   BtCursor *pCrsr;
68445:   u16 nField;
68446:   Mem *aMx;
68447:   UnpackedRecord r;                  /* B-Tree index search key */
68448:   i64 R;                             /* Rowid stored in register P3 */
68449: #endif /* local variables moved into u.be */
68450: 
68451:   pIn3 = &aMem[pOp->p3];
68452:   u.be.aMx = &aMem[pOp->p4.i];
68453:   /* Assert that the values of parameters P1 and P4 are in range. */
68454:   assert( pOp->p4type==P4_INT32 );
68455:   assert( pOp->p4.i>0 && pOp->p4.i<=p->nMem );
68456:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68457: 
68458:   /* Find the index cursor. */
68459:   u.be.pCx = p->apCsr[pOp->p1];
68460:   assert( u.be.pCx->deferredMoveto==0 );
68461:   u.be.pCx->seekResult = 0;
68462:   u.be.pCx->cacheStatus = CACHE_STALE;
68463:   u.be.pCrsr = u.be.pCx->pCursor;
68464: 
68465:   /* If any of the values are NULL, take the jump. */
68466:   u.be.nField = u.be.pCx->pKeyInfo->nField;
68467:   for(u.be.ii=0; u.be.ii<u.be.nField; u.be.ii++){
68468:     if( u.be.aMx[u.be.ii].flags & MEM_Null ){
68469:       pc = pOp->p2 - 1;
68470:       u.be.pCrsr = 0;
68471:       break;
68472:     }
68473:   }
68474:   assert( (u.be.aMx[u.be.nField].flags & MEM_Null)==0 );
68475: 
68476:   if( u.be.pCrsr!=0 ){
68477:     /* Populate the index search key. */
68478:     u.be.r.pKeyInfo = u.be.pCx->pKeyInfo;
68479:     u.be.r.nField = u.be.nField + 1;
68480:     u.be.r.flags = UNPACKED_PREFIX_SEARCH;
68481:     u.be.r.aMem = u.be.aMx;
68482: #ifdef SQLITE_DEBUG
68483:     { int i; for(i=0; i<u.be.r.nField; i++) assert( memIsValid(&u.be.r.aMem[i]) ); }
68484: #endif
68485: 
68486:     /* Extract the value of u.be.R from register P3. */
68487:     sqlite3VdbeMemIntegerify(pIn3);
68488:     u.be.R = pIn3->u.i;
68489: 
68490:     /* Search the B-Tree index. If no conflicting record is found, jump
68491:     ** to P2. Otherwise, copy the rowid of the conflicting record to
68492:     ** register P3 and fall through to the next instruction.  */
68493:     rc = sqlite3BtreeMovetoUnpacked(u.be.pCrsr, &u.be.r, 0, 0, &u.be.pCx->seekResult);
68494:     if( (u.be.r.flags & UNPACKED_PREFIX_SEARCH) || u.be.r.rowid==u.be.R ){
68495:       pc = pOp->p2 - 1;
68496:     }else{
68497:       pIn3->u.i = u.be.r.rowid;
68498:     }
68499:   }
68500:   break;
68501: }
68502: 
68503: /* Opcode: NotExists P1 P2 P3 * *
68504: **
68505: ** Use the content of register P3 as an integer key.  If a record 
68506: ** with that key does not exist in table of P1, then jump to P2. 
68507: ** If the record does exist, then fall through.  The cursor is left 
68508: ** pointing to the record if it exists.
68509: **
68510: ** The difference between this operation and NotFound is that this
68511: ** operation assumes the key is an integer and that P1 is a table whereas
68512: ** NotFound assumes key is a blob constructed from MakeRecord and
68513: ** P1 is an index.
68514: **
68515: ** See also: Found, NotFound, IsUnique
68516: */
68517: case OP_NotExists: {        /* jump, in3 */
68518: #if 0  /* local variables moved into u.bf */
68519:   VdbeCursor *pC;
68520:   BtCursor *pCrsr;
68521:   int res;
68522:   u64 iKey;
68523: #endif /* local variables moved into u.bf */
68524: 
68525:   pIn3 = &aMem[pOp->p3];
68526:   assert( pIn3->flags & MEM_Int );
68527:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68528:   u.bf.pC = p->apCsr[pOp->p1];
68529:   assert( u.bf.pC!=0 );
68530:   assert( u.bf.pC->isTable );
68531:   assert( u.bf.pC->pseudoTableReg==0 );
68532:   u.bf.pCrsr = u.bf.pC->pCursor;
68533:   if( ALWAYS(u.bf.pCrsr!=0) ){
68534:     u.bf.res = 0;
68535:     u.bf.iKey = pIn3->u.i;
68536:     rc = sqlite3BtreeMovetoUnpacked(u.bf.pCrsr, 0, u.bf.iKey, 0, &u.bf.res);
68537:     u.bf.pC->lastRowid = pIn3->u.i;
68538:     u.bf.pC->rowidIsValid = u.bf.res==0 ?1:0;
68539:     u.bf.pC->nullRow = 0;
68540:     u.bf.pC->cacheStatus = CACHE_STALE;
68541:     u.bf.pC->deferredMoveto = 0;
68542:     if( u.bf.res!=0 ){
68543:       pc = pOp->p2 - 1;
68544:       assert( u.bf.pC->rowidIsValid==0 );
68545:     }
68546:     u.bf.pC->seekResult = u.bf.res;
68547:   }else{
68548:     /* This happens when an attempt to open a read cursor on the
68549:     ** sqlite_master table returns SQLITE_EMPTY.
68550:     */
68551:     pc = pOp->p2 - 1;
68552:     assert( u.bf.pC->rowidIsValid==0 );
68553:     u.bf.pC->seekResult = 0;
68554:   }
68555:   break;
68556: }
68557: 
68558: /* Opcode: Sequence P1 P2 * * *
68559: **
68560: ** Find the next available sequence number for cursor P1.
68561: ** Write the sequence number into register P2.
68562: ** The sequence number on the cursor is incremented after this
68563: ** instruction.  
68564: */
68565: case OP_Sequence: {           /* out2-prerelease */
68566:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68567:   assert( p->apCsr[pOp->p1]!=0 );
68568:   pOut->u.i = p->apCsr[pOp->p1]->seqCount++;
68569:   break;
68570: }
68571: 
68572: 
68573: /* Opcode: NewRowid P1 P2 P3 * *
68574: **
68575: ** Get a new integer record number (a.k.a "rowid") used as the key to a table.
68576: ** The record number is not previously used as a key in the database
68577: ** table that cursor P1 points to.  The new record number is written
68578: ** written to register P2.
68579: **
68580: ** If P3>0 then P3 is a register in the root frame of this VDBE that holds 
68581: ** the largest previously generated record number. No new record numbers are
68582: ** allowed to be less than this value. When this value reaches its maximum, 
68583: ** an SQLITE_FULL error is generated. The P3 register is updated with the '
68584: ** generated record number. This P3 mechanism is used to help implement the
68585: ** AUTOINCREMENT feature.
68586: */
68587: case OP_NewRowid: {           /* out2-prerelease */
68588: #if 0  /* local variables moved into u.bg */
68589:   i64 v;                 /* The new rowid */
68590:   VdbeCursor *pC;        /* Cursor of table to get the new rowid */
68591:   int res;               /* Result of an sqlite3BtreeLast() */
68592:   int cnt;               /* Counter to limit the number of searches */
68593:   Mem *pMem;             /* Register holding largest rowid for AUTOINCREMENT */
68594:   VdbeFrame *pFrame;     /* Root frame of VDBE */
68595: #endif /* local variables moved into u.bg */
68596: 
68597:   u.bg.v = 0;
68598:   u.bg.res = 0;
68599:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68600:   u.bg.pC = p->apCsr[pOp->p1];
68601:   assert( u.bg.pC!=0 );
68602:   if( NEVER(u.bg.pC->pCursor==0) ){
68603:     /* The zero initialization above is all that is needed */
68604:   }else{
68605:     /* The next rowid or record number (different terms for the same
68606:     ** thing) is obtained in a two-step algorithm.
68607:     **
68608:     ** First we attempt to find the largest existing rowid and add one
68609:     ** to that.  But if the largest existing rowid is already the maximum
68610:     ** positive integer, we have to fall through to the second
68611:     ** probabilistic algorithm
68612:     **
68613:     ** The second algorithm is to select a rowid at random and see if
68614:     ** it already exists in the table.  If it does not exist, we have
68615:     ** succeeded.  If the random rowid does exist, we select a new one
68616:     ** and try again, up to 100 times.
68617:     */
68618:     assert( u.bg.pC->isTable );
68619: 
68620: #ifdef SQLITE_32BIT_ROWID
68621: #   define MAX_ROWID 0x7fffffff
68622: #else
68623:     /* Some compilers complain about constants of the form 0x7fffffffffffffff.
68624:     ** Others complain about 0x7ffffffffffffffffLL.  The following macro seems
68625:     ** to provide the constant while making all compilers happy.
68626:     */
68627: #   define MAX_ROWID  (i64)( (((u64)0x7fffffff)<<32) | (u64)0xffffffff )
68628: #endif
68629: 
68630:     if( !u.bg.pC->useRandomRowid ){
68631:       u.bg.v = sqlite3BtreeGetCachedRowid(u.bg.pC->pCursor);
68632:       if( u.bg.v==0 ){
68633:         rc = sqlite3BtreeLast(u.bg.pC->pCursor, &u.bg.res);
68634:         if( rc!=SQLITE_OK ){
68635:           goto abort_due_to_error;
68636:         }
68637:         if( u.bg.res ){
68638:           u.bg.v = 1;   /* IMP: R-61914-48074 */
68639:         }else{
68640:           assert( sqlite3BtreeCursorIsValid(u.bg.pC->pCursor) );
68641:           rc = sqlite3BtreeKeySize(u.bg.pC->pCursor, &u.bg.v);
68642:           assert( rc==SQLITE_OK );   /* Cannot fail following BtreeLast() */
68643:           if( u.bg.v==MAX_ROWID ){
68644:             u.bg.pC->useRandomRowid = 1;
68645:           }else{
68646:             u.bg.v++;   /* IMP: R-29538-34987 */
68647:           }
68648:         }
68649:       }
68650: 
68651: #ifndef SQLITE_OMIT_AUTOINCREMENT
68652:       if( pOp->p3 ){
68653:         /* Assert that P3 is a valid memory cell. */
68654:         assert( pOp->p3>0 );
68655:         if( p->pFrame ){
68656:           for(u.bg.pFrame=p->pFrame; u.bg.pFrame->pParent; u.bg.pFrame=u.bg.pFrame->pParent);
68657:           /* Assert that P3 is a valid memory cell. */
68658:           assert( pOp->p3<=u.bg.pFrame->nMem );
68659:           u.bg.pMem = &u.bg.pFrame->aMem[pOp->p3];
68660:         }else{
68661:           /* Assert that P3 is a valid memory cell. */
68662:           assert( pOp->p3<=p->nMem );
68663:           u.bg.pMem = &aMem[pOp->p3];
68664:           memAboutToChange(p, u.bg.pMem);
68665:         }
68666:         assert( memIsValid(u.bg.pMem) );
68667: 
68668:         REGISTER_TRACE(pOp->p3, u.bg.pMem);
68669:         sqlite3VdbeMemIntegerify(u.bg.pMem);
68670:         assert( (u.bg.pMem->flags & MEM_Int)!=0 );  /* mem(P3) holds an integer */
68671:         if( u.bg.pMem->u.i==MAX_ROWID || u.bg.pC->useRandomRowid ){
68672:           rc = SQLITE_FULL;   /* IMP: R-12275-61338 */
68673:           goto abort_due_to_error;
68674:         }
68675:         if( u.bg.v<u.bg.pMem->u.i+1 ){
68676:           u.bg.v = u.bg.pMem->u.i + 1;
68677:         }
68678:         u.bg.pMem->u.i = u.bg.v;
68679:       }
68680: #endif
68681: 
68682:       sqlite3BtreeSetCachedRowid(u.bg.pC->pCursor, u.bg.v<MAX_ROWID ? u.bg.v+1 : 0);
68683:     }
68684:     if( u.bg.pC->useRandomRowid ){
68685:       /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the
68686:       ** largest possible integer (9223372036854775807) then the database
68687:       ** engine starts picking positive candidate ROWIDs at random until
68688:       ** it finds one that is not previously used. */
68689:       assert( pOp->p3==0 );  /* We cannot be in random rowid mode if this is
68690:                              ** an AUTOINCREMENT table. */
68691:       /* on the first attempt, simply do one more than previous */
68692:       u.bg.v = lastRowid;
68693:       u.bg.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
68694:       u.bg.v++; /* ensure non-zero */
68695:       u.bg.cnt = 0;
68696:       while(   ((rc = sqlite3BtreeMovetoUnpacked(u.bg.pC->pCursor, 0, (u64)u.bg.v,
68697:                                                  0, &u.bg.res))==SQLITE_OK)
68698:             && (u.bg.res==0)
68699:             && (++u.bg.cnt<100)){
68700:         /* collision - try another random rowid */
68701:         sqlite3_randomness(sizeof(u.bg.v), &u.bg.v);
68702:         if( u.bg.cnt<5 ){
68703:           /* try "small" random rowids for the initial attempts */
68704:           u.bg.v &= 0xffffff;
68705:         }else{
68706:           u.bg.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
68707:         }
68708:         u.bg.v++; /* ensure non-zero */
68709:       }
68710:       if( rc==SQLITE_OK && u.bg.res==0 ){
68711:         rc = SQLITE_FULL;   /* IMP: R-38219-53002 */
68712:         goto abort_due_to_error;
68713:       }
68714:       assert( u.bg.v>0 );  /* EV: R-40812-03570 */
68715:     }
68716:     u.bg.pC->rowidIsValid = 0;
68717:     u.bg.pC->deferredMoveto = 0;
68718:     u.bg.pC->cacheStatus = CACHE_STALE;
68719:   }
68720:   pOut->u.i = u.bg.v;
68721:   break;
68722: }
68723: 
68724: /* Opcode: Insert P1 P2 P3 P4 P5
68725: **
68726: ** Write an entry into the table of cursor P1.  A new entry is
68727: ** created if it doesn't already exist or the data for an existing
68728: ** entry is overwritten.  The data is the value MEM_Blob stored in register
68729: ** number P2. The key is stored in register P3. The key must
68730: ** be a MEM_Int.
68731: **
68732: ** If the OPFLAG_NCHANGE flag of P5 is set, then the row change count is
68733: ** incremented (otherwise not).  If the OPFLAG_LASTROWID flag of P5 is set,
68734: ** then rowid is stored for subsequent return by the
68735: ** sqlite3_last_insert_rowid() function (otherwise it is unmodified).
68736: **
68737: ** If the OPFLAG_USESEEKRESULT flag of P5 is set and if the result of
68738: ** the last seek operation (OP_NotExists) was a success, then this
68739: ** operation will not attempt to find the appropriate row before doing
68740: ** the insert but will instead overwrite the row that the cursor is
68741: ** currently pointing to.  Presumably, the prior OP_NotExists opcode
68742: ** has already positioned the cursor correctly.  This is an optimization
68743: ** that boosts performance by avoiding redundant seeks.
68744: **
68745: ** If the OPFLAG_ISUPDATE flag is set, then this opcode is part of an
68746: ** UPDATE operation.  Otherwise (if the flag is clear) then this opcode
68747: ** is part of an INSERT operation.  The difference is only important to
68748: ** the update hook.
68749: **
68750: ** Parameter P4 may point to a string containing the table-name, or
68751: ** may be NULL. If it is not NULL, then the update-hook 
68752: ** (sqlite3.xUpdateCallback) is invoked following a successful insert.
68753: **
68754: ** (WARNING/TODO: If P1 is a pseudo-cursor and P2 is dynamically
68755: ** allocated, then ownership of P2 is transferred to the pseudo-cursor
68756: ** and register P2 becomes ephemeral.  If the cursor is changed, the
68757: ** value of register P2 will then change.  Make sure this does not
68758: ** cause any problems.)
68759: **
68760: ** This instruction only works on tables.  The equivalent instruction
68761: ** for indices is OP_IdxInsert.
68762: */
68763: /* Opcode: InsertInt P1 P2 P3 P4 P5
68764: **
68765: ** This works exactly like OP_Insert except that the key is the
68766: ** integer value P3, not the value of the integer stored in register P3.
68767: */
68768: case OP_Insert: 
68769: case OP_InsertInt: {
68770: #if 0  /* local variables moved into u.bh */
68771:   Mem *pData;       /* MEM cell holding data for the record to be inserted */
68772:   Mem *pKey;        /* MEM cell holding key  for the record */
68773:   i64 iKey;         /* The integer ROWID or key for the record to be inserted */
68774:   VdbeCursor *pC;   /* Cursor to table into which insert is written */
68775:   int nZero;        /* Number of zero-bytes to append */
68776:   int seekResult;   /* Result of prior seek or 0 if no USESEEKRESULT flag */
68777:   const char *zDb;  /* database name - used by the update hook */
68778:   const char *zTbl; /* Table name - used by the opdate hook */
68779:   int op;           /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
68780: #endif /* local variables moved into u.bh */
68781: 
68782:   u.bh.pData = &aMem[pOp->p2];
68783:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68784:   assert( memIsValid(u.bh.pData) );
68785:   u.bh.pC = p->apCsr[pOp->p1];
68786:   assert( u.bh.pC!=0 );
68787:   assert( u.bh.pC->pCursor!=0 );
68788:   assert( u.bh.pC->pseudoTableReg==0 );
68789:   assert( u.bh.pC->isTable );
68790:   REGISTER_TRACE(pOp->p2, u.bh.pData);
68791: 
68792:   if( pOp->opcode==OP_Insert ){
68793:     u.bh.pKey = &aMem[pOp->p3];
68794:     assert( u.bh.pKey->flags & MEM_Int );
68795:     assert( memIsValid(u.bh.pKey) );
68796:     REGISTER_TRACE(pOp->p3, u.bh.pKey);
68797:     u.bh.iKey = u.bh.pKey->u.i;
68798:   }else{
68799:     assert( pOp->opcode==OP_InsertInt );
68800:     u.bh.iKey = pOp->p3;
68801:   }
68802: 
68803:   if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++;
68804:   if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = lastRowid = u.bh.iKey;
68805:   if( u.bh.pData->flags & MEM_Null ){
68806:     u.bh.pData->z = 0;
68807:     u.bh.pData->n = 0;
68808:   }else{
68809:     assert( u.bh.pData->flags & (MEM_Blob|MEM_Str) );
68810:   }
68811:   u.bh.seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bh.pC->seekResult : 0);
68812:   if( u.bh.pData->flags & MEM_Zero ){
68813:     u.bh.nZero = u.bh.pData->u.nZero;
68814:   }else{
68815:     u.bh.nZero = 0;
68816:   }
68817:   sqlite3BtreeSetCachedRowid(u.bh.pC->pCursor, 0);
68818:   rc = sqlite3BtreeInsert(u.bh.pC->pCursor, 0, u.bh.iKey,
68819:                           u.bh.pData->z, u.bh.pData->n, u.bh.nZero,
68820:                           pOp->p5 & OPFLAG_APPEND, u.bh.seekResult
68821:   );
68822:   u.bh.pC->rowidIsValid = 0;
68823:   u.bh.pC->deferredMoveto = 0;
68824:   u.bh.pC->cacheStatus = CACHE_STALE;
68825: 
68826:   /* Invoke the update-hook if required. */
68827:   if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){
68828:     u.bh.zDb = db->aDb[u.bh.pC->iDb].zName;
68829:     u.bh.zTbl = pOp->p4.z;
68830:     u.bh.op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT);
68831:     assert( u.bh.pC->isTable );
68832:     db->xUpdateCallback(db->pUpdateArg, u.bh.op, u.bh.zDb, u.bh.zTbl, u.bh.iKey);
68833:     assert( u.bh.pC->iDb>=0 );
68834:   }
68835:   break;
68836: }
68837: 
68838: /* Opcode: Delete P1 P2 * P4 *
68839: **
68840: ** Delete the record at which the P1 cursor is currently pointing.
68841: **
68842: ** The cursor will be left pointing at either the next or the previous
68843: ** record in the table. If it is left pointing at the next record, then
68844: ** the next Next instruction will be a no-op.  Hence it is OK to delete
68845: ** a record from within an Next loop.
68846: **
68847: ** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is
68848: ** incremented (otherwise not).
68849: **
68850: ** P1 must not be pseudo-table.  It has to be a real table with
68851: ** multiple rows.
68852: **
68853: ** If P4 is not NULL, then it is the name of the table that P1 is
68854: ** pointing to.  The update hook will be invoked, if it exists.
68855: ** If P4 is not NULL then the P1 cursor must have been positioned
68856: ** using OP_NotFound prior to invoking this opcode.
68857: */
68858: case OP_Delete: {
68859: #if 0  /* local variables moved into u.bi */
68860:   i64 iKey;
68861:   VdbeCursor *pC;
68862: #endif /* local variables moved into u.bi */
68863: 
68864:   u.bi.iKey = 0;
68865:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68866:   u.bi.pC = p->apCsr[pOp->p1];
68867:   assert( u.bi.pC!=0 );
68868:   assert( u.bi.pC->pCursor!=0 );  /* Only valid for real tables, no pseudotables */
68869: 
68870:   /* If the update-hook will be invoked, set u.bi.iKey to the rowid of the
68871:   ** row being deleted.
68872:   */
68873:   if( db->xUpdateCallback && pOp->p4.z ){
68874:     assert( u.bi.pC->isTable );
68875:     assert( u.bi.pC->rowidIsValid );  /* lastRowid set by previous OP_NotFound */
68876:     u.bi.iKey = u.bi.pC->lastRowid;
68877:   }
68878: 
68879:   /* The OP_Delete opcode always follows an OP_NotExists or OP_Last or
68880:   ** OP_Column on the same table without any intervening operations that
68881:   ** might move or invalidate the cursor.  Hence cursor u.bi.pC is always pointing
68882:   ** to the row to be deleted and the sqlite3VdbeCursorMoveto() operation
68883:   ** below is always a no-op and cannot fail.  We will run it anyhow, though,
68884:   ** to guard against future changes to the code generator.
68885:   **/
68886:   assert( u.bi.pC->deferredMoveto==0 );
68887:   rc = sqlite3VdbeCursorMoveto(u.bi.pC);
68888:   if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
68889: 
68890:   sqlite3BtreeSetCachedRowid(u.bi.pC->pCursor, 0);
68891:   rc = sqlite3BtreeDelete(u.bi.pC->pCursor);
68892:   u.bi.pC->cacheStatus = CACHE_STALE;
68893: 
68894:   /* Invoke the update-hook if required. */
68895:   if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){
68896:     const char *zDb = db->aDb[u.bi.pC->iDb].zName;
68897:     const char *zTbl = pOp->p4.z;
68898:     db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE, zDb, zTbl, u.bi.iKey);
68899:     assert( u.bi.pC->iDb>=0 );
68900:   }
68901:   if( pOp->p2 & OPFLAG_NCHANGE ) p->nChange++;
68902:   break;
68903: }
68904: /* Opcode: ResetCount * * * * *
68905: **
68906: ** The value of the change counter is copied to the database handle
68907: ** change counter (returned by subsequent calls to sqlite3_changes()).
68908: ** Then the VMs internal change counter resets to 0.
68909: ** This is used by trigger programs.
68910: */
68911: case OP_ResetCount: {
68912:   sqlite3VdbeSetChanges(db, p->nChange);
68913:   p->nChange = 0;
68914:   break;
68915: }
68916: 
68917: /* Opcode: SorterCompare P1 P2 P3
68918: **
68919: ** P1 is a sorter cursor. This instruction compares the record blob in 
68920: ** register P3 with the entry that the sorter cursor currently points to.
68921: ** If, excluding the rowid fields at the end, the two records are a match,
68922: ** fall through to the next instruction. Otherwise, jump to instruction P2.
68923: */
68924: case OP_SorterCompare: {
68925: #if 0  /* local variables moved into u.bj */
68926:   VdbeCursor *pC;
68927:   int res;
68928: #endif /* local variables moved into u.bj */
68929: 
68930:   u.bj.pC = p->apCsr[pOp->p1];
68931:   assert( isSorter(u.bj.pC) );
68932:   pIn3 = &aMem[pOp->p3];
68933:   rc = sqlite3VdbeSorterCompare(u.bj.pC, pIn3, &u.bj.res);
68934:   if( u.bj.res ){
68935:     pc = pOp->p2-1;
68936:   }
68937:   break;
68938: };
68939: 
68940: /* Opcode: SorterData P1 P2 * * *
68941: **
68942: ** Write into register P2 the current sorter data for sorter cursor P1.
68943: */
68944: case OP_SorterData: {
68945: #if 0  /* local variables moved into u.bk */
68946:   VdbeCursor *pC;
68947: #endif /* local variables moved into u.bk */
68948: #ifndef SQLITE_OMIT_MERGE_SORT
68949:   pOut = &aMem[pOp->p2];
68950:   u.bk.pC = p->apCsr[pOp->p1];
68951:   assert( u.bk.pC->isSorter );
68952:   rc = sqlite3VdbeSorterRowkey(u.bk.pC, pOut);
68953: #else
68954:   pOp->opcode = OP_RowKey;
68955:   pc--;
68956: #endif
68957:   break;
68958: }
68959: 
68960: /* Opcode: RowData P1 P2 * * *
68961: **
68962: ** Write into register P2 the complete row data for cursor P1.
68963: ** There is no interpretation of the data.  
68964: ** It is just copied onto the P2 register exactly as 
68965: ** it is found in the database file.
68966: **
68967: ** If the P1 cursor must be pointing to a valid row (not a NULL row)
68968: ** of a real table, not a pseudo-table.
68969: */
68970: /* Opcode: RowKey P1 P2 * * *
68971: **
68972: ** Write into register P2 the complete row key for cursor P1.
68973: ** There is no interpretation of the data.  
68974: ** The key is copied onto the P3 register exactly as 
68975: ** it is found in the database file.
68976: **
68977: ** If the P1 cursor must be pointing to a valid row (not a NULL row)
68978: ** of a real table, not a pseudo-table.
68979: */
68980: case OP_RowKey:
68981: case OP_RowData: {
68982: #if 0  /* local variables moved into u.bl */
68983:   VdbeCursor *pC;
68984:   BtCursor *pCrsr;
68985:   u32 n;
68986:   i64 n64;
68987: #endif /* local variables moved into u.bl */
68988: 
68989:   pOut = &aMem[pOp->p2];
68990:   memAboutToChange(p, pOut);
68991: 
68992:   /* Note that RowKey and RowData are really exactly the same instruction */
68993:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68994:   u.bl.pC = p->apCsr[pOp->p1];
68995:   assert( u.bl.pC->isSorter==0 );
68996:   assert( u.bl.pC->isTable || pOp->opcode!=OP_RowData );
68997:   assert( u.bl.pC->isIndex || pOp->opcode==OP_RowData );
68998:   assert( u.bl.pC!=0 );
68999:   assert( u.bl.pC->nullRow==0 );
69000:   assert( u.bl.pC->pseudoTableReg==0 );
69001:   assert( !u.bl.pC->isSorter );
69002:   assert( u.bl.pC->pCursor!=0 );
69003:   u.bl.pCrsr = u.bl.pC->pCursor;
69004:   assert( sqlite3BtreeCursorIsValid(u.bl.pCrsr) );
69005: 
69006:   /* The OP_RowKey and OP_RowData opcodes always follow OP_NotExists or
69007:   ** OP_Rewind/Op_Next with no intervening instructions that might invalidate
69008:   ** the cursor.  Hence the following sqlite3VdbeCursorMoveto() call is always
69009:   ** a no-op and can never fail.  But we leave it in place as a safety.
69010:   */
69011:   assert( u.bl.pC->deferredMoveto==0 );
69012:   rc = sqlite3VdbeCursorMoveto(u.bl.pC);
69013:   if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
69014: 
69015:   if( u.bl.pC->isIndex ){
69016:     assert( !u.bl.pC->isTable );
69017:     VVA_ONLY(rc =) sqlite3BtreeKeySize(u.bl.pCrsr, &u.bl.n64);
69018:     assert( rc==SQLITE_OK );    /* True because of CursorMoveto() call above */
69019:     if( u.bl.n64>db->aLimit[SQLITE_LIMIT_LENGTH] ){
69020:       goto too_big;
69021:     }
69022:     u.bl.n = (u32)u.bl.n64;
69023:   }else{
69024:     VVA_ONLY(rc =) sqlite3BtreeDataSize(u.bl.pCrsr, &u.bl.n);
69025:     assert( rc==SQLITE_OK );    /* DataSize() cannot fail */
69026:     if( u.bl.n>(u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
69027:       goto too_big;
69028:     }
69029:   }
69030:   if( sqlite3VdbeMemGrow(pOut, u.bl.n, 0) ){
69031:     goto no_mem;
69032:   }
69033:   pOut->n = u.bl.n;
69034:   MemSetTypeFlag(pOut, MEM_Blob);
69035:   if( u.bl.pC->isIndex ){
69036:     rc = sqlite3BtreeKey(u.bl.pCrsr, 0, u.bl.n, pOut->z);
69037:   }else{
69038:     rc = sqlite3BtreeData(u.bl.pCrsr, 0, u.bl.n, pOut->z);
69039:   }
69040:   pOut->enc = SQLITE_UTF8;  /* In case the blob is ever cast to text */
69041:   UPDATE_MAX_BLOBSIZE(pOut);
69042:   break;
69043: }
69044: 
69045: /* Opcode: Rowid P1 P2 * * *
69046: **
69047: ** Store in register P2 an integer which is the key of the table entry that
69048: ** P1 is currently point to.
69049: **
69050: ** P1 can be either an ordinary table or a virtual table.  There used to
69051: ** be a separate OP_VRowid opcode for use with virtual tables, but this
69052: ** one opcode now works for both table types.
69053: */
69054: case OP_Rowid: {                 /* out2-prerelease */
69055: #if 0  /* local variables moved into u.bm */
69056:   VdbeCursor *pC;
69057:   i64 v;
69058:   sqlite3_vtab *pVtab;
69059:   const sqlite3_module *pModule;
69060: #endif /* local variables moved into u.bm */
69061: 
69062:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69063:   u.bm.pC = p->apCsr[pOp->p1];
69064:   assert( u.bm.pC!=0 );
69065:   assert( u.bm.pC->pseudoTableReg==0 );
69066:   if( u.bm.pC->nullRow ){
69067:     pOut->flags = MEM_Null;
69068:     break;
69069:   }else if( u.bm.pC->deferredMoveto ){
69070:     u.bm.v = u.bm.pC->movetoTarget;
69071: #ifndef SQLITE_OMIT_VIRTUALTABLE
69072:   }else if( u.bm.pC->pVtabCursor ){
69073:     u.bm.pVtab = u.bm.pC->pVtabCursor->pVtab;
69074:     u.bm.pModule = u.bm.pVtab->pModule;
69075:     assert( u.bm.pModule->xRowid );
69076:     rc = u.bm.pModule->xRowid(u.bm.pC->pVtabCursor, &u.bm.v);
69077:     importVtabErrMsg(p, u.bm.pVtab);
69078: #endif /* SQLITE_OMIT_VIRTUALTABLE */
69079:   }else{
69080:     assert( u.bm.pC->pCursor!=0 );
69081:     rc = sqlite3VdbeCursorMoveto(u.bm.pC);
69082:     if( rc ) goto abort_due_to_error;
69083:     if( u.bm.pC->rowidIsValid ){
69084:       u.bm.v = u.bm.pC->lastRowid;
69085:     }else{
69086:       rc = sqlite3BtreeKeySize(u.bm.pC->pCursor, &u.bm.v);
69087:       assert( rc==SQLITE_OK );  /* Always so because of CursorMoveto() above */
69088:     }
69089:   }
69090:   pOut->u.i = u.bm.v;
69091:   break;
69092: }
69093: 
69094: /* Opcode: NullRow P1 * * * *
69095: **
69096: ** Move the cursor P1 to a null row.  Any OP_Column operations
69097: ** that occur while the cursor is on the null row will always
69098: ** write a NULL.
69099: */
69100: case OP_NullRow: {
69101: #if 0  /* local variables moved into u.bn */
69102:   VdbeCursor *pC;
69103: #endif /* local variables moved into u.bn */
69104: 
69105:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69106:   u.bn.pC = p->apCsr[pOp->p1];
69107:   assert( u.bn.pC!=0 );
69108:   u.bn.pC->nullRow = 1;
69109:   u.bn.pC->rowidIsValid = 0;
69110:   assert( u.bn.pC->pCursor || u.bn.pC->pVtabCursor );
69111:   if( u.bn.pC->pCursor ){
69112:     sqlite3BtreeClearCursor(u.bn.pC->pCursor);
69113:   }
69114:   break;
69115: }
69116: 
69117: /* Opcode: Last P1 P2 * * *
69118: **
69119: ** The next use of the Rowid or Column or Next instruction for P1 
69120: ** will refer to the last entry in the database table or index.
69121: ** If the table or index is empty and P2>0, then jump immediately to P2.
69122: ** If P2 is 0 or if the table or index is not empty, fall through
69123: ** to the following instruction.
69124: */
69125: case OP_Last: {        /* jump */
69126: #if 0  /* local variables moved into u.bo */
69127:   VdbeCursor *pC;
69128:   BtCursor *pCrsr;
69129:   int res;
69130: #endif /* local variables moved into u.bo */
69131: 
69132:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69133:   u.bo.pC = p->apCsr[pOp->p1];
69134:   assert( u.bo.pC!=0 );
69135:   u.bo.pCrsr = u.bo.pC->pCursor;
69136:   u.bo.res = 0;
69137:   if( ALWAYS(u.bo.pCrsr!=0) ){
69138:     rc = sqlite3BtreeLast(u.bo.pCrsr, &u.bo.res);
69139:   }
69140:   u.bo.pC->nullRow = (u8)u.bo.res;
69141:   u.bo.pC->deferredMoveto = 0;
69142:   u.bo.pC->rowidIsValid = 0;
69143:   u.bo.pC->cacheStatus = CACHE_STALE;
69144:   if( pOp->p2>0 && u.bo.res ){
69145:     pc = pOp->p2 - 1;
69146:   }
69147:   break;
69148: }
69149: 
69150: 
69151: /* Opcode: Sort P1 P2 * * *
69152: **
69153: ** This opcode does exactly the same thing as OP_Rewind except that
69154: ** it increments an undocumented global variable used for testing.
69155: **
69156: ** Sorting is accomplished by writing records into a sorting index,
69157: ** then rewinding that index and playing it back from beginning to
69158: ** end.  We use the OP_Sort opcode instead of OP_Rewind to do the
69159: ** rewinding so that the global variable will be incremented and
69160: ** regression tests can determine whether or not the optimizer is
69161: ** correctly optimizing out sorts.
69162: */
69163: case OP_SorterSort:    /* jump */
69164: #ifdef SQLITE_OMIT_MERGE_SORT
69165:   pOp->opcode = OP_Sort;
69166: #endif
69167: case OP_Sort: {        /* jump */
69168: #ifdef SQLITE_TEST
69169:   sqlite3_sort_count++;
69170:   sqlite3_search_count--;
69171: #endif
69172:   p->aCounter[SQLITE_STMTSTATUS_SORT-1]++;
69173:   /* Fall through into OP_Rewind */
69174: }
69175: /* Opcode: Rewind P1 P2 * * *
69176: **
69177: ** The next use of the Rowid or Column or Next instruction for P1 
69178: ** will refer to the first entry in the database table or index.
69179: ** If the table or index is empty and P2>0, then jump immediately to P2.
69180: ** If P2 is 0 or if the table or index is not empty, fall through
69181: ** to the following instruction.
69182: */
69183: case OP_Rewind: {        /* jump */
69184: #if 0  /* local variables moved into u.bp */
69185:   VdbeCursor *pC;
69186:   BtCursor *pCrsr;
69187:   int res;
69188: #endif /* local variables moved into u.bp */
69189: 
69190:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69191:   u.bp.pC = p->apCsr[pOp->p1];
69192:   assert( u.bp.pC!=0 );
69193:   assert( u.bp.pC->isSorter==(pOp->opcode==OP_SorterSort) );
69194:   u.bp.res = 1;
69195:   if( isSorter(u.bp.pC) ){
69196:     rc = sqlite3VdbeSorterRewind(db, u.bp.pC, &u.bp.res);
69197:   }else{
69198:     u.bp.pCrsr = u.bp.pC->pCursor;
69199:     assert( u.bp.pCrsr );
69200:     rc = sqlite3BtreeFirst(u.bp.pCrsr, &u.bp.res);
69201:     u.bp.pC->atFirst = u.bp.res==0 ?1:0;
69202:     u.bp.pC->deferredMoveto = 0;
69203:     u.bp.pC->cacheStatus = CACHE_STALE;
69204:     u.bp.pC->rowidIsValid = 0;
69205:   }
69206:   u.bp.pC->nullRow = (u8)u.bp.res;
69207:   assert( pOp->p2>0 && pOp->p2<p->nOp );
69208:   if( u.bp.res ){
69209:     pc = pOp->p2 - 1;
69210:   }
69211:   break;
69212: }
69213: 
69214: /* Opcode: Next P1 P2 * P4 P5
69215: **
69216: ** Advance cursor P1 so that it points to the next key/data pair in its
69217: ** table or index.  If there are no more key/value pairs then fall through
69218: ** to the following instruction.  But if the cursor advance was successful,
69219: ** jump immediately to P2.
69220: **
69221: ** The P1 cursor must be for a real table, not a pseudo-table.
69222: **
69223: ** P4 is always of type P4_ADVANCE. The function pointer points to
69224: ** sqlite3BtreeNext().
69225: **
69226: ** If P5 is positive and the jump is taken, then event counter
69227: ** number P5-1 in the prepared statement is incremented.
69228: **
69229: ** See also: Prev
69230: */
69231: /* Opcode: Prev P1 P2 * * P5
69232: **
69233: ** Back up cursor P1 so that it points to the previous key/data pair in its
69234: ** table or index.  If there is no previous key/value pairs then fall through
69235: ** to the following instruction.  But if the cursor backup was successful,
69236: ** jump immediately to P2.
69237: **
69238: ** The P1 cursor must be for a real table, not a pseudo-table.
69239: **
69240: ** P4 is always of type P4_ADVANCE. The function pointer points to
69241: ** sqlite3BtreePrevious().
69242: **
69243: ** If P5 is positive and the jump is taken, then event counter
69244: ** number P5-1 in the prepared statement is incremented.
69245: */
69246: case OP_SorterNext:    /* jump */
69247: #ifdef SQLITE_OMIT_MERGE_SORT
69248:   pOp->opcode = OP_Next;
69249: #endif
69250: case OP_Prev:          /* jump */
69251: case OP_Next: {        /* jump */
69252: #if 0  /* local variables moved into u.bq */
69253:   VdbeCursor *pC;
69254:   int res;
69255: #endif /* local variables moved into u.bq */
69256: 
69257:   CHECK_FOR_INTERRUPT;
69258:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69259:   assert( pOp->p5<=ArraySize(p->aCounter) );
69260:   u.bq.pC = p->apCsr[pOp->p1];
69261:   if( u.bq.pC==0 ){
69262:     break;  /* See ticket #2273 */
69263:   }
69264:   assert( u.bq.pC->isSorter==(pOp->opcode==OP_SorterNext) );
69265:   if( isSorter(u.bq.pC) ){
69266:     assert( pOp->opcode==OP_SorterNext );
69267:     rc = sqlite3VdbeSorterNext(db, u.bq.pC, &u.bq.res);
69268:   }else{
69269:     u.bq.res = 1;
69270:     assert( u.bq.pC->deferredMoveto==0 );
69271:     assert( u.bq.pC->pCursor );
69272:     assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext );
69273:     assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious );
69274:     rc = pOp->p4.xAdvance(u.bq.pC->pCursor, &u.bq.res);
69275:   }
69276:   u.bq.pC->nullRow = (u8)u.bq.res;
69277:   u.bq.pC->cacheStatus = CACHE_STALE;
69278:   if( u.bq.res==0 ){
69279:     pc = pOp->p2 - 1;
69280:     if( pOp->p5 ) p->aCounter[pOp->p5-1]++;
69281: #ifdef SQLITE_TEST
69282:     sqlite3_search_count++;
69283: #endif
69284:   }
69285:   u.bq.pC->rowidIsValid = 0;
69286:   break;
69287: }
69288: 
69289: /* Opcode: IdxInsert P1 P2 P3 * P5
69290: **
69291: ** Register P2 holds an SQL index key made using the
69292: ** MakeRecord instructions.  This opcode writes that key
69293: ** into the index P1.  Data for the entry is nil.
69294: **
69295: ** P3 is a flag that provides a hint to the b-tree layer that this
69296: ** insert is likely to be an append.
69297: **
69298: ** This instruction only works for indices.  The equivalent instruction
69299: ** for tables is OP_Insert.
69300: */
69301: case OP_SorterInsert:       /* in2 */
69302: #ifdef SQLITE_OMIT_MERGE_SORT
69303:   pOp->opcode = OP_IdxInsert;
69304: #endif
69305: case OP_IdxInsert: {        /* in2 */
69306: #if 0  /* local variables moved into u.br */
69307:   VdbeCursor *pC;
69308:   BtCursor *pCrsr;
69309:   int nKey;
69310:   const char *zKey;
69311: #endif /* local variables moved into u.br */
69312: 
69313:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69314:   u.br.pC = p->apCsr[pOp->p1];
69315:   assert( u.br.pC!=0 );
69316:   assert( u.br.pC->isSorter==(pOp->opcode==OP_SorterInsert) );
69317:   pIn2 = &aMem[pOp->p2];
69318:   assert( pIn2->flags & MEM_Blob );
69319:   u.br.pCrsr = u.br.pC->pCursor;
69320:   if( ALWAYS(u.br.pCrsr!=0) ){
69321:     assert( u.br.pC->isTable==0 );
69322:     rc = ExpandBlob(pIn2);
69323:     if( rc==SQLITE_OK ){
69324:       if( isSorter(u.br.pC) ){
69325:         rc = sqlite3VdbeSorterWrite(db, u.br.pC, pIn2);
69326:       }else{
69327:         u.br.nKey = pIn2->n;
69328:         u.br.zKey = pIn2->z;
69329:         rc = sqlite3BtreeInsert(u.br.pCrsr, u.br.zKey, u.br.nKey, "", 0, 0, pOp->p3,
69330:             ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.br.pC->seekResult : 0)
69331:             );
69332:         assert( u.br.pC->deferredMoveto==0 );
69333:         u.br.pC->cacheStatus = CACHE_STALE;
69334:       }
69335:     }
69336:   }
69337:   break;
69338: }
69339: 
69340: /* Opcode: IdxDelete P1 P2 P3 * *
69341: **
69342: ** The content of P3 registers starting at register P2 form
69343: ** an unpacked index key. This opcode removes that entry from the 
69344: ** index opened by cursor P1.
69345: */
69346: case OP_IdxDelete: {
69347: #if 0  /* local variables moved into u.bs */
69348:   VdbeCursor *pC;
69349:   BtCursor *pCrsr;
69350:   int res;
69351:   UnpackedRecord r;
69352: #endif /* local variables moved into u.bs */
69353: 
69354:   assert( pOp->p3>0 );
69355:   assert( pOp->p2>0 && pOp->p2+pOp->p3<=p->nMem+1 );
69356:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69357:   u.bs.pC = p->apCsr[pOp->p1];
69358:   assert( u.bs.pC!=0 );
69359:   u.bs.pCrsr = u.bs.pC->pCursor;
69360:   if( ALWAYS(u.bs.pCrsr!=0) ){
69361:     u.bs.r.pKeyInfo = u.bs.pC->pKeyInfo;
69362:     u.bs.r.nField = (u16)pOp->p3;
69363:     u.bs.r.flags = 0;
69364:     u.bs.r.aMem = &aMem[pOp->p2];
69365: #ifdef SQLITE_DEBUG
69366:     { int i; for(i=0; i<u.bs.r.nField; i++) assert( memIsValid(&u.bs.r.aMem[i]) ); }
69367: #endif
69368:     rc = sqlite3BtreeMovetoUnpacked(u.bs.pCrsr, &u.bs.r, 0, 0, &u.bs.res);
69369:     if( rc==SQLITE_OK && u.bs.res==0 ){
69370:       rc = sqlite3BtreeDelete(u.bs.pCrsr);
69371:     }
69372:     assert( u.bs.pC->deferredMoveto==0 );
69373:     u.bs.pC->cacheStatus = CACHE_STALE;
69374:   }
69375:   break;
69376: }
69377: 
69378: /* Opcode: IdxRowid P1 P2 * * *
69379: **
69380: ** Write into register P2 an integer which is the last entry in the record at
69381: ** the end of the index key pointed to by cursor P1.  This integer should be
69382: ** the rowid of the table entry to which this index entry points.
69383: **
69384: ** See also: Rowid, MakeRecord.
69385: */
69386: case OP_IdxRowid: {              /* out2-prerelease */
69387: #if 0  /* local variables moved into u.bt */
69388:   BtCursor *pCrsr;
69389:   VdbeCursor *pC;
69390:   i64 rowid;
69391: #endif /* local variables moved into u.bt */
69392: 
69393:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69394:   u.bt.pC = p->apCsr[pOp->p1];
69395:   assert( u.bt.pC!=0 );
69396:   u.bt.pCrsr = u.bt.pC->pCursor;
69397:   pOut->flags = MEM_Null;
69398:   if( ALWAYS(u.bt.pCrsr!=0) ){
69399:     rc = sqlite3VdbeCursorMoveto(u.bt.pC);
69400:     if( NEVER(rc) ) goto abort_due_to_error;
69401:     assert( u.bt.pC->deferredMoveto==0 );
69402:     assert( u.bt.pC->isTable==0 );
69403:     if( !u.bt.pC->nullRow ){
69404:       rc = sqlite3VdbeIdxRowid(db, u.bt.pCrsr, &u.bt.rowid);
69405:       if( rc!=SQLITE_OK ){
69406:         goto abort_due_to_error;
69407:       }
69408:       pOut->u.i = u.bt.rowid;
69409:       pOut->flags = MEM_Int;
69410:     }
69411:   }
69412:   break;
69413: }
69414: 
69415: /* Opcode: IdxGE P1 P2 P3 P4 P5
69416: **
69417: ** The P4 register values beginning with P3 form an unpacked index 
69418: ** key that omits the ROWID.  Compare this key value against the index 
69419: ** that P1 is currently pointing to, ignoring the ROWID on the P1 index.
69420: **
69421: ** If the P1 index entry is greater than or equal to the key value
69422: ** then jump to P2.  Otherwise fall through to the next instruction.
69423: **
69424: ** If P5 is non-zero then the key value is increased by an epsilon 
69425: ** prior to the comparison.  This make the opcode work like IdxGT except
69426: ** that if the key from register P3 is a prefix of the key in the cursor,
69427: ** the result is false whereas it would be true with IdxGT.
69428: */
69429: /* Opcode: IdxLT P1 P2 P3 P4 P5
69430: **
69431: ** The P4 register values beginning with P3 form an unpacked index 
69432: ** key that omits the ROWID.  Compare this key value against the index 
69433: ** that P1 is currently pointing to, ignoring the ROWID on the P1 index.
69434: **
69435: ** If the P1 index entry is less than the key value then jump to P2.
69436: ** Otherwise fall through to the next instruction.
69437: **
69438: ** If P5 is non-zero then the key value is increased by an epsilon prior 
69439: ** to the comparison.  This makes the opcode work like IdxLE.
69440: */
69441: case OP_IdxLT:          /* jump */
69442: case OP_IdxGE: {        /* jump */
69443: #if 0  /* local variables moved into u.bu */
69444:   VdbeCursor *pC;
69445:   int res;
69446:   UnpackedRecord r;
69447: #endif /* local variables moved into u.bu */
69448: 
69449:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69450:   u.bu.pC = p->apCsr[pOp->p1];
69451:   assert( u.bu.pC!=0 );
69452:   assert( u.bu.pC->isOrdered );
69453:   if( ALWAYS(u.bu.pC->pCursor!=0) ){
69454:     assert( u.bu.pC->deferredMoveto==0 );
69455:     assert( pOp->p5==0 || pOp->p5==1 );
69456:     assert( pOp->p4type==P4_INT32 );
69457:     u.bu.r.pKeyInfo = u.bu.pC->pKeyInfo;
69458:     u.bu.r.nField = (u16)pOp->p4.i;
69459:     if( pOp->p5 ){
69460:       u.bu.r.flags = UNPACKED_INCRKEY | UNPACKED_PREFIX_MATCH;
69461:     }else{
69462:       u.bu.r.flags = UNPACKED_PREFIX_MATCH;
69463:     }
69464:     u.bu.r.aMem = &aMem[pOp->p3];
69465: #ifdef SQLITE_DEBUG
69466:     { int i; for(i=0; i<u.bu.r.nField; i++) assert( memIsValid(&u.bu.r.aMem[i]) ); }
69467: #endif
69468:     rc = sqlite3VdbeIdxKeyCompare(u.bu.pC, &u.bu.r, &u.bu.res);
69469:     if( pOp->opcode==OP_IdxLT ){
69470:       u.bu.res = -u.bu.res;
69471:     }else{
69472:       assert( pOp->opcode==OP_IdxGE );
69473:       u.bu.res++;
69474:     }
69475:     if( u.bu.res>0 ){
69476:       pc = pOp->p2 - 1 ;
69477:     }
69478:   }
69479:   break;
69480: }
69481: 
69482: /* Opcode: Destroy P1 P2 P3 * *
69483: **
69484: ** Delete an entire database table or index whose root page in the database
69485: ** file is given by P1.
69486: **
69487: ** The table being destroyed is in the main database file if P3==0.  If
69488: ** P3==1 then the table to be clear is in the auxiliary database file
69489: ** that is used to store tables create using CREATE TEMPORARY TABLE.
69490: **
69491: ** If AUTOVACUUM is enabled then it is possible that another root page
69492: ** might be moved into the newly deleted root page in order to keep all
69493: ** root pages contiguous at the beginning of the database.  The former
69494: ** value of the root page that moved - its value before the move occurred -
69495: ** is stored in register P2.  If no page 
69496: ** movement was required (because the table being dropped was already 
69497: ** the last one in the database) then a zero is stored in register P2.
69498: ** If AUTOVACUUM is disabled then a zero is stored in register P2.
69499: **
69500: ** See also: Clear
69501: */
69502: case OP_Destroy: {     /* out2-prerelease */
69503: #if 0  /* local variables moved into u.bv */
69504:   int iMoved;
69505:   int iCnt;
69506:   Vdbe *pVdbe;
69507:   int iDb;
69508: #endif /* local variables moved into u.bv */
69509: #ifndef SQLITE_OMIT_VIRTUALTABLE
69510:   u.bv.iCnt = 0;
69511:   for(u.bv.pVdbe=db->pVdbe; u.bv.pVdbe; u.bv.pVdbe = u.bv.pVdbe->pNext){
69512:     if( u.bv.pVdbe->magic==VDBE_MAGIC_RUN && u.bv.pVdbe->inVtabMethod<2 && u.bv.pVdbe->pc>=0 ){
69513:       u.bv.iCnt++;
69514:     }
69515:   }
69516: #else
69517:   u.bv.iCnt = db->activeVdbeCnt;
69518: #endif
69519:   pOut->flags = MEM_Null;
69520:   if( u.bv.iCnt>1 ){
69521:     rc = SQLITE_LOCKED;
69522:     p->errorAction = OE_Abort;
69523:   }else{
69524:     u.bv.iDb = pOp->p3;
69525:     assert( u.bv.iCnt==1 );
69526:     assert( (p->btreeMask & (((yDbMask)1)<<u.bv.iDb))!=0 );
69527:     rc = sqlite3BtreeDropTable(db->aDb[u.bv.iDb].pBt, pOp->p1, &u.bv.iMoved);
69528:     pOut->flags = MEM_Int;
69529:     pOut->u.i = u.bv.iMoved;
69530: #ifndef SQLITE_OMIT_AUTOVACUUM
69531:     if( rc==SQLITE_OK && u.bv.iMoved!=0 ){
69532:       sqlite3RootPageMoved(db, u.bv.iDb, u.bv.iMoved, pOp->p1);
69533:       /* All OP_Destroy operations occur on the same btree */
69534:       assert( resetSchemaOnFault==0 || resetSchemaOnFault==u.bv.iDb+1 );
69535:       resetSchemaOnFault = u.bv.iDb+1;
69536:     }
69537: #endif
69538:   }
69539:   break;
69540: }
69541: 
69542: /* Opcode: Clear P1 P2 P3
69543: **
69544: ** Delete all contents of the database table or index whose root page
69545: ** in the database file is given by P1.  But, unlike Destroy, do not
69546: ** remove the table or index from the database file.
69547: **
69548: ** The table being clear is in the main database file if P2==0.  If
69549: ** P2==1 then the table to be clear is in the auxiliary database file
69550: ** that is used to store tables create using CREATE TEMPORARY TABLE.
69551: **
69552: ** If the P3 value is non-zero, then the table referred to must be an
69553: ** intkey table (an SQL table, not an index). In this case the row change 
69554: ** count is incremented by the number of rows in the table being cleared. 
69555: ** If P3 is greater than zero, then the value stored in register P3 is
69556: ** also incremented by the number of rows in the table being cleared.
69557: **
69558: ** See also: Destroy
69559: */
69560: case OP_Clear: {
69561: #if 0  /* local variables moved into u.bw */
69562:   int nChange;
69563: #endif /* local variables moved into u.bw */
69564: 
69565:   u.bw.nChange = 0;
69566:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p2))!=0 );
69567:   rc = sqlite3BtreeClearTable(
69568:       db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &u.bw.nChange : 0)
69569:   );
69570:   if( pOp->p3 ){
69571:     p->nChange += u.bw.nChange;
69572:     if( pOp->p3>0 ){
69573:       assert( memIsValid(&aMem[pOp->p3]) );
69574:       memAboutToChange(p, &aMem[pOp->p3]);
69575:       aMem[pOp->p3].u.i += u.bw.nChange;
69576:     }
69577:   }
69578:   break;
69579: }
69580: 
69581: /* Opcode: CreateTable P1 P2 * * *
69582: **
69583: ** Allocate a new table in the main database file if P1==0 or in the
69584: ** auxiliary database file if P1==1 or in an attached database if
69585: ** P1>1.  Write the root page number of the new table into
69586: ** register P2
69587: **
69588: ** The difference between a table and an index is this:  A table must
69589: ** have a 4-byte integer key and can have arbitrary data.  An index
69590: ** has an arbitrary key but no data.
69591: **
69592: ** See also: CreateIndex
69593: */
69594: /* Opcode: CreateIndex P1 P2 * * *
69595: **
69596: ** Allocate a new index in the main database file if P1==0 or in the
69597: ** auxiliary database file if P1==1 or in an attached database if
69598: ** P1>1.  Write the root page number of the new table into
69599: ** register P2.
69600: **
69601: ** See documentation on OP_CreateTable for additional information.
69602: */
69603: case OP_CreateIndex:            /* out2-prerelease */
69604: case OP_CreateTable: {          /* out2-prerelease */
69605: #if 0  /* local variables moved into u.bx */
69606:   int pgno;
69607:   int flags;
69608:   Db *pDb;
69609: #endif /* local variables moved into u.bx */
69610: 
69611:   u.bx.pgno = 0;
69612:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
69613:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
69614:   u.bx.pDb = &db->aDb[pOp->p1];
69615:   assert( u.bx.pDb->pBt!=0 );
69616:   if( pOp->opcode==OP_CreateTable ){
69617:     /* u.bx.flags = BTREE_INTKEY; */
69618:     u.bx.flags = BTREE_INTKEY;
69619:   }else{
69620:     u.bx.flags = BTREE_BLOBKEY;
69621:   }
69622:   rc = sqlite3BtreeCreateTable(u.bx.pDb->pBt, &u.bx.pgno, u.bx.flags);
69623:   pOut->u.i = u.bx.pgno;
69624:   break;
69625: }
69626: 
69627: /* Opcode: ParseSchema P1 * * P4 *
69628: **
69629: ** Read and parse all entries from the SQLITE_MASTER table of database P1
69630: ** that match the WHERE clause P4. 
69631: **
69632: ** This opcode invokes the parser to create a new virtual machine,
69633: ** then runs the new virtual machine.  It is thus a re-entrant opcode.
69634: */
69635: case OP_ParseSchema: {
69636: #if 0  /* local variables moved into u.by */
69637:   int iDb;
69638:   const char *zMaster;
69639:   char *zSql;
69640:   InitData initData;
69641: #endif /* local variables moved into u.by */
69642: 
69643:   /* Any prepared statement that invokes this opcode will hold mutexes
69644:   ** on every btree.  This is a prerequisite for invoking
69645:   ** sqlite3InitCallback().
69646:   */
69647: #ifdef SQLITE_DEBUG
69648:   for(u.by.iDb=0; u.by.iDb<db->nDb; u.by.iDb++){
69649:     assert( u.by.iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[u.by.iDb].pBt) );
69650:   }
69651: #endif
69652: 
69653:   u.by.iDb = pOp->p1;
69654:   assert( u.by.iDb>=0 && u.by.iDb<db->nDb );
69655:   assert( DbHasProperty(db, u.by.iDb, DB_SchemaLoaded) );
69656:   /* Used to be a conditional */ {
69657:     u.by.zMaster = SCHEMA_TABLE(u.by.iDb);
69658:     u.by.initData.db = db;
69659:     u.by.initData.iDb = pOp->p1;
69660:     u.by.initData.pzErrMsg = &p->zErrMsg;
69661:     u.by.zSql = sqlite3MPrintf(db,
69662:        "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s ORDER BY rowid",
69663:        db->aDb[u.by.iDb].zName, u.by.zMaster, pOp->p4.z);
69664:     if( u.by.zSql==0 ){
69665:       rc = SQLITE_NOMEM;
69666:     }else{
69667:       assert( db->init.busy==0 );
69668:       db->init.busy = 1;
69669:       u.by.initData.rc = SQLITE_OK;
69670:       assert( !db->mallocFailed );
69671:       rc = sqlite3_exec(db, u.by.zSql, sqlite3InitCallback, &u.by.initData, 0);
69672:       if( rc==SQLITE_OK ) rc = u.by.initData.rc;
69673:       sqlite3DbFree(db, u.by.zSql);
69674:       db->init.busy = 0;
69675:     }
69676:   }
69677:   if( rc==SQLITE_NOMEM ){
69678:     goto no_mem;
69679:   }
69680:   break;
69681: }
69682: 
69683: #if !defined(SQLITE_OMIT_ANALYZE)
69684: /* Opcode: LoadAnalysis P1 * * * *
69685: **
69686: ** Read the sqlite_stat1 table for database P1 and load the content
69687: ** of that table into the internal index hash table.  This will cause
69688: ** the analysis to be used when preparing all subsequent queries.
69689: */
69690: case OP_LoadAnalysis: {
69691:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
69692:   rc = sqlite3AnalysisLoad(db, pOp->p1);
69693:   break;  
69694: }
69695: #endif /* !defined(SQLITE_OMIT_ANALYZE) */
69696: 
69697: /* Opcode: DropTable P1 * * P4 *
69698: **
69699: ** Remove the internal (in-memory) data structures that describe
69700: ** the table named P4 in database P1.  This is called after a table
69701: ** is dropped in order to keep the internal representation of the
69702: ** schema consistent with what is on disk.
69703: */
69704: case OP_DropTable: {
69705:   sqlite3UnlinkAndDeleteTable(db, pOp->p1, pOp->p4.z);
69706:   break;
69707: }
69708: 
69709: /* Opcode: DropIndex P1 * * P4 *
69710: **
69711: ** Remove the internal (in-memory) data structures that describe
69712: ** the index named P4 in database P1.  This is called after an index
69713: ** is dropped in order to keep the internal representation of the
69714: ** schema consistent with what is on disk.
69715: */
69716: case OP_DropIndex: {
69717:   sqlite3UnlinkAndDeleteIndex(db, pOp->p1, pOp->p4.z);
69718:   break;
69719: }
69720: 
69721: /* Opcode: DropTrigger P1 * * P4 *
69722: **
69723: ** Remove the internal (in-memory) data structures that describe
69724: ** the trigger named P4 in database P1.  This is called after a trigger
69725: ** is dropped in order to keep the internal representation of the
69726: ** schema consistent with what is on disk.
69727: */
69728: case OP_DropTrigger: {
69729:   sqlite3UnlinkAndDeleteTrigger(db, pOp->p1, pOp->p4.z);
69730:   break;
69731: }
69732: 
69733: 
69734: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
69735: /* Opcode: IntegrityCk P1 P2 P3 * P5
69736: **
69737: ** Do an analysis of the currently open database.  Store in
69738: ** register P1 the text of an error message describing any problems.
69739: ** If no problems are found, store a NULL in register P1.
69740: **
69741: ** The register P3 contains the maximum number of allowed errors.
69742: ** At most reg(P3) errors will be reported.
69743: ** In other words, the analysis stops as soon as reg(P1) errors are 
69744: ** seen.  Reg(P1) is updated with the number of errors remaining.
69745: **
69746: ** The root page numbers of all tables in the database are integer
69747: ** stored in reg(P1), reg(P1+1), reg(P1+2), ....  There are P2 tables
69748: ** total.
69749: **
69750: ** If P5 is not zero, the check is done on the auxiliary database
69751: ** file, not the main database file.
69752: **
69753: ** This opcode is used to implement the integrity_check pragma.
69754: */
69755: case OP_IntegrityCk: {
69756: #if 0  /* local variables moved into u.bz */
69757:   int nRoot;      /* Number of tables to check.  (Number of root pages.) */
69758:   int *aRoot;     /* Array of rootpage numbers for tables to be checked */
69759:   int j;          /* Loop counter */
69760:   int nErr;       /* Number of errors reported */
69761:   char *z;        /* Text of the error report */
69762:   Mem *pnErr;     /* Register keeping track of errors remaining */
69763: #endif /* local variables moved into u.bz */
69764: 
69765:   u.bz.nRoot = pOp->p2;
69766:   assert( u.bz.nRoot>0 );
69767:   u.bz.aRoot = sqlite3DbMallocRaw(db, sizeof(int)*(u.bz.nRoot+1) );
69768:   if( u.bz.aRoot==0 ) goto no_mem;
69769:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
69770:   u.bz.pnErr = &aMem[pOp->p3];
69771:   assert( (u.bz.pnErr->flags & MEM_Int)!=0 );
69772:   assert( (u.bz.pnErr->flags & (MEM_Str|MEM_Blob))==0 );
69773:   pIn1 = &aMem[pOp->p1];
69774:   for(u.bz.j=0; u.bz.j<u.bz.nRoot; u.bz.j++){
69775:     u.bz.aRoot[u.bz.j] = (int)sqlite3VdbeIntValue(&pIn1[u.bz.j]);
69776:   }
69777:   u.bz.aRoot[u.bz.j] = 0;
69778:   assert( pOp->p5<db->nDb );
69779:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p5))!=0 );
69780:   u.bz.z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, u.bz.aRoot, u.bz.nRoot,
69781:                                  (int)u.bz.pnErr->u.i, &u.bz.nErr);
69782:   sqlite3DbFree(db, u.bz.aRoot);
69783:   u.bz.pnErr->u.i -= u.bz.nErr;
69784:   sqlite3VdbeMemSetNull(pIn1);
69785:   if( u.bz.nErr==0 ){
69786:     assert( u.bz.z==0 );
69787:   }else if( u.bz.z==0 ){
69788:     goto no_mem;
69789:   }else{
69790:     sqlite3VdbeMemSetStr(pIn1, u.bz.z, -1, SQLITE_UTF8, sqlite3_free);
69791:   }
69792:   UPDATE_MAX_BLOBSIZE(pIn1);
69793:   sqlite3VdbeChangeEncoding(pIn1, encoding);
69794:   break;
69795: }
69796: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
69797: 
69798: /* Opcode: RowSetAdd P1 P2 * * *
69799: **
69800: ** Insert the integer value held by register P2 into a boolean index
69801: ** held in register P1.
69802: **
69803: ** An assertion fails if P2 is not an integer.
69804: */
69805: case OP_RowSetAdd: {       /* in1, in2 */
69806:   pIn1 = &aMem[pOp->p1];
69807:   pIn2 = &aMem[pOp->p2];
69808:   assert( (pIn2->flags & MEM_Int)!=0 );
69809:   if( (pIn1->flags & MEM_RowSet)==0 ){
69810:     sqlite3VdbeMemSetRowSet(pIn1);
69811:     if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem;
69812:   }
69813:   sqlite3RowSetInsert(pIn1->u.pRowSet, pIn2->u.i);
69814:   break;
69815: }
69816: 
69817: /* Opcode: RowSetRead P1 P2 P3 * *
69818: **
69819: ** Extract the smallest value from boolean index P1 and put that value into
69820: ** register P3.  Or, if boolean index P1 is initially empty, leave P3
69821: ** unchanged and jump to instruction P2.
69822: */
69823: case OP_RowSetRead: {       /* jump, in1, out3 */
69824: #if 0  /* local variables moved into u.ca */
69825:   i64 val;
69826: #endif /* local variables moved into u.ca */
69827:   CHECK_FOR_INTERRUPT;
69828:   pIn1 = &aMem[pOp->p1];
69829:   if( (pIn1->flags & MEM_RowSet)==0
69830:    || sqlite3RowSetNext(pIn1->u.pRowSet, &u.ca.val)==0
69831:   ){
69832:     /* The boolean index is empty */
69833:     sqlite3VdbeMemSetNull(pIn1);
69834:     pc = pOp->p2 - 1;
69835:   }else{
69836:     /* A value was pulled from the index */
69837:     sqlite3VdbeMemSetInt64(&aMem[pOp->p3], u.ca.val);
69838:   }
69839:   break;
69840: }
69841: 
69842: /* Opcode: RowSetTest P1 P2 P3 P4
69843: **
69844: ** Register P3 is assumed to hold a 64-bit integer value. If register P1
69845: ** contains a RowSet object and that RowSet object contains
69846: ** the value held in P3, jump to register P2. Otherwise, insert the
69847: ** integer in P3 into the RowSet and continue on to the
69848: ** next opcode.
69849: **
69850: ** The RowSet object is optimized for the case where successive sets
69851: ** of integers, where each set contains no duplicates. Each set
69852: ** of values is identified by a unique P4 value. The first set
69853: ** must have P4==0, the final set P4=-1.  P4 must be either -1 or
69854: ** non-negative.  For non-negative values of P4 only the lower 4
69855: ** bits are significant.
69856: **
69857: ** This allows optimizations: (a) when P4==0 there is no need to test
69858: ** the rowset object for P3, as it is guaranteed not to contain it,
69859: ** (b) when P4==-1 there is no need to insert the value, as it will
69860: ** never be tested for, and (c) when a value that is part of set X is
69861: ** inserted, there is no need to search to see if the same value was
69862: ** previously inserted as part of set X (only if it was previously
69863: ** inserted as part of some other set).
69864: */
69865: case OP_RowSetTest: {                     /* jump, in1, in3 */
69866: #if 0  /* local variables moved into u.cb */
69867:   int iSet;
69868:   int exists;
69869: #endif /* local variables moved into u.cb */
69870: 
69871:   pIn1 = &aMem[pOp->p1];
69872:   pIn3 = &aMem[pOp->p3];
69873:   u.cb.iSet = pOp->p4.i;
69874:   assert( pIn3->flags&MEM_Int );
69875: 
69876:   /* If there is anything other than a rowset object in memory cell P1,
69877:   ** delete it now and initialize P1 with an empty rowset
69878:   */
69879:   if( (pIn1->flags & MEM_RowSet)==0 ){
69880:     sqlite3VdbeMemSetRowSet(pIn1);
69881:     if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem;
69882:   }
69883: 
69884:   assert( pOp->p4type==P4_INT32 );
69885:   assert( u.cb.iSet==-1 || u.cb.iSet>=0 );
69886:   if( u.cb.iSet ){
69887:     u.cb.exists = sqlite3RowSetTest(pIn1->u.pRowSet,
69888:                                (u8)(u.cb.iSet>=0 ? u.cb.iSet & 0xf : 0xff),
69889:                                pIn3->u.i);
69890:     if( u.cb.exists ){
69891:       pc = pOp->p2 - 1;
69892:       break;
69893:     }
69894:   }
69895:   if( u.cb.iSet>=0 ){
69896:     sqlite3RowSetInsert(pIn1->u.pRowSet, pIn3->u.i);
69897:   }
69898:   break;
69899: }
69900: 
69901: 
69902: #ifndef SQLITE_OMIT_TRIGGER
69903: 
69904: /* Opcode: Program P1 P2 P3 P4 *
69905: **
69906: ** Execute the trigger program passed as P4 (type P4_SUBPROGRAM). 
69907: **
69908: ** P1 contains the address of the memory cell that contains the first memory 
69909: ** cell in an array of values used as arguments to the sub-program. P2 
69910: ** contains the address to jump to if the sub-program throws an IGNORE 
69911: ** exception using the RAISE() function. Register P3 contains the address 
69912: ** of a memory cell in this (the parent) VM that is used to allocate the 
69913: ** memory required by the sub-vdbe at runtime.
69914: **
69915: ** P4 is a pointer to the VM containing the trigger program.
69916: */
69917: case OP_Program: {        /* jump */
69918: #if 0  /* local variables moved into u.cc */
69919:   int nMem;               /* Number of memory registers for sub-program */
69920:   int nByte;              /* Bytes of runtime space required for sub-program */
69921:   Mem *pRt;               /* Register to allocate runtime space */
69922:   Mem *pMem;              /* Used to iterate through memory cells */
69923:   Mem *pEnd;              /* Last memory cell in new array */
69924:   VdbeFrame *pFrame;      /* New vdbe frame to execute in */
69925:   SubProgram *pProgram;   /* Sub-program to execute */
69926:   void *t;                /* Token identifying trigger */
69927: #endif /* local variables moved into u.cc */
69928: 
69929:   u.cc.pProgram = pOp->p4.pProgram;
69930:   u.cc.pRt = &aMem[pOp->p3];
69931:   assert( u.cc.pProgram->nOp>0 );
69932: 
69933:   /* If the p5 flag is clear, then recursive invocation of triggers is
69934:   ** disabled for backwards compatibility (p5 is set if this sub-program
69935:   ** is really a trigger, not a foreign key action, and the flag set
69936:   ** and cleared by the "PRAGMA recursive_triggers" command is clear).
69937:   **
69938:   ** It is recursive invocation of triggers, at the SQL level, that is
69939:   ** disabled. In some cases a single trigger may generate more than one
69940:   ** SubProgram (if the trigger may be executed with more than one different
69941:   ** ON CONFLICT algorithm). SubProgram structures associated with a
69942:   ** single trigger all have the same value for the SubProgram.token
69943:   ** variable.  */
69944:   if( pOp->p5 ){
69945:     u.cc.t = u.cc.pProgram->token;
69946:     for(u.cc.pFrame=p->pFrame; u.cc.pFrame && u.cc.pFrame->token!=u.cc.t; u.cc.pFrame=u.cc.pFrame->pParent);
69947:     if( u.cc.pFrame ) break;
69948:   }
69949: 
69950:   if( p->nFrame>=db->aLimit[SQLITE_LIMIT_TRIGGER_DEPTH] ){
69951:     rc = SQLITE_ERROR;
69952:     sqlite3SetString(&p->zErrMsg, db, "too many levels of trigger recursion");
69953:     break;
69954:   }
69955: 
69956:   /* Register u.cc.pRt is used to store the memory required to save the state
69957:   ** of the current program, and the memory required at runtime to execute
69958:   ** the trigger program. If this trigger has been fired before, then u.cc.pRt
69959:   ** is already allocated. Otherwise, it must be initialized.  */
69960:   if( (u.cc.pRt->flags&MEM_Frame)==0 ){
69961:     /* SubProgram.nMem is set to the number of memory cells used by the
69962:     ** program stored in SubProgram.aOp. As well as these, one memory
69963:     ** cell is required for each cursor used by the program. Set local
69964:     ** variable u.cc.nMem (and later, VdbeFrame.nChildMem) to this value.
69965:     */
69966:     u.cc.nMem = u.cc.pProgram->nMem + u.cc.pProgram->nCsr;
69967:     u.cc.nByte = ROUND8(sizeof(VdbeFrame))
69968:               + u.cc.nMem * sizeof(Mem)
69969:               + u.cc.pProgram->nCsr * sizeof(VdbeCursor *)
69970:               + u.cc.pProgram->nOnce * sizeof(u8);
69971:     u.cc.pFrame = sqlite3DbMallocZero(db, u.cc.nByte);
69972:     if( !u.cc.pFrame ){
69973:       goto no_mem;
69974:     }
69975:     sqlite3VdbeMemRelease(u.cc.pRt);
69976:     u.cc.pRt->flags = MEM_Frame;
69977:     u.cc.pRt->u.pFrame = u.cc.pFrame;
69978: 
69979:     u.cc.pFrame->v = p;
69980:     u.cc.pFrame->nChildMem = u.cc.nMem;
69981:     u.cc.pFrame->nChildCsr = u.cc.pProgram->nCsr;
69982:     u.cc.pFrame->pc = pc;
69983:     u.cc.pFrame->aMem = p->aMem;
69984:     u.cc.pFrame->nMem = p->nMem;
69985:     u.cc.pFrame->apCsr = p->apCsr;
69986:     u.cc.pFrame->nCursor = p->nCursor;
69987:     u.cc.pFrame->aOp = p->aOp;
69988:     u.cc.pFrame->nOp = p->nOp;
69989:     u.cc.pFrame->token = u.cc.pProgram->token;
69990:     u.cc.pFrame->aOnceFlag = p->aOnceFlag;
69991:     u.cc.pFrame->nOnceFlag = p->nOnceFlag;
69992: 
69993:     u.cc.pEnd = &VdbeFrameMem(u.cc.pFrame)[u.cc.pFrame->nChildMem];
69994:     for(u.cc.pMem=VdbeFrameMem(u.cc.pFrame); u.cc.pMem!=u.cc.pEnd; u.cc.pMem++){
69995:       u.cc.pMem->flags = MEM_Invalid;
69996:       u.cc.pMem->db = db;
69997:     }
69998:   }else{
69999:     u.cc.pFrame = u.cc.pRt->u.pFrame;
70000:     assert( u.cc.pProgram->nMem+u.cc.pProgram->nCsr==u.cc.pFrame->nChildMem );
70001:     assert( u.cc.pProgram->nCsr==u.cc.pFrame->nChildCsr );
70002:     assert( pc==u.cc.pFrame->pc );
70003:   }
70004: 
70005:   p->nFrame++;
70006:   u.cc.pFrame->pParent = p->pFrame;
70007:   u.cc.pFrame->lastRowid = lastRowid;
70008:   u.cc.pFrame->nChange = p->nChange;
70009:   p->nChange = 0;
70010:   p->pFrame = u.cc.pFrame;
70011:   p->aMem = aMem = &VdbeFrameMem(u.cc.pFrame)[-1];
70012:   p->nMem = u.cc.pFrame->nChildMem;
70013:   p->nCursor = (u16)u.cc.pFrame->nChildCsr;
70014:   p->apCsr = (VdbeCursor **)&aMem[p->nMem+1];
70015:   p->aOp = aOp = u.cc.pProgram->aOp;
70016:   p->nOp = u.cc.pProgram->nOp;
70017:   p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor];
70018:   p->nOnceFlag = u.cc.pProgram->nOnce;
70019:   p->nOp = u.cc.pProgram->nOp;
70020:   pc = -1;
70021:   memset(p->aOnceFlag, 0, p->nOnceFlag);
70022: 
70023:   break;
70024: }
70025: 
70026: /* Opcode: Param P1 P2 * * *
70027: **
70028: ** This opcode is only ever present in sub-programs called via the 
70029: ** OP_Program instruction. Copy a value currently stored in a memory 
70030: ** cell of the calling (parent) frame to cell P2 in the current frames 
70031: ** address space. This is used by trigger programs to access the new.* 
70032: ** and old.* values.
70033: **
70034: ** The address of the cell in the parent frame is determined by adding
70035: ** the value of the P1 argument to the value of the P1 argument to the
70036: ** calling OP_Program instruction.
70037: */
70038: case OP_Param: {           /* out2-prerelease */
70039: #if 0  /* local variables moved into u.cd */
70040:   VdbeFrame *pFrame;
70041:   Mem *pIn;
70042: #endif /* local variables moved into u.cd */
70043:   u.cd.pFrame = p->pFrame;
70044:   u.cd.pIn = &u.cd.pFrame->aMem[pOp->p1 + u.cd.pFrame->aOp[u.cd.pFrame->pc].p1];
70045:   sqlite3VdbeMemShallowCopy(pOut, u.cd.pIn, MEM_Ephem);
70046:   break;
70047: }
70048: 
70049: #endif /* #ifndef SQLITE_OMIT_TRIGGER */
70050: 
70051: #ifndef SQLITE_OMIT_FOREIGN_KEY
70052: /* Opcode: FkCounter P1 P2 * * *
70053: **
70054: ** Increment a "constraint counter" by P2 (P2 may be negative or positive).
70055: ** If P1 is non-zero, the database constraint counter is incremented 
70056: ** (deferred foreign key constraints). Otherwise, if P1 is zero, the 
70057: ** statement counter is incremented (immediate foreign key constraints).
70058: */
70059: case OP_FkCounter: {
70060:   if( pOp->p1 ){
70061:     db->nDeferredCons += pOp->p2;
70062:   }else{
70063:     p->nFkConstraint += pOp->p2;
70064:   }
70065:   break;
70066: }
70067: 
70068: /* Opcode: FkIfZero P1 P2 * * *
70069: **
70070: ** This opcode tests if a foreign key constraint-counter is currently zero.
70071: ** If so, jump to instruction P2. Otherwise, fall through to the next 
70072: ** instruction.
70073: **
70074: ** If P1 is non-zero, then the jump is taken if the database constraint-counter
70075: ** is zero (the one that counts deferred constraint violations). If P1 is
70076: ** zero, the jump is taken if the statement constraint-counter is zero
70077: ** (immediate foreign key constraint violations).
70078: */
70079: case OP_FkIfZero: {         /* jump */
70080:   if( pOp->p1 ){
70081:     if( db->nDeferredCons==0 ) pc = pOp->p2-1;
70082:   }else{
70083:     if( p->nFkConstraint==0 ) pc = pOp->p2-1;
70084:   }
70085:   break;
70086: }
70087: #endif /* #ifndef SQLITE_OMIT_FOREIGN_KEY */
70088: 
70089: #ifndef SQLITE_OMIT_AUTOINCREMENT
70090: /* Opcode: MemMax P1 P2 * * *
70091: **
70092: ** P1 is a register in the root frame of this VM (the root frame is
70093: ** different from the current frame if this instruction is being executed
70094: ** within a sub-program). Set the value of register P1 to the maximum of 
70095: ** its current value and the value in register P2.
70096: **
70097: ** This instruction throws an error if the memory cell is not initially
70098: ** an integer.
70099: */
70100: case OP_MemMax: {        /* in2 */
70101: #if 0  /* local variables moved into u.ce */
70102:   Mem *pIn1;
70103:   VdbeFrame *pFrame;
70104: #endif /* local variables moved into u.ce */
70105:   if( p->pFrame ){
70106:     for(u.ce.pFrame=p->pFrame; u.ce.pFrame->pParent; u.ce.pFrame=u.ce.pFrame->pParent);
70107:     u.ce.pIn1 = &u.ce.pFrame->aMem[pOp->p1];
70108:   }else{
70109:     u.ce.pIn1 = &aMem[pOp->p1];
70110:   }
70111:   assert( memIsValid(u.ce.pIn1) );
70112:   sqlite3VdbeMemIntegerify(u.ce.pIn1);
70113:   pIn2 = &aMem[pOp->p2];
70114:   sqlite3VdbeMemIntegerify(pIn2);
70115:   if( u.ce.pIn1->u.i<pIn2->u.i){
70116:     u.ce.pIn1->u.i = pIn2->u.i;
70117:   }
70118:   break;
70119: }
70120: #endif /* SQLITE_OMIT_AUTOINCREMENT */
70121: 
70122: /* Opcode: IfPos P1 P2 * * *
70123: **
70124: ** If the value of register P1 is 1 or greater, jump to P2.
70125: **
70126: ** It is illegal to use this instruction on a register that does
70127: ** not contain an integer.  An assertion fault will result if you try.
70128: */
70129: case OP_IfPos: {        /* jump, in1 */
70130:   pIn1 = &aMem[pOp->p1];
70131:   assert( pIn1->flags&MEM_Int );
70132:   if( pIn1->u.i>0 ){
70133:      pc = pOp->p2 - 1;
70134:   }
70135:   break;
70136: }
70137: 
70138: /* Opcode: IfNeg P1 P2 * * *
70139: **
70140: ** If the value of register P1 is less than zero, jump to P2. 
70141: **
70142: ** It is illegal to use this instruction on a register that does
70143: ** not contain an integer.  An assertion fault will result if you try.
70144: */
70145: case OP_IfNeg: {        /* jump, in1 */
70146:   pIn1 = &aMem[pOp->p1];
70147:   assert( pIn1->flags&MEM_Int );
70148:   if( pIn1->u.i<0 ){
70149:      pc = pOp->p2 - 1;
70150:   }
70151:   break;
70152: }
70153: 
70154: /* Opcode: IfZero P1 P2 P3 * *
70155: **
70156: ** The register P1 must contain an integer.  Add literal P3 to the
70157: ** value in register P1.  If the result is exactly 0, jump to P2. 
70158: **
70159: ** It is illegal to use this instruction on a register that does
70160: ** not contain an integer.  An assertion fault will result if you try.
70161: */
70162: case OP_IfZero: {        /* jump, in1 */
70163:   pIn1 = &aMem[pOp->p1];
70164:   assert( pIn1->flags&MEM_Int );
70165:   pIn1->u.i += pOp->p3;
70166:   if( pIn1->u.i==0 ){
70167:      pc = pOp->p2 - 1;
70168:   }
70169:   break;
70170: }
70171: 
70172: /* Opcode: AggStep * P2 P3 P4 P5
70173: **
70174: ** Execute the step function for an aggregate.  The
70175: ** function has P5 arguments.   P4 is a pointer to the FuncDef
70176: ** structure that specifies the function.  Use register
70177: ** P3 as the accumulator.
70178: **
70179: ** The P5 arguments are taken from register P2 and its
70180: ** successors.
70181: */
70182: case OP_AggStep: {
70183: #if 0  /* local variables moved into u.cf */
70184:   int n;
70185:   int i;
70186:   Mem *pMem;
70187:   Mem *pRec;
70188:   sqlite3_context ctx;
70189:   sqlite3_value **apVal;
70190: #endif /* local variables moved into u.cf */
70191: 
70192:   u.cf.n = pOp->p5;
70193:   assert( u.cf.n>=0 );
70194:   u.cf.pRec = &aMem[pOp->p2];
70195:   u.cf.apVal = p->apArg;
70196:   assert( u.cf.apVal || u.cf.n==0 );
70197:   for(u.cf.i=0; u.cf.i<u.cf.n; u.cf.i++, u.cf.pRec++){
70198:     assert( memIsValid(u.cf.pRec) );
70199:     u.cf.apVal[u.cf.i] = u.cf.pRec;
70200:     memAboutToChange(p, u.cf.pRec);
70201:     sqlite3VdbeMemStoreType(u.cf.pRec);
70202:   }
70203:   u.cf.ctx.pFunc = pOp->p4.pFunc;
70204:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
70205:   u.cf.ctx.pMem = u.cf.pMem = &aMem[pOp->p3];
70206:   u.cf.pMem->n++;
70207:   u.cf.ctx.s.flags = MEM_Null;
70208:   u.cf.ctx.s.z = 0;
70209:   u.cf.ctx.s.zMalloc = 0;
70210:   u.cf.ctx.s.xDel = 0;
70211:   u.cf.ctx.s.db = db;
70212:   u.cf.ctx.isError = 0;
70213:   u.cf.ctx.pColl = 0;
70214:   if( u.cf.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
70215:     assert( pOp>p->aOp );
70216:     assert( pOp[-1].p4type==P4_COLLSEQ );
70217:     assert( pOp[-1].opcode==OP_CollSeq );
70218:     u.cf.ctx.pColl = pOp[-1].p4.pColl;
70219:   }
70220:   (u.cf.ctx.pFunc->xStep)(&u.cf.ctx, u.cf.n, u.cf.apVal); /* IMP: R-24505-23230 */
70221:   if( u.cf.ctx.isError ){
70222:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.cf.ctx.s));
70223:     rc = u.cf.ctx.isError;
70224:   }
70225: 
70226:   sqlite3VdbeMemRelease(&u.cf.ctx.s);
70227: 
70228:   break;
70229: }
70230: 
70231: /* Opcode: AggFinal P1 P2 * P4 *
70232: **
70233: ** Execute the finalizer function for an aggregate.  P1 is
70234: ** the memory location that is the accumulator for the aggregate.
70235: **
70236: ** P2 is the number of arguments that the step function takes and
70237: ** P4 is a pointer to the FuncDef for this function.  The P2
70238: ** argument is not used by this opcode.  It is only there to disambiguate
70239: ** functions that can take varying numbers of arguments.  The
70240: ** P4 argument is only needed for the degenerate case where
70241: ** the step function was not previously called.
70242: */
70243: case OP_AggFinal: {
70244: #if 0  /* local variables moved into u.cg */
70245:   Mem *pMem;
70246: #endif /* local variables moved into u.cg */
70247:   assert( pOp->p1>0 && pOp->p1<=p->nMem );
70248:   u.cg.pMem = &aMem[pOp->p1];
70249:   assert( (u.cg.pMem->flags & ~(MEM_Null|MEM_Agg))==0 );
70250:   rc = sqlite3VdbeMemFinalize(u.cg.pMem, pOp->p4.pFunc);
70251:   if( rc ){
70252:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(u.cg.pMem));
70253:   }
70254:   sqlite3VdbeChangeEncoding(u.cg.pMem, encoding);
70255:   UPDATE_MAX_BLOBSIZE(u.cg.pMem);
70256:   if( sqlite3VdbeMemTooBig(u.cg.pMem) ){
70257:     goto too_big;
70258:   }
70259:   break;
70260: }
70261: 
70262: #ifndef SQLITE_OMIT_WAL
70263: /* Opcode: Checkpoint P1 P2 P3 * *
70264: **
70265: ** Checkpoint database P1. This is a no-op if P1 is not currently in
70266: ** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL
70267: ** or RESTART.  Write 1 or 0 into mem[P3] if the checkpoint returns
70268: ** SQLITE_BUSY or not, respectively.  Write the number of pages in the
70269: ** WAL after the checkpoint into mem[P3+1] and the number of pages
70270: ** in the WAL that have been checkpointed after the checkpoint
70271: ** completes into mem[P3+2].  However on an error, mem[P3+1] and
70272: ** mem[P3+2] are initialized to -1.
70273: */
70274: case OP_Checkpoint: {
70275: #if 0  /* local variables moved into u.ch */
70276:   int i;                          /* Loop counter */
70277:   int aRes[3];                    /* Results */
70278:   Mem *pMem;                      /* Write results here */
70279: #endif /* local variables moved into u.ch */
70280: 
70281:   u.ch.aRes[0] = 0;
70282:   u.ch.aRes[1] = u.ch.aRes[2] = -1;
70283:   assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE
70284:        || pOp->p2==SQLITE_CHECKPOINT_FULL
70285:        || pOp->p2==SQLITE_CHECKPOINT_RESTART
70286:   );
70287:   rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &u.ch.aRes[1], &u.ch.aRes[2]);
70288:   if( rc==SQLITE_BUSY ){
70289:     rc = SQLITE_OK;
70290:     u.ch.aRes[0] = 1;
70291:   }
70292:   for(u.ch.i=0, u.ch.pMem = &aMem[pOp->p3]; u.ch.i<3; u.ch.i++, u.ch.pMem++){
70293:     sqlite3VdbeMemSetInt64(u.ch.pMem, (i64)u.ch.aRes[u.ch.i]);
70294:   }
70295:   break;
70296: };  
70297: #endif
70298: 
70299: #ifndef SQLITE_OMIT_PRAGMA
70300: /* Opcode: JournalMode P1 P2 P3 * P5
70301: **
70302: ** Change the journal mode of database P1 to P3. P3 must be one of the
70303: ** PAGER_JOURNALMODE_XXX values. If changing between the various rollback
70304: ** modes (delete, truncate, persist, off and memory), this is a simple
70305: ** operation. No IO is required.
70306: **
70307: ** If changing into or out of WAL mode the procedure is more complicated.
70308: **
70309: ** Write a string containing the final journal-mode to register P2.
70310: */
70311: case OP_JournalMode: {    /* out2-prerelease */
70312: #if 0  /* local variables moved into u.ci */
70313:   Btree *pBt;                     /* Btree to change journal mode of */
70314:   Pager *pPager;                  /* Pager associated with pBt */
70315:   int eNew;                       /* New journal mode */
70316:   int eOld;                       /* The old journal mode */
70317:   const char *zFilename;          /* Name of database file for pPager */
70318: #endif /* local variables moved into u.ci */
70319: 
70320:   u.ci.eNew = pOp->p3;
70321:   assert( u.ci.eNew==PAGER_JOURNALMODE_DELETE
70322:        || u.ci.eNew==PAGER_JOURNALMODE_TRUNCATE
70323:        || u.ci.eNew==PAGER_JOURNALMODE_PERSIST
70324:        || u.ci.eNew==PAGER_JOURNALMODE_OFF
70325:        || u.ci.eNew==PAGER_JOURNALMODE_MEMORY
70326:        || u.ci.eNew==PAGER_JOURNALMODE_WAL
70327:        || u.ci.eNew==PAGER_JOURNALMODE_QUERY
70328:   );
70329:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
70330: 
70331:   u.ci.pBt = db->aDb[pOp->p1].pBt;
70332:   u.ci.pPager = sqlite3BtreePager(u.ci.pBt);
70333:   u.ci.eOld = sqlite3PagerGetJournalMode(u.ci.pPager);
70334:   if( u.ci.eNew==PAGER_JOURNALMODE_QUERY ) u.ci.eNew = u.ci.eOld;
70335:   if( !sqlite3PagerOkToChangeJournalMode(u.ci.pPager) ) u.ci.eNew = u.ci.eOld;
70336: 
70337: #ifndef SQLITE_OMIT_WAL
70338:   u.ci.zFilename = sqlite3PagerFilename(u.ci.pPager);
70339: 
70340:   /* Do not allow a transition to journal_mode=WAL for a database
70341:   ** in temporary storage or if the VFS does not support shared memory
70342:   */
70343:   if( u.ci.eNew==PAGER_JOURNALMODE_WAL
70344:    && (sqlite3Strlen30(u.ci.zFilename)==0           /* Temp file */
70345:        || !sqlite3PagerWalSupported(u.ci.pPager))   /* No shared-memory support */
70346:   ){
70347:     u.ci.eNew = u.ci.eOld;
70348:   }
70349: 
70350:   if( (u.ci.eNew!=u.ci.eOld)
70351:    && (u.ci.eOld==PAGER_JOURNALMODE_WAL || u.ci.eNew==PAGER_JOURNALMODE_WAL)
70352:   ){
70353:     if( !db->autoCommit || db->activeVdbeCnt>1 ){
70354:       rc = SQLITE_ERROR;
70355:       sqlite3SetString(&p->zErrMsg, db,
70356:           "cannot change %s wal mode from within a transaction",
70357:           (u.ci.eNew==PAGER_JOURNALMODE_WAL ? "into" : "out of")
70358:       );
70359:       break;
70360:     }else{
70361: 
70362:       if( u.ci.eOld==PAGER_JOURNALMODE_WAL ){
70363:         /* If leaving WAL mode, close the log file. If successful, the call
70364:         ** to PagerCloseWal() checkpoints and deletes the write-ahead-log
70365:         ** file. An EXCLUSIVE lock may still be held on the database file
70366:         ** after a successful return.
70367:         */
70368:         rc = sqlite3PagerCloseWal(u.ci.pPager);
70369:         if( rc==SQLITE_OK ){
70370:           sqlite3PagerSetJournalMode(u.ci.pPager, u.ci.eNew);
70371:         }
70372:       }else if( u.ci.eOld==PAGER_JOURNALMODE_MEMORY ){
70373:         /* Cannot transition directly from MEMORY to WAL.  Use mode OFF
70374:         ** as an intermediate */
70375:         sqlite3PagerSetJournalMode(u.ci.pPager, PAGER_JOURNALMODE_OFF);
70376:       }
70377: 
70378:       /* Open a transaction on the database file. Regardless of the journal
70379:       ** mode, this transaction always uses a rollback journal.
70380:       */
70381:       assert( sqlite3BtreeIsInTrans(u.ci.pBt)==0 );
70382:       if( rc==SQLITE_OK ){
70383:         rc = sqlite3BtreeSetVersion(u.ci.pBt, (u.ci.eNew==PAGER_JOURNALMODE_WAL ? 2 : 1));
70384:       }
70385:     }
70386:   }
70387: #endif /* ifndef SQLITE_OMIT_WAL */
70388: 
70389:   if( rc ){
70390:     u.ci.eNew = u.ci.eOld;
70391:   }
70392:   u.ci.eNew = sqlite3PagerSetJournalMode(u.ci.pPager, u.ci.eNew);
70393: 
70394:   pOut = &aMem[pOp->p2];
70395:   pOut->flags = MEM_Str|MEM_Static|MEM_Term;
70396:   pOut->z = (char *)sqlite3JournalModename(u.ci.eNew);
70397:   pOut->n = sqlite3Strlen30(pOut->z);
70398:   pOut->enc = SQLITE_UTF8;
70399:   sqlite3VdbeChangeEncoding(pOut, encoding);
70400:   break;
70401: };
70402: #endif /* SQLITE_OMIT_PRAGMA */
70403: 
70404: #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH)
70405: /* Opcode: Vacuum * * * * *
70406: **
70407: ** Vacuum the entire database.  This opcode will cause other virtual
70408: ** machines to be created and run.  It may not be called from within
70409: ** a transaction.
70410: */
70411: case OP_Vacuum: {
70412:   rc = sqlite3RunVacuum(&p->zErrMsg, db);
70413:   break;
70414: }
70415: #endif
70416: 
70417: #if !defined(SQLITE_OMIT_AUTOVACUUM)
70418: /* Opcode: IncrVacuum P1 P2 * * *
70419: **
70420: ** Perform a single step of the incremental vacuum procedure on
70421: ** the P1 database. If the vacuum has finished, jump to instruction
70422: ** P2. Otherwise, fall through to the next instruction.
70423: */
70424: case OP_IncrVacuum: {        /* jump */
70425: #if 0  /* local variables moved into u.cj */
70426:   Btree *pBt;
70427: #endif /* local variables moved into u.cj */
70428: 
70429:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
70430:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
70431:   u.cj.pBt = db->aDb[pOp->p1].pBt;
70432:   rc = sqlite3BtreeIncrVacuum(u.cj.pBt);
70433:   if( rc==SQLITE_DONE ){
70434:     pc = pOp->p2 - 1;
70435:     rc = SQLITE_OK;
70436:   }
70437:   break;
70438: }
70439: #endif
70440: 
70441: /* Opcode: Expire P1 * * * *
70442: **
70443: ** Cause precompiled statements to become expired. An expired statement
70444: ** fails with an error code of SQLITE_SCHEMA if it is ever executed 
70445: ** (via sqlite3_step()).
70446: ** 
70447: ** If P1 is 0, then all SQL statements become expired. If P1 is non-zero,
70448: ** then only the currently executing statement is affected. 
70449: */
70450: case OP_Expire: {
70451:   if( !pOp->p1 ){
70452:     sqlite3ExpirePreparedStatements(db);
70453:   }else{
70454:     p->expired = 1;
70455:   }
70456:   break;
70457: }
70458: 
70459: #ifndef SQLITE_OMIT_SHARED_CACHE
70460: /* Opcode: TableLock P1 P2 P3 P4 *
70461: **
70462: ** Obtain a lock on a particular table. This instruction is only used when
70463: ** the shared-cache feature is enabled. 
70464: **
70465: ** P1 is the index of the database in sqlite3.aDb[] of the database
70466: ** on which the lock is acquired.  A readlock is obtained if P3==0 or
70467: ** a write lock if P3==1.
70468: **
70469: ** P2 contains the root-page of the table to lock.
70470: **
70471: ** P4 contains a pointer to the name of the table being locked. This is only
70472: ** used to generate an error message if the lock cannot be obtained.
70473: */
70474: case OP_TableLock: {
70475:   u8 isWriteLock = (u8)pOp->p3;
70476:   if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommitted) ){
70477:     int p1 = pOp->p1; 
70478:     assert( p1>=0 && p1<db->nDb );
70479:     assert( (p->btreeMask & (((yDbMask)1)<<p1))!=0 );
70480:     assert( isWriteLock==0 || isWriteLock==1 );
70481:     rc = sqlite3BtreeLockTable(db->aDb[p1].pBt, pOp->p2, isWriteLock);
70482:     if( (rc&0xFF)==SQLITE_LOCKED ){
70483:       const char *z = pOp->p4.z;
70484:       sqlite3SetString(&p->zErrMsg, db, "database table is locked: %s", z);
70485:     }
70486:   }
70487:   break;
70488: }
70489: #endif /* SQLITE_OMIT_SHARED_CACHE */
70490: 
70491: #ifndef SQLITE_OMIT_VIRTUALTABLE
70492: /* Opcode: VBegin * * * P4 *
70493: **
70494: ** P4 may be a pointer to an sqlite3_vtab structure. If so, call the 
70495: ** xBegin method for that table.
70496: **
70497: ** Also, whether or not P4 is set, check that this is not being called from
70498: ** within a callback to a virtual table xSync() method. If it is, the error
70499: ** code will be set to SQLITE_LOCKED.
70500: */
70501: case OP_VBegin: {
70502: #if 0  /* local variables moved into u.ck */
70503:   VTable *pVTab;
70504: #endif /* local variables moved into u.ck */
70505:   u.ck.pVTab = pOp->p4.pVtab;
70506:   rc = sqlite3VtabBegin(db, u.ck.pVTab);
70507:   if( u.ck.pVTab ) importVtabErrMsg(p, u.ck.pVTab->pVtab);
70508:   break;
70509: }
70510: #endif /* SQLITE_OMIT_VIRTUALTABLE */
70511: 
70512: #ifndef SQLITE_OMIT_VIRTUALTABLE
70513: /* Opcode: VCreate P1 * * P4 *
70514: **
70515: ** P4 is the name of a virtual table in database P1. Call the xCreate method
70516: ** for that table.
70517: */
70518: case OP_VCreate: {
70519:   rc = sqlite3VtabCallCreate(db, pOp->p1, pOp->p4.z, &p->zErrMsg);
70520:   break;
70521: }
70522: #endif /* SQLITE_OMIT_VIRTUALTABLE */
70523: 
70524: #ifndef SQLITE_OMIT_VIRTUALTABLE
70525: /* Opcode: VDestroy P1 * * P4 *
70526: **
70527: ** P4 is the name of a virtual table in database P1.  Call the xDestroy method
70528: ** of that table.
70529: */
70530: case OP_VDestroy: {
70531:   p->inVtabMethod = 2;
70532:   rc = sqlite3VtabCallDestroy(db, pOp->p1, pOp->p4.z);
70533:   p->inVtabMethod = 0;
70534:   break;
70535: }
70536: #endif /* SQLITE_OMIT_VIRTUALTABLE */
70537: 
70538: #ifndef SQLITE_OMIT_VIRTUALTABLE
70539: /* Opcode: VOpen P1 * * P4 *
70540: **
70541: ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
70542: ** P1 is a cursor number.  This opcode opens a cursor to the virtual
70543: ** table and stores that cursor in P1.
70544: */
70545: case OP_VOpen: {
70546: #if 0  /* local variables moved into u.cl */
70547:   VdbeCursor *pCur;
70548:   sqlite3_vtab_cursor *pVtabCursor;
70549:   sqlite3_vtab *pVtab;
70550:   sqlite3_module *pModule;
70551: #endif /* local variables moved into u.cl */
70552: 
70553:   u.cl.pCur = 0;
70554:   u.cl.pVtabCursor = 0;
70555:   u.cl.pVtab = pOp->p4.pVtab->pVtab;
70556:   u.cl.pModule = (sqlite3_module *)u.cl.pVtab->pModule;
70557:   assert(u.cl.pVtab && u.cl.pModule);
70558:   rc = u.cl.pModule->xOpen(u.cl.pVtab, &u.cl.pVtabCursor);
70559:   importVtabErrMsg(p, u.cl.pVtab);
70560:   if( SQLITE_OK==rc ){
70561:     /* Initialize sqlite3_vtab_cursor base class */
70562:     u.cl.pVtabCursor->pVtab = u.cl.pVtab;
70563: 
70564:     /* Initialise vdbe cursor object */
70565:     u.cl.pCur = allocateCursor(p, pOp->p1, 0, -1, 0);
70566:     if( u.cl.pCur ){
70567:       u.cl.pCur->pVtabCursor = u.cl.pVtabCursor;
70568:       u.cl.pCur->pModule = u.cl.pVtabCursor->pVtab->pModule;
70569:     }else{
70570:       db->mallocFailed = 1;
70571:       u.cl.pModule->xClose(u.cl.pVtabCursor);
70572:     }
70573:   }
70574:   break;
70575: }
70576: #endif /* SQLITE_OMIT_VIRTUALTABLE */
70577: 
70578: #ifndef SQLITE_OMIT_VIRTUALTABLE
70579: /* Opcode: VFilter P1 P2 P3 P4 *
70580: **
70581: ** P1 is a cursor opened using VOpen.  P2 is an address to jump to if
70582: ** the filtered result set is empty.
70583: **
70584: ** P4 is either NULL or a string that was generated by the xBestIndex
70585: ** method of the module.  The interpretation of the P4 string is left
70586: ** to the module implementation.
70587: **
70588: ** This opcode invokes the xFilter method on the virtual table specified
70589: ** by P1.  The integer query plan parameter to xFilter is stored in register
70590: ** P3. Register P3+1 stores the argc parameter to be passed to the
70591: ** xFilter method. Registers P3+2..P3+1+argc are the argc
70592: ** additional parameters which are passed to
70593: ** xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter.
70594: **
70595: ** A jump is made to P2 if the result set after filtering would be empty.
70596: */
70597: case OP_VFilter: {   /* jump */
70598: #if 0  /* local variables moved into u.cm */
70599:   int nArg;
70600:   int iQuery;
70601:   const sqlite3_module *pModule;
70602:   Mem *pQuery;
70603:   Mem *pArgc;
70604:   sqlite3_vtab_cursor *pVtabCursor;
70605:   sqlite3_vtab *pVtab;
70606:   VdbeCursor *pCur;
70607:   int res;
70608:   int i;
70609:   Mem **apArg;
70610: #endif /* local variables moved into u.cm */
70611: 
70612:   u.cm.pQuery = &aMem[pOp->p3];
70613:   u.cm.pArgc = &u.cm.pQuery[1];
70614:   u.cm.pCur = p->apCsr[pOp->p1];
70615:   assert( memIsValid(u.cm.pQuery) );
70616:   REGISTER_TRACE(pOp->p3, u.cm.pQuery);
70617:   assert( u.cm.pCur->pVtabCursor );
70618:   u.cm.pVtabCursor = u.cm.pCur->pVtabCursor;
70619:   u.cm.pVtab = u.cm.pVtabCursor->pVtab;
70620:   u.cm.pModule = u.cm.pVtab->pModule;
70621: 
70622:   /* Grab the index number and argc parameters */
70623:   assert( (u.cm.pQuery->flags&MEM_Int)!=0 && u.cm.pArgc->flags==MEM_Int );
70624:   u.cm.nArg = (int)u.cm.pArgc->u.i;
70625:   u.cm.iQuery = (int)u.cm.pQuery->u.i;
70626: 
70627:   /* Invoke the xFilter method */
70628:   {
70629:     u.cm.res = 0;
70630:     u.cm.apArg = p->apArg;
70631:     for(u.cm.i = 0; u.cm.i<u.cm.nArg; u.cm.i++){
70632:       u.cm.apArg[u.cm.i] = &u.cm.pArgc[u.cm.i+1];
70633:       sqlite3VdbeMemStoreType(u.cm.apArg[u.cm.i]);
70634:     }
70635: 
70636:     p->inVtabMethod = 1;
70637:     rc = u.cm.pModule->xFilter(u.cm.pVtabCursor, u.cm.iQuery, pOp->p4.z, u.cm.nArg, u.cm.apArg);
70638:     p->inVtabMethod = 0;
70639:     importVtabErrMsg(p, u.cm.pVtab);
70640:     if( rc==SQLITE_OK ){
70641:       u.cm.res = u.cm.pModule->xEof(u.cm.pVtabCursor);
70642:     }
70643: 
70644:     if( u.cm.res ){
70645:       pc = pOp->p2 - 1;
70646:     }
70647:   }
70648:   u.cm.pCur->nullRow = 0;
70649: 
70650:   break;
70651: }
70652: #endif /* SQLITE_OMIT_VIRTUALTABLE */
70653: 
70654: #ifndef SQLITE_OMIT_VIRTUALTABLE
70655: /* Opcode: VColumn P1 P2 P3 * *
70656: **
70657: ** Store the value of the P2-th column of
70658: ** the row of the virtual-table that the 
70659: ** P1 cursor is pointing to into register P3.
70660: */
70661: case OP_VColumn: {
70662: #if 0  /* local variables moved into u.cn */
70663:   sqlite3_vtab *pVtab;
70664:   const sqlite3_module *pModule;
70665:   Mem *pDest;
70666:   sqlite3_context sContext;
70667: #endif /* local variables moved into u.cn */
70668: 
70669:   VdbeCursor *pCur = p->apCsr[pOp->p1];
70670:   assert( pCur->pVtabCursor );
70671:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
70672:   u.cn.pDest = &aMem[pOp->p3];
70673:   memAboutToChange(p, u.cn.pDest);
70674:   if( pCur->nullRow ){
70675:     sqlite3VdbeMemSetNull(u.cn.pDest);
70676:     break;
70677:   }
70678:   u.cn.pVtab = pCur->pVtabCursor->pVtab;
70679:   u.cn.pModule = u.cn.pVtab->pModule;
70680:   assert( u.cn.pModule->xColumn );
70681:   memset(&u.cn.sContext, 0, sizeof(u.cn.sContext));
70682: 
70683:   /* The output cell may already have a buffer allocated. Move
70684:   ** the current contents to u.cn.sContext.s so in case the user-function
70685:   ** can use the already allocated buffer instead of allocating a
70686:   ** new one.
70687:   */
70688:   sqlite3VdbeMemMove(&u.cn.sContext.s, u.cn.pDest);
70689:   MemSetTypeFlag(&u.cn.sContext.s, MEM_Null);
70690: 
70691:   rc = u.cn.pModule->xColumn(pCur->pVtabCursor, &u.cn.sContext, pOp->p2);
70692:   importVtabErrMsg(p, u.cn.pVtab);
70693:   if( u.cn.sContext.isError ){
70694:     rc = u.cn.sContext.isError;
70695:   }
70696: 
70697:   /* Copy the result of the function to the P3 register. We
70698:   ** do this regardless of whether or not an error occurred to ensure any
70699:   ** dynamic allocation in u.cn.sContext.s (a Mem struct) is  released.
70700:   */
70701:   sqlite3VdbeChangeEncoding(&u.cn.sContext.s, encoding);
70702:   sqlite3VdbeMemMove(u.cn.pDest, &u.cn.sContext.s);
70703:   REGISTER_TRACE(pOp->p3, u.cn.pDest);
70704:   UPDATE_MAX_BLOBSIZE(u.cn.pDest);
70705: 
70706:   if( sqlite3VdbeMemTooBig(u.cn.pDest) ){
70707:     goto too_big;
70708:   }
70709:   break;
70710: }
70711: #endif /* SQLITE_OMIT_VIRTUALTABLE */
70712: 
70713: #ifndef SQLITE_OMIT_VIRTUALTABLE
70714: /* Opcode: VNext P1 P2 * * *
70715: **
70716: ** Advance virtual table P1 to the next row in its result set and
70717: ** jump to instruction P2.  Or, if the virtual table has reached
70718: ** the end of its result set, then fall through to the next instruction.
70719: */
70720: case OP_VNext: {   /* jump */
70721: #if 0  /* local variables moved into u.co */
70722:   sqlite3_vtab *pVtab;
70723:   const sqlite3_module *pModule;
70724:   int res;
70725:   VdbeCursor *pCur;
70726: #endif /* local variables moved into u.co */
70727: 
70728:   u.co.res = 0;
70729:   u.co.pCur = p->apCsr[pOp->p1];
70730:   assert( u.co.pCur->pVtabCursor );
70731:   if( u.co.pCur->nullRow ){
70732:     break;
70733:   }
70734:   u.co.pVtab = u.co.pCur->pVtabCursor->pVtab;
70735:   u.co.pModule = u.co.pVtab->pModule;
70736:   assert( u.co.pModule->xNext );
70737: 
70738:   /* Invoke the xNext() method of the module. There is no way for the
70739:   ** underlying implementation to return an error if one occurs during
70740:   ** xNext(). Instead, if an error occurs, true is returned (indicating that
70741:   ** data is available) and the error code returned when xColumn or
70742:   ** some other method is next invoked on the save virtual table cursor.
70743:   */
70744:   p->inVtabMethod = 1;
70745:   rc = u.co.pModule->xNext(u.co.pCur->pVtabCursor);
70746:   p->inVtabMethod = 0;
70747:   importVtabErrMsg(p, u.co.pVtab);
70748:   if( rc==SQLITE_OK ){
70749:     u.co.res = u.co.pModule->xEof(u.co.pCur->pVtabCursor);
70750:   }
70751: 
70752:   if( !u.co.res ){
70753:     /* If there is data, jump to P2 */
70754:     pc = pOp->p2 - 1;
70755:   }
70756:   break;
70757: }
70758: #endif /* SQLITE_OMIT_VIRTUALTABLE */
70759: 
70760: #ifndef SQLITE_OMIT_VIRTUALTABLE
70761: /* Opcode: VRename P1 * * P4 *
70762: **
70763: ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
70764: ** This opcode invokes the corresponding xRename method. The value
70765: ** in register P1 is passed as the zName argument to the xRename method.
70766: */
70767: case OP_VRename: {
70768: #if 0  /* local variables moved into u.cp */
70769:   sqlite3_vtab *pVtab;
70770:   Mem *pName;
70771: #endif /* local variables moved into u.cp */
70772: 
70773:   u.cp.pVtab = pOp->p4.pVtab->pVtab;
70774:   u.cp.pName = &aMem[pOp->p1];
70775:   assert( u.cp.pVtab->pModule->xRename );
70776:   assert( memIsValid(u.cp.pName) );
70777:   REGISTER_TRACE(pOp->p1, u.cp.pName);
70778:   assert( u.cp.pName->flags & MEM_Str );
70779:   testcase( u.cp.pName->enc==SQLITE_UTF8 );
70780:   testcase( u.cp.pName->enc==SQLITE_UTF16BE );
70781:   testcase( u.cp.pName->enc==SQLITE_UTF16LE );
70782:   rc = sqlite3VdbeChangeEncoding(u.cp.pName, SQLITE_UTF8);
70783:   if( rc==SQLITE_OK ){
70784:     rc = u.cp.pVtab->pModule->xRename(u.cp.pVtab, u.cp.pName->z);
70785:     importVtabErrMsg(p, u.cp.pVtab);
70786:     p->expired = 0;
70787:   }
70788:   break;
70789: }
70790: #endif
70791: 
70792: #ifndef SQLITE_OMIT_VIRTUALTABLE
70793: /* Opcode: VUpdate P1 P2 P3 P4 *
70794: **
70795: ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
70796: ** This opcode invokes the corresponding xUpdate method. P2 values
70797: ** are contiguous memory cells starting at P3 to pass to the xUpdate 
70798: ** invocation. The value in register (P3+P2-1) corresponds to the 
70799: ** p2th element of the argv array passed to xUpdate.
70800: **
70801: ** The xUpdate method will do a DELETE or an INSERT or both.
70802: ** The argv[0] element (which corresponds to memory cell P3)
70803: ** is the rowid of a row to delete.  If argv[0] is NULL then no 
70804: ** deletion occurs.  The argv[1] element is the rowid of the new 
70805: ** row.  This can be NULL to have the virtual table select the new 
70806: ** rowid for itself.  The subsequent elements in the array are 
70807: ** the values of columns in the new row.
70808: **
70809: ** If P2==1 then no insert is performed.  argv[0] is the rowid of
70810: ** a row to delete.
70811: **
70812: ** P1 is a boolean flag. If it is set to true and the xUpdate call
70813: ** is successful, then the value returned by sqlite3_last_insert_rowid() 
70814: ** is set to the value of the rowid for the row just inserted.
70815: */
70816: case OP_VUpdate: {
70817: #if 0  /* local variables moved into u.cq */
70818:   sqlite3_vtab *pVtab;
70819:   sqlite3_module *pModule;
70820:   int nArg;
70821:   int i;
70822:   sqlite_int64 rowid;
70823:   Mem **apArg;
70824:   Mem *pX;
70825: #endif /* local variables moved into u.cq */
70826: 
70827:   assert( pOp->p2==1        || pOp->p5==OE_Fail   || pOp->p5==OE_Rollback
70828:        || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace
70829:   );
70830:   u.cq.pVtab = pOp->p4.pVtab->pVtab;
70831:   u.cq.pModule = (sqlite3_module *)u.cq.pVtab->pModule;
70832:   u.cq.nArg = pOp->p2;
70833:   assert( pOp->p4type==P4_VTAB );
70834:   if( ALWAYS(u.cq.pModule->xUpdate) ){
70835:     u8 vtabOnConflict = db->vtabOnConflict;
70836:     u.cq.apArg = p->apArg;
70837:     u.cq.pX = &aMem[pOp->p3];
70838:     for(u.cq.i=0; u.cq.i<u.cq.nArg; u.cq.i++){
70839:       assert( memIsValid(u.cq.pX) );
70840:       memAboutToChange(p, u.cq.pX);
70841:       sqlite3VdbeMemStoreType(u.cq.pX);
70842:       u.cq.apArg[u.cq.i] = u.cq.pX;
70843:       u.cq.pX++;
70844:     }
70845:     db->vtabOnConflict = pOp->p5;
70846:     rc = u.cq.pModule->xUpdate(u.cq.pVtab, u.cq.nArg, u.cq.apArg, &u.cq.rowid);
70847:     db->vtabOnConflict = vtabOnConflict;
70848:     importVtabErrMsg(p, u.cq.pVtab);
70849:     if( rc==SQLITE_OK && pOp->p1 ){
70850:       assert( u.cq.nArg>1 && u.cq.apArg[0] && (u.cq.apArg[0]->flags&MEM_Null) );
70851:       db->lastRowid = lastRowid = u.cq.rowid;
70852:     }
70853:     if( rc==SQLITE_CONSTRAINT && pOp->p4.pVtab->bConstraint ){
70854:       if( pOp->p5==OE_Ignore ){
70855:         rc = SQLITE_OK;
70856:       }else{
70857:         p->errorAction = ((pOp->p5==OE_Replace) ? OE_Abort : pOp->p5);
70858:       }
70859:     }else{
70860:       p->nChange++;
70861:     }
70862:   }
70863:   break;
70864: }
70865: #endif /* SQLITE_OMIT_VIRTUALTABLE */
70866: 
70867: #ifndef  SQLITE_OMIT_PAGER_PRAGMAS
70868: /* Opcode: Pagecount P1 P2 * * *
70869: **
70870: ** Write the current number of pages in database P1 to memory cell P2.
70871: */
70872: case OP_Pagecount: {            /* out2-prerelease */
70873:   pOut->u.i = sqlite3BtreeLastPage(db->aDb[pOp->p1].pBt);
70874:   break;
70875: }
70876: #endif
70877: 
70878: 
70879: #ifndef  SQLITE_OMIT_PAGER_PRAGMAS
70880: /* Opcode: MaxPgcnt P1 P2 P3 * *
70881: **
70882: ** Try to set the maximum page count for database P1 to the value in P3.
70883: ** Do not let the maximum page count fall below the current page count and
70884: ** do not change the maximum page count value if P3==0.
70885: **
70886: ** Store the maximum page count after the change in register P2.
70887: */
70888: case OP_MaxPgcnt: {            /* out2-prerelease */
70889:   unsigned int newMax;
70890:   Btree *pBt;
70891: 
70892:   pBt = db->aDb[pOp->p1].pBt;
70893:   newMax = 0;
70894:   if( pOp->p3 ){
70895:     newMax = sqlite3BtreeLastPage(pBt);
70896:     if( newMax < (unsigned)pOp->p3 ) newMax = (unsigned)pOp->p3;
70897:   }
70898:   pOut->u.i = sqlite3BtreeMaxPageCount(pBt, newMax);
70899:   break;
70900: }
70901: #endif
70902: 
70903: 
70904: #ifndef SQLITE_OMIT_TRACE
70905: /* Opcode: Trace * * * P4 *
70906: **
70907: ** If tracing is enabled (by the sqlite3_trace()) interface, then
70908: ** the UTF-8 string contained in P4 is emitted on the trace callback.
70909: */
70910: case OP_Trace: {
70911: #if 0  /* local variables moved into u.cr */
70912:   char *zTrace;
70913:   char *z;
70914: #endif /* local variables moved into u.cr */
70915: 
70916:   if( db->xTrace && (u.cr.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 ){
70917:     u.cr.z = sqlite3VdbeExpandSql(p, u.cr.zTrace);
70918:     db->xTrace(db->pTraceArg, u.cr.z);
70919:     sqlite3DbFree(db, u.cr.z);
70920:   }
70921: #ifdef SQLITE_DEBUG
70922:   if( (db->flags & SQLITE_SqlTrace)!=0
70923:    && (u.cr.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0
70924:   ){
70925:     sqlite3DebugPrintf("SQL-trace: %s\n", u.cr.zTrace);
70926:   }
70927: #endif /* SQLITE_DEBUG */
70928:   break;
70929: }
70930: #endif
70931: 
70932: 
70933: /* Opcode: Noop * * * * *
70934: **
70935: ** Do nothing.  This instruction is often useful as a jump
70936: ** destination.
70937: */
70938: /*
70939: ** The magic Explain opcode are only inserted when explain==2 (which
70940: ** is to say when the EXPLAIN QUERY PLAN syntax is used.)
70941: ** This opcode records information from the optimizer.  It is the
70942: ** the same as a no-op.  This opcodesnever appears in a real VM program.
70943: */
70944: default: {          /* This is really OP_Noop and OP_Explain */
70945:   assert( pOp->opcode==OP_Noop || pOp->opcode==OP_Explain );
70946:   break;
70947: }
70948: 
70949: /*****************************************************************************
70950: ** The cases of the switch statement above this line should all be indented
70951: ** by 6 spaces.  But the left-most 6 spaces have been removed to improve the
70952: ** readability.  From this point on down, the normal indentation rules are
70953: ** restored.
70954: *****************************************************************************/
70955:     }
70956: 
70957: #ifdef VDBE_PROFILE
70958:     {
70959:       u64 elapsed = sqlite3Hwtime() - start;
70960:       pOp->cycles += elapsed;
70961:       pOp->cnt++;
70962: #if 0
70963:         fprintf(stdout, "%10llu ", elapsed);
70964:         sqlite3VdbePrintOp(stdout, origPc, &aOp[origPc]);
70965: #endif
70966:     }
70967: #endif
70968: 
70969:     /* The following code adds nothing to the actual functionality
70970:     ** of the program.  It is only here for testing and debugging.
70971:     ** On the other hand, it does burn CPU cycles every time through
70972:     ** the evaluator loop.  So we can leave it out when NDEBUG is defined.
70973:     */
70974: #ifndef NDEBUG
70975:     assert( pc>=-1 && pc<p->nOp );
70976: 
70977: #ifdef SQLITE_DEBUG
70978:     if( p->trace ){
70979:       if( rc!=0 ) fprintf(p->trace,"rc=%d\n",rc);
70980:       if( pOp->opflags & (OPFLG_OUT2_PRERELEASE|OPFLG_OUT2) ){
70981:         registerTrace(p->trace, pOp->p2, &aMem[pOp->p2]);
70982:       }
70983:       if( pOp->opflags & OPFLG_OUT3 ){
70984:         registerTrace(p->trace, pOp->p3, &aMem[pOp->p3]);
70985:       }
70986:     }
70987: #endif  /* SQLITE_DEBUG */
70988: #endif  /* NDEBUG */
70989:   }  /* The end of the for(;;) loop the loops through opcodes */
70990: 
70991:   /* If we reach this point, it means that execution is finished with
70992:   ** an error of some kind.
70993:   */
70994: vdbe_error_halt:
70995:   assert( rc );
70996:   p->rc = rc;
70997:   testcase( sqlite3GlobalConfig.xLog!=0 );
70998:   sqlite3_log(rc, "statement aborts at %d: [%s] %s", 
70999:                    pc, p->zSql, p->zErrMsg);
71000:   sqlite3VdbeHalt(p);
71001:   if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1;
71002:   rc = SQLITE_ERROR;
71003:   if( resetSchemaOnFault>0 ){
71004:     sqlite3ResetInternalSchema(db, resetSchemaOnFault-1);
71005:   }
71006: 
71007:   /* This is the only way out of this procedure.  We have to
71008:   ** release the mutexes on btrees that were acquired at the
71009:   ** top. */
71010: vdbe_return:
71011:   db->lastRowid = lastRowid;
71012:   sqlite3VdbeLeave(p);
71013:   return rc;
71014: 
71015:   /* Jump to here if a string or blob larger than SQLITE_MAX_LENGTH
71016:   ** is encountered.
71017:   */
71018: too_big:
71019:   sqlite3SetString(&p->zErrMsg, db, "string or blob too big");
71020:   rc = SQLITE_TOOBIG;
71021:   goto vdbe_error_halt;
71022: 
71023:   /* Jump to here if a malloc() fails.
71024:   */
71025: no_mem:
71026:   db->mallocFailed = 1;
71027:   sqlite3SetString(&p->zErrMsg, db, "out of memory");
71028:   rc = SQLITE_NOMEM;
71029:   goto vdbe_error_halt;
71030: 
71031:   /* Jump to here for any other kind of fatal error.  The "rc" variable
71032:   ** should hold the error number.
71033:   */
71034: abort_due_to_error:
71035:   assert( p->zErrMsg==0 );
71036:   if( db->mallocFailed ) rc = SQLITE_NOMEM;
71037:   if( rc!=SQLITE_IOERR_NOMEM ){
71038:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
71039:   }
71040:   goto vdbe_error_halt;
71041: 
71042:   /* Jump to here if the sqlite3_interrupt() API sets the interrupt
71043:   ** flag.
71044:   */
71045: abort_due_to_interrupt:
71046:   assert( db->u1.isInterrupted );
71047:   rc = SQLITE_INTERRUPT;
71048:   p->rc = rc;
71049:   sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
71050:   goto vdbe_error_halt;
71051: }
71052: 
71053: /************** End of vdbe.c ************************************************/
71054: /************** Begin file vdbeblob.c ****************************************/
71055: /*
71056: ** 2007 May 1
71057: **
71058: ** The author disclaims copyright to this source code.  In place of
71059: ** a legal notice, here is a blessing:
71060: **
71061: **    May you do good and not evil.
71062: **    May you find forgiveness for yourself and forgive others.
71063: **    May you share freely, never taking more than you give.
71064: **
71065: *************************************************************************
71066: **
71067: ** This file contains code used to implement incremental BLOB I/O.
71068: */
71069: 
71070: 
71071: #ifndef SQLITE_OMIT_INCRBLOB
71072: 
71073: /*
71074: ** Valid sqlite3_blob* handles point to Incrblob structures.
71075: */
71076: typedef struct Incrblob Incrblob;
71077: struct Incrblob {
71078:   int flags;              /* Copy of "flags" passed to sqlite3_blob_open() */
71079:   int nByte;              /* Size of open blob, in bytes */
71080:   int iOffset;            /* Byte offset of blob in cursor data */
71081:   int iCol;               /* Table column this handle is open on */
71082:   BtCursor *pCsr;         /* Cursor pointing at blob row */
71083:   sqlite3_stmt *pStmt;    /* Statement holding cursor open */
71084:   sqlite3 *db;            /* The associated database */
71085: };
71086: 
71087: 
71088: /*
71089: ** This function is used by both blob_open() and blob_reopen(). It seeks
71090: ** the b-tree cursor associated with blob handle p to point to row iRow.
71091: ** If successful, SQLITE_OK is returned and subsequent calls to
71092: ** sqlite3_blob_read() or sqlite3_blob_write() access the specified row.
71093: **
71094: ** If an error occurs, or if the specified row does not exist or does not
71095: ** contain a value of type TEXT or BLOB in the column nominated when the
71096: ** blob handle was opened, then an error code is returned and *pzErr may
71097: ** be set to point to a buffer containing an error message. It is the
71098: ** responsibility of the caller to free the error message buffer using
71099: ** sqlite3DbFree().
71100: **
71101: ** If an error does occur, then the b-tree cursor is closed. All subsequent
71102: ** calls to sqlite3_blob_read(), blob_write() or blob_reopen() will 
71103: ** immediately return SQLITE_ABORT.
71104: */
71105: static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){
71106:   int rc;                         /* Error code */
71107:   char *zErr = 0;                 /* Error message */
71108:   Vdbe *v = (Vdbe *)p->pStmt;
71109: 
71110:   /* Set the value of the SQL statements only variable to integer iRow. 
71111:   ** This is done directly instead of using sqlite3_bind_int64() to avoid 
71112:   ** triggering asserts related to mutexes.
71113:   */
71114:   assert( v->aVar[0].flags&MEM_Int );
71115:   v->aVar[0].u.i = iRow;
71116: 
71117:   rc = sqlite3_step(p->pStmt);
71118:   if( rc==SQLITE_ROW ){
71119:     u32 type = v->apCsr[0]->aType[p->iCol];
71120:     if( type<12 ){
71121:       zErr = sqlite3MPrintf(p->db, "cannot open value of type %s",
71122:           type==0?"null": type==7?"real": "integer"
71123:       );
71124:       rc = SQLITE_ERROR;
71125:       sqlite3_finalize(p->pStmt);
71126:       p->pStmt = 0;
71127:     }else{
71128:       p->iOffset = v->apCsr[0]->aOffset[p->iCol];
71129:       p->nByte = sqlite3VdbeSerialTypeLen(type);
71130:       p->pCsr =  v->apCsr[0]->pCursor;
71131:       sqlite3BtreeEnterCursor(p->pCsr);
71132:       sqlite3BtreeCacheOverflow(p->pCsr);
71133:       sqlite3BtreeLeaveCursor(p->pCsr);
71134:     }
71135:   }
71136: 
71137:   if( rc==SQLITE_ROW ){
71138:     rc = SQLITE_OK;
71139:   }else if( p->pStmt ){
71140:     rc = sqlite3_finalize(p->pStmt);
71141:     p->pStmt = 0;
71142:     if( rc==SQLITE_OK ){
71143:       zErr = sqlite3MPrintf(p->db, "no such rowid: %lld", iRow);
71144:       rc = SQLITE_ERROR;
71145:     }else{
71146:       zErr = sqlite3MPrintf(p->db, "%s", sqlite3_errmsg(p->db));
71147:     }
71148:   }
71149: 
71150:   assert( rc!=SQLITE_OK || zErr==0 );
71151:   assert( rc!=SQLITE_ROW && rc!=SQLITE_DONE );
71152: 
71153:   *pzErr = zErr;
71154:   return rc;
71155: }
71156: 
71157: /*
71158: ** Open a blob handle.
71159: */
71160: SQLITE_API int sqlite3_blob_open(
71161:   sqlite3* db,            /* The database connection */
71162:   const char *zDb,        /* The attached database containing the blob */
71163:   const char *zTable,     /* The table containing the blob */
71164:   const char *zColumn,    /* The column containing the blob */
71165:   sqlite_int64 iRow,      /* The row containing the glob */
71166:   int flags,              /* True -> read/write access, false -> read-only */
71167:   sqlite3_blob **ppBlob   /* Handle for accessing the blob returned here */
71168: ){
71169:   int nAttempt = 0;
71170:   int iCol;               /* Index of zColumn in row-record */
71171: 
71172:   /* This VDBE program seeks a btree cursor to the identified 
71173:   ** db/table/row entry. The reason for using a vdbe program instead
71174:   ** of writing code to use the b-tree layer directly is that the
71175:   ** vdbe program will take advantage of the various transaction,
71176:   ** locking and error handling infrastructure built into the vdbe.
71177:   **
71178:   ** After seeking the cursor, the vdbe executes an OP_ResultRow.
71179:   ** Code external to the Vdbe then "borrows" the b-tree cursor and
71180:   ** uses it to implement the blob_read(), blob_write() and 
71181:   ** blob_bytes() functions.
71182:   **
71183:   ** The sqlite3_blob_close() function finalizes the vdbe program,
71184:   ** which closes the b-tree cursor and (possibly) commits the 
71185:   ** transaction.
71186:   */
71187:   static const VdbeOpList openBlob[] = {
71188:     {OP_Transaction, 0, 0, 0},     /* 0: Start a transaction */
71189:     {OP_VerifyCookie, 0, 0, 0},    /* 1: Check the schema cookie */
71190:     {OP_TableLock, 0, 0, 0},       /* 2: Acquire a read or write lock */
71191: 
71192:     /* One of the following two instructions is replaced by an OP_Noop. */
71193:     {OP_OpenRead, 0, 0, 0},        /* 3: Open cursor 0 for reading */
71194:     {OP_OpenWrite, 0, 0, 0},       /* 4: Open cursor 0 for read/write */
71195: 
71196:     {OP_Variable, 1, 1, 1},        /* 5: Push the rowid to the stack */
71197:     {OP_NotExists, 0, 10, 1},      /* 6: Seek the cursor */
71198:     {OP_Column, 0, 0, 1},          /* 7  */
71199:     {OP_ResultRow, 1, 0, 0},       /* 8  */
71200:     {OP_Goto, 0, 5, 0},            /* 9  */
71201:     {OP_Close, 0, 0, 0},           /* 10 */
71202:     {OP_Halt, 0, 0, 0},            /* 11 */
71203:   };
71204: 
71205:   int rc = SQLITE_OK;
71206:   char *zErr = 0;
71207:   Table *pTab;
71208:   Parse *pParse = 0;
71209:   Incrblob *pBlob = 0;
71210: 
71211:   flags = !!flags;                /* flags = (flags ? 1 : 0); */
71212:   *ppBlob = 0;
71213: 
71214:   sqlite3_mutex_enter(db->mutex);
71215: 
71216:   pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob));
71217:   if( !pBlob ) goto blob_open_out;
71218:   pParse = sqlite3StackAllocRaw(db, sizeof(*pParse));
71219:   if( !pParse ) goto blob_open_out;
71220: 
71221:   do {
71222:     memset(pParse, 0, sizeof(Parse));
71223:     pParse->db = db;
71224:     sqlite3DbFree(db, zErr);
71225:     zErr = 0;
71226: 
71227:     sqlite3BtreeEnterAll(db);
71228:     pTab = sqlite3LocateTable(pParse, 0, zTable, zDb);
71229:     if( pTab && IsVirtual(pTab) ){
71230:       pTab = 0;
71231:       sqlite3ErrorMsg(pParse, "cannot open virtual table: %s", zTable);
71232:     }
71233: #ifndef SQLITE_OMIT_VIEW
71234:     if( pTab && pTab->pSelect ){
71235:       pTab = 0;
71236:       sqlite3ErrorMsg(pParse, "cannot open view: %s", zTable);
71237:     }
71238: #endif
71239:     if( !pTab ){
71240:       if( pParse->zErrMsg ){
71241:         sqlite3DbFree(db, zErr);
71242:         zErr = pParse->zErrMsg;
71243:         pParse->zErrMsg = 0;
71244:       }
71245:       rc = SQLITE_ERROR;
71246:       sqlite3BtreeLeaveAll(db);
71247:       goto blob_open_out;
71248:     }
71249: 
71250:     /* Now search pTab for the exact column. */
71251:     for(iCol=0; iCol<pTab->nCol; iCol++) {
71252:       if( sqlite3StrICmp(pTab->aCol[iCol].zName, zColumn)==0 ){
71253:         break;
71254:       }
71255:     }
71256:     if( iCol==pTab->nCol ){
71257:       sqlite3DbFree(db, zErr);
71258:       zErr = sqlite3MPrintf(db, "no such column: \"%s\"", zColumn);
71259:       rc = SQLITE_ERROR;
71260:       sqlite3BtreeLeaveAll(db);
71261:       goto blob_open_out;
71262:     }
71263: 
71264:     /* If the value is being opened for writing, check that the
71265:     ** column is not indexed, and that it is not part of a foreign key. 
71266:     ** It is against the rules to open a column to which either of these
71267:     ** descriptions applies for writing.  */
71268:     if( flags ){
71269:       const char *zFault = 0;
71270:       Index *pIdx;
71271: #ifndef SQLITE_OMIT_FOREIGN_KEY
71272:       if( db->flags&SQLITE_ForeignKeys ){
71273:         /* Check that the column is not part of an FK child key definition. It
71274:         ** is not necessary to check if it is part of a parent key, as parent
71275:         ** key columns must be indexed. The check below will pick up this 
71276:         ** case.  */
71277:         FKey *pFKey;
71278:         for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){
71279:           int j;
71280:           for(j=0; j<pFKey->nCol; j++){
71281:             if( pFKey->aCol[j].iFrom==iCol ){
71282:               zFault = "foreign key";
71283:             }
71284:           }
71285:         }
71286:       }
71287: #endif
71288:       for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
71289:         int j;
71290:         for(j=0; j<pIdx->nColumn; j++){
71291:           if( pIdx->aiColumn[j]==iCol ){
71292:             zFault = "indexed";
71293:           }
71294:         }
71295:       }
71296:       if( zFault ){
71297:         sqlite3DbFree(db, zErr);
71298:         zErr = sqlite3MPrintf(db, "cannot open %s column for writing", zFault);
71299:         rc = SQLITE_ERROR;
71300:         sqlite3BtreeLeaveAll(db);
71301:         goto blob_open_out;
71302:       }
71303:     }
71304: 
71305:     pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(db);
71306:     assert( pBlob->pStmt || db->mallocFailed );
71307:     if( pBlob->pStmt ){
71308:       Vdbe *v = (Vdbe *)pBlob->pStmt;
71309:       int iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
71310: 
71311:       sqlite3VdbeAddOpList(v, sizeof(openBlob)/sizeof(VdbeOpList), openBlob);
71312: 
71313: 
71314:       /* Configure the OP_Transaction */
71315:       sqlite3VdbeChangeP1(v, 0, iDb);
71316:       sqlite3VdbeChangeP2(v, 0, flags);
71317: 
71318:       /* Configure the OP_VerifyCookie */
71319:       sqlite3VdbeChangeP1(v, 1, iDb);
71320:       sqlite3VdbeChangeP2(v, 1, pTab->pSchema->schema_cookie);
71321:       sqlite3VdbeChangeP3(v, 1, pTab->pSchema->iGeneration);
71322: 
71323:       /* Make sure a mutex is held on the table to be accessed */
71324:       sqlite3VdbeUsesBtree(v, iDb); 
71325: 
71326:       /* Configure the OP_TableLock instruction */
71327: #ifdef SQLITE_OMIT_SHARED_CACHE
71328:       sqlite3VdbeChangeToNoop(v, 2);
71329: #else
71330:       sqlite3VdbeChangeP1(v, 2, iDb);
71331:       sqlite3VdbeChangeP2(v, 2, pTab->tnum);
71332:       sqlite3VdbeChangeP3(v, 2, flags);
71333:       sqlite3VdbeChangeP4(v, 2, pTab->zName, P4_TRANSIENT);
71334: #endif
71335: 
71336:       /* Remove either the OP_OpenWrite or OpenRead. Set the P2 
71337:       ** parameter of the other to pTab->tnum.  */
71338:       sqlite3VdbeChangeToNoop(v, 4 - flags);
71339:       sqlite3VdbeChangeP2(v, 3 + flags, pTab->tnum);
71340:       sqlite3VdbeChangeP3(v, 3 + flags, iDb);
71341: 
71342:       /* Configure the number of columns. Configure the cursor to
71343:       ** think that the table has one more column than it really
71344:       ** does. An OP_Column to retrieve this imaginary column will
71345:       ** always return an SQL NULL. This is useful because it means
71346:       ** we can invoke OP_Column to fill in the vdbe cursors type 
71347:       ** and offset cache without causing any IO.
71348:       */
71349:       sqlite3VdbeChangeP4(v, 3+flags, SQLITE_INT_TO_PTR(pTab->nCol+1),P4_INT32);
71350:       sqlite3VdbeChangeP2(v, 7, pTab->nCol);
71351:       if( !db->mallocFailed ){
71352:         pParse->nVar = 1;
71353:         pParse->nMem = 1;
71354:         pParse->nTab = 1;
71355:         sqlite3VdbeMakeReady(v, pParse);
71356:       }
71357:     }
71358:    
71359:     pBlob->flags = flags;
71360:     pBlob->iCol = iCol;
71361:     pBlob->db = db;
71362:     sqlite3BtreeLeaveAll(db);
71363:     if( db->mallocFailed ){
71364:       goto blob_open_out;
71365:     }
71366:     sqlite3_bind_int64(pBlob->pStmt, 1, iRow);
71367:     rc = blobSeekToRow(pBlob, iRow, &zErr);
71368:   } while( (++nAttempt)<5 && rc==SQLITE_SCHEMA );
71369: 
71370: blob_open_out:
71371:   if( rc==SQLITE_OK && db->mallocFailed==0 ){
71372:     *ppBlob = (sqlite3_blob *)pBlob;
71373:   }else{
71374:     if( pBlob && pBlob->pStmt ) sqlite3VdbeFinalize((Vdbe *)pBlob->pStmt);
71375:     sqlite3DbFree(db, pBlob);
71376:   }
71377:   sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
71378:   sqlite3DbFree(db, zErr);
71379:   sqlite3StackFree(db, pParse);
71380:   rc = sqlite3ApiExit(db, rc);
71381:   sqlite3_mutex_leave(db->mutex);
71382:   return rc;
71383: }
71384: 
71385: /*
71386: ** Close a blob handle that was previously created using
71387: ** sqlite3_blob_open().
71388: */
71389: SQLITE_API int sqlite3_blob_close(sqlite3_blob *pBlob){
71390:   Incrblob *p = (Incrblob *)pBlob;
71391:   int rc;
71392:   sqlite3 *db;
71393: 
71394:   if( p ){
71395:     db = p->db;
71396:     sqlite3_mutex_enter(db->mutex);
71397:     rc = sqlite3_finalize(p->pStmt);
71398:     sqlite3DbFree(db, p);
71399:     sqlite3_mutex_leave(db->mutex);
71400:   }else{
71401:     rc = SQLITE_OK;
71402:   }
71403:   return rc;
71404: }
71405: 
71406: /*
71407: ** Perform a read or write operation on a blob
71408: */
71409: static int blobReadWrite(
71410:   sqlite3_blob *pBlob, 
71411:   void *z, 
71412:   int n, 
71413:   int iOffset, 
71414:   int (*xCall)(BtCursor*, u32, u32, void*)
71415: ){
71416:   int rc;
71417:   Incrblob *p = (Incrblob *)pBlob;
71418:   Vdbe *v;
71419:   sqlite3 *db;
71420: 
71421:   if( p==0 ) return SQLITE_MISUSE_BKPT;
71422:   db = p->db;
71423:   sqlite3_mutex_enter(db->mutex);
71424:   v = (Vdbe*)p->pStmt;
71425: 
71426:   if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){
71427:     /* Request is out of range. Return a transient error. */
71428:     rc = SQLITE_ERROR;
71429:     sqlite3Error(db, SQLITE_ERROR, 0);
71430:   }else if( v==0 ){
71431:     /* If there is no statement handle, then the blob-handle has
71432:     ** already been invalidated. Return SQLITE_ABORT in this case.
71433:     */
71434:     rc = SQLITE_ABORT;
71435:   }else{
71436:     /* Call either BtreeData() or BtreePutData(). If SQLITE_ABORT is
71437:     ** returned, clean-up the statement handle.
71438:     */
71439:     assert( db == v->db );
71440:     sqlite3BtreeEnterCursor(p->pCsr);
71441:     rc = xCall(p->pCsr, iOffset+p->iOffset, n, z);
71442:     sqlite3BtreeLeaveCursor(p->pCsr);
71443:     if( rc==SQLITE_ABORT ){
71444:       sqlite3VdbeFinalize(v);
71445:       p->pStmt = 0;
71446:     }else{
71447:       db->errCode = rc;
71448:       v->rc = rc;
71449:     }
71450:   }
71451:   rc = sqlite3ApiExit(db, rc);
71452:   sqlite3_mutex_leave(db->mutex);
71453:   return rc;
71454: }
71455: 
71456: /*
71457: ** Read data from a blob handle.
71458: */
71459: SQLITE_API int sqlite3_blob_read(sqlite3_blob *pBlob, void *z, int n, int iOffset){
71460:   return blobReadWrite(pBlob, z, n, iOffset, sqlite3BtreeData);
71461: }
71462: 
71463: /*
71464: ** Write data to a blob handle.
71465: */
71466: SQLITE_API int sqlite3_blob_write(sqlite3_blob *pBlob, const void *z, int n, int iOffset){
71467:   return blobReadWrite(pBlob, (void *)z, n, iOffset, sqlite3BtreePutData);
71468: }
71469: 
71470: /*
71471: ** Query a blob handle for the size of the data.
71472: **
71473: ** The Incrblob.nByte field is fixed for the lifetime of the Incrblob
71474: ** so no mutex is required for access.
71475: */
71476: SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *pBlob){
71477:   Incrblob *p = (Incrblob *)pBlob;
71478:   return (p && p->pStmt) ? p->nByte : 0;
71479: }
71480: 
71481: /*
71482: ** Move an existing blob handle to point to a different row of the same
71483: ** database table.
71484: **
71485: ** If an error occurs, or if the specified row does not exist or does not
71486: ** contain a blob or text value, then an error code is returned and the
71487: ** database handle error code and message set. If this happens, then all 
71488: ** subsequent calls to sqlite3_blob_xxx() functions (except blob_close()) 
71489: ** immediately return SQLITE_ABORT.
71490: */
71491: SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){
71492:   int rc;
71493:   Incrblob *p = (Incrblob *)pBlob;
71494:   sqlite3 *db;
71495: 
71496:   if( p==0 ) return SQLITE_MISUSE_BKPT;
71497:   db = p->db;
71498:   sqlite3_mutex_enter(db->mutex);
71499: 
71500:   if( p->pStmt==0 ){
71501:     /* If there is no statement handle, then the blob-handle has
71502:     ** already been invalidated. Return SQLITE_ABORT in this case.
71503:     */
71504:     rc = SQLITE_ABORT;
71505:   }else{
71506:     char *zErr;
71507:     rc = blobSeekToRow(p, iRow, &zErr);
71508:     if( rc!=SQLITE_OK ){
71509:       sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
71510:       sqlite3DbFree(db, zErr);
71511:     }
71512:     assert( rc!=SQLITE_SCHEMA );
71513:   }
71514: 
71515:   rc = sqlite3ApiExit(db, rc);
71516:   assert( rc==SQLITE_OK || p->pStmt==0 );
71517:   sqlite3_mutex_leave(db->mutex);
71518:   return rc;
71519: }
71520: 
71521: #endif /* #ifndef SQLITE_OMIT_INCRBLOB */
71522: 
71523: /************** End of vdbeblob.c ********************************************/
71524: /************** Begin file vdbesort.c ****************************************/
71525: /*
71526: ** 2011 July 9
71527: **
71528: ** The author disclaims copyright to this source code.  In place of
71529: ** a legal notice, here is a blessing:
71530: **
71531: **    May you do good and not evil.
71532: **    May you find forgiveness for yourself and forgive others.
71533: **    May you share freely, never taking more than you give.
71534: **
71535: *************************************************************************
71536: ** This file contains code for the VdbeSorter object, used in concert with
71537: ** a VdbeCursor to sort large numbers of keys (as may be required, for
71538: ** example, by CREATE INDEX statements on tables too large to fit in main
71539: ** memory).
71540: */
71541: 
71542: 
71543: #ifndef SQLITE_OMIT_MERGE_SORT
71544: 
71545: typedef struct VdbeSorterIter VdbeSorterIter;
71546: typedef struct SorterRecord SorterRecord;
71547: 
71548: /*
71549: ** NOTES ON DATA STRUCTURE USED FOR N-WAY MERGES:
71550: **
71551: ** As keys are added to the sorter, they are written to disk in a series
71552: ** of sorted packed-memory-arrays (PMAs). The size of each PMA is roughly
71553: ** the same as the cache-size allowed for temporary databases. In order
71554: ** to allow the caller to extract keys from the sorter in sorted order,
71555: ** all PMAs currently stored on disk must be merged together. This comment
71556: ** describes the data structure used to do so. The structure supports 
71557: ** merging any number of arrays in a single pass with no redundant comparison 
71558: ** operations.
71559: **
71560: ** The aIter[] array contains an iterator for each of the PMAs being merged.
71561: ** An aIter[] iterator either points to a valid key or else is at EOF. For 
71562: ** the purposes of the paragraphs below, we assume that the array is actually 
71563: ** N elements in size, where N is the smallest power of 2 greater to or equal 
71564: ** to the number of iterators being merged. The extra aIter[] elements are 
71565: ** treated as if they are empty (always at EOF).
71566: **
71567: ** The aTree[] array is also N elements in size. The value of N is stored in
71568: ** the VdbeSorter.nTree variable.
71569: **
71570: ** The final (N/2) elements of aTree[] contain the results of comparing
71571: ** pairs of iterator keys together. Element i contains the result of 
71572: ** comparing aIter[2*i-N] and aIter[2*i-N+1]. Whichever key is smaller, the
71573: ** aTree element is set to the index of it. 
71574: **
71575: ** For the purposes of this comparison, EOF is considered greater than any
71576: ** other key value. If the keys are equal (only possible with two EOF
71577: ** values), it doesn't matter which index is stored.
71578: **
71579: ** The (N/4) elements of aTree[] that preceed the final (N/2) described 
71580: ** above contains the index of the smallest of each block of 4 iterators.
71581: ** And so on. So that aTree[1] contains the index of the iterator that 
71582: ** currently points to the smallest key value. aTree[0] is unused.
71583: **
71584: ** Example:
71585: **
71586: **     aIter[0] -> Banana
71587: **     aIter[1] -> Feijoa
71588: **     aIter[2] -> Elderberry
71589: **     aIter[3] -> Currant
71590: **     aIter[4] -> Grapefruit
71591: **     aIter[5] -> Apple
71592: **     aIter[6] -> Durian
71593: **     aIter[7] -> EOF
71594: **
71595: **     aTree[] = { X, 5   0, 5    0, 3, 5, 6 }
71596: **
71597: ** The current element is "Apple" (the value of the key indicated by 
71598: ** iterator 5). When the Next() operation is invoked, iterator 5 will
71599: ** be advanced to the next key in its segment. Say the next key is
71600: ** "Eggplant":
71601: **
71602: **     aIter[5] -> Eggplant
71603: **
71604: ** The contents of aTree[] are updated first by comparing the new iterator
71605: ** 5 key to the current key of iterator 4 (still "Grapefruit"). The iterator
71606: ** 5 value is still smaller, so aTree[6] is set to 5. And so on up the tree.
71607: ** The value of iterator 6 - "Durian" - is now smaller than that of iterator
71608: ** 5, so aTree[3] is set to 6. Key 0 is smaller than key 6 (Banana<Durian),
71609: ** so the value written into element 1 of the array is 0. As follows:
71610: **
71611: **     aTree[] = { X, 0   0, 6    0, 3, 5, 6 }
71612: **
71613: ** In other words, each time we advance to the next sorter element, log2(N)
71614: ** key comparison operations are required, where N is the number of segments
71615: ** being merged (rounded up to the next power of 2).
71616: */
71617: struct VdbeSorter {
71618:   int nInMemory;                  /* Current size of pRecord list as PMA */
71619:   int nTree;                      /* Used size of aTree/aIter (power of 2) */
71620:   VdbeSorterIter *aIter;          /* Array of iterators to merge */
71621:   int *aTree;                     /* Current state of incremental merge */
71622:   i64 iWriteOff;                  /* Current write offset within file pTemp1 */
71623:   i64 iReadOff;                   /* Current read offset within file pTemp1 */
71624:   sqlite3_file *pTemp1;           /* PMA file 1 */
71625:   int nPMA;                       /* Number of PMAs stored in pTemp1 */
71626:   SorterRecord *pRecord;          /* Head of in-memory record list */
71627:   int mnPmaSize;                  /* Minimum PMA size, in bytes */
71628:   int mxPmaSize;                  /* Maximum PMA size, in bytes.  0==no limit */
71629:   UnpackedRecord *pUnpacked;      /* Used to unpack keys */
71630: };
71631: 
71632: /*
71633: ** The following type is an iterator for a PMA. It caches the current key in 
71634: ** variables nKey/aKey. If the iterator is at EOF, pFile==0.
71635: */
71636: struct VdbeSorterIter {
71637:   i64 iReadOff;                   /* Current read offset */
71638:   i64 iEof;                       /* 1 byte past EOF for this iterator */
71639:   sqlite3_file *pFile;            /* File iterator is reading from */
71640:   int nAlloc;                     /* Bytes of space at aAlloc */
71641:   u8 *aAlloc;                     /* Allocated space */
71642:   int nKey;                       /* Number of bytes in key */
71643:   u8 *aKey;                       /* Pointer to current key */
71644: };
71645: 
71646: /*
71647: ** A structure to store a single record. All in-memory records are connected
71648: ** together into a linked list headed at VdbeSorter.pRecord using the 
71649: ** SorterRecord.pNext pointer.
71650: */
71651: struct SorterRecord {
71652:   void *pVal;
71653:   int nVal;
71654:   SorterRecord *pNext;
71655: };
71656: 
71657: /* Minimum allowable value for the VdbeSorter.nWorking variable */
71658: #define SORTER_MIN_WORKING 10
71659: 
71660: /* Maximum number of segments to merge in a single pass. */
71661: #define SORTER_MAX_MERGE_COUNT 16
71662: 
71663: /*
71664: ** Free all memory belonging to the VdbeSorterIter object passed as the second
71665: ** argument. All structure fields are set to zero before returning.
71666: */
71667: static void vdbeSorterIterZero(sqlite3 *db, VdbeSorterIter *pIter){
71668:   sqlite3DbFree(db, pIter->aAlloc);
71669:   memset(pIter, 0, sizeof(VdbeSorterIter));
71670: }
71671: 
71672: /*
71673: ** Advance iterator pIter to the next key in its PMA. Return SQLITE_OK if
71674: ** no error occurs, or an SQLite error code if one does.
71675: */
71676: static int vdbeSorterIterNext(
71677:   sqlite3 *db,                    /* Database handle (for sqlite3DbMalloc() ) */
71678:   VdbeSorterIter *pIter           /* Iterator to advance */
71679: ){
71680:   int rc;                         /* Return Code */
71681:   int nRead;                      /* Number of bytes read */
71682:   int nRec = 0;                   /* Size of record in bytes */
71683:   int iOff = 0;                   /* Size of serialized size varint in bytes */
71684: 
71685:   assert( pIter->iEof>=pIter->iReadOff );
71686:   if( pIter->iEof-pIter->iReadOff>5 ){
71687:     nRead = 5;
71688:   }else{
71689:     nRead = (int)(pIter->iEof - pIter->iReadOff);
71690:   }
71691:   if( nRead<=0 ){
71692:     /* This is an EOF condition */
71693:     vdbeSorterIterZero(db, pIter);
71694:     return SQLITE_OK;
71695:   }
71696: 
71697:   rc = sqlite3OsRead(pIter->pFile, pIter->aAlloc, nRead, pIter->iReadOff);
71698:   if( rc==SQLITE_OK ){
71699:     iOff = getVarint32(pIter->aAlloc, nRec);
71700:     if( (iOff+nRec)>nRead ){
71701:       int nRead2;                   /* Number of extra bytes to read */
71702:       if( (iOff+nRec)>pIter->nAlloc ){
71703:         int nNew = pIter->nAlloc*2;
71704:         while( (iOff+nRec)>nNew ) nNew = nNew*2;
71705:         pIter->aAlloc = sqlite3DbReallocOrFree(db, pIter->aAlloc, nNew);
71706:         if( !pIter->aAlloc ) return SQLITE_NOMEM;
71707:         pIter->nAlloc = nNew;
71708:       }
71709:   
71710:       nRead2 = iOff + nRec - nRead;
71711:       rc = sqlite3OsRead(
71712:           pIter->pFile, &pIter->aAlloc[nRead], nRead2, pIter->iReadOff+nRead
71713:       );
71714:     }
71715:   }
71716: 
71717:   assert( rc!=SQLITE_OK || nRec>0 );
71718:   pIter->iReadOff += iOff+nRec;
71719:   pIter->nKey = nRec;
71720:   pIter->aKey = &pIter->aAlloc[iOff];
71721:   return rc;
71722: }
71723: 
71724: /*
71725: ** Write a single varint, value iVal, to file-descriptor pFile. Return
71726: ** SQLITE_OK if successful, or an SQLite error code if some error occurs.
71727: **
71728: ** The value of *piOffset when this function is called is used as the byte
71729: ** offset in file pFile to write to. Before returning, *piOffset is 
71730: ** incremented by the number of bytes written.
71731: */
71732: static int vdbeSorterWriteVarint(
71733:   sqlite3_file *pFile,            /* File to write to */
71734:   i64 iVal,                       /* Value to write as a varint */
71735:   i64 *piOffset                   /* IN/OUT: Write offset in file pFile */
71736: ){
71737:   u8 aVarint[9];                  /* Buffer large enough for a varint */
71738:   int nVarint;                    /* Number of used bytes in varint */
71739:   int rc;                         /* Result of write() call */
71740: 
71741:   nVarint = sqlite3PutVarint(aVarint, iVal);
71742:   rc = sqlite3OsWrite(pFile, aVarint, nVarint, *piOffset);
71743:   *piOffset += nVarint;
71744: 
71745:   return rc;
71746: }
71747: 
71748: /*
71749: ** Read a single varint from file-descriptor pFile. Return SQLITE_OK if
71750: ** successful, or an SQLite error code if some error occurs.
71751: **
71752: ** The value of *piOffset when this function is called is used as the
71753: ** byte offset in file pFile from whence to read the varint. If successful
71754: ** (i.e. if no IO error occurs), then *piOffset is set to the offset of
71755: ** the first byte past the end of the varint before returning. *piVal is
71756: ** set to the integer value read. If an error occurs, the final values of
71757: ** both *piOffset and *piVal are undefined.
71758: */
71759: static int vdbeSorterReadVarint(
71760:   sqlite3_file *pFile,            /* File to read from */
71761:   i64 *piOffset,                  /* IN/OUT: Read offset in pFile */
71762:   i64 *piVal                      /* OUT: Value read from file */
71763: ){
71764:   u8 aVarint[9];                  /* Buffer large enough for a varint */
71765:   i64 iOff = *piOffset;           /* Offset in file to read from */
71766:   int rc;                         /* Return code */
71767: 
71768:   rc = sqlite3OsRead(pFile, aVarint, 9, iOff);
71769:   if( rc==SQLITE_OK ){
71770:     *piOffset += getVarint(aVarint, (u64 *)piVal);
71771:   }
71772: 
71773:   return rc;
71774: }
71775: 
71776: /*
71777: ** Initialize iterator pIter to scan through the PMA stored in file pFile
71778: ** starting at offset iStart and ending at offset iEof-1. This function 
71779: ** leaves the iterator pointing to the first key in the PMA (or EOF if the 
71780: ** PMA is empty).
71781: */
71782: static int vdbeSorterIterInit(
71783:   sqlite3 *db,                    /* Database handle */
71784:   VdbeSorter *pSorter,            /* Sorter object */
71785:   i64 iStart,                     /* Start offset in pFile */
71786:   VdbeSorterIter *pIter,          /* Iterator to populate */
71787:   i64 *pnByte                     /* IN/OUT: Increment this value by PMA size */
71788: ){
71789:   int rc;
71790: 
71791:   assert( pSorter->iWriteOff>iStart );
71792:   assert( pIter->aAlloc==0 );
71793:   pIter->pFile = pSorter->pTemp1;
71794:   pIter->iReadOff = iStart;
71795:   pIter->nAlloc = 128;
71796:   pIter->aAlloc = (u8 *)sqlite3DbMallocRaw(db, pIter->nAlloc);
71797:   if( !pIter->aAlloc ){
71798:     rc = SQLITE_NOMEM;
71799:   }else{
71800:     i64 nByte;                         /* Total size of PMA in bytes */
71801:     rc = vdbeSorterReadVarint(pSorter->pTemp1, &pIter->iReadOff, &nByte);
71802:     *pnByte += nByte;
71803:     pIter->iEof = pIter->iReadOff + nByte;
71804:   }
71805:   if( rc==SQLITE_OK ){
71806:     rc = vdbeSorterIterNext(db, pIter);
71807:   }
71808:   return rc;
71809: }
71810: 
71811: 
71812: /*
71813: ** Compare key1 (buffer pKey1, size nKey1 bytes) with key2 (buffer pKey2, 
71814: ** size nKey2 bytes).  Argument pKeyInfo supplies the collation functions
71815: ** used by the comparison. If an error occurs, return an SQLite error code.
71816: ** Otherwise, return SQLITE_OK and set *pRes to a negative, zero or positive
71817: ** value, depending on whether key1 is smaller, equal to or larger than key2.
71818: **
71819: ** If the bOmitRowid argument is non-zero, assume both keys end in a rowid
71820: ** field. For the purposes of the comparison, ignore it. Also, if bOmitRowid
71821: ** is true and key1 contains even a single NULL value, it is considered to
71822: ** be less than key2. Even if key2 also contains NULL values.
71823: **
71824: ** If pKey2 is passed a NULL pointer, then it is assumed that the pCsr->aSpace
71825: ** has been allocated and contains an unpacked record that is used as key2.
71826: */
71827: static void vdbeSorterCompare(
71828:   VdbeCursor *pCsr,               /* Cursor object (for pKeyInfo) */
71829:   int bOmitRowid,                 /* Ignore rowid field at end of keys */
71830:   void *pKey1, int nKey1,         /* Left side of comparison */
71831:   void *pKey2, int nKey2,         /* Right side of comparison */
71832:   int *pRes                       /* OUT: Result of comparison */
71833: ){
71834:   KeyInfo *pKeyInfo = pCsr->pKeyInfo;
71835:   VdbeSorter *pSorter = pCsr->pSorter;
71836:   UnpackedRecord *r2 = pSorter->pUnpacked;
71837:   int i;
71838: 
71839:   if( pKey2 ){
71840:     sqlite3VdbeRecordUnpack(pKeyInfo, nKey2, pKey2, r2);
71841:   }
71842: 
71843:   if( bOmitRowid ){
71844:     r2->nField = pKeyInfo->nField;
71845:     assert( r2->nField>0 );
71846:     for(i=0; i<r2->nField; i++){
71847:       if( r2->aMem[i].flags & MEM_Null ){
71848:         *pRes = -1;
71849:         return;
71850:       }
71851:     }
71852:     r2->flags |= UNPACKED_PREFIX_MATCH;
71853:   }
71854: 
71855:   *pRes = sqlite3VdbeRecordCompare(nKey1, pKey1, r2);
71856: }
71857: 
71858: /*
71859: ** This function is called to compare two iterator keys when merging 
71860: ** multiple b-tree segments. Parameter iOut is the index of the aTree[] 
71861: ** value to recalculate.
71862: */
71863: static int vdbeSorterDoCompare(VdbeCursor *pCsr, int iOut){
71864:   VdbeSorter *pSorter = pCsr->pSorter;
71865:   int i1;
71866:   int i2;
71867:   int iRes;
71868:   VdbeSorterIter *p1;
71869:   VdbeSorterIter *p2;
71870: 
71871:   assert( iOut<pSorter->nTree && iOut>0 );
71872: 
71873:   if( iOut>=(pSorter->nTree/2) ){
71874:     i1 = (iOut - pSorter->nTree/2) * 2;
71875:     i2 = i1 + 1;
71876:   }else{
71877:     i1 = pSorter->aTree[iOut*2];
71878:     i2 = pSorter->aTree[iOut*2+1];
71879:   }
71880: 
71881:   p1 = &pSorter->aIter[i1];
71882:   p2 = &pSorter->aIter[i2];
71883: 
71884:   if( p1->pFile==0 ){
71885:     iRes = i2;
71886:   }else if( p2->pFile==0 ){
71887:     iRes = i1;
71888:   }else{
71889:     int res;
71890:     assert( pCsr->pSorter->pUnpacked!=0 );  /* allocated in vdbeSorterMerge() */
71891:     vdbeSorterCompare(
71892:         pCsr, 0, p1->aKey, p1->nKey, p2->aKey, p2->nKey, &res
71893:     );
71894:     if( res<=0 ){
71895:       iRes = i1;
71896:     }else{
71897:       iRes = i2;
71898:     }
71899:   }
71900: 
71901:   pSorter->aTree[iOut] = iRes;
71902:   return SQLITE_OK;
71903: }
71904: 
71905: /*
71906: ** Initialize the temporary index cursor just opened as a sorter cursor.
71907: */
71908: SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *db, VdbeCursor *pCsr){
71909:   int pgsz;                       /* Page size of main database */
71910:   int mxCache;                    /* Cache size */
71911:   VdbeSorter *pSorter;            /* The new sorter */
71912:   char *d;                        /* Dummy */
71913: 
71914:   assert( pCsr->pKeyInfo && pCsr->pBt==0 );
71915:   pCsr->pSorter = pSorter = sqlite3DbMallocZero(db, sizeof(VdbeSorter));
71916:   if( pSorter==0 ){
71917:     return SQLITE_NOMEM;
71918:   }
71919:   
71920:   pSorter->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pCsr->pKeyInfo, 0, 0, &d);
71921:   if( pSorter->pUnpacked==0 ) return SQLITE_NOMEM;
71922:   assert( pSorter->pUnpacked==(UnpackedRecord *)d );
71923: 
71924:   if( !sqlite3TempInMemory(db) ){
71925:     pgsz = sqlite3BtreeGetPageSize(db->aDb[0].pBt);
71926:     pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz;
71927:     mxCache = db->aDb[0].pSchema->cache_size;
71928:     if( mxCache<SORTER_MIN_WORKING ) mxCache = SORTER_MIN_WORKING;
71929:     pSorter->mxPmaSize = mxCache * pgsz;
71930:   }
71931: 
71932:   return SQLITE_OK;
71933: }
71934: 
71935: /*
71936: ** Free the list of sorted records starting at pRecord.
71937: */
71938: static void vdbeSorterRecordFree(sqlite3 *db, SorterRecord *pRecord){
71939:   SorterRecord *p;
71940:   SorterRecord *pNext;
71941:   for(p=pRecord; p; p=pNext){
71942:     pNext = p->pNext;
71943:     sqlite3DbFree(db, p);
71944:   }
71945: }
71946: 
71947: /*
71948: ** Free any cursor components allocated by sqlite3VdbeSorterXXX routines.
71949: */
71950: SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *db, VdbeCursor *pCsr){
71951:   VdbeSorter *pSorter = pCsr->pSorter;
71952:   if( pSorter ){
71953:     if( pSorter->aIter ){
71954:       int i;
71955:       for(i=0; i<pSorter->nTree; i++){
71956:         vdbeSorterIterZero(db, &pSorter->aIter[i]);
71957:       }
71958:       sqlite3DbFree(db, pSorter->aIter);
71959:     }
71960:     if( pSorter->pTemp1 ){
71961:       sqlite3OsCloseFree(pSorter->pTemp1);
71962:     }
71963:     vdbeSorterRecordFree(db, pSorter->pRecord);
71964:     sqlite3DbFree(db, pSorter->pUnpacked);
71965:     sqlite3DbFree(db, pSorter);
71966:     pCsr->pSorter = 0;
71967:   }
71968: }
71969: 
71970: /*
71971: ** Allocate space for a file-handle and open a temporary file. If successful,
71972: ** set *ppFile to point to the malloc'd file-handle and return SQLITE_OK.
71973: ** Otherwise, set *ppFile to 0 and return an SQLite error code.
71974: */
71975: static int vdbeSorterOpenTempFile(sqlite3 *db, sqlite3_file **ppFile){
71976:   int dummy;
71977:   return sqlite3OsOpenMalloc(db->pVfs, 0, ppFile,
71978:       SQLITE_OPEN_TEMP_JOURNAL |
71979:       SQLITE_OPEN_READWRITE    | SQLITE_OPEN_CREATE |
71980:       SQLITE_OPEN_EXCLUSIVE    | SQLITE_OPEN_DELETEONCLOSE, &dummy
71981:   );
71982: }
71983: 
71984: /*
71985: ** Merge the two sorted lists p1 and p2 into a single list.
71986: ** Set *ppOut to the head of the new list.
71987: */
71988: static void vdbeSorterMerge(
71989:   VdbeCursor *pCsr,               /* For pKeyInfo */
71990:   SorterRecord *p1,               /* First list to merge */
71991:   SorterRecord *p2,               /* Second list to merge */
71992:   SorterRecord **ppOut            /* OUT: Head of merged list */
71993: ){
71994:   SorterRecord *pFinal = 0;
71995:   SorterRecord **pp = &pFinal;
71996:   void *pVal2 = p2 ? p2->pVal : 0;
71997: 
71998:   while( p1 && p2 ){
71999:     int res;
72000:     vdbeSorterCompare(pCsr, 0, p1->pVal, p1->nVal, pVal2, p2->nVal, &res);
72001:     if( res<=0 ){
72002:       *pp = p1;
72003:       pp = &p1->pNext;
72004:       p1 = p1->pNext;
72005:       pVal2 = 0;
72006:     }else{
72007:       *pp = p2;
72008:        pp = &p2->pNext;
72009:       p2 = p2->pNext;
72010:       if( p2==0 ) break;
72011:       pVal2 = p2->pVal;
72012:     }
72013:   }
72014:   *pp = p1 ? p1 : p2;
72015:   *ppOut = pFinal;
72016: }
72017: 
72018: /*
72019: ** Sort the linked list of records headed at pCsr->pRecord. Return SQLITE_OK
72020: ** if successful, or an SQLite error code (i.e. SQLITE_NOMEM) if an error
72021: ** occurs.
72022: */
72023: static int vdbeSorterSort(VdbeCursor *pCsr){
72024:   int i;
72025:   SorterRecord **aSlot;
72026:   SorterRecord *p;
72027:   VdbeSorter *pSorter = pCsr->pSorter;
72028: 
72029:   aSlot = (SorterRecord **)sqlite3MallocZero(64 * sizeof(SorterRecord *));
72030:   if( !aSlot ){
72031:     return SQLITE_NOMEM;
72032:   }
72033: 
72034:   p = pSorter->pRecord;
72035:   while( p ){
72036:     SorterRecord *pNext = p->pNext;
72037:     p->pNext = 0;
72038:     for(i=0; aSlot[i]; i++){
72039:       vdbeSorterMerge(pCsr, p, aSlot[i], &p);
72040:       aSlot[i] = 0;
72041:     }
72042:     aSlot[i] = p;
72043:     p = pNext;
72044:   }
72045: 
72046:   p = 0;
72047:   for(i=0; i<64; i++){
72048:     vdbeSorterMerge(pCsr, p, aSlot[i], &p);
72049:   }
72050:   pSorter->pRecord = p;
72051: 
72052:   sqlite3_free(aSlot);
72053:   return SQLITE_OK;
72054: }
72055: 
72056: 
72057: /*
72058: ** Write the current contents of the in-memory linked-list to a PMA. Return
72059: ** SQLITE_OK if successful, or an SQLite error code otherwise.
72060: **
72061: ** The format of a PMA is:
72062: **
72063: **     * A varint. This varint contains the total number of bytes of content
72064: **       in the PMA (not including the varint itself).
72065: **
72066: **     * One or more records packed end-to-end in order of ascending keys. 
72067: **       Each record consists of a varint followed by a blob of data (the 
72068: **       key). The varint is the number of bytes in the blob of data.
72069: */
72070: static int vdbeSorterListToPMA(sqlite3 *db, VdbeCursor *pCsr){
72071:   int rc = SQLITE_OK;             /* Return code */
72072:   VdbeSorter *pSorter = pCsr->pSorter;
72073: 
72074:   if( pSorter->nInMemory==0 ){
72075:     assert( pSorter->pRecord==0 );
72076:     return rc;
72077:   }
72078: 
72079:   rc = vdbeSorterSort(pCsr);
72080: 
72081:   /* If the first temporary PMA file has not been opened, open it now. */
72082:   if( rc==SQLITE_OK && pSorter->pTemp1==0 ){
72083:     rc = vdbeSorterOpenTempFile(db, &pSorter->pTemp1);
72084:     assert( rc!=SQLITE_OK || pSorter->pTemp1 );
72085:     assert( pSorter->iWriteOff==0 );
72086:     assert( pSorter->nPMA==0 );
72087:   }
72088: 
72089:   if( rc==SQLITE_OK ){
72090:     i64 iOff = pSorter->iWriteOff;
72091:     SorterRecord *p;
72092:     SorterRecord *pNext = 0;
72093:     static const char eightZeros[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
72094: 
72095:     pSorter->nPMA++;
72096:     rc = vdbeSorterWriteVarint(pSorter->pTemp1, pSorter->nInMemory, &iOff);
72097:     for(p=pSorter->pRecord; rc==SQLITE_OK && p; p=pNext){
72098:       pNext = p->pNext;
72099:       rc = vdbeSorterWriteVarint(pSorter->pTemp1, p->nVal, &iOff);
72100: 
72101:       if( rc==SQLITE_OK ){
72102:         rc = sqlite3OsWrite(pSorter->pTemp1, p->pVal, p->nVal, iOff);
72103:         iOff += p->nVal;
72104:       }
72105: 
72106:       sqlite3DbFree(db, p);
72107:     }
72108: 
72109:     /* This assert verifies that unless an error has occurred, the size of 
72110:     ** the PMA on disk is the same as the expected size stored in
72111:     ** pSorter->nInMemory. */ 
72112:     assert( rc!=SQLITE_OK || pSorter->nInMemory==(
72113:           iOff-pSorter->iWriteOff-sqlite3VarintLen(pSorter->nInMemory)
72114:     ));
72115: 
72116:     pSorter->iWriteOff = iOff;
72117:     if( rc==SQLITE_OK ){
72118:       /* Terminate each file with 8 extra bytes so that from any offset
72119:       ** in the file we can always read 9 bytes without a SHORT_READ error */
72120:       rc = sqlite3OsWrite(pSorter->pTemp1, eightZeros, 8, iOff);
72121:     }
72122:     pSorter->pRecord = p;
72123:   }
72124: 
72125:   return rc;
72126: }
72127: 
72128: /*
72129: ** Add a record to the sorter.
72130: */
72131: SQLITE_PRIVATE int sqlite3VdbeSorterWrite(
72132:   sqlite3 *db,                    /* Database handle */
72133:   VdbeCursor *pCsr,               /* Sorter cursor */
72134:   Mem *pVal                       /* Memory cell containing record */
72135: ){
72136:   VdbeSorter *pSorter = pCsr->pSorter;
72137:   int rc = SQLITE_OK;             /* Return Code */
72138:   SorterRecord *pNew;             /* New list element */
72139: 
72140:   assert( pSorter );
72141:   pSorter->nInMemory += sqlite3VarintLen(pVal->n) + pVal->n;
72142: 
72143:   pNew = (SorterRecord *)sqlite3DbMallocRaw(db, pVal->n + sizeof(SorterRecord));
72144:   if( pNew==0 ){
72145:     rc = SQLITE_NOMEM;
72146:   }else{
72147:     pNew->pVal = (void *)&pNew[1];
72148:     memcpy(pNew->pVal, pVal->z, pVal->n);
72149:     pNew->nVal = pVal->n;
72150:     pNew->pNext = pSorter->pRecord;
72151:     pSorter->pRecord = pNew;
72152:   }
72153: 
72154:   /* See if the contents of the sorter should now be written out. They
72155:   ** are written out when either of the following are true:
72156:   **
72157:   **   * The total memory allocated for the in-memory list is greater 
72158:   **     than (page-size * cache-size), or
72159:   **
72160:   **   * The total memory allocated for the in-memory list is greater 
72161:   **     than (page-size * 10) and sqlite3HeapNearlyFull() returns true.
72162:   */
72163:   if( rc==SQLITE_OK && pSorter->mxPmaSize>0 && (
72164:         (pSorter->nInMemory>pSorter->mxPmaSize)
72165:      || (pSorter->nInMemory>pSorter->mnPmaSize && sqlite3HeapNearlyFull())
72166:   )){
72167:     rc = vdbeSorterListToPMA(db, pCsr);
72168:     pSorter->nInMemory = 0;
72169:   }
72170: 
72171:   return rc;
72172: }
72173: 
72174: /*
72175: ** Helper function for sqlite3VdbeSorterRewind(). 
72176: */
72177: static int vdbeSorterInitMerge(
72178:   sqlite3 *db,                    /* Database handle */
72179:   VdbeCursor *pCsr,               /* Cursor handle for this sorter */
72180:   i64 *pnByte                     /* Sum of bytes in all opened PMAs */
72181: ){
72182:   VdbeSorter *pSorter = pCsr->pSorter;
72183:   int rc = SQLITE_OK;             /* Return code */
72184:   int i;                          /* Used to iterator through aIter[] */
72185:   i64 nByte = 0;                  /* Total bytes in all opened PMAs */
72186: 
72187:   /* Initialize the iterators. */
72188:   for(i=0; i<SORTER_MAX_MERGE_COUNT; i++){
72189:     VdbeSorterIter *pIter = &pSorter->aIter[i];
72190:     rc = vdbeSorterIterInit(db, pSorter, pSorter->iReadOff, pIter, &nByte);
72191:     pSorter->iReadOff = pIter->iEof;
72192:     assert( rc!=SQLITE_OK || pSorter->iReadOff<=pSorter->iWriteOff );
72193:     if( rc!=SQLITE_OK || pSorter->iReadOff>=pSorter->iWriteOff ) break;
72194:   }
72195: 
72196:   /* Initialize the aTree[] array. */
72197:   for(i=pSorter->nTree-1; rc==SQLITE_OK && i>0; i--){
72198:     rc = vdbeSorterDoCompare(pCsr, i);
72199:   }
72200: 
72201:   *pnByte = nByte;
72202:   return rc;
72203: }
72204: 
72205: /*
72206: ** Once the sorter has been populated, this function is called to prepare
72207: ** for iterating through its contents in sorted order.
72208: */
72209: SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *db, VdbeCursor *pCsr, int *pbEof){
72210:   VdbeSorter *pSorter = pCsr->pSorter;
72211:   int rc;                         /* Return code */
72212:   sqlite3_file *pTemp2 = 0;       /* Second temp file to use */
72213:   i64 iWrite2 = 0;                /* Write offset for pTemp2 */
72214:   int nIter;                      /* Number of iterators used */
72215:   int nByte;                      /* Bytes of space required for aIter/aTree */
72216:   int N = 2;                      /* Power of 2 >= nIter */
72217: 
72218:   assert( pSorter );
72219: 
72220:   /* If no data has been written to disk, then do not do so now. Instead,
72221:   ** sort the VdbeSorter.pRecord list. The vdbe layer will read data directly
72222:   ** from the in-memory list.  */
72223:   if( pSorter->nPMA==0 ){
72224:     *pbEof = !pSorter->pRecord;
72225:     assert( pSorter->aTree==0 );
72226:     return vdbeSorterSort(pCsr);
72227:   }
72228: 
72229:   /* Write the current b-tree to a PMA. Close the b-tree cursor. */
72230:   rc = vdbeSorterListToPMA(db, pCsr);
72231:   if( rc!=SQLITE_OK ) return rc;
72232: 
72233:   /* Allocate space for aIter[] and aTree[]. */
72234:   nIter = pSorter->nPMA;
72235:   if( nIter>SORTER_MAX_MERGE_COUNT ) nIter = SORTER_MAX_MERGE_COUNT;
72236:   assert( nIter>0 );
72237:   while( N<nIter ) N += N;
72238:   nByte = N * (sizeof(int) + sizeof(VdbeSorterIter));
72239:   pSorter->aIter = (VdbeSorterIter *)sqlite3DbMallocZero(db, nByte);
72240:   if( !pSorter->aIter ) return SQLITE_NOMEM;
72241:   pSorter->aTree = (int *)&pSorter->aIter[N];
72242:   pSorter->nTree = N;
72243: 
72244:   do {
72245:     int iNew;                     /* Index of new, merged, PMA */
72246: 
72247:     for(iNew=0; 
72248:         rc==SQLITE_OK && iNew*SORTER_MAX_MERGE_COUNT<pSorter->nPMA; 
72249:         iNew++
72250:     ){
72251:       i64 nWrite;                 /* Number of bytes in new PMA */
72252: 
72253:       /* If there are SORTER_MAX_MERGE_COUNT or less PMAs in file pTemp1,
72254:       ** initialize an iterator for each of them and break out of the loop.
72255:       ** These iterators will be incrementally merged as the VDBE layer calls
72256:       ** sqlite3VdbeSorterNext().
72257:       **
72258:       ** Otherwise, if pTemp1 contains more than SORTER_MAX_MERGE_COUNT PMAs,
72259:       ** initialize interators for SORTER_MAX_MERGE_COUNT of them. These PMAs
72260:       ** are merged into a single PMA that is written to file pTemp2.
72261:       */
72262:       rc = vdbeSorterInitMerge(db, pCsr, &nWrite);
72263:       assert( rc!=SQLITE_OK || pSorter->aIter[ pSorter->aTree[1] ].pFile );
72264:       if( rc!=SQLITE_OK || pSorter->nPMA<=SORTER_MAX_MERGE_COUNT ){
72265:         break;
72266:       }
72267: 
72268:       /* Open the second temp file, if it is not already open. */
72269:       if( pTemp2==0 ){
72270:         assert( iWrite2==0 );
72271:         rc = vdbeSorterOpenTempFile(db, &pTemp2);
72272:       }
72273: 
72274:       if( rc==SQLITE_OK ){
72275:         rc = vdbeSorterWriteVarint(pTemp2, nWrite, &iWrite2);
72276:       }
72277: 
72278:       if( rc==SQLITE_OK ){
72279:         int bEof = 0;
72280:         while( rc==SQLITE_OK && bEof==0 ){
72281:           int nToWrite;
72282:           VdbeSorterIter *pIter = &pSorter->aIter[ pSorter->aTree[1] ];
72283:           assert( pIter->pFile );
72284:           nToWrite = pIter->nKey + sqlite3VarintLen(pIter->nKey);
72285:           rc = sqlite3OsWrite(pTemp2, pIter->aAlloc, nToWrite, iWrite2);
72286:           iWrite2 += nToWrite;
72287:           if( rc==SQLITE_OK ){
72288:             rc = sqlite3VdbeSorterNext(db, pCsr, &bEof);
72289:           }
72290:         }
72291:       }
72292:     }
72293: 
72294:     if( pSorter->nPMA<=SORTER_MAX_MERGE_COUNT ){
72295:       break;
72296:     }else{
72297:       sqlite3_file *pTmp = pSorter->pTemp1;
72298:       pSorter->nPMA = iNew;
72299:       pSorter->pTemp1 = pTemp2;
72300:       pTemp2 = pTmp;
72301:       pSorter->iWriteOff = iWrite2;
72302:       pSorter->iReadOff = 0;
72303:       iWrite2 = 0;
72304:     }
72305:   }while( rc==SQLITE_OK );
72306: 
72307:   if( pTemp2 ){
72308:     sqlite3OsCloseFree(pTemp2);
72309:   }
72310:   *pbEof = (pSorter->aIter[pSorter->aTree[1]].pFile==0);
72311:   return rc;
72312: }
72313: 
72314: /*
72315: ** Advance to the next element in the sorter.
72316: */
72317: SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, VdbeCursor *pCsr, int *pbEof){
72318:   VdbeSorter *pSorter = pCsr->pSorter;
72319:   int rc;                         /* Return code */
72320: 
72321:   if( pSorter->aTree ){
72322:     int iPrev = pSorter->aTree[1];/* Index of iterator to advance */
72323:     int i;                        /* Index of aTree[] to recalculate */
72324: 
72325:     rc = vdbeSorterIterNext(db, &pSorter->aIter[iPrev]);
72326:     for(i=(pSorter->nTree+iPrev)/2; rc==SQLITE_OK && i>0; i=i/2){
72327:       rc = vdbeSorterDoCompare(pCsr, i);
72328:     }
72329: 
72330:     *pbEof = (pSorter->aIter[pSorter->aTree[1]].pFile==0);
72331:   }else{
72332:     SorterRecord *pFree = pSorter->pRecord;
72333:     pSorter->pRecord = pFree->pNext;
72334:     pFree->pNext = 0;
72335:     vdbeSorterRecordFree(db, pFree);
72336:     *pbEof = !pSorter->pRecord;
72337:     rc = SQLITE_OK;
72338:   }
72339:   return rc;
72340: }
72341: 
72342: /*
72343: ** Return a pointer to a buffer owned by the sorter that contains the 
72344: ** current key.
72345: */
72346: static void *vdbeSorterRowkey(
72347:   VdbeSorter *pSorter,            /* Sorter object */
72348:   int *pnKey                      /* OUT: Size of current key in bytes */
72349: ){
72350:   void *pKey;
72351:   if( pSorter->aTree ){
72352:     VdbeSorterIter *pIter;
72353:     pIter = &pSorter->aIter[ pSorter->aTree[1] ];
72354:     *pnKey = pIter->nKey;
72355:     pKey = pIter->aKey;
72356:   }else{
72357:     *pnKey = pSorter->pRecord->nVal;
72358:     pKey = pSorter->pRecord->pVal;
72359:   }
72360:   return pKey;
72361: }
72362: 
72363: /*
72364: ** Copy the current sorter key into the memory cell pOut.
72365: */
72366: SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(VdbeCursor *pCsr, Mem *pOut){
72367:   VdbeSorter *pSorter = pCsr->pSorter;
72368:   void *pKey; int nKey;           /* Sorter key to copy into pOut */
72369: 
72370:   pKey = vdbeSorterRowkey(pSorter, &nKey);
72371:   if( sqlite3VdbeMemGrow(pOut, nKey, 0) ){
72372:     return SQLITE_NOMEM;
72373:   }
72374:   pOut->n = nKey;
72375:   MemSetTypeFlag(pOut, MEM_Blob);
72376:   memcpy(pOut->z, pKey, nKey);
72377: 
72378:   return SQLITE_OK;
72379: }
72380: 
72381: /*
72382: ** Compare the key in memory cell pVal with the key that the sorter cursor
72383: ** passed as the first argument currently points to. For the purposes of
72384: ** the comparison, ignore the rowid field at the end of each record.
72385: **
72386: ** If an error occurs, return an SQLite error code (i.e. SQLITE_NOMEM).
72387: ** Otherwise, set *pRes to a negative, zero or positive value if the
72388: ** key in pVal is smaller than, equal to or larger than the current sorter
72389: ** key.
72390: */
72391: SQLITE_PRIVATE int sqlite3VdbeSorterCompare(
72392:   VdbeCursor *pCsr,               /* Sorter cursor */
72393:   Mem *pVal,                      /* Value to compare to current sorter key */
72394:   int *pRes                       /* OUT: Result of comparison */
72395: ){
72396:   VdbeSorter *pSorter = pCsr->pSorter;
72397:   void *pKey; int nKey;           /* Sorter key to compare pVal with */
72398: 
72399:   pKey = vdbeSorterRowkey(pSorter, &nKey);
72400:   vdbeSorterCompare(pCsr, 1, pVal->z, pVal->n, pKey, nKey, pRes);
72401:   return SQLITE_OK;
72402: }
72403: 
72404: #endif /* #ifndef SQLITE_OMIT_MERGE_SORT */
72405: 
72406: /************** End of vdbesort.c ********************************************/
72407: /************** Begin file journal.c *****************************************/
72408: /*
72409: ** 2007 August 22
72410: **
72411: ** The author disclaims copyright to this source code.  In place of
72412: ** a legal notice, here is a blessing:
72413: **
72414: **    May you do good and not evil.
72415: **    May you find forgiveness for yourself and forgive others.
72416: **    May you share freely, never taking more than you give.
72417: **
72418: *************************************************************************
72419: **
72420: ** This file implements a special kind of sqlite3_file object used
72421: ** by SQLite to create journal files if the atomic-write optimization
72422: ** is enabled.
72423: **
72424: ** The distinctive characteristic of this sqlite3_file is that the
72425: ** actual on disk file is created lazily. When the file is created,
72426: ** the caller specifies a buffer size for an in-memory buffer to
72427: ** be used to service read() and write() requests. The actual file
72428: ** on disk is not created or populated until either:
72429: **
72430: **   1) The in-memory representation grows too large for the allocated 
72431: **      buffer, or
72432: **   2) The sqlite3JournalCreate() function is called.
72433: */
72434: #ifdef SQLITE_ENABLE_ATOMIC_WRITE
72435: 
72436: 
72437: /*
72438: ** A JournalFile object is a subclass of sqlite3_file used by
72439: ** as an open file handle for journal files.
72440: */
72441: struct JournalFile {
72442:   sqlite3_io_methods *pMethod;    /* I/O methods on journal files */
72443:   int nBuf;                       /* Size of zBuf[] in bytes */
72444:   char *zBuf;                     /* Space to buffer journal writes */
72445:   int iSize;                      /* Amount of zBuf[] currently used */
72446:   int flags;                      /* xOpen flags */
72447:   sqlite3_vfs *pVfs;              /* The "real" underlying VFS */
72448:   sqlite3_file *pReal;            /* The "real" underlying file descriptor */
72449:   const char *zJournal;           /* Name of the journal file */
72450: };
72451: typedef struct JournalFile JournalFile;
72452: 
72453: /*
72454: ** If it does not already exists, create and populate the on-disk file 
72455: ** for JournalFile p.
72456: */
72457: static int createFile(JournalFile *p){
72458:   int rc = SQLITE_OK;
72459:   if( !p->pReal ){
72460:     sqlite3_file *pReal = (sqlite3_file *)&p[1];
72461:     rc = sqlite3OsOpen(p->pVfs, p->zJournal, pReal, p->flags, 0);
72462:     if( rc==SQLITE_OK ){
72463:       p->pReal = pReal;
72464:       if( p->iSize>0 ){
72465:         assert(p->iSize<=p->nBuf);
72466:         rc = sqlite3OsWrite(p->pReal, p->zBuf, p->iSize, 0);
72467:       }
72468:     }
72469:   }
72470:   return rc;
72471: }
72472: 
72473: /*
72474: ** Close the file.
72475: */
72476: static int jrnlClose(sqlite3_file *pJfd){
72477:   JournalFile *p = (JournalFile *)pJfd;
72478:   if( p->pReal ){
72479:     sqlite3OsClose(p->pReal);
72480:   }
72481:   sqlite3_free(p->zBuf);
72482:   return SQLITE_OK;
72483: }
72484: 
72485: /*
72486: ** Read data from the file.
72487: */
72488: static int jrnlRead(
72489:   sqlite3_file *pJfd,    /* The journal file from which to read */
72490:   void *zBuf,            /* Put the results here */
72491:   int iAmt,              /* Number of bytes to read */
72492:   sqlite_int64 iOfst     /* Begin reading at this offset */
72493: ){
72494:   int rc = SQLITE_OK;
72495:   JournalFile *p = (JournalFile *)pJfd;
72496:   if( p->pReal ){
72497:     rc = sqlite3OsRead(p->pReal, zBuf, iAmt, iOfst);
72498:   }else if( (iAmt+iOfst)>p->iSize ){
72499:     rc = SQLITE_IOERR_SHORT_READ;
72500:   }else{
72501:     memcpy(zBuf, &p->zBuf[iOfst], iAmt);
72502:   }
72503:   return rc;
72504: }
72505: 
72506: /*
72507: ** Write data to the file.
72508: */
72509: static int jrnlWrite(
72510:   sqlite3_file *pJfd,    /* The journal file into which to write */
72511:   const void *zBuf,      /* Take data to be written from here */
72512:   int iAmt,              /* Number of bytes to write */
72513:   sqlite_int64 iOfst     /* Begin writing at this offset into the file */
72514: ){
72515:   int rc = SQLITE_OK;
72516:   JournalFile *p = (JournalFile *)pJfd;
72517:   if( !p->pReal && (iOfst+iAmt)>p->nBuf ){
72518:     rc = createFile(p);
72519:   }
72520:   if( rc==SQLITE_OK ){
72521:     if( p->pReal ){
72522:       rc = sqlite3OsWrite(p->pReal, zBuf, iAmt, iOfst);
72523:     }else{
72524:       memcpy(&p->zBuf[iOfst], zBuf, iAmt);
72525:       if( p->iSize<(iOfst+iAmt) ){
72526:         p->iSize = (iOfst+iAmt);
72527:       }
72528:     }
72529:   }
72530:   return rc;
72531: }
72532: 
72533: /*
72534: ** Truncate the file.
72535: */
72536: static int jrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
72537:   int rc = SQLITE_OK;
72538:   JournalFile *p = (JournalFile *)pJfd;
72539:   if( p->pReal ){
72540:     rc = sqlite3OsTruncate(p->pReal, size);
72541:   }else if( size<p->iSize ){
72542:     p->iSize = size;
72543:   }
72544:   return rc;
72545: }
72546: 
72547: /*
72548: ** Sync the file.
72549: */
72550: static int jrnlSync(sqlite3_file *pJfd, int flags){
72551:   int rc;
72552:   JournalFile *p = (JournalFile *)pJfd;
72553:   if( p->pReal ){
72554:     rc = sqlite3OsSync(p->pReal, flags);
72555:   }else{
72556:     rc = SQLITE_OK;
72557:   }
72558:   return rc;
72559: }
72560: 
72561: /*
72562: ** Query the size of the file in bytes.
72563: */
72564: static int jrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){
72565:   int rc = SQLITE_OK;
72566:   JournalFile *p = (JournalFile *)pJfd;
72567:   if( p->pReal ){
72568:     rc = sqlite3OsFileSize(p->pReal, pSize);
72569:   }else{
72570:     *pSize = (sqlite_int64) p->iSize;
72571:   }
72572:   return rc;
72573: }
72574: 
72575: /*
72576: ** Table of methods for JournalFile sqlite3_file object.
72577: */
72578: static struct sqlite3_io_methods JournalFileMethods = {
72579:   1,             /* iVersion */
72580:   jrnlClose,     /* xClose */
72581:   jrnlRead,      /* xRead */
72582:   jrnlWrite,     /* xWrite */
72583:   jrnlTruncate,  /* xTruncate */
72584:   jrnlSync,      /* xSync */
72585:   jrnlFileSize,  /* xFileSize */
72586:   0,             /* xLock */
72587:   0,             /* xUnlock */
72588:   0,             /* xCheckReservedLock */
72589:   0,             /* xFileControl */
72590:   0,             /* xSectorSize */
72591:   0,             /* xDeviceCharacteristics */
72592:   0,             /* xShmMap */
72593:   0,             /* xShmLock */
72594:   0,             /* xShmBarrier */
72595:   0              /* xShmUnmap */
72596: };
72597: 
72598: /* 
72599: ** Open a journal file.
72600: */
72601: SQLITE_PRIVATE int sqlite3JournalOpen(
72602:   sqlite3_vfs *pVfs,         /* The VFS to use for actual file I/O */
72603:   const char *zName,         /* Name of the journal file */
72604:   sqlite3_file *pJfd,        /* Preallocated, blank file handle */
72605:   int flags,                 /* Opening flags */
72606:   int nBuf                   /* Bytes buffered before opening the file */
72607: ){
72608:   JournalFile *p = (JournalFile *)pJfd;
72609:   memset(p, 0, sqlite3JournalSize(pVfs));
72610:   if( nBuf>0 ){
72611:     p->zBuf = sqlite3MallocZero(nBuf);
72612:     if( !p->zBuf ){
72613:       return SQLITE_NOMEM;
72614:     }
72615:   }else{
72616:     return sqlite3OsOpen(pVfs, zName, pJfd, flags, 0);
72617:   }
72618:   p->pMethod = &JournalFileMethods;
72619:   p->nBuf = nBuf;
72620:   p->flags = flags;
72621:   p->zJournal = zName;
72622:   p->pVfs = pVfs;
72623:   return SQLITE_OK;
72624: }
72625: 
72626: /*
72627: ** If the argument p points to a JournalFile structure, and the underlying
72628: ** file has not yet been created, create it now.
72629: */
72630: SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *p){
72631:   if( p->pMethods!=&JournalFileMethods ){
72632:     return SQLITE_OK;
72633:   }
72634:   return createFile((JournalFile *)p);
72635: }
72636: 
72637: /* 
72638: ** Return the number of bytes required to store a JournalFile that uses vfs
72639: ** pVfs to create the underlying on-disk files.
72640: */
72641: SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *pVfs){
72642:   return (pVfs->szOsFile+sizeof(JournalFile));
72643: }
72644: #endif
72645: 
72646: /************** End of journal.c *********************************************/
72647: /************** Begin file memjournal.c **************************************/
72648: /*
72649: ** 2008 October 7
72650: **
72651: ** The author disclaims copyright to this source code.  In place of
72652: ** a legal notice, here is a blessing:
72653: **
72654: **    May you do good and not evil.
72655: **    May you find forgiveness for yourself and forgive others.
72656: **    May you share freely, never taking more than you give.
72657: **
72658: *************************************************************************
72659: **
72660: ** This file contains code use to implement an in-memory rollback journal.
72661: ** The in-memory rollback journal is used to journal transactions for
72662: ** ":memory:" databases and when the journal_mode=MEMORY pragma is used.
72663: */
72664: 
72665: /* Forward references to internal structures */
72666: typedef struct MemJournal MemJournal;
72667: typedef struct FilePoint FilePoint;
72668: typedef struct FileChunk FileChunk;
72669: 
72670: /* Space to hold the rollback journal is allocated in increments of
72671: ** this many bytes.
72672: **
72673: ** The size chosen is a little less than a power of two.  That way,
72674: ** the FileChunk object will have a size that almost exactly fills
72675: ** a power-of-two allocation.  This mimimizes wasted space in power-of-two
72676: ** memory allocators.
72677: */
72678: #define JOURNAL_CHUNKSIZE ((int)(1024-sizeof(FileChunk*)))
72679: 
72680: /* Macro to find the minimum of two numeric values.
72681: */
72682: #ifndef MIN
72683: # define MIN(x,y) ((x)<(y)?(x):(y))
72684: #endif
72685: 
72686: /*
72687: ** The rollback journal is composed of a linked list of these structures.
72688: */
72689: struct FileChunk {
72690:   FileChunk *pNext;               /* Next chunk in the journal */
72691:   u8 zChunk[JOURNAL_CHUNKSIZE];   /* Content of this chunk */
72692: };
72693: 
72694: /*
72695: ** An instance of this object serves as a cursor into the rollback journal.
72696: ** The cursor can be either for reading or writing.
72697: */
72698: struct FilePoint {
72699:   sqlite3_int64 iOffset;          /* Offset from the beginning of the file */
72700:   FileChunk *pChunk;              /* Specific chunk into which cursor points */
72701: };
72702: 
72703: /*
72704: ** This subclass is a subclass of sqlite3_file.  Each open memory-journal
72705: ** is an instance of this class.
72706: */
72707: struct MemJournal {
72708:   sqlite3_io_methods *pMethod;    /* Parent class. MUST BE FIRST */
72709:   FileChunk *pFirst;              /* Head of in-memory chunk-list */
72710:   FilePoint endpoint;             /* Pointer to the end of the file */
72711:   FilePoint readpoint;            /* Pointer to the end of the last xRead() */
72712: };
72713: 
72714: /*
72715: ** Read data from the in-memory journal file.  This is the implementation
72716: ** of the sqlite3_vfs.xRead method.
72717: */
72718: static int memjrnlRead(
72719:   sqlite3_file *pJfd,    /* The journal file from which to read */
72720:   void *zBuf,            /* Put the results here */
72721:   int iAmt,              /* Number of bytes to read */
72722:   sqlite_int64 iOfst     /* Begin reading at this offset */
72723: ){
72724:   MemJournal *p = (MemJournal *)pJfd;
72725:   u8 *zOut = zBuf;
72726:   int nRead = iAmt;
72727:   int iChunkOffset;
72728:   FileChunk *pChunk;
72729: 
72730:   /* SQLite never tries to read past the end of a rollback journal file */
72731:   assert( iOfst+iAmt<=p->endpoint.iOffset );
72732: 
72733:   if( p->readpoint.iOffset!=iOfst || iOfst==0 ){
72734:     sqlite3_int64 iOff = 0;
72735:     for(pChunk=p->pFirst; 
72736:         ALWAYS(pChunk) && (iOff+JOURNAL_CHUNKSIZE)<=iOfst;
72737:         pChunk=pChunk->pNext
72738:     ){
72739:       iOff += JOURNAL_CHUNKSIZE;
72740:     }
72741:   }else{
72742:     pChunk = p->readpoint.pChunk;
72743:   }
72744: 
72745:   iChunkOffset = (int)(iOfst%JOURNAL_CHUNKSIZE);
72746:   do {
72747:     int iSpace = JOURNAL_CHUNKSIZE - iChunkOffset;
72748:     int nCopy = MIN(nRead, (JOURNAL_CHUNKSIZE - iChunkOffset));
72749:     memcpy(zOut, &pChunk->zChunk[iChunkOffset], nCopy);
72750:     zOut += nCopy;
72751:     nRead -= iSpace;
72752:     iChunkOffset = 0;
72753:   } while( nRead>=0 && (pChunk=pChunk->pNext)!=0 && nRead>0 );
72754:   p->readpoint.iOffset = iOfst+iAmt;
72755:   p->readpoint.pChunk = pChunk;
72756: 
72757:   return SQLITE_OK;
72758: }
72759: 
72760: /*
72761: ** Write data to the file.
72762: */
72763: static int memjrnlWrite(
72764:   sqlite3_file *pJfd,    /* The journal file into which to write */
72765:   const void *zBuf,      /* Take data to be written from here */
72766:   int iAmt,              /* Number of bytes to write */
72767:   sqlite_int64 iOfst     /* Begin writing at this offset into the file */
72768: ){
72769:   MemJournal *p = (MemJournal *)pJfd;
72770:   int nWrite = iAmt;
72771:   u8 *zWrite = (u8 *)zBuf;
72772: 
72773:   /* An in-memory journal file should only ever be appended to. Random
72774:   ** access writes are not required by sqlite.
72775:   */
72776:   assert( iOfst==p->endpoint.iOffset );
72777:   UNUSED_PARAMETER(iOfst);
72778: 
72779:   while( nWrite>0 ){
72780:     FileChunk *pChunk = p->endpoint.pChunk;
72781:     int iChunkOffset = (int)(p->endpoint.iOffset%JOURNAL_CHUNKSIZE);
72782:     int iSpace = MIN(nWrite, JOURNAL_CHUNKSIZE - iChunkOffset);
72783: 
72784:     if( iChunkOffset==0 ){
72785:       /* New chunk is required to extend the file. */
72786:       FileChunk *pNew = sqlite3_malloc(sizeof(FileChunk));
72787:       if( !pNew ){
72788:         return SQLITE_IOERR_NOMEM;
72789:       }
72790:       pNew->pNext = 0;
72791:       if( pChunk ){
72792:         assert( p->pFirst );
72793:         pChunk->pNext = pNew;
72794:       }else{
72795:         assert( !p->pFirst );
72796:         p->pFirst = pNew;
72797:       }
72798:       p->endpoint.pChunk = pNew;
72799:     }
72800: 
72801:     memcpy(&p->endpoint.pChunk->zChunk[iChunkOffset], zWrite, iSpace);
72802:     zWrite += iSpace;
72803:     nWrite -= iSpace;
72804:     p->endpoint.iOffset += iSpace;
72805:   }
72806: 
72807:   return SQLITE_OK;
72808: }
72809: 
72810: /*
72811: ** Truncate the file.
72812: */
72813: static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
72814:   MemJournal *p = (MemJournal *)pJfd;
72815:   FileChunk *pChunk;
72816:   assert(size==0);
72817:   UNUSED_PARAMETER(size);
72818:   pChunk = p->pFirst;
72819:   while( pChunk ){
72820:     FileChunk *pTmp = pChunk;
72821:     pChunk = pChunk->pNext;
72822:     sqlite3_free(pTmp);
72823:   }
72824:   sqlite3MemJournalOpen(pJfd);
72825:   return SQLITE_OK;
72826: }
72827: 
72828: /*
72829: ** Close the file.
72830: */
72831: static int memjrnlClose(sqlite3_file *pJfd){
72832:   memjrnlTruncate(pJfd, 0);
72833:   return SQLITE_OK;
72834: }
72835: 
72836: 
72837: /*
72838: ** Sync the file.
72839: **
72840: ** Syncing an in-memory journal is a no-op.  And, in fact, this routine
72841: ** is never called in a working implementation.  This implementation
72842: ** exists purely as a contingency, in case some malfunction in some other
72843: ** part of SQLite causes Sync to be called by mistake.
72844: */
72845: static int memjrnlSync(sqlite3_file *NotUsed, int NotUsed2){
72846:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
72847:   return SQLITE_OK;
72848: }
72849: 
72850: /*
72851: ** Query the size of the file in bytes.
72852: */
72853: static int memjrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){
72854:   MemJournal *p = (MemJournal *)pJfd;
72855:   *pSize = (sqlite_int64) p->endpoint.iOffset;
72856:   return SQLITE_OK;
72857: }
72858: 
72859: /*
72860: ** Table of methods for MemJournal sqlite3_file object.
72861: */
72862: static const struct sqlite3_io_methods MemJournalMethods = {
72863:   1,                /* iVersion */
72864:   memjrnlClose,     /* xClose */
72865:   memjrnlRead,      /* xRead */
72866:   memjrnlWrite,     /* xWrite */
72867:   memjrnlTruncate,  /* xTruncate */
72868:   memjrnlSync,      /* xSync */
72869:   memjrnlFileSize,  /* xFileSize */
72870:   0,                /* xLock */
72871:   0,                /* xUnlock */
72872:   0,                /* xCheckReservedLock */
72873:   0,                /* xFileControl */
72874:   0,                /* xSectorSize */
72875:   0,                /* xDeviceCharacteristics */
72876:   0,                /* xShmMap */
72877:   0,                /* xShmLock */
72878:   0,                /* xShmBarrier */
72879:   0                 /* xShmUnlock */
72880: };
72881: 
72882: /* 
72883: ** Open a journal file.
72884: */
72885: SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *pJfd){
72886:   MemJournal *p = (MemJournal *)pJfd;
72887:   assert( EIGHT_BYTE_ALIGNMENT(p) );
72888:   memset(p, 0, sqlite3MemJournalSize());
72889:   p->pMethod = (sqlite3_io_methods*)&MemJournalMethods;
72890: }
72891: 
72892: /*
72893: ** Return true if the file-handle passed as an argument is 
72894: ** an in-memory journal 
72895: */
72896: SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *pJfd){
72897:   return pJfd->pMethods==&MemJournalMethods;
72898: }
72899: 
72900: /* 
72901: ** Return the number of bytes required to store a MemJournal file descriptor.
72902: */
72903: SQLITE_PRIVATE int sqlite3MemJournalSize(void){
72904:   return sizeof(MemJournal);
72905: }
72906: 
72907: /************** End of memjournal.c ******************************************/
72908: /************** Begin file walker.c ******************************************/
72909: /*
72910: ** 2008 August 16
72911: **
72912: ** The author disclaims copyright to this source code.  In place of
72913: ** a legal notice, here is a blessing:
72914: **
72915: **    May you do good and not evil.
72916: **    May you find forgiveness for yourself and forgive others.
72917: **    May you share freely, never taking more than you give.
72918: **
72919: *************************************************************************
72920: ** This file contains routines used for walking the parser tree for
72921: ** an SQL statement.
72922: */
72923: /* #include <stdlib.h> */
72924: /* #include <string.h> */
72925: 
72926: 
72927: /*
72928: ** Walk an expression tree.  Invoke the callback once for each node
72929: ** of the expression, while decending.  (In other words, the callback
72930: ** is invoked before visiting children.)
72931: **
72932: ** The return value from the callback should be one of the WRC_*
72933: ** constants to specify how to proceed with the walk.
72934: **
72935: **    WRC_Continue      Continue descending down the tree.
72936: **
72937: **    WRC_Prune         Do not descend into child nodes.  But allow
72938: **                      the walk to continue with sibling nodes.
72939: **
72940: **    WRC_Abort         Do no more callbacks.  Unwind the stack and
72941: **                      return the top-level walk call.
72942: **
72943: ** The return value from this routine is WRC_Abort to abandon the tree walk
72944: ** and WRC_Continue to continue.
72945: */
72946: SQLITE_PRIVATE int sqlite3WalkExpr(Walker *pWalker, Expr *pExpr){
72947:   int rc;
72948:   if( pExpr==0 ) return WRC_Continue;
72949:   testcase( ExprHasProperty(pExpr, EP_TokenOnly) );
72950:   testcase( ExprHasProperty(pExpr, EP_Reduced) );
72951:   rc = pWalker->xExprCallback(pWalker, pExpr);
72952:   if( rc==WRC_Continue
72953:               && !ExprHasAnyProperty(pExpr,EP_TokenOnly) ){
72954:     if( sqlite3WalkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort;
72955:     if( sqlite3WalkExpr(pWalker, pExpr->pRight) ) return WRC_Abort;
72956:     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
72957:       if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort;
72958:     }else{
72959:       if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort;
72960:     }
72961:   }
72962:   return rc & WRC_Abort;
72963: }
72964: 
72965: /*
72966: ** Call sqlite3WalkExpr() for every expression in list p or until
72967: ** an abort request is seen.
72968: */
72969: SQLITE_PRIVATE int sqlite3WalkExprList(Walker *pWalker, ExprList *p){
72970:   int i;
72971:   struct ExprList_item *pItem;
72972:   if( p ){
72973:     for(i=p->nExpr, pItem=p->a; i>0; i--, pItem++){
72974:       if( sqlite3WalkExpr(pWalker, pItem->pExpr) ) return WRC_Abort;
72975:     }
72976:   }
72977:   return WRC_Continue;
72978: }
72979: 
72980: /*
72981: ** Walk all expressions associated with SELECT statement p.  Do
72982: ** not invoke the SELECT callback on p, but do (of course) invoke
72983: ** any expr callbacks and SELECT callbacks that come from subqueries.
72984: ** Return WRC_Abort or WRC_Continue.
72985: */
72986: SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){
72987:   if( sqlite3WalkExprList(pWalker, p->pEList) ) return WRC_Abort;
72988:   if( sqlite3WalkExpr(pWalker, p->pWhere) ) return WRC_Abort;
72989:   if( sqlite3WalkExprList(pWalker, p->pGroupBy) ) return WRC_Abort;
72990:   if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort;
72991:   if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort;
72992:   if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort;
72993:   if( sqlite3WalkExpr(pWalker, p->pOffset) ) return WRC_Abort;
72994:   return WRC_Continue;
72995: }
72996: 
72997: /*
72998: ** Walk the parse trees associated with all subqueries in the
72999: ** FROM clause of SELECT statement p.  Do not invoke the select
73000: ** callback on p, but do invoke it on each FROM clause subquery
73001: ** and on any subqueries further down in the tree.  Return 
73002: ** WRC_Abort or WRC_Continue;
73003: */
73004: SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){
73005:   SrcList *pSrc;
73006:   int i;
73007:   struct SrcList_item *pItem;
73008: 
73009:   pSrc = p->pSrc;
73010:   if( ALWAYS(pSrc) ){
73011:     for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
73012:       if( sqlite3WalkSelect(pWalker, pItem->pSelect) ){
73013:         return WRC_Abort;
73014:       }
73015:     }
73016:   }
73017:   return WRC_Continue;
73018: } 
73019: 
73020: /*
73021: ** Call sqlite3WalkExpr() for every expression in Select statement p.
73022: ** Invoke sqlite3WalkSelect() for subqueries in the FROM clause and
73023: ** on the compound select chain, p->pPrior.
73024: **
73025: ** Return WRC_Continue under normal conditions.  Return WRC_Abort if
73026: ** there is an abort request.
73027: **
73028: ** If the Walker does not have an xSelectCallback() then this routine
73029: ** is a no-op returning WRC_Continue.
73030: */
73031: SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){
73032:   int rc;
73033:   if( p==0 || pWalker->xSelectCallback==0 ) return WRC_Continue;
73034:   rc = WRC_Continue;
73035:   while( p  ){
73036:     rc = pWalker->xSelectCallback(pWalker, p);
73037:     if( rc ) break;
73038:     if( sqlite3WalkSelectExpr(pWalker, p) ) return WRC_Abort;
73039:     if( sqlite3WalkSelectFrom(pWalker, p) ) return WRC_Abort;
73040:     p = p->pPrior;
73041:   }
73042:   return rc & WRC_Abort;
73043: }
73044: 
73045: /************** End of walker.c **********************************************/
73046: /************** Begin file resolve.c *****************************************/
73047: /*
73048: ** 2008 August 18
73049: **
73050: ** The author disclaims copyright to this source code.  In place of
73051: ** a legal notice, here is a blessing:
73052: **
73053: **    May you do good and not evil.
73054: **    May you find forgiveness for yourself and forgive others.
73055: **    May you share freely, never taking more than you give.
73056: **
73057: *************************************************************************
73058: **
73059: ** This file contains routines used for walking the parser tree and
73060: ** resolve all identifiers by associating them with a particular
73061: ** table and column.
73062: */
73063: /* #include <stdlib.h> */
73064: /* #include <string.h> */
73065: 
73066: /*
73067: ** Turn the pExpr expression into an alias for the iCol-th column of the
73068: ** result set in pEList.
73069: **
73070: ** If the result set column is a simple column reference, then this routine
73071: ** makes an exact copy.  But for any other kind of expression, this
73072: ** routine make a copy of the result set column as the argument to the
73073: ** TK_AS operator.  The TK_AS operator causes the expression to be
73074: ** evaluated just once and then reused for each alias.
73075: **
73076: ** The reason for suppressing the TK_AS term when the expression is a simple
73077: ** column reference is so that the column reference will be recognized as
73078: ** usable by indices within the WHERE clause processing logic. 
73079: **
73080: ** Hack:  The TK_AS operator is inhibited if zType[0]=='G'.  This means
73081: ** that in a GROUP BY clause, the expression is evaluated twice.  Hence:
73082: **
73083: **     SELECT random()%5 AS x, count(*) FROM tab GROUP BY x
73084: **
73085: ** Is equivalent to:
73086: **
73087: **     SELECT random()%5 AS x, count(*) FROM tab GROUP BY random()%5
73088: **
73089: ** The result of random()%5 in the GROUP BY clause is probably different
73090: ** from the result in the result-set.  We might fix this someday.  Or
73091: ** then again, we might not...
73092: */
73093: static void resolveAlias(
73094:   Parse *pParse,         /* Parsing context */
73095:   ExprList *pEList,      /* A result set */
73096:   int iCol,              /* A column in the result set.  0..pEList->nExpr-1 */
73097:   Expr *pExpr,           /* Transform this into an alias to the result set */
73098:   const char *zType      /* "GROUP" or "ORDER" or "" */
73099: ){
73100:   Expr *pOrig;           /* The iCol-th column of the result set */
73101:   Expr *pDup;            /* Copy of pOrig */
73102:   sqlite3 *db;           /* The database connection */
73103: 
73104:   assert( iCol>=0 && iCol<pEList->nExpr );
73105:   pOrig = pEList->a[iCol].pExpr;
73106:   assert( pOrig!=0 );
73107:   assert( pOrig->flags & EP_Resolved );
73108:   db = pParse->db;
73109:   if( pOrig->op!=TK_COLUMN && zType[0]!='G' ){
73110:     pDup = sqlite3ExprDup(db, pOrig, 0);
73111:     pDup = sqlite3PExpr(pParse, TK_AS, pDup, 0, 0);
73112:     if( pDup==0 ) return;
73113:     if( pEList->a[iCol].iAlias==0 ){
73114:       pEList->a[iCol].iAlias = (u16)(++pParse->nAlias);
73115:     }
73116:     pDup->iTable = pEList->a[iCol].iAlias;
73117:   }else if( ExprHasProperty(pOrig, EP_IntValue) || pOrig->u.zToken==0 ){
73118:     pDup = sqlite3ExprDup(db, pOrig, 0);
73119:     if( pDup==0 ) return;
73120:   }else{
73121:     char *zToken = pOrig->u.zToken;
73122:     assert( zToken!=0 );
73123:     pOrig->u.zToken = 0;
73124:     pDup = sqlite3ExprDup(db, pOrig, 0);
73125:     pOrig->u.zToken = zToken;
73126:     if( pDup==0 ) return;
73127:     assert( (pDup->flags & (EP_Reduced|EP_TokenOnly))==0 );
73128:     pDup->flags2 |= EP2_MallocedToken;
73129:     pDup->u.zToken = sqlite3DbStrDup(db, zToken);
73130:   }
73131:   if( pExpr->flags & EP_ExpCollate ){
73132:     pDup->pColl = pExpr->pColl;
73133:     pDup->flags |= EP_ExpCollate;
73134:   }
73135: 
73136:   /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This 
73137:   ** prevents ExprDelete() from deleting the Expr structure itself,
73138:   ** allowing it to be repopulated by the memcpy() on the following line.
73139:   */
73140:   ExprSetProperty(pExpr, EP_Static);
73141:   sqlite3ExprDelete(db, pExpr);
73142:   memcpy(pExpr, pDup, sizeof(*pExpr));
73143:   sqlite3DbFree(db, pDup);
73144: }
73145: 
73146: 
73147: /*
73148: ** Return TRUE if the name zCol occurs anywhere in the USING clause.
73149: **
73150: ** Return FALSE if the USING clause is NULL or if it does not contain
73151: ** zCol.
73152: */
73153: static int nameInUsingClause(IdList *pUsing, const char *zCol){
73154:   if( pUsing ){
73155:     int k;
73156:     for(k=0; k<pUsing->nId; k++){
73157:       if( sqlite3StrICmp(pUsing->a[k].zName, zCol)==0 ) return 1;
73158:     }
73159:   }
73160:   return 0;
73161: }
73162: 
73163: 
73164: /*
73165: ** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up
73166: ** that name in the set of source tables in pSrcList and make the pExpr 
73167: ** expression node refer back to that source column.  The following changes
73168: ** are made to pExpr:
73169: **
73170: **    pExpr->iDb           Set the index in db->aDb[] of the database X
73171: **                         (even if X is implied).
73172: **    pExpr->iTable        Set to the cursor number for the table obtained
73173: **                         from pSrcList.
73174: **    pExpr->pTab          Points to the Table structure of X.Y (even if
73175: **                         X and/or Y are implied.)
73176: **    pExpr->iColumn       Set to the column number within the table.
73177: **    pExpr->op            Set to TK_COLUMN.
73178: **    pExpr->pLeft         Any expression this points to is deleted
73179: **    pExpr->pRight        Any expression this points to is deleted.
73180: **
73181: ** The zDb variable is the name of the database (the "X").  This value may be
73182: ** NULL meaning that name is of the form Y.Z or Z.  Any available database
73183: ** can be used.  The zTable variable is the name of the table (the "Y").  This
73184: ** value can be NULL if zDb is also NULL.  If zTable is NULL it
73185: ** means that the form of the name is Z and that columns from any table
73186: ** can be used.
73187: **
73188: ** If the name cannot be resolved unambiguously, leave an error message
73189: ** in pParse and return WRC_Abort.  Return WRC_Prune on success.
73190: */
73191: static int lookupName(
73192:   Parse *pParse,       /* The parsing context */
73193:   const char *zDb,     /* Name of the database containing table, or NULL */
73194:   const char *zTab,    /* Name of table containing column, or NULL */
73195:   const char *zCol,    /* Name of the column. */
73196:   NameContext *pNC,    /* The name context used to resolve the name */
73197:   Expr *pExpr          /* Make this EXPR node point to the selected column */
73198: ){
73199:   int i, j;            /* Loop counters */
73200:   int cnt = 0;                      /* Number of matching column names */
73201:   int cntTab = 0;                   /* Number of matching table names */
73202:   sqlite3 *db = pParse->db;         /* The database connection */
73203:   struct SrcList_item *pItem;       /* Use for looping over pSrcList items */
73204:   struct SrcList_item *pMatch = 0;  /* The matching pSrcList item */
73205:   NameContext *pTopNC = pNC;        /* First namecontext in the list */
73206:   Schema *pSchema = 0;              /* Schema of the expression */
73207:   int isTrigger = 0;
73208: 
73209:   assert( pNC );     /* the name context cannot be NULL. */
73210:   assert( zCol );    /* The Z in X.Y.Z cannot be NULL */
73211:   assert( ~ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
73212: 
73213:   /* Initialize the node to no-match */
73214:   pExpr->iTable = -1;
73215:   pExpr->pTab = 0;
73216:   ExprSetIrreducible(pExpr);
73217: 
73218:   /* Start at the inner-most context and move outward until a match is found */
73219:   while( pNC && cnt==0 ){
73220:     ExprList *pEList;
73221:     SrcList *pSrcList = pNC->pSrcList;
73222: 
73223:     if( pSrcList ){
73224:       for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){
73225:         Table *pTab;
73226:         int iDb;
73227:         Column *pCol;
73228:   
73229:         pTab = pItem->pTab;
73230:         assert( pTab!=0 && pTab->zName!=0 );
73231:         iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
73232:         assert( pTab->nCol>0 );
73233:         if( zTab ){
73234:           if( pItem->zAlias ){
73235:             char *zTabName = pItem->zAlias;
73236:             if( sqlite3StrICmp(zTabName, zTab)!=0 ) continue;
73237:           }else{
73238:             char *zTabName = pTab->zName;
73239:             if( NEVER(zTabName==0) || sqlite3StrICmp(zTabName, zTab)!=0 ){
73240:               continue;
73241:             }
73242:             if( zDb!=0 && sqlite3StrICmp(db->aDb[iDb].zName, zDb)!=0 ){
73243:               continue;
73244:             }
73245:           }
73246:         }
73247:         if( 0==(cntTab++) ){
73248:           pExpr->iTable = pItem->iCursor;
73249:           pExpr->pTab = pTab;
73250:           pSchema = pTab->pSchema;
73251:           pMatch = pItem;
73252:         }
73253:         for(j=0, pCol=pTab->aCol; j<pTab->nCol; j++, pCol++){
73254:           if( sqlite3StrICmp(pCol->zName, zCol)==0 ){
73255:             /* If there has been exactly one prior match and this match
73256:             ** is for the right-hand table of a NATURAL JOIN or is in a 
73257:             ** USING clause, then skip this match.
73258:             */
73259:             if( cnt==1 ){
73260:               if( pItem->jointype & JT_NATURAL ) continue;
73261:               if( nameInUsingClause(pItem->pUsing, zCol) ) continue;
73262:             }
73263:             cnt++;
73264:             pExpr->iTable = pItem->iCursor;
73265:             pExpr->pTab = pTab;
73266:             pMatch = pItem;
73267:             pSchema = pTab->pSchema;
73268:             /* Substitute the rowid (column -1) for the INTEGER PRIMARY KEY */
73269:             pExpr->iColumn = j==pTab->iPKey ? -1 : (i16)j;
73270:             break;
73271:           }
73272:         }
73273:       }
73274:     }
73275: 
73276: #ifndef SQLITE_OMIT_TRIGGER
73277:     /* If we have not already resolved the name, then maybe 
73278:     ** it is a new.* or old.* trigger argument reference
73279:     */
73280:     if( zDb==0 && zTab!=0 && cnt==0 && pParse->pTriggerTab!=0 ){
73281:       int op = pParse->eTriggerOp;
73282:       Table *pTab = 0;
73283:       assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT );
73284:       if( op!=TK_DELETE && sqlite3StrICmp("new",zTab) == 0 ){
73285:         pExpr->iTable = 1;
73286:         pTab = pParse->pTriggerTab;
73287:       }else if( op!=TK_INSERT && sqlite3StrICmp("old",zTab)==0 ){
73288:         pExpr->iTable = 0;
73289:         pTab = pParse->pTriggerTab;
73290:       }
73291: 
73292:       if( pTab ){ 
73293:         int iCol;
73294:         pSchema = pTab->pSchema;
73295:         cntTab++;
73296:         for(iCol=0; iCol<pTab->nCol; iCol++){
73297:           Column *pCol = &pTab->aCol[iCol];
73298:           if( sqlite3StrICmp(pCol->zName, zCol)==0 ){
73299:             if( iCol==pTab->iPKey ){
73300:               iCol = -1;
73301:             }
73302:             break;
73303:           }
73304:         }
73305:         if( iCol>=pTab->nCol && sqlite3IsRowid(zCol) ){
73306:           iCol = -1;        /* IMP: R-44911-55124 */
73307:         }
73308:         if( iCol<pTab->nCol ){
73309:           cnt++;
73310:           if( iCol<0 ){
73311:             pExpr->affinity = SQLITE_AFF_INTEGER;
73312:           }else if( pExpr->iTable==0 ){
73313:             testcase( iCol==31 );
73314:             testcase( iCol==32 );
73315:             pParse->oldmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
73316:           }else{
73317:             testcase( iCol==31 );
73318:             testcase( iCol==32 );
73319:             pParse->newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
73320:           }
73321:           pExpr->iColumn = (i16)iCol;
73322:           pExpr->pTab = pTab;
73323:           isTrigger = 1;
73324:         }
73325:       }
73326:     }
73327: #endif /* !defined(SQLITE_OMIT_TRIGGER) */
73328: 
73329:     /*
73330:     ** Perhaps the name is a reference to the ROWID
73331:     */
73332:     if( cnt==0 && cntTab==1 && sqlite3IsRowid(zCol) ){
73333:       cnt = 1;
73334:       pExpr->iColumn = -1;     /* IMP: R-44911-55124 */
73335:       pExpr->affinity = SQLITE_AFF_INTEGER;
73336:     }
73337: 
73338:     /*
73339:     ** If the input is of the form Z (not Y.Z or X.Y.Z) then the name Z
73340:     ** might refer to an result-set alias.  This happens, for example, when
73341:     ** we are resolving names in the WHERE clause of the following command:
73342:     **
73343:     **     SELECT a+b AS x FROM table WHERE x<10;
73344:     **
73345:     ** In cases like this, replace pExpr with a copy of the expression that
73346:     ** forms the result set entry ("a+b" in the example) and return immediately.
73347:     ** Note that the expression in the result set should have already been
73348:     ** resolved by the time the WHERE clause is resolved.
73349:     */
73350:     if( cnt==0 && (pEList = pNC->pEList)!=0 && zTab==0 ){
73351:       for(j=0; j<pEList->nExpr; j++){
73352:         char *zAs = pEList->a[j].zName;
73353:         if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
73354:           Expr *pOrig;
73355:           assert( pExpr->pLeft==0 && pExpr->pRight==0 );
73356:           assert( pExpr->x.pList==0 );
73357:           assert( pExpr->x.pSelect==0 );
73358:           pOrig = pEList->a[j].pExpr;
73359:           if( !pNC->allowAgg && ExprHasProperty(pOrig, EP_Agg) ){
73360:             sqlite3ErrorMsg(pParse, "misuse of aliased aggregate %s", zAs);
73361:             return WRC_Abort;
73362:           }
73363:           resolveAlias(pParse, pEList, j, pExpr, "");
73364:           cnt = 1;
73365:           pMatch = 0;
73366:           assert( zTab==0 && zDb==0 );
73367:           goto lookupname_end;
73368:         }
73369:       } 
73370:     }
73371: 
73372:     /* Advance to the next name context.  The loop will exit when either
73373:     ** we have a match (cnt>0) or when we run out of name contexts.
73374:     */
73375:     if( cnt==0 ){
73376:       pNC = pNC->pNext;
73377:     }
73378:   }
73379: 
73380:   /*
73381:   ** If X and Y are NULL (in other words if only the column name Z is
73382:   ** supplied) and the value of Z is enclosed in double-quotes, then
73383:   ** Z is a string literal if it doesn't match any column names.  In that
73384:   ** case, we need to return right away and not make any changes to
73385:   ** pExpr.
73386:   **
73387:   ** Because no reference was made to outer contexts, the pNC->nRef
73388:   ** fields are not changed in any context.
73389:   */
73390:   if( cnt==0 && zTab==0 && ExprHasProperty(pExpr,EP_DblQuoted) ){
73391:     pExpr->op = TK_STRING;
73392:     pExpr->pTab = 0;
73393:     return WRC_Prune;
73394:   }
73395: 
73396:   /*
73397:   ** cnt==0 means there was not match.  cnt>1 means there were two or
73398:   ** more matches.  Either way, we have an error.
73399:   */
73400:   if( cnt!=1 ){
73401:     const char *zErr;
73402:     zErr = cnt==0 ? "no such column" : "ambiguous column name";
73403:     if( zDb ){
73404:       sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol);
73405:     }else if( zTab ){
73406:       sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol);
73407:     }else{
73408:       sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol);
73409:     }
73410:     pParse->checkSchema = 1;
73411:     pTopNC->nErr++;
73412:   }
73413: 
73414:   /* If a column from a table in pSrcList is referenced, then record
73415:   ** this fact in the pSrcList.a[].colUsed bitmask.  Column 0 causes
73416:   ** bit 0 to be set.  Column 1 sets bit 1.  And so forth.  If the
73417:   ** column number is greater than the number of bits in the bitmask
73418:   ** then set the high-order bit of the bitmask.
73419:   */
73420:   if( pExpr->iColumn>=0 && pMatch!=0 ){
73421:     int n = pExpr->iColumn;
73422:     testcase( n==BMS-1 );
73423:     if( n>=BMS ){
73424:       n = BMS-1;
73425:     }
73426:     assert( pMatch->iCursor==pExpr->iTable );
73427:     pMatch->colUsed |= ((Bitmask)1)<<n;
73428:   }
73429: 
73430:   /* Clean up and return
73431:   */
73432:   sqlite3ExprDelete(db, pExpr->pLeft);
73433:   pExpr->pLeft = 0;
73434:   sqlite3ExprDelete(db, pExpr->pRight);
73435:   pExpr->pRight = 0;
73436:   pExpr->op = (isTrigger ? TK_TRIGGER : TK_COLUMN);
73437: lookupname_end:
73438:   if( cnt==1 ){
73439:     assert( pNC!=0 );
73440:     sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);
73441:     /* Increment the nRef value on all name contexts from TopNC up to
73442:     ** the point where the name matched. */
73443:     for(;;){
73444:       assert( pTopNC!=0 );
73445:       pTopNC->nRef++;
73446:       if( pTopNC==pNC ) break;
73447:       pTopNC = pTopNC->pNext;
73448:     }
73449:     return WRC_Prune;
73450:   } else {
73451:     return WRC_Abort;
73452:   }
73453: }
73454: 
73455: /*
73456: ** Allocate and return a pointer to an expression to load the column iCol
73457: ** from datasource iSrc in SrcList pSrc.
73458: */
73459: SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc, int iSrc, int iCol){
73460:   Expr *p = sqlite3ExprAlloc(db, TK_COLUMN, 0, 0);
73461:   if( p ){
73462:     struct SrcList_item *pItem = &pSrc->a[iSrc];
73463:     p->pTab = pItem->pTab;
73464:     p->iTable = pItem->iCursor;
73465:     if( p->pTab->iPKey==iCol ){
73466:       p->iColumn = -1;
73467:     }else{
73468:       p->iColumn = (ynVar)iCol;
73469:       testcase( iCol==BMS );
73470:       testcase( iCol==BMS-1 );
73471:       pItem->colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol);
73472:     }
73473:     ExprSetProperty(p, EP_Resolved);
73474:   }
73475:   return p;
73476: }
73477: 
73478: /*
73479: ** This routine is callback for sqlite3WalkExpr().
73480: **
73481: ** Resolve symbolic names into TK_COLUMN operators for the current
73482: ** node in the expression tree.  Return 0 to continue the search down
73483: ** the tree or 2 to abort the tree walk.
73484: **
73485: ** This routine also does error checking and name resolution for
73486: ** function names.  The operator for aggregate functions is changed
73487: ** to TK_AGG_FUNCTION.
73488: */
73489: static int resolveExprStep(Walker *pWalker, Expr *pExpr){
73490:   NameContext *pNC;
73491:   Parse *pParse;
73492: 
73493:   pNC = pWalker->u.pNC;
73494:   assert( pNC!=0 );
73495:   pParse = pNC->pParse;
73496:   assert( pParse==pWalker->pParse );
73497: 
73498:   if( ExprHasAnyProperty(pExpr, EP_Resolved) ) return WRC_Prune;
73499:   ExprSetProperty(pExpr, EP_Resolved);
73500: #ifndef NDEBUG
73501:   if( pNC->pSrcList && pNC->pSrcList->nAlloc>0 ){
73502:     SrcList *pSrcList = pNC->pSrcList;
73503:     int i;
73504:     for(i=0; i<pNC->pSrcList->nSrc; i++){
73505:       assert( pSrcList->a[i].iCursor>=0 && pSrcList->a[i].iCursor<pParse->nTab);
73506:     }
73507:   }
73508: #endif
73509:   switch( pExpr->op ){
73510: 
73511: #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
73512:     /* The special operator TK_ROW means use the rowid for the first
73513:     ** column in the FROM clause.  This is used by the LIMIT and ORDER BY
73514:     ** clause processing on UPDATE and DELETE statements.
73515:     */
73516:     case TK_ROW: {
73517:       SrcList *pSrcList = pNC->pSrcList;
73518:       struct SrcList_item *pItem;
73519:       assert( pSrcList && pSrcList->nSrc==1 );
73520:       pItem = pSrcList->a; 
73521:       pExpr->op = TK_COLUMN;
73522:       pExpr->pTab = pItem->pTab;
73523:       pExpr->iTable = pItem->iCursor;
73524:       pExpr->iColumn = -1;
73525:       pExpr->affinity = SQLITE_AFF_INTEGER;
73526:       break;
73527:     }
73528: #endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */
73529: 
73530:     /* A lone identifier is the name of a column.
73531:     */
73532:     case TK_ID: {
73533:       return lookupName(pParse, 0, 0, pExpr->u.zToken, pNC, pExpr);
73534:     }
73535:   
73536:     /* A table name and column name:     ID.ID
73537:     ** Or a database, table and column:  ID.ID.ID
73538:     */
73539:     case TK_DOT: {
73540:       const char *zColumn;
73541:       const char *zTable;
73542:       const char *zDb;
73543:       Expr *pRight;
73544: 
73545:       /* if( pSrcList==0 ) break; */
73546:       pRight = pExpr->pRight;
73547:       if( pRight->op==TK_ID ){
73548:         zDb = 0;
73549:         zTable = pExpr->pLeft->u.zToken;
73550:         zColumn = pRight->u.zToken;
73551:       }else{
73552:         assert( pRight->op==TK_DOT );
73553:         zDb = pExpr->pLeft->u.zToken;
73554:         zTable = pRight->pLeft->u.zToken;
73555:         zColumn = pRight->pRight->u.zToken;
73556:       }
73557:       return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr);
73558:     }
73559: 
73560:     /* Resolve function names
73561:     */
73562:     case TK_CONST_FUNC:
73563:     case TK_FUNCTION: {
73564:       ExprList *pList = pExpr->x.pList;    /* The argument list */
73565:       int n = pList ? pList->nExpr : 0;    /* Number of arguments */
73566:       int no_such_func = 0;       /* True if no such function exists */
73567:       int wrong_num_args = 0;     /* True if wrong number of arguments */
73568:       int is_agg = 0;             /* True if is an aggregate function */
73569:       int auth;                   /* Authorization to use the function */
73570:       int nId;                    /* Number of characters in function name */
73571:       const char *zId;            /* The function name. */
73572:       FuncDef *pDef;              /* Information about the function */
73573:       u8 enc = ENC(pParse->db);   /* The database encoding */
73574: 
73575:       testcase( pExpr->op==TK_CONST_FUNC );
73576:       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
73577:       zId = pExpr->u.zToken;
73578:       nId = sqlite3Strlen30(zId);
73579:       pDef = sqlite3FindFunction(pParse->db, zId, nId, n, enc, 0);
73580:       if( pDef==0 ){
73581:         pDef = sqlite3FindFunction(pParse->db, zId, nId, -1, enc, 0);
73582:         if( pDef==0 ){
73583:           no_such_func = 1;
73584:         }else{
73585:           wrong_num_args = 1;
73586:         }
73587:       }else{
73588:         is_agg = pDef->xFunc==0;
73589:       }
73590: #ifndef SQLITE_OMIT_AUTHORIZATION
73591:       if( pDef ){
73592:         auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0);
73593:         if( auth!=SQLITE_OK ){
73594:           if( auth==SQLITE_DENY ){
73595:             sqlite3ErrorMsg(pParse, "not authorized to use function: %s",
73596:                                     pDef->zName);
73597:             pNC->nErr++;
73598:           }
73599:           pExpr->op = TK_NULL;
73600:           return WRC_Prune;
73601:         }
73602:       }
73603: #endif
73604:       if( is_agg && !pNC->allowAgg ){
73605:         sqlite3ErrorMsg(pParse, "misuse of aggregate function %.*s()", nId,zId);
73606:         pNC->nErr++;
73607:         is_agg = 0;
73608:       }else if( no_such_func ){
73609:         sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId);
73610:         pNC->nErr++;
73611:       }else if( wrong_num_args ){
73612:         sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()",
73613:              nId, zId);
73614:         pNC->nErr++;
73615:       }
73616:       if( is_agg ){
73617:         pExpr->op = TK_AGG_FUNCTION;
73618:         pNC->hasAgg = 1;
73619:       }
73620:       if( is_agg ) pNC->allowAgg = 0;
73621:       sqlite3WalkExprList(pWalker, pList);
73622:       if( is_agg ) pNC->allowAgg = 1;
73623:       /* FIX ME:  Compute pExpr->affinity based on the expected return
73624:       ** type of the function 
73625:       */
73626:       return WRC_Prune;
73627:     }
73628: #ifndef SQLITE_OMIT_SUBQUERY
73629:     case TK_SELECT:
73630:     case TK_EXISTS:  testcase( pExpr->op==TK_EXISTS );
73631: #endif
73632:     case TK_IN: {
73633:       testcase( pExpr->op==TK_IN );
73634:       if( ExprHasProperty(pExpr, EP_xIsSelect) ){
73635:         int nRef = pNC->nRef;
73636: #ifndef SQLITE_OMIT_CHECK
73637:         if( pNC->isCheck ){
73638:           sqlite3ErrorMsg(pParse,"subqueries prohibited in CHECK constraints");
73639:         }
73640: #endif
73641:         sqlite3WalkSelect(pWalker, pExpr->x.pSelect);
73642:         assert( pNC->nRef>=nRef );
73643:         if( nRef!=pNC->nRef ){
73644:           ExprSetProperty(pExpr, EP_VarSelect);
73645:         }
73646:       }
73647:       break;
73648:     }
73649: #ifndef SQLITE_OMIT_CHECK
73650:     case TK_VARIABLE: {
73651:       if( pNC->isCheck ){
73652:         sqlite3ErrorMsg(pParse,"parameters prohibited in CHECK constraints");
73653:       }
73654:       break;
73655:     }
73656: #endif
73657:   }
73658:   return (pParse->nErr || pParse->db->mallocFailed) ? WRC_Abort : WRC_Continue;
73659: }
73660: 
73661: /*
73662: ** pEList is a list of expressions which are really the result set of the
73663: ** a SELECT statement.  pE is a term in an ORDER BY or GROUP BY clause.
73664: ** This routine checks to see if pE is a simple identifier which corresponds
73665: ** to the AS-name of one of the terms of the expression list.  If it is,
73666: ** this routine return an integer between 1 and N where N is the number of
73667: ** elements in pEList, corresponding to the matching entry.  If there is
73668: ** no match, or if pE is not a simple identifier, then this routine
73669: ** return 0.
73670: **
73671: ** pEList has been resolved.  pE has not.
73672: */
73673: static int resolveAsName(
73674:   Parse *pParse,     /* Parsing context for error messages */
73675:   ExprList *pEList,  /* List of expressions to scan */
73676:   Expr *pE           /* Expression we are trying to match */
73677: ){
73678:   int i;             /* Loop counter */
73679: 
73680:   UNUSED_PARAMETER(pParse);
73681: 
73682:   if( pE->op==TK_ID ){
73683:     char *zCol = pE->u.zToken;
73684:     for(i=0; i<pEList->nExpr; i++){
73685:       char *zAs = pEList->a[i].zName;
73686:       if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
73687:         return i+1;
73688:       }
73689:     }
73690:   }
73691:   return 0;
73692: }
73693: 
73694: /*
73695: ** pE is a pointer to an expression which is a single term in the
73696: ** ORDER BY of a compound SELECT.  The expression has not been
73697: ** name resolved.
73698: **
73699: ** At the point this routine is called, we already know that the
73700: ** ORDER BY term is not an integer index into the result set.  That
73701: ** case is handled by the calling routine.
73702: **
73703: ** Attempt to match pE against result set columns in the left-most
73704: ** SELECT statement.  Return the index i of the matching column,
73705: ** as an indication to the caller that it should sort by the i-th column.
73706: ** The left-most column is 1.  In other words, the value returned is the
73707: ** same integer value that would be used in the SQL statement to indicate
73708: ** the column.
73709: **
73710: ** If there is no match, return 0.  Return -1 if an error occurs.
73711: */
73712: static int resolveOrderByTermToExprList(
73713:   Parse *pParse,     /* Parsing context for error messages */
73714:   Select *pSelect,   /* The SELECT statement with the ORDER BY clause */
73715:   Expr *pE           /* The specific ORDER BY term */
73716: ){
73717:   int i;             /* Loop counter */
73718:   ExprList *pEList;  /* The columns of the result set */
73719:   NameContext nc;    /* Name context for resolving pE */
73720:   sqlite3 *db;       /* Database connection */
73721:   int rc;            /* Return code from subprocedures */
73722:   u8 savedSuppErr;   /* Saved value of db->suppressErr */
73723: 
73724:   assert( sqlite3ExprIsInteger(pE, &i)==0 );
73725:   pEList = pSelect->pEList;
73726: 
73727:   /* Resolve all names in the ORDER BY term expression
73728:   */
73729:   memset(&nc, 0, sizeof(nc));
73730:   nc.pParse = pParse;
73731:   nc.pSrcList = pSelect->pSrc;
73732:   nc.pEList = pEList;
73733:   nc.allowAgg = 1;
73734:   nc.nErr = 0;
73735:   db = pParse->db;
73736:   savedSuppErr = db->suppressErr;
73737:   db->suppressErr = 1;
73738:   rc = sqlite3ResolveExprNames(&nc, pE);
73739:   db->suppressErr = savedSuppErr;
73740:   if( rc ) return 0;
73741: 
73742:   /* Try to match the ORDER BY expression against an expression
73743:   ** in the result set.  Return an 1-based index of the matching
73744:   ** result-set entry.
73745:   */
73746:   for(i=0; i<pEList->nExpr; i++){
73747:     if( sqlite3ExprCompare(pEList->a[i].pExpr, pE)<2 ){
73748:       return i+1;
73749:     }
73750:   }
73751: 
73752:   /* If no match, return 0. */
73753:   return 0;
73754: }
73755: 
73756: /*
73757: ** Generate an ORDER BY or GROUP BY term out-of-range error.
73758: */
73759: static void resolveOutOfRangeError(
73760:   Parse *pParse,         /* The error context into which to write the error */
73761:   const char *zType,     /* "ORDER" or "GROUP" */
73762:   int i,                 /* The index (1-based) of the term out of range */
73763:   int mx                 /* Largest permissible value of i */
73764: ){
73765:   sqlite3ErrorMsg(pParse, 
73766:     "%r %s BY term out of range - should be "
73767:     "between 1 and %d", i, zType, mx);
73768: }
73769: 
73770: /*
73771: ** Analyze the ORDER BY clause in a compound SELECT statement.   Modify
73772: ** each term of the ORDER BY clause is a constant integer between 1
73773: ** and N where N is the number of columns in the compound SELECT.
73774: **
73775: ** ORDER BY terms that are already an integer between 1 and N are
73776: ** unmodified.  ORDER BY terms that are integers outside the range of
73777: ** 1 through N generate an error.  ORDER BY terms that are expressions
73778: ** are matched against result set expressions of compound SELECT
73779: ** beginning with the left-most SELECT and working toward the right.
73780: ** At the first match, the ORDER BY expression is transformed into
73781: ** the integer column number.
73782: **
73783: ** Return the number of errors seen.
73784: */
73785: static int resolveCompoundOrderBy(
73786:   Parse *pParse,        /* Parsing context.  Leave error messages here */
73787:   Select *pSelect       /* The SELECT statement containing the ORDER BY */
73788: ){
73789:   int i;
73790:   ExprList *pOrderBy;
73791:   ExprList *pEList;
73792:   sqlite3 *db;
73793:   int moreToDo = 1;
73794: 
73795:   pOrderBy = pSelect->pOrderBy;
73796:   if( pOrderBy==0 ) return 0;
73797:   db = pParse->db;
73798: #if SQLITE_MAX_COLUMN
73799:   if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
73800:     sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause");
73801:     return 1;
73802:   }
73803: #endif
73804:   for(i=0; i<pOrderBy->nExpr; i++){
73805:     pOrderBy->a[i].done = 0;
73806:   }
73807:   pSelect->pNext = 0;
73808:   while( pSelect->pPrior ){
73809:     pSelect->pPrior->pNext = pSelect;
73810:     pSelect = pSelect->pPrior;
73811:   }
73812:   while( pSelect && moreToDo ){
73813:     struct ExprList_item *pItem;
73814:     moreToDo = 0;
73815:     pEList = pSelect->pEList;
73816:     assert( pEList!=0 );
73817:     for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
73818:       int iCol = -1;
73819:       Expr *pE, *pDup;
73820:       if( pItem->done ) continue;
73821:       pE = pItem->pExpr;
73822:       if( sqlite3ExprIsInteger(pE, &iCol) ){
73823:         if( iCol<=0 || iCol>pEList->nExpr ){
73824:           resolveOutOfRangeError(pParse, "ORDER", i+1, pEList->nExpr);
73825:           return 1;
73826:         }
73827:       }else{
73828:         iCol = resolveAsName(pParse, pEList, pE);
73829:         if( iCol==0 ){
73830:           pDup = sqlite3ExprDup(db, pE, 0);
73831:           if( !db->mallocFailed ){
73832:             assert(pDup);
73833:             iCol = resolveOrderByTermToExprList(pParse, pSelect, pDup);
73834:           }
73835:           sqlite3ExprDelete(db, pDup);
73836:         }
73837:       }
73838:       if( iCol>0 ){
73839:         CollSeq *pColl = pE->pColl;
73840:         int flags = pE->flags & EP_ExpCollate;
73841:         sqlite3ExprDelete(db, pE);
73842:         pItem->pExpr = pE = sqlite3Expr(db, TK_INTEGER, 0);
73843:         if( pE==0 ) return 1;
73844:         pE->pColl = pColl;
73845:         pE->flags |= EP_IntValue | flags;
73846:         pE->u.iValue = iCol;
73847:         pItem->iOrderByCol = (u16)iCol;
73848:         pItem->done = 1;
73849:       }else{
73850:         moreToDo = 1;
73851:       }
73852:     }
73853:     pSelect = pSelect->pNext;
73854:   }
73855:   for(i=0; i<pOrderBy->nExpr; i++){
73856:     if( pOrderBy->a[i].done==0 ){
73857:       sqlite3ErrorMsg(pParse, "%r ORDER BY term does not match any "
73858:             "column in the result set", i+1);
73859:       return 1;
73860:     }
73861:   }
73862:   return 0;
73863: }
73864: 
73865: /*
73866: ** Check every term in the ORDER BY or GROUP BY clause pOrderBy of
73867: ** the SELECT statement pSelect.  If any term is reference to a
73868: ** result set expression (as determined by the ExprList.a.iCol field)
73869: ** then convert that term into a copy of the corresponding result set
73870: ** column.
73871: **
73872: ** If any errors are detected, add an error message to pParse and
73873: ** return non-zero.  Return zero if no errors are seen.
73874: */
73875: SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(
73876:   Parse *pParse,        /* Parsing context.  Leave error messages here */
73877:   Select *pSelect,      /* The SELECT statement containing the clause */
73878:   ExprList *pOrderBy,   /* The ORDER BY or GROUP BY clause to be processed */
73879:   const char *zType     /* "ORDER" or "GROUP" */
73880: ){
73881:   int i;
73882:   sqlite3 *db = pParse->db;
73883:   ExprList *pEList;
73884:   struct ExprList_item *pItem;
73885: 
73886:   if( pOrderBy==0 || pParse->db->mallocFailed ) return 0;
73887: #if SQLITE_MAX_COLUMN
73888:   if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
73889:     sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType);
73890:     return 1;
73891:   }
73892: #endif
73893:   pEList = pSelect->pEList;
73894:   assert( pEList!=0 );  /* sqlite3SelectNew() guarantees this */
73895:   for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
73896:     if( pItem->iOrderByCol ){
73897:       if( pItem->iOrderByCol>pEList->nExpr ){
73898:         resolveOutOfRangeError(pParse, zType, i+1, pEList->nExpr);
73899:         return 1;
73900:       }
73901:       resolveAlias(pParse, pEList, pItem->iOrderByCol-1, pItem->pExpr, zType);
73902:     }
73903:   }
73904:   return 0;
73905: }
73906: 
73907: /*
73908: ** pOrderBy is an ORDER BY or GROUP BY clause in SELECT statement pSelect.
73909: ** The Name context of the SELECT statement is pNC.  zType is either
73910: ** "ORDER" or "GROUP" depending on which type of clause pOrderBy is.
73911: **
73912: ** This routine resolves each term of the clause into an expression.
73913: ** If the order-by term is an integer I between 1 and N (where N is the
73914: ** number of columns in the result set of the SELECT) then the expression
73915: ** in the resolution is a copy of the I-th result-set expression.  If
73916: ** the order-by term is an identify that corresponds to the AS-name of
73917: ** a result-set expression, then the term resolves to a copy of the
73918: ** result-set expression.  Otherwise, the expression is resolved in
73919: ** the usual way - using sqlite3ResolveExprNames().
73920: **
73921: ** This routine returns the number of errors.  If errors occur, then
73922: ** an appropriate error message might be left in pParse.  (OOM errors
73923: ** excepted.)
73924: */
73925: static int resolveOrderGroupBy(
73926:   NameContext *pNC,     /* The name context of the SELECT statement */
73927:   Select *pSelect,      /* The SELECT statement holding pOrderBy */
73928:   ExprList *pOrderBy,   /* An ORDER BY or GROUP BY clause to resolve */
73929:   const char *zType     /* Either "ORDER" or "GROUP", as appropriate */
73930: ){
73931:   int i;                         /* Loop counter */
73932:   int iCol;                      /* Column number */
73933:   struct ExprList_item *pItem;   /* A term of the ORDER BY clause */
73934:   Parse *pParse;                 /* Parsing context */
73935:   int nResult;                   /* Number of terms in the result set */
73936: 
73937:   if( pOrderBy==0 ) return 0;
73938:   nResult = pSelect->pEList->nExpr;
73939:   pParse = pNC->pParse;
73940:   for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
73941:     Expr *pE = pItem->pExpr;
73942:     iCol = resolveAsName(pParse, pSelect->pEList, pE);
73943:     if( iCol>0 ){
73944:       /* If an AS-name match is found, mark this ORDER BY column as being
73945:       ** a copy of the iCol-th result-set column.  The subsequent call to
73946:       ** sqlite3ResolveOrderGroupBy() will convert the expression to a
73947:       ** copy of the iCol-th result-set expression. */
73948:       pItem->iOrderByCol = (u16)iCol;
73949:       continue;
73950:     }
73951:     if( sqlite3ExprIsInteger(pE, &iCol) ){
73952:       /* The ORDER BY term is an integer constant.  Again, set the column
73953:       ** number so that sqlite3ResolveOrderGroupBy() will convert the
73954:       ** order-by term to a copy of the result-set expression */
73955:       if( iCol<1 ){
73956:         resolveOutOfRangeError(pParse, zType, i+1, nResult);
73957:         return 1;
73958:       }
73959:       pItem->iOrderByCol = (u16)iCol;
73960:       continue;
73961:     }
73962: 
73963:     /* Otherwise, treat the ORDER BY term as an ordinary expression */
73964:     pItem->iOrderByCol = 0;
73965:     if( sqlite3ResolveExprNames(pNC, pE) ){
73966:       return 1;
73967:     }
73968:   }
73969:   return sqlite3ResolveOrderGroupBy(pParse, pSelect, pOrderBy, zType);
73970: }
73971: 
73972: /*
73973: ** Resolve names in the SELECT statement p and all of its descendents.
73974: */
73975: static int resolveSelectStep(Walker *pWalker, Select *p){
73976:   NameContext *pOuterNC;  /* Context that contains this SELECT */
73977:   NameContext sNC;        /* Name context of this SELECT */
73978:   int isCompound;         /* True if p is a compound select */
73979:   int nCompound;          /* Number of compound terms processed so far */
73980:   Parse *pParse;          /* Parsing context */
73981:   ExprList *pEList;       /* Result set expression list */
73982:   int i;                  /* Loop counter */
73983:   ExprList *pGroupBy;     /* The GROUP BY clause */
73984:   Select *pLeftmost;      /* Left-most of SELECT of a compound */
73985:   sqlite3 *db;            /* Database connection */
73986:   
73987: 
73988:   assert( p!=0 );
73989:   if( p->selFlags & SF_Resolved ){
73990:     return WRC_Prune;
73991:   }
73992:   pOuterNC = pWalker->u.pNC;
73993:   pParse = pWalker->pParse;
73994:   db = pParse->db;
73995: 
73996:   /* Normally sqlite3SelectExpand() will be called first and will have
73997:   ** already expanded this SELECT.  However, if this is a subquery within
73998:   ** an expression, sqlite3ResolveExprNames() will be called without a
73999:   ** prior call to sqlite3SelectExpand().  When that happens, let
74000:   ** sqlite3SelectPrep() do all of the processing for this SELECT.
74001:   ** sqlite3SelectPrep() will invoke both sqlite3SelectExpand() and
74002:   ** this routine in the correct order.
74003:   */
74004:   if( (p->selFlags & SF_Expanded)==0 ){
74005:     sqlite3SelectPrep(pParse, p, pOuterNC);
74006:     return (pParse->nErr || db->mallocFailed) ? WRC_Abort : WRC_Prune;
74007:   }
74008: 
74009:   isCompound = p->pPrior!=0;
74010:   nCompound = 0;
74011:   pLeftmost = p;
74012:   while( p ){
74013:     assert( (p->selFlags & SF_Expanded)!=0 );
74014:     assert( (p->selFlags & SF_Resolved)==0 );
74015:     p->selFlags |= SF_Resolved;
74016: 
74017:     /* Resolve the expressions in the LIMIT and OFFSET clauses. These
74018:     ** are not allowed to refer to any names, so pass an empty NameContext.
74019:     */
74020:     memset(&sNC, 0, sizeof(sNC));
74021:     sNC.pParse = pParse;
74022:     if( sqlite3ResolveExprNames(&sNC, p->pLimit) ||
74023:         sqlite3ResolveExprNames(&sNC, p->pOffset) ){
74024:       return WRC_Abort;
74025:     }
74026:   
74027:     /* Set up the local name-context to pass to sqlite3ResolveExprNames() to
74028:     ** resolve the result-set expression list.
74029:     */
74030:     sNC.allowAgg = 1;
74031:     sNC.pSrcList = p->pSrc;
74032:     sNC.pNext = pOuterNC;
74033:   
74034:     /* Resolve names in the result set. */
74035:     pEList = p->pEList;
74036:     assert( pEList!=0 );
74037:     for(i=0; i<pEList->nExpr; i++){
74038:       Expr *pX = pEList->a[i].pExpr;
74039:       if( sqlite3ResolveExprNames(&sNC, pX) ){
74040:         return WRC_Abort;
74041:       }
74042:     }
74043:   
74044:     /* Recursively resolve names in all subqueries
74045:     */
74046:     for(i=0; i<p->pSrc->nSrc; i++){
74047:       struct SrcList_item *pItem = &p->pSrc->a[i];
74048:       if( pItem->pSelect ){
74049:         NameContext *pNC;         /* Used to iterate name contexts */
74050:         int nRef = 0;             /* Refcount for pOuterNC and outer contexts */
74051:         const char *zSavedContext = pParse->zAuthContext;
74052: 
74053:         /* Count the total number of references to pOuterNC and all of its
74054:         ** parent contexts. After resolving references to expressions in
74055:         ** pItem->pSelect, check if this value has changed. If so, then
74056:         ** SELECT statement pItem->pSelect must be correlated. Set the
74057:         ** pItem->isCorrelated flag if this is the case. */
74058:         for(pNC=pOuterNC; pNC; pNC=pNC->pNext) nRef += pNC->nRef;
74059: 
74060:         if( pItem->zName ) pParse->zAuthContext = pItem->zName;
74061:         sqlite3ResolveSelectNames(pParse, pItem->pSelect, pOuterNC);
74062:         pParse->zAuthContext = zSavedContext;
74063:         if( pParse->nErr || db->mallocFailed ) return WRC_Abort;
74064: 
74065:         for(pNC=pOuterNC; pNC; pNC=pNC->pNext) nRef -= pNC->nRef;
74066:         assert( pItem->isCorrelated==0 && nRef<=0 );
74067:         pItem->isCorrelated = (nRef!=0);
74068:       }
74069:     }
74070:   
74071:     /* If there are no aggregate functions in the result-set, and no GROUP BY 
74072:     ** expression, do not allow aggregates in any of the other expressions.
74073:     */
74074:     assert( (p->selFlags & SF_Aggregate)==0 );
74075:     pGroupBy = p->pGroupBy;
74076:     if( pGroupBy || sNC.hasAgg ){
74077:       p->selFlags |= SF_Aggregate;
74078:     }else{
74079:       sNC.allowAgg = 0;
74080:     }
74081:   
74082:     /* If a HAVING clause is present, then there must be a GROUP BY clause.
74083:     */
74084:     if( p->pHaving && !pGroupBy ){
74085:       sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING");
74086:       return WRC_Abort;
74087:     }
74088:   
74089:     /* Add the expression list to the name-context before parsing the
74090:     ** other expressions in the SELECT statement. This is so that
74091:     ** expressions in the WHERE clause (etc.) can refer to expressions by
74092:     ** aliases in the result set.
74093:     **
74094:     ** Minor point: If this is the case, then the expression will be
74095:     ** re-evaluated for each reference to it.
74096:     */
74097:     sNC.pEList = p->pEList;
74098:     if( sqlite3ResolveExprNames(&sNC, p->pWhere) ||
74099:        sqlite3ResolveExprNames(&sNC, p->pHaving)
74100:     ){
74101:       return WRC_Abort;
74102:     }
74103: 
74104:     /* The ORDER BY and GROUP BY clauses may not refer to terms in
74105:     ** outer queries 
74106:     */
74107:     sNC.pNext = 0;
74108:     sNC.allowAgg = 1;
74109: 
74110:     /* Process the ORDER BY clause for singleton SELECT statements.
74111:     ** The ORDER BY clause for compounds SELECT statements is handled
74112:     ** below, after all of the result-sets for all of the elements of
74113:     ** the compound have been resolved.
74114:     */
74115:     if( !isCompound && resolveOrderGroupBy(&sNC, p, p->pOrderBy, "ORDER") ){
74116:       return WRC_Abort;
74117:     }
74118:     if( db->mallocFailed ){
74119:       return WRC_Abort;
74120:     }
74121:   
74122:     /* Resolve the GROUP BY clause.  At the same time, make sure 
74123:     ** the GROUP BY clause does not contain aggregate functions.
74124:     */
74125:     if( pGroupBy ){
74126:       struct ExprList_item *pItem;
74127:     
74128:       if( resolveOrderGroupBy(&sNC, p, pGroupBy, "GROUP") || db->mallocFailed ){
74129:         return WRC_Abort;
74130:       }
74131:       for(i=0, pItem=pGroupBy->a; i<pGroupBy->nExpr; i++, pItem++){
74132:         if( ExprHasProperty(pItem->pExpr, EP_Agg) ){
74133:           sqlite3ErrorMsg(pParse, "aggregate functions are not allowed in "
74134:               "the GROUP BY clause");
74135:           return WRC_Abort;
74136:         }
74137:       }
74138:     }
74139: 
74140:     /* Advance to the next term of the compound
74141:     */
74142:     p = p->pPrior;
74143:     nCompound++;
74144:   }
74145: 
74146:   /* Resolve the ORDER BY on a compound SELECT after all terms of
74147:   ** the compound have been resolved.
74148:   */
74149:   if( isCompound && resolveCompoundOrderBy(pParse, pLeftmost) ){
74150:     return WRC_Abort;
74151:   }
74152: 
74153:   return WRC_Prune;
74154: }
74155: 
74156: /*
74157: ** This routine walks an expression tree and resolves references to
74158: ** table columns and result-set columns.  At the same time, do error
74159: ** checking on function usage and set a flag if any aggregate functions
74160: ** are seen.
74161: **
74162: ** To resolve table columns references we look for nodes (or subtrees) of the 
74163: ** form X.Y.Z or Y.Z or just Z where
74164: **
74165: **      X:   The name of a database.  Ex:  "main" or "temp" or
74166: **           the symbolic name assigned to an ATTACH-ed database.
74167: **
74168: **      Y:   The name of a table in a FROM clause.  Or in a trigger
74169: **           one of the special names "old" or "new".
74170: **
74171: **      Z:   The name of a column in table Y.
74172: **
74173: ** The node at the root of the subtree is modified as follows:
74174: **
74175: **    Expr.op        Changed to TK_COLUMN
74176: **    Expr.pTab      Points to the Table object for X.Y
74177: **    Expr.iColumn   The column index in X.Y.  -1 for the rowid.
74178: **    Expr.iTable    The VDBE cursor number for X.Y
74179: **
74180: **
74181: ** To resolve result-set references, look for expression nodes of the
74182: ** form Z (with no X and Y prefix) where the Z matches the right-hand
74183: ** size of an AS clause in the result-set of a SELECT.  The Z expression
74184: ** is replaced by a copy of the left-hand side of the result-set expression.
74185: ** Table-name and function resolution occurs on the substituted expression
74186: ** tree.  For example, in:
74187: **
74188: **      SELECT a+b AS x, c+d AS y FROM t1 ORDER BY x;
74189: **
74190: ** The "x" term of the order by is replaced by "a+b" to render:
74191: **
74192: **      SELECT a+b AS x, c+d AS y FROM t1 ORDER BY a+b;
74193: **
74194: ** Function calls are checked to make sure that the function is 
74195: ** defined and that the correct number of arguments are specified.
74196: ** If the function is an aggregate function, then the pNC->hasAgg is
74197: ** set and the opcode is changed from TK_FUNCTION to TK_AGG_FUNCTION.
74198: ** If an expression contains aggregate functions then the EP_Agg
74199: ** property on the expression is set.
74200: **
74201: ** An error message is left in pParse if anything is amiss.  The number
74202: ** if errors is returned.
74203: */
74204: SQLITE_PRIVATE int sqlite3ResolveExprNames( 
74205:   NameContext *pNC,       /* Namespace to resolve expressions in. */
74206:   Expr *pExpr             /* The expression to be analyzed. */
74207: ){
74208:   int savedHasAgg;
74209:   Walker w;
74210: 
74211:   if( pExpr==0 ) return 0;
74212: #if SQLITE_MAX_EXPR_DEPTH>0
74213:   {
74214:     Parse *pParse = pNC->pParse;
74215:     if( sqlite3ExprCheckHeight(pParse, pExpr->nHeight+pNC->pParse->nHeight) ){
74216:       return 1;
74217:     }
74218:     pParse->nHeight += pExpr->nHeight;
74219:   }
74220: #endif
74221:   savedHasAgg = pNC->hasAgg;
74222:   pNC->hasAgg = 0;
74223:   w.xExprCallback = resolveExprStep;
74224:   w.xSelectCallback = resolveSelectStep;
74225:   w.pParse = pNC->pParse;
74226:   w.u.pNC = pNC;
74227:   sqlite3WalkExpr(&w, pExpr);
74228: #if SQLITE_MAX_EXPR_DEPTH>0
74229:   pNC->pParse->nHeight -= pExpr->nHeight;
74230: #endif
74231:   if( pNC->nErr>0 || w.pParse->nErr>0 ){
74232:     ExprSetProperty(pExpr, EP_Error);
74233:   }
74234:   if( pNC->hasAgg ){
74235:     ExprSetProperty(pExpr, EP_Agg);
74236:   }else if( savedHasAgg ){
74237:     pNC->hasAgg = 1;
74238:   }
74239:   return ExprHasProperty(pExpr, EP_Error);
74240: }
74241: 
74242: 
74243: /*
74244: ** Resolve all names in all expressions of a SELECT and in all
74245: ** decendents of the SELECT, including compounds off of p->pPrior,
74246: ** subqueries in expressions, and subqueries used as FROM clause
74247: ** terms.
74248: **
74249: ** See sqlite3ResolveExprNames() for a description of the kinds of
74250: ** transformations that occur.
74251: **
74252: ** All SELECT statements should have been expanded using
74253: ** sqlite3SelectExpand() prior to invoking this routine.
74254: */
74255: SQLITE_PRIVATE void sqlite3ResolveSelectNames(
74256:   Parse *pParse,         /* The parser context */
74257:   Select *p,             /* The SELECT statement being coded. */
74258:   NameContext *pOuterNC  /* Name context for parent SELECT statement */
74259: ){
74260:   Walker w;
74261: 
74262:   assert( p!=0 );
74263:   w.xExprCallback = resolveExprStep;
74264:   w.xSelectCallback = resolveSelectStep;
74265:   w.pParse = pParse;
74266:   w.u.pNC = pOuterNC;
74267:   sqlite3WalkSelect(&w, p);
74268: }
74269: 
74270: /************** End of resolve.c *********************************************/
74271: /************** Begin file expr.c ********************************************/
74272: /*
74273: ** 2001 September 15
74274: **
74275: ** The author disclaims copyright to this source code.  In place of
74276: ** a legal notice, here is a blessing:
74277: **
74278: **    May you do good and not evil.
74279: **    May you find forgiveness for yourself and forgive others.
74280: **    May you share freely, never taking more than you give.
74281: **
74282: *************************************************************************
74283: ** This file contains routines used for analyzing expressions and
74284: ** for generating VDBE code that evaluates expressions in SQLite.
74285: */
74286: 
74287: /*
74288: ** Return the 'affinity' of the expression pExpr if any.
74289: **
74290: ** If pExpr is a column, a reference to a column via an 'AS' alias,
74291: ** or a sub-select with a column as the return value, then the 
74292: ** affinity of that column is returned. Otherwise, 0x00 is returned,
74293: ** indicating no affinity for the expression.
74294: **
74295: ** i.e. the WHERE clause expresssions in the following statements all
74296: ** have an affinity:
74297: **
74298: ** CREATE TABLE t1(a);
74299: ** SELECT * FROM t1 WHERE a;
74300: ** SELECT a AS b FROM t1 WHERE b;
74301: ** SELECT * FROM t1 WHERE (select a from t1);
74302: */
74303: SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr){
74304:   int op = pExpr->op;
74305:   if( op==TK_SELECT ){
74306:     assert( pExpr->flags&EP_xIsSelect );
74307:     return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr);
74308:   }
74309: #ifndef SQLITE_OMIT_CAST
74310:   if( op==TK_CAST ){
74311:     assert( !ExprHasProperty(pExpr, EP_IntValue) );
74312:     return sqlite3AffinityType(pExpr->u.zToken);
74313:   }
74314: #endif
74315:   if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER) 
74316:    && pExpr->pTab!=0
74317:   ){
74318:     /* op==TK_REGISTER && pExpr->pTab!=0 happens when pExpr was originally
74319:     ** a TK_COLUMN but was previously evaluated and cached in a register */
74320:     int j = pExpr->iColumn;
74321:     if( j<0 ) return SQLITE_AFF_INTEGER;
74322:     assert( pExpr->pTab && j<pExpr->pTab->nCol );
74323:     return pExpr->pTab->aCol[j].affinity;
74324:   }
74325:   return pExpr->affinity;
74326: }
74327: 
74328: /*
74329: ** Set the explicit collating sequence for an expression to the
74330: ** collating sequence supplied in the second argument.
74331: */
74332: SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Expr *pExpr, CollSeq *pColl){
74333:   if( pExpr && pColl ){
74334:     pExpr->pColl = pColl;
74335:     pExpr->flags |= EP_ExpCollate;
74336:   }
74337:   return pExpr;
74338: }
74339: 
74340: /*
74341: ** Set the collating sequence for expression pExpr to be the collating
74342: ** sequence named by pToken.   Return a pointer to the revised expression.
74343: ** The collating sequence is marked as "explicit" using the EP_ExpCollate
74344: ** flag.  An explicit collating sequence will override implicit
74345: ** collating sequences.
74346: */
74347: SQLITE_PRIVATE Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr *pExpr, Token *pCollName){
74348:   char *zColl = 0;            /* Dequoted name of collation sequence */
74349:   CollSeq *pColl;
74350:   sqlite3 *db = pParse->db;
74351:   zColl = sqlite3NameFromToken(db, pCollName);
74352:   pColl = sqlite3LocateCollSeq(pParse, zColl);
74353:   sqlite3ExprSetColl(pExpr, pColl);
74354:   sqlite3DbFree(db, zColl);
74355:   return pExpr;
74356: }
74357: 
74358: /*
74359: ** Return the default collation sequence for the expression pExpr. If
74360: ** there is no default collation type, return 0.
74361: */
74362: SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){
74363:   CollSeq *pColl = 0;
74364:   Expr *p = pExpr;
74365:   while( p ){
74366:     int op;
74367:     pColl = p->pColl;
74368:     if( pColl ) break;
74369:     op = p->op;
74370:     if( p->pTab!=0 && (
74371:         op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER || op==TK_TRIGGER
74372:     )){
74373:       /* op==TK_REGISTER && p->pTab!=0 happens when pExpr was originally
74374:       ** a TK_COLUMN but was previously evaluated and cached in a register */
74375:       const char *zColl;
74376:       int j = p->iColumn;
74377:       if( j>=0 ){
74378:         sqlite3 *db = pParse->db;
74379:         zColl = p->pTab->aCol[j].zColl;
74380:         pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0);
74381:         pExpr->pColl = pColl;
74382:       }
74383:       break;
74384:     }
74385:     if( op!=TK_CAST && op!=TK_UPLUS ){
74386:       break;
74387:     }
74388:     p = p->pLeft;
74389:   }
74390:   if( sqlite3CheckCollSeq(pParse, pColl) ){ 
74391:     pColl = 0;
74392:   }
74393:   return pColl;
74394: }
74395: 
74396: /*
74397: ** pExpr is an operand of a comparison operator.  aff2 is the
74398: ** type affinity of the other operand.  This routine returns the
74399: ** type affinity that should be used for the comparison operator.
74400: */
74401: SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2){
74402:   char aff1 = sqlite3ExprAffinity(pExpr);
74403:   if( aff1 && aff2 ){
74404:     /* Both sides of the comparison are columns. If one has numeric
74405:     ** affinity, use that. Otherwise use no affinity.
74406:     */
74407:     if( sqlite3IsNumericAffinity(aff1) || sqlite3IsNumericAffinity(aff2) ){
74408:       return SQLITE_AFF_NUMERIC;
74409:     }else{
74410:       return SQLITE_AFF_NONE;
74411:     }
74412:   }else if( !aff1 && !aff2 ){
74413:     /* Neither side of the comparison is a column.  Compare the
74414:     ** results directly.
74415:     */
74416:     return SQLITE_AFF_NONE;
74417:   }else{
74418:     /* One side is a column, the other is not. Use the columns affinity. */
74419:     assert( aff1==0 || aff2==0 );
74420:     return (aff1 + aff2);
74421:   }
74422: }
74423: 
74424: /*
74425: ** pExpr is a comparison operator.  Return the type affinity that should
74426: ** be applied to both operands prior to doing the comparison.
74427: */
74428: static char comparisonAffinity(Expr *pExpr){
74429:   char aff;
74430:   assert( pExpr->op==TK_EQ || pExpr->op==TK_IN || pExpr->op==TK_LT ||
74431:           pExpr->op==TK_GT || pExpr->op==TK_GE || pExpr->op==TK_LE ||
74432:           pExpr->op==TK_NE || pExpr->op==TK_IS || pExpr->op==TK_ISNOT );
74433:   assert( pExpr->pLeft );
74434:   aff = sqlite3ExprAffinity(pExpr->pLeft);
74435:   if( pExpr->pRight ){
74436:     aff = sqlite3CompareAffinity(pExpr->pRight, aff);
74437:   }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){
74438:     aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff);
74439:   }else if( !aff ){
74440:     aff = SQLITE_AFF_NONE;
74441:   }
74442:   return aff;
74443: }
74444: 
74445: /*
74446: ** pExpr is a comparison expression, eg. '=', '<', IN(...) etc.
74447: ** idx_affinity is the affinity of an indexed column. Return true
74448: ** if the index with affinity idx_affinity may be used to implement
74449: ** the comparison in pExpr.
74450: */
74451: SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity){
74452:   char aff = comparisonAffinity(pExpr);
74453:   switch( aff ){
74454:     case SQLITE_AFF_NONE:
74455:       return 1;
74456:     case SQLITE_AFF_TEXT:
74457:       return idx_affinity==SQLITE_AFF_TEXT;
74458:     default:
74459:       return sqlite3IsNumericAffinity(idx_affinity);
74460:   }
74461: }
74462: 
74463: /*
74464: ** Return the P5 value that should be used for a binary comparison
74465: ** opcode (OP_Eq, OP_Ge etc.) used to compare pExpr1 and pExpr2.
74466: */
74467: static u8 binaryCompareP5(Expr *pExpr1, Expr *pExpr2, int jumpIfNull){
74468:   u8 aff = (char)sqlite3ExprAffinity(pExpr2);
74469:   aff = (u8)sqlite3CompareAffinity(pExpr1, aff) | (u8)jumpIfNull;
74470:   return aff;
74471: }
74472: 
74473: /*
74474: ** Return a pointer to the collation sequence that should be used by
74475: ** a binary comparison operator comparing pLeft and pRight.
74476: **
74477: ** If the left hand expression has a collating sequence type, then it is
74478: ** used. Otherwise the collation sequence for the right hand expression
74479: ** is used, or the default (BINARY) if neither expression has a collating
74480: ** type.
74481: **
74482: ** Argument pRight (but not pLeft) may be a null pointer. In this case,
74483: ** it is not considered.
74484: */
74485: SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(
74486:   Parse *pParse, 
74487:   Expr *pLeft, 
74488:   Expr *pRight
74489: ){
74490:   CollSeq *pColl;
74491:   assert( pLeft );
74492:   if( pLeft->flags & EP_ExpCollate ){
74493:     assert( pLeft->pColl );
74494:     pColl = pLeft->pColl;
74495:   }else if( pRight && pRight->flags & EP_ExpCollate ){
74496:     assert( pRight->pColl );
74497:     pColl = pRight->pColl;
74498:   }else{
74499:     pColl = sqlite3ExprCollSeq(pParse, pLeft);
74500:     if( !pColl ){
74501:       pColl = sqlite3ExprCollSeq(pParse, pRight);
74502:     }
74503:   }
74504:   return pColl;
74505: }
74506: 
74507: /*
74508: ** Generate code for a comparison operator.
74509: */
74510: static int codeCompare(
74511:   Parse *pParse,    /* The parsing (and code generating) context */
74512:   Expr *pLeft,      /* The left operand */
74513:   Expr *pRight,     /* The right operand */
74514:   int opcode,       /* The comparison opcode */
74515:   int in1, int in2, /* Register holding operands */
74516:   int dest,         /* Jump here if true.  */
74517:   int jumpIfNull    /* If true, jump if either operand is NULL */
74518: ){
74519:   int p5;
74520:   int addr;
74521:   CollSeq *p4;
74522: 
74523:   p4 = sqlite3BinaryCompareCollSeq(pParse, pLeft, pRight);
74524:   p5 = binaryCompareP5(pLeft, pRight, jumpIfNull);
74525:   addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1,
74526:                            (void*)p4, P4_COLLSEQ);
74527:   sqlite3VdbeChangeP5(pParse->pVdbe, (u8)p5);
74528:   return addr;
74529: }
74530: 
74531: #if SQLITE_MAX_EXPR_DEPTH>0
74532: /*
74533: ** Check that argument nHeight is less than or equal to the maximum
74534: ** expression depth allowed. If it is not, leave an error message in
74535: ** pParse.
74536: */
74537: SQLITE_PRIVATE int sqlite3ExprCheckHeight(Parse *pParse, int nHeight){
74538:   int rc = SQLITE_OK;
74539:   int mxHeight = pParse->db->aLimit[SQLITE_LIMIT_EXPR_DEPTH];
74540:   if( nHeight>mxHeight ){
74541:     sqlite3ErrorMsg(pParse, 
74542:        "Expression tree is too large (maximum depth %d)", mxHeight
74543:     );
74544:     rc = SQLITE_ERROR;
74545:   }
74546:   return rc;
74547: }
74548: 
74549: /* The following three functions, heightOfExpr(), heightOfExprList()
74550: ** and heightOfSelect(), are used to determine the maximum height
74551: ** of any expression tree referenced by the structure passed as the
74552: ** first argument.
74553: **
74554: ** If this maximum height is greater than the current value pointed
74555: ** to by pnHeight, the second parameter, then set *pnHeight to that
74556: ** value.
74557: */
74558: static void heightOfExpr(Expr *p, int *pnHeight){
74559:   if( p ){
74560:     if( p->nHeight>*pnHeight ){
74561:       *pnHeight = p->nHeight;
74562:     }
74563:   }
74564: }
74565: static void heightOfExprList(ExprList *p, int *pnHeight){
74566:   if( p ){
74567:     int i;
74568:     for(i=0; i<p->nExpr; i++){
74569:       heightOfExpr(p->a[i].pExpr, pnHeight);
74570:     }
74571:   }
74572: }
74573: static void heightOfSelect(Select *p, int *pnHeight){
74574:   if( p ){
74575:     heightOfExpr(p->pWhere, pnHeight);
74576:     heightOfExpr(p->pHaving, pnHeight);
74577:     heightOfExpr(p->pLimit, pnHeight);
74578:     heightOfExpr(p->pOffset, pnHeight);
74579:     heightOfExprList(p->pEList, pnHeight);
74580:     heightOfExprList(p->pGroupBy, pnHeight);
74581:     heightOfExprList(p->pOrderBy, pnHeight);
74582:     heightOfSelect(p->pPrior, pnHeight);
74583:   }
74584: }
74585: 
74586: /*
74587: ** Set the Expr.nHeight variable in the structure passed as an 
74588: ** argument. An expression with no children, Expr.pList or 
74589: ** Expr.pSelect member has a height of 1. Any other expression
74590: ** has a height equal to the maximum height of any other 
74591: ** referenced Expr plus one.
74592: */
74593: static void exprSetHeight(Expr *p){
74594:   int nHeight = 0;
74595:   heightOfExpr(p->pLeft, &nHeight);
74596:   heightOfExpr(p->pRight, &nHeight);
74597:   if( ExprHasProperty(p, EP_xIsSelect) ){
74598:     heightOfSelect(p->x.pSelect, &nHeight);
74599:   }else{
74600:     heightOfExprList(p->x.pList, &nHeight);
74601:   }
74602:   p->nHeight = nHeight + 1;
74603: }
74604: 
74605: /*
74606: ** Set the Expr.nHeight variable using the exprSetHeight() function. If
74607: ** the height is greater than the maximum allowed expression depth,
74608: ** leave an error in pParse.
74609: */
74610: SQLITE_PRIVATE void sqlite3ExprSetHeight(Parse *pParse, Expr *p){
74611:   exprSetHeight(p);
74612:   sqlite3ExprCheckHeight(pParse, p->nHeight);
74613: }
74614: 
74615: /*
74616: ** Return the maximum height of any expression tree referenced
74617: ** by the select statement passed as an argument.
74618: */
74619: SQLITE_PRIVATE int sqlite3SelectExprHeight(Select *p){
74620:   int nHeight = 0;
74621:   heightOfSelect(p, &nHeight);
74622:   return nHeight;
74623: }
74624: #else
74625:   #define exprSetHeight(y)
74626: #endif /* SQLITE_MAX_EXPR_DEPTH>0 */
74627: 
74628: /*
74629: ** This routine is the core allocator for Expr nodes.
74630: **
74631: ** Construct a new expression node and return a pointer to it.  Memory
74632: ** for this node and for the pToken argument is a single allocation
74633: ** obtained from sqlite3DbMalloc().  The calling function
74634: ** is responsible for making sure the node eventually gets freed.
74635: **
74636: ** If dequote is true, then the token (if it exists) is dequoted.
74637: ** If dequote is false, no dequoting is performance.  The deQuote
74638: ** parameter is ignored if pToken is NULL or if the token does not
74639: ** appear to be quoted.  If the quotes were of the form "..." (double-quotes)
74640: ** then the EP_DblQuoted flag is set on the expression node.
74641: **
74642: ** Special case:  If op==TK_INTEGER and pToken points to a string that
74643: ** can be translated into a 32-bit integer, then the token is not
74644: ** stored in u.zToken.  Instead, the integer values is written
74645: ** into u.iValue and the EP_IntValue flag is set.  No extra storage
74646: ** is allocated to hold the integer text and the dequote flag is ignored.
74647: */
74648: SQLITE_PRIVATE Expr *sqlite3ExprAlloc(
74649:   sqlite3 *db,            /* Handle for sqlite3DbMallocZero() (may be null) */
74650:   int op,                 /* Expression opcode */
74651:   const Token *pToken,    /* Token argument.  Might be NULL */
74652:   int dequote             /* True to dequote */
74653: ){
74654:   Expr *pNew;
74655:   int nExtra = 0;
74656:   int iValue = 0;
74657: 
74658:   if( pToken ){
74659:     if( op!=TK_INTEGER || pToken->z==0
74660:           || sqlite3GetInt32(pToken->z, &iValue)==0 ){
74661:       nExtra = pToken->n+1;
74662:       assert( iValue>=0 );
74663:     }
74664:   }
74665:   pNew = sqlite3DbMallocZero(db, sizeof(Expr)+nExtra);
74666:   if( pNew ){
74667:     pNew->op = (u8)op;
74668:     pNew->iAgg = -1;
74669:     if( pToken ){
74670:       if( nExtra==0 ){
74671:         pNew->flags |= EP_IntValue;
74672:         pNew->u.iValue = iValue;
74673:       }else{
74674:         int c;
74675:         pNew->u.zToken = (char*)&pNew[1];
74676:         assert( pToken->z!=0 || pToken->n==0 );
74677:         if( pToken->n ) memcpy(pNew->u.zToken, pToken->z, pToken->n);
74678:         pNew->u.zToken[pToken->n] = 0;
74679:         if( dequote && nExtra>=3 
74680:              && ((c = pToken->z[0])=='\'' || c=='"' || c=='[' || c=='`') ){
74681:           sqlite3Dequote(pNew->u.zToken);
74682:           if( c=='"' ) pNew->flags |= EP_DblQuoted;
74683:         }
74684:       }
74685:     }
74686: #if SQLITE_MAX_EXPR_DEPTH>0
74687:     pNew->nHeight = 1;
74688: #endif  
74689:   }
74690:   return pNew;
74691: }
74692: 
74693: /*
74694: ** Allocate a new expression node from a zero-terminated token that has
74695: ** already been dequoted.
74696: */
74697: SQLITE_PRIVATE Expr *sqlite3Expr(
74698:   sqlite3 *db,            /* Handle for sqlite3DbMallocZero() (may be null) */
74699:   int op,                 /* Expression opcode */
74700:   const char *zToken      /* Token argument.  Might be NULL */
74701: ){
74702:   Token x;
74703:   x.z = zToken;
74704:   x.n = zToken ? sqlite3Strlen30(zToken) : 0;
74705:   return sqlite3ExprAlloc(db, op, &x, 0);
74706: }
74707: 
74708: /*
74709: ** Attach subtrees pLeft and pRight to the Expr node pRoot.
74710: **
74711: ** If pRoot==NULL that means that a memory allocation error has occurred.
74712: ** In that case, delete the subtrees pLeft and pRight.
74713: */
74714: SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(
74715:   sqlite3 *db,
74716:   Expr *pRoot,
74717:   Expr *pLeft,
74718:   Expr *pRight
74719: ){
74720:   if( pRoot==0 ){
74721:     assert( db->mallocFailed );
74722:     sqlite3ExprDelete(db, pLeft);
74723:     sqlite3ExprDelete(db, pRight);
74724:   }else{
74725:     if( pRight ){
74726:       pRoot->pRight = pRight;
74727:       if( pRight->flags & EP_ExpCollate ){
74728:         pRoot->flags |= EP_ExpCollate;
74729:         pRoot->pColl = pRight->pColl;
74730:       }
74731:     }
74732:     if( pLeft ){
74733:       pRoot->pLeft = pLeft;
74734:       if( pLeft->flags & EP_ExpCollate ){
74735:         pRoot->flags |= EP_ExpCollate;
74736:         pRoot->pColl = pLeft->pColl;
74737:       }
74738:     }
74739:     exprSetHeight(pRoot);
74740:   }
74741: }
74742: 
74743: /*
74744: ** Allocate a Expr node which joins as many as two subtrees.
74745: **
74746: ** One or both of the subtrees can be NULL.  Return a pointer to the new
74747: ** Expr node.  Or, if an OOM error occurs, set pParse->db->mallocFailed,
74748: ** free the subtrees and return NULL.
74749: */
74750: SQLITE_PRIVATE Expr *sqlite3PExpr(
74751:   Parse *pParse,          /* Parsing context */
74752:   int op,                 /* Expression opcode */
74753:   Expr *pLeft,            /* Left operand */
74754:   Expr *pRight,           /* Right operand */
74755:   const Token *pToken     /* Argument token */
74756: ){
74757:   Expr *p = sqlite3ExprAlloc(pParse->db, op, pToken, 1);
74758:   sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight);
74759:   if( p ) {
74760:     sqlite3ExprCheckHeight(pParse, p->nHeight);
74761:   }
74762:   return p;
74763: }
74764: 
74765: /*
74766: ** Join two expressions using an AND operator.  If either expression is
74767: ** NULL, then just return the other expression.
74768: */
74769: SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRight){
74770:   if( pLeft==0 ){
74771:     return pRight;
74772:   }else if( pRight==0 ){
74773:     return pLeft;
74774:   }else{
74775:     Expr *pNew = sqlite3ExprAlloc(db, TK_AND, 0, 0);
74776:     sqlite3ExprAttachSubtrees(db, pNew, pLeft, pRight);
74777:     return pNew;
74778:   }
74779: }
74780: 
74781: /*
74782: ** Construct a new expression node for a function with multiple
74783: ** arguments.
74784: */
74785: SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){
74786:   Expr *pNew;
74787:   sqlite3 *db = pParse->db;
74788:   assert( pToken );
74789:   pNew = sqlite3ExprAlloc(db, TK_FUNCTION, pToken, 1);
74790:   if( pNew==0 ){
74791:     sqlite3ExprListDelete(db, pList); /* Avoid memory leak when malloc fails */
74792:     return 0;
74793:   }
74794:   pNew->x.pList = pList;
74795:   assert( !ExprHasProperty(pNew, EP_xIsSelect) );
74796:   sqlite3ExprSetHeight(pParse, pNew);
74797:   return pNew;
74798: }
74799: 
74800: /*
74801: ** Assign a variable number to an expression that encodes a wildcard
74802: ** in the original SQL statement.  
74803: **
74804: ** Wildcards consisting of a single "?" are assigned the next sequential
74805: ** variable number.
74806: **
74807: ** Wildcards of the form "?nnn" are assigned the number "nnn".  We make
74808: ** sure "nnn" is not too be to avoid a denial of service attack when
74809: ** the SQL statement comes from an external source.
74810: **
74811: ** Wildcards of the form ":aaa", "@aaa", or "$aaa" are assigned the same number
74812: ** as the previous instance of the same wildcard.  Or if this is the first
74813: ** instance of the wildcard, the next sequenial variable number is
74814: ** assigned.
74815: */
74816: SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){
74817:   sqlite3 *db = pParse->db;
74818:   const char *z;
74819: 
74820:   if( pExpr==0 ) return;
74821:   assert( !ExprHasAnyProperty(pExpr, EP_IntValue|EP_Reduced|EP_TokenOnly) );
74822:   z = pExpr->u.zToken;
74823:   assert( z!=0 );
74824:   assert( z[0]!=0 );
74825:   if( z[1]==0 ){
74826:     /* Wildcard of the form "?".  Assign the next variable number */
74827:     assert( z[0]=='?' );
74828:     pExpr->iColumn = (ynVar)(++pParse->nVar);
74829:   }else{
74830:     ynVar x = 0;
74831:     u32 n = sqlite3Strlen30(z);
74832:     if( z[0]=='?' ){
74833:       /* Wildcard of the form "?nnn".  Convert "nnn" to an integer and
74834:       ** use it as the variable number */
74835:       i64 i;
74836:       int bOk = 0==sqlite3Atoi64(&z[1], &i, n-1, SQLITE_UTF8);
74837:       pExpr->iColumn = x = (ynVar)i;
74838:       testcase( i==0 );
74839:       testcase( i==1 );
74840:       testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 );
74841:       testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] );
74842:       if( bOk==0 || i<1 || i>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
74843:         sqlite3ErrorMsg(pParse, "variable number must be between ?1 and ?%d",
74844:             db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]);
74845:         x = 0;
74846:       }
74847:       if( i>pParse->nVar ){
74848:         pParse->nVar = (int)i;
74849:       }
74850:     }else{
74851:       /* Wildcards like ":aaa", "$aaa" or "@aaa".  Reuse the same variable
74852:       ** number as the prior appearance of the same name, or if the name
74853:       ** has never appeared before, reuse the same variable number
74854:       */
74855:       ynVar i;
74856:       for(i=0; i<pParse->nzVar; i++){
74857:         if( pParse->azVar[i] && memcmp(pParse->azVar[i],z,n+1)==0 ){
74858:           pExpr->iColumn = x = (ynVar)i+1;
74859:           break;
74860:         }
74861:       }
74862:       if( x==0 ) x = pExpr->iColumn = (ynVar)(++pParse->nVar);
74863:     }
74864:     if( x>0 ){
74865:       if( x>pParse->nzVar ){
74866:         char **a;
74867:         a = sqlite3DbRealloc(db, pParse->azVar, x*sizeof(a[0]));
74868:         if( a==0 ) return;  /* Error reported through db->mallocFailed */
74869:         pParse->azVar = a;
74870:         memset(&a[pParse->nzVar], 0, (x-pParse->nzVar)*sizeof(a[0]));
74871:         pParse->nzVar = x;
74872:       }
74873:       if( z[0]!='?' || pParse->azVar[x-1]==0 ){
74874:         sqlite3DbFree(db, pParse->azVar[x-1]);
74875:         pParse->azVar[x-1] = sqlite3DbStrNDup(db, z, n);
74876:       }
74877:     }
74878:   } 
74879:   if( !pParse->nErr && pParse->nVar>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
74880:     sqlite3ErrorMsg(pParse, "too many SQL variables");
74881:   }
74882: }
74883: 
74884: /*
74885: ** Recursively delete an expression tree.
74886: */
74887: SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){
74888:   if( p==0 ) return;
74889:   /* Sanity check: Assert that the IntValue is non-negative if it exists */
74890:   assert( !ExprHasProperty(p, EP_IntValue) || p->u.iValue>=0 );
74891:   if( !ExprHasAnyProperty(p, EP_TokenOnly) ){
74892:     sqlite3ExprDelete(db, p->pLeft);
74893:     sqlite3ExprDelete(db, p->pRight);
74894:     if( !ExprHasProperty(p, EP_Reduced) && (p->flags2 & EP2_MallocedToken)!=0 ){
74895:       sqlite3DbFree(db, p->u.zToken);
74896:     }
74897:     if( ExprHasProperty(p, EP_xIsSelect) ){
74898:       sqlite3SelectDelete(db, p->x.pSelect);
74899:     }else{
74900:       sqlite3ExprListDelete(db, p->x.pList);
74901:     }
74902:   }
74903:   if( !ExprHasProperty(p, EP_Static) ){
74904:     sqlite3DbFree(db, p);
74905:   }
74906: }
74907: 
74908: /*
74909: ** Return the number of bytes allocated for the expression structure 
74910: ** passed as the first argument. This is always one of EXPR_FULLSIZE,
74911: ** EXPR_REDUCEDSIZE or EXPR_TOKENONLYSIZE.
74912: */
74913: static int exprStructSize(Expr *p){
74914:   if( ExprHasProperty(p, EP_TokenOnly) ) return EXPR_TOKENONLYSIZE;
74915:   if( ExprHasProperty(p, EP_Reduced) ) return EXPR_REDUCEDSIZE;
74916:   return EXPR_FULLSIZE;
74917: }
74918: 
74919: /*
74920: ** The dupedExpr*Size() routines each return the number of bytes required
74921: ** to store a copy of an expression or expression tree.  They differ in
74922: ** how much of the tree is measured.
74923: **
74924: **     dupedExprStructSize()     Size of only the Expr structure 
74925: **     dupedExprNodeSize()       Size of Expr + space for token
74926: **     dupedExprSize()           Expr + token + subtree components
74927: **
74928: ***************************************************************************
74929: **
74930: ** The dupedExprStructSize() function returns two values OR-ed together:  
74931: ** (1) the space required for a copy of the Expr structure only and 
74932: ** (2) the EP_xxx flags that indicate what the structure size should be.
74933: ** The return values is always one of:
74934: **
74935: **      EXPR_FULLSIZE
74936: **      EXPR_REDUCEDSIZE   | EP_Reduced
74937: **      EXPR_TOKENONLYSIZE | EP_TokenOnly
74938: **
74939: ** The size of the structure can be found by masking the return value
74940: ** of this routine with 0xfff.  The flags can be found by masking the
74941: ** return value with EP_Reduced|EP_TokenOnly.
74942: **
74943: ** Note that with flags==EXPRDUP_REDUCE, this routines works on full-size
74944: ** (unreduced) Expr objects as they or originally constructed by the parser.
74945: ** During expression analysis, extra information is computed and moved into
74946: ** later parts of teh Expr object and that extra information might get chopped
74947: ** off if the expression is reduced.  Note also that it does not work to
74948: ** make a EXPRDUP_REDUCE copy of a reduced expression.  It is only legal
74949: ** to reduce a pristine expression tree from the parser.  The implementation
74950: ** of dupedExprStructSize() contain multiple assert() statements that attempt
74951: ** to enforce this constraint.
74952: */
74953: static int dupedExprStructSize(Expr *p, int flags){
74954:   int nSize;
74955:   assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */
74956:   if( 0==(flags&EXPRDUP_REDUCE) ){
74957:     nSize = EXPR_FULLSIZE;
74958:   }else{
74959:     assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) );
74960:     assert( !ExprHasProperty(p, EP_FromJoin) ); 
74961:     assert( (p->flags2 & EP2_MallocedToken)==0 );
74962:     assert( (p->flags2 & EP2_Irreducible)==0 );
74963:     if( p->pLeft || p->pRight || p->pColl || p->x.pList ){
74964:       nSize = EXPR_REDUCEDSIZE | EP_Reduced;
74965:     }else{
74966:       nSize = EXPR_TOKENONLYSIZE | EP_TokenOnly;
74967:     }
74968:   }
74969:   return nSize;
74970: }
74971: 
74972: /*
74973: ** This function returns the space in bytes required to store the copy 
74974: ** of the Expr structure and a copy of the Expr.u.zToken string (if that
74975: ** string is defined.)
74976: */
74977: static int dupedExprNodeSize(Expr *p, int flags){
74978:   int nByte = dupedExprStructSize(p, flags) & 0xfff;
74979:   if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
74980:     nByte += sqlite3Strlen30(p->u.zToken)+1;
74981:   }
74982:   return ROUND8(nByte);
74983: }
74984: 
74985: /*
74986: ** Return the number of bytes required to create a duplicate of the 
74987: ** expression passed as the first argument. The second argument is a
74988: ** mask containing EXPRDUP_XXX flags.
74989: **
74990: ** The value returned includes space to create a copy of the Expr struct
74991: ** itself and the buffer referred to by Expr.u.zToken, if any.
74992: **
74993: ** If the EXPRDUP_REDUCE flag is set, then the return value includes 
74994: ** space to duplicate all Expr nodes in the tree formed by Expr.pLeft 
74995: ** and Expr.pRight variables (but not for any structures pointed to or 
74996: ** descended from the Expr.x.pList or Expr.x.pSelect variables).
74997: */
74998: static int dupedExprSize(Expr *p, int flags){
74999:   int nByte = 0;
75000:   if( p ){
75001:     nByte = dupedExprNodeSize(p, flags);
75002:     if( flags&EXPRDUP_REDUCE ){
75003:       nByte += dupedExprSize(p->pLeft, flags) + dupedExprSize(p->pRight, flags);
75004:     }
75005:   }
75006:   return nByte;
75007: }
75008: 
75009: /*
75010: ** This function is similar to sqlite3ExprDup(), except that if pzBuffer 
75011: ** is not NULL then *pzBuffer is assumed to point to a buffer large enough 
75012: ** to store the copy of expression p, the copies of p->u.zToken
75013: ** (if applicable), and the copies of the p->pLeft and p->pRight expressions,
75014: ** if any. Before returning, *pzBuffer is set to the first byte passed the
75015: ** portion of the buffer copied into by this function.
75016: */
75017: static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
75018:   Expr *pNew = 0;                      /* Value to return */
75019:   if( p ){
75020:     const int isReduced = (flags&EXPRDUP_REDUCE);
75021:     u8 *zAlloc;
75022:     u32 staticFlag = 0;
75023: 
75024:     assert( pzBuffer==0 || isReduced );
75025: 
75026:     /* Figure out where to write the new Expr structure. */
75027:     if( pzBuffer ){
75028:       zAlloc = *pzBuffer;
75029:       staticFlag = EP_Static;
75030:     }else{
75031:       zAlloc = sqlite3DbMallocRaw(db, dupedExprSize(p, flags));
75032:     }
75033:     pNew = (Expr *)zAlloc;
75034: 
75035:     if( pNew ){
75036:       /* Set nNewSize to the size allocated for the structure pointed to
75037:       ** by pNew. This is either EXPR_FULLSIZE, EXPR_REDUCEDSIZE or
75038:       ** EXPR_TOKENONLYSIZE. nToken is set to the number of bytes consumed
75039:       ** by the copy of the p->u.zToken string (if any).
75040:       */
75041:       const unsigned nStructSize = dupedExprStructSize(p, flags);
75042:       const int nNewSize = nStructSize & 0xfff;
75043:       int nToken;
75044:       if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
75045:         nToken = sqlite3Strlen30(p->u.zToken) + 1;
75046:       }else{
75047:         nToken = 0;
75048:       }
75049:       if( isReduced ){
75050:         assert( ExprHasProperty(p, EP_Reduced)==0 );
75051:         memcpy(zAlloc, p, nNewSize);
75052:       }else{
75053:         int nSize = exprStructSize(p);
75054:         memcpy(zAlloc, p, nSize);
75055:         memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize);
75056:       }
75057: 
75058:       /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */
75059:       pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static);
75060:       pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly);
75061:       pNew->flags |= staticFlag;
75062: 
75063:       /* Copy the p->u.zToken string, if any. */
75064:       if( nToken ){
75065:         char *zToken = pNew->u.zToken = (char*)&zAlloc[nNewSize];
75066:         memcpy(zToken, p->u.zToken, nToken);
75067:       }
75068: 
75069:       if( 0==((p->flags|pNew->flags) & EP_TokenOnly) ){
75070:         /* Fill in the pNew->x.pSelect or pNew->x.pList member. */
75071:         if( ExprHasProperty(p, EP_xIsSelect) ){
75072:           pNew->x.pSelect = sqlite3SelectDup(db, p->x.pSelect, isReduced);
75073:         }else{
75074:           pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, isReduced);
75075:         }
75076:       }
75077: 
75078:       /* Fill in pNew->pLeft and pNew->pRight. */
75079:       if( ExprHasAnyProperty(pNew, EP_Reduced|EP_TokenOnly) ){
75080:         zAlloc += dupedExprNodeSize(p, flags);
75081:         if( ExprHasProperty(pNew, EP_Reduced) ){
75082:           pNew->pLeft = exprDup(db, p->pLeft, EXPRDUP_REDUCE, &zAlloc);
75083:           pNew->pRight = exprDup(db, p->pRight, EXPRDUP_REDUCE, &zAlloc);
75084:         }
75085:         if( pzBuffer ){
75086:           *pzBuffer = zAlloc;
75087:         }
75088:       }else{
75089:         pNew->flags2 = 0;
75090:         if( !ExprHasAnyProperty(p, EP_TokenOnly) ){
75091:           pNew->pLeft = sqlite3ExprDup(db, p->pLeft, 0);
75092:           pNew->pRight = sqlite3ExprDup(db, p->pRight, 0);
75093:         }
75094:       }
75095: 
75096:     }
75097:   }
75098:   return pNew;
75099: }
75100: 
75101: /*
75102: ** The following group of routines make deep copies of expressions,
75103: ** expression lists, ID lists, and select statements.  The copies can
75104: ** be deleted (by being passed to their respective ...Delete() routines)
75105: ** without effecting the originals.
75106: **
75107: ** The expression list, ID, and source lists return by sqlite3ExprListDup(),
75108: ** sqlite3IdListDup(), and sqlite3SrcListDup() can not be further expanded 
75109: ** by subsequent calls to sqlite*ListAppend() routines.
75110: **
75111: ** Any tables that the SrcList might point to are not duplicated.
75112: **
75113: ** The flags parameter contains a combination of the EXPRDUP_XXX flags.
75114: ** If the EXPRDUP_REDUCE flag is set, then the structure returned is a
75115: ** truncated version of the usual Expr structure that will be stored as
75116: ** part of the in-memory representation of the database schema.
75117: */
75118: SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3 *db, Expr *p, int flags){
75119:   return exprDup(db, p, flags, 0);
75120: }
75121: SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){
75122:   ExprList *pNew;
75123:   struct ExprList_item *pItem, *pOldItem;
75124:   int i;
75125:   if( p==0 ) return 0;
75126:   pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
75127:   if( pNew==0 ) return 0;
75128:   pNew->iECursor = 0;
75129:   pNew->nExpr = pNew->nAlloc = p->nExpr;
75130:   pNew->a = pItem = sqlite3DbMallocRaw(db,  p->nExpr*sizeof(p->a[0]) );
75131:   if( pItem==0 ){
75132:     sqlite3DbFree(db, pNew);
75133:     return 0;
75134:   } 
75135:   pOldItem = p->a;
75136:   for(i=0; i<p->nExpr; i++, pItem++, pOldItem++){
75137:     Expr *pOldExpr = pOldItem->pExpr;
75138:     pItem->pExpr = sqlite3ExprDup(db, pOldExpr, flags);
75139:     pItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
75140:     pItem->zSpan = sqlite3DbStrDup(db, pOldItem->zSpan);
75141:     pItem->sortOrder = pOldItem->sortOrder;
75142:     pItem->done = 0;
75143:     pItem->iOrderByCol = pOldItem->iOrderByCol;
75144:     pItem->iAlias = pOldItem->iAlias;
75145:   }
75146:   return pNew;
75147: }
75148: 
75149: /*
75150: ** If cursors, triggers, views and subqueries are all omitted from
75151: ** the build, then none of the following routines, except for 
75152: ** sqlite3SelectDup(), can be called. sqlite3SelectDup() is sometimes
75153: ** called with a NULL argument.
75154: */
75155: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) \
75156:  || !defined(SQLITE_OMIT_SUBQUERY)
75157: SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){
75158:   SrcList *pNew;
75159:   int i;
75160:   int nByte;
75161:   if( p==0 ) return 0;
75162:   nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0);
75163:   pNew = sqlite3DbMallocRaw(db, nByte );
75164:   if( pNew==0 ) return 0;
75165:   pNew->nSrc = pNew->nAlloc = p->nSrc;
75166:   for(i=0; i<p->nSrc; i++){
75167:     struct SrcList_item *pNewItem = &pNew->a[i];
75168:     struct SrcList_item *pOldItem = &p->a[i];
75169:     Table *pTab;
75170:     pNewItem->zDatabase = sqlite3DbStrDup(db, pOldItem->zDatabase);
75171:     pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
75172:     pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias);
75173:     pNewItem->jointype = pOldItem->jointype;
75174:     pNewItem->iCursor = pOldItem->iCursor;
75175:     pNewItem->addrFillSub = pOldItem->addrFillSub;
75176:     pNewItem->regReturn = pOldItem->regReturn;
75177:     pNewItem->isCorrelated = pOldItem->isCorrelated;
75178:     pNewItem->zIndex = sqlite3DbStrDup(db, pOldItem->zIndex);
75179:     pNewItem->notIndexed = pOldItem->notIndexed;
75180:     pNewItem->pIndex = pOldItem->pIndex;
75181:     pTab = pNewItem->pTab = pOldItem->pTab;
75182:     if( pTab ){
75183:       pTab->nRef++;
75184:     }
75185:     pNewItem->pSelect = sqlite3SelectDup(db, pOldItem->pSelect, flags);
75186:     pNewItem->pOn = sqlite3ExprDup(db, pOldItem->pOn, flags);
75187:     pNewItem->pUsing = sqlite3IdListDup(db, pOldItem->pUsing);
75188:     pNewItem->colUsed = pOldItem->colUsed;
75189:   }
75190:   return pNew;
75191: }
75192: SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){
75193:   IdList *pNew;
75194:   int i;
75195:   if( p==0 ) return 0;
75196:   pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
75197:   if( pNew==0 ) return 0;
75198:   pNew->nId = pNew->nAlloc = p->nId;
75199:   pNew->a = sqlite3DbMallocRaw(db, p->nId*sizeof(p->a[0]) );
75200:   if( pNew->a==0 ){
75201:     sqlite3DbFree(db, pNew);
75202:     return 0;
75203:   }
75204:   for(i=0; i<p->nId; i++){
75205:     struct IdList_item *pNewItem = &pNew->a[i];
75206:     struct IdList_item *pOldItem = &p->a[i];
75207:     pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
75208:     pNewItem->idx = pOldItem->idx;
75209:   }
75210:   return pNew;
75211: }
75212: SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
75213:   Select *pNew, *pPrior;
75214:   if( p==0 ) return 0;
75215:   pNew = sqlite3DbMallocRaw(db, sizeof(*p) );
75216:   if( pNew==0 ) return 0;
75217:   pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags);
75218:   pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags);
75219:   pNew->pWhere = sqlite3ExprDup(db, p->pWhere, flags);
75220:   pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy, flags);
75221:   pNew->pHaving = sqlite3ExprDup(db, p->pHaving, flags);
75222:   pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, flags);
75223:   pNew->op = p->op;
75224:   pNew->pPrior = pPrior = sqlite3SelectDup(db, p->pPrior, flags);
75225:   if( pPrior ) pPrior->pNext = pNew;
75226:   pNew->pNext = 0;
75227:   pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags);
75228:   pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags);
75229:   pNew->iLimit = 0;
75230:   pNew->iOffset = 0;
75231:   pNew->selFlags = p->selFlags & ~SF_UsesEphemeral;
75232:   pNew->pRightmost = 0;
75233:   pNew->addrOpenEphm[0] = -1;
75234:   pNew->addrOpenEphm[1] = -1;
75235:   pNew->addrOpenEphm[2] = -1;
75236:   return pNew;
75237: }
75238: #else
75239: SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
75240:   assert( p==0 );
75241:   return 0;
75242: }
75243: #endif
75244: 
75245: 
75246: /*
75247: ** Add a new element to the end of an expression list.  If pList is
75248: ** initially NULL, then create a new expression list.
75249: **
75250: ** If a memory allocation error occurs, the entire list is freed and
75251: ** NULL is returned.  If non-NULL is returned, then it is guaranteed
75252: ** that the new entry was successfully appended.
75253: */
75254: SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(
75255:   Parse *pParse,          /* Parsing context */
75256:   ExprList *pList,        /* List to which to append. Might be NULL */
75257:   Expr *pExpr             /* Expression to be appended. Might be NULL */
75258: ){
75259:   sqlite3 *db = pParse->db;
75260:   if( pList==0 ){
75261:     pList = sqlite3DbMallocZero(db, sizeof(ExprList) );
75262:     if( pList==0 ){
75263:       goto no_mem;
75264:     }
75265:     assert( pList->nAlloc==0 );
75266:   }
75267:   if( pList->nAlloc<=pList->nExpr ){
75268:     struct ExprList_item *a;
75269:     int n = pList->nAlloc*2 + 4;
75270:     a = sqlite3DbRealloc(db, pList->a, n*sizeof(pList->a[0]));
75271:     if( a==0 ){
75272:       goto no_mem;
75273:     }
75274:     pList->a = a;
75275:     pList->nAlloc = sqlite3DbMallocSize(db, a)/sizeof(a[0]);
75276:   }
75277:   assert( pList->a!=0 );
75278:   if( 1 ){
75279:     struct ExprList_item *pItem = &pList->a[pList->nExpr++];
75280:     memset(pItem, 0, sizeof(*pItem));
75281:     pItem->pExpr = pExpr;
75282:   }
75283:   return pList;
75284: 
75285: no_mem:     
75286:   /* Avoid leaking memory if malloc has failed. */
75287:   sqlite3ExprDelete(db, pExpr);
75288:   sqlite3ExprListDelete(db, pList);
75289:   return 0;
75290: }
75291: 
75292: /*
75293: ** Set the ExprList.a[].zName element of the most recently added item
75294: ** on the expression list.
75295: **
75296: ** pList might be NULL following an OOM error.  But pName should never be
75297: ** NULL.  If a memory allocation fails, the pParse->db->mallocFailed flag
75298: ** is set.
75299: */
75300: SQLITE_PRIVATE void sqlite3ExprListSetName(
75301:   Parse *pParse,          /* Parsing context */
75302:   ExprList *pList,        /* List to which to add the span. */
75303:   Token *pName,           /* Name to be added */
75304:   int dequote             /* True to cause the name to be dequoted */
75305: ){
75306:   assert( pList!=0 || pParse->db->mallocFailed!=0 );
75307:   if( pList ){
75308:     struct ExprList_item *pItem;
75309:     assert( pList->nExpr>0 );
75310:     pItem = &pList->a[pList->nExpr-1];
75311:     assert( pItem->zName==0 );
75312:     pItem->zName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n);
75313:     if( dequote && pItem->zName ) sqlite3Dequote(pItem->zName);
75314:   }
75315: }
75316: 
75317: /*
75318: ** Set the ExprList.a[].zSpan element of the most recently added item
75319: ** on the expression list.
75320: **
75321: ** pList might be NULL following an OOM error.  But pSpan should never be
75322: ** NULL.  If a memory allocation fails, the pParse->db->mallocFailed flag
75323: ** is set.
75324: */
75325: SQLITE_PRIVATE void sqlite3ExprListSetSpan(
75326:   Parse *pParse,          /* Parsing context */
75327:   ExprList *pList,        /* List to which to add the span. */
75328:   ExprSpan *pSpan         /* The span to be added */
75329: ){
75330:   sqlite3 *db = pParse->db;
75331:   assert( pList!=0 || db->mallocFailed!=0 );
75332:   if( pList ){
75333:     struct ExprList_item *pItem = &pList->a[pList->nExpr-1];
75334:     assert( pList->nExpr>0 );
75335:     assert( db->mallocFailed || pItem->pExpr==pSpan->pExpr );
75336:     sqlite3DbFree(db, pItem->zSpan);
75337:     pItem->zSpan = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
75338:                                     (int)(pSpan->zEnd - pSpan->zStart));
75339:   }
75340: }
75341: 
75342: /*
75343: ** If the expression list pEList contains more than iLimit elements,
75344: ** leave an error message in pParse.
75345: */
75346: SQLITE_PRIVATE void sqlite3ExprListCheckLength(
75347:   Parse *pParse,
75348:   ExprList *pEList,
75349:   const char *zObject
75350: ){
75351:   int mx = pParse->db->aLimit[SQLITE_LIMIT_COLUMN];
75352:   testcase( pEList && pEList->nExpr==mx );
75353:   testcase( pEList && pEList->nExpr==mx+1 );
75354:   if( pEList && pEList->nExpr>mx ){
75355:     sqlite3ErrorMsg(pParse, "too many columns in %s", zObject);
75356:   }
75357: }
75358: 
75359: /*
75360: ** Delete an entire expression list.
75361: */
75362: SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
75363:   int i;
75364:   struct ExprList_item *pItem;
75365:   if( pList==0 ) return;
75366:   assert( pList->a!=0 || (pList->nExpr==0 && pList->nAlloc==0) );
75367:   assert( pList->nExpr<=pList->nAlloc );
75368:   for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
75369:     sqlite3ExprDelete(db, pItem->pExpr);
75370:     sqlite3DbFree(db, pItem->zName);
75371:     sqlite3DbFree(db, pItem->zSpan);
75372:   }
75373:   sqlite3DbFree(db, pList->a);
75374:   sqlite3DbFree(db, pList);
75375: }
75376: 
75377: /*
75378: ** These routines are Walker callbacks.  Walker.u.pi is a pointer
75379: ** to an integer.  These routines are checking an expression to see
75380: ** if it is a constant.  Set *Walker.u.pi to 0 if the expression is
75381: ** not constant.
75382: **
75383: ** These callback routines are used to implement the following:
75384: **
75385: **     sqlite3ExprIsConstant()
75386: **     sqlite3ExprIsConstantNotJoin()
75387: **     sqlite3ExprIsConstantOrFunction()
75388: **
75389: */
75390: static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
75391: 
75392:   /* If pWalker->u.i is 3 then any term of the expression that comes from
75393:   ** the ON or USING clauses of a join disqualifies the expression
75394:   ** from being considered constant. */
75395:   if( pWalker->u.i==3 && ExprHasAnyProperty(pExpr, EP_FromJoin) ){
75396:     pWalker->u.i = 0;
75397:     return WRC_Abort;
75398:   }
75399: 
75400:   switch( pExpr->op ){
75401:     /* Consider functions to be constant if all their arguments are constant
75402:     ** and pWalker->u.i==2 */
75403:     case TK_FUNCTION:
75404:       if( pWalker->u.i==2 ) return 0;
75405:       /* Fall through */
75406:     case TK_ID:
75407:     case TK_COLUMN:
75408:     case TK_AGG_FUNCTION:
75409:     case TK_AGG_COLUMN:
75410:       testcase( pExpr->op==TK_ID );
75411:       testcase( pExpr->op==TK_COLUMN );
75412:       testcase( pExpr->op==TK_AGG_FUNCTION );
75413:       testcase( pExpr->op==TK_AGG_COLUMN );
75414:       pWalker->u.i = 0;
75415:       return WRC_Abort;
75416:     default:
75417:       testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
75418:       testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */
75419:       return WRC_Continue;
75420:   }
75421: }
75422: static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
75423:   UNUSED_PARAMETER(NotUsed);
75424:   pWalker->u.i = 0;
75425:   return WRC_Abort;
75426: }
75427: static int exprIsConst(Expr *p, int initFlag){
75428:   Walker w;
75429:   w.u.i = initFlag;
75430:   w.xExprCallback = exprNodeIsConstant;
75431:   w.xSelectCallback = selectNodeIsConstant;
75432:   sqlite3WalkExpr(&w, p);
75433:   return w.u.i;
75434: }
75435: 
75436: /*
75437: ** Walk an expression tree.  Return 1 if the expression is constant
75438: ** and 0 if it involves variables or function calls.
75439: **
75440: ** For the purposes of this function, a double-quoted string (ex: "abc")
75441: ** is considered a variable but a single-quoted string (ex: 'abc') is
75442: ** a constant.
75443: */
75444: SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
75445:   return exprIsConst(p, 1);
75446: }
75447: 
75448: /*
75449: ** Walk an expression tree.  Return 1 if the expression is constant
75450: ** that does no originate from the ON or USING clauses of a join.
75451: ** Return 0 if it involves variables or function calls or terms from
75452: ** an ON or USING clause.
75453: */
75454: SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
75455:   return exprIsConst(p, 3);
75456: }
75457: 
75458: /*
75459: ** Walk an expression tree.  Return 1 if the expression is constant
75460: ** or a function call with constant arguments.  Return and 0 if there
75461: ** are any variables.
75462: **
75463: ** For the purposes of this function, a double-quoted string (ex: "abc")
75464: ** is considered a variable but a single-quoted string (ex: 'abc') is
75465: ** a constant.
75466: */
75467: SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p){
75468:   return exprIsConst(p, 2);
75469: }
75470: 
75471: /*
75472: ** If the expression p codes a constant integer that is small enough
75473: ** to fit in a 32-bit integer, return 1 and put the value of the integer
75474: ** in *pValue.  If the expression is not an integer or if it is too big
75475: ** to fit in a signed 32-bit integer, return 0 and leave *pValue unchanged.
75476: */
75477: SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr *p, int *pValue){
75478:   int rc = 0;
75479: 
75480:   /* If an expression is an integer literal that fits in a signed 32-bit
75481:   ** integer, then the EP_IntValue flag will have already been set */
75482:   assert( p->op!=TK_INTEGER || (p->flags & EP_IntValue)!=0
75483:            || sqlite3GetInt32(p->u.zToken, &rc)==0 );
75484: 
75485:   if( p->flags & EP_IntValue ){
75486:     *pValue = p->u.iValue;
75487:     return 1;
75488:   }
75489:   switch( p->op ){
75490:     case TK_UPLUS: {
75491:       rc = sqlite3ExprIsInteger(p->pLeft, pValue);
75492:       break;
75493:     }
75494:     case TK_UMINUS: {
75495:       int v;
75496:       if( sqlite3ExprIsInteger(p->pLeft, &v) ){
75497:         *pValue = -v;
75498:         rc = 1;
75499:       }
75500:       break;
75501:     }
75502:     default: break;
75503:   }
75504:   return rc;
75505: }
75506: 
75507: /*
75508: ** Return FALSE if there is no chance that the expression can be NULL.
75509: **
75510: ** If the expression might be NULL or if the expression is too complex
75511: ** to tell return TRUE.  
75512: **
75513: ** This routine is used as an optimization, to skip OP_IsNull opcodes
75514: ** when we know that a value cannot be NULL.  Hence, a false positive
75515: ** (returning TRUE when in fact the expression can never be NULL) might
75516: ** be a small performance hit but is otherwise harmless.  On the other
75517: ** hand, a false negative (returning FALSE when the result could be NULL)
75518: ** will likely result in an incorrect answer.  So when in doubt, return
75519: ** TRUE.
75520: */
75521: SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){
75522:   u8 op;
75523:   while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; }
75524:   op = p->op;
75525:   if( op==TK_REGISTER ) op = p->op2;
75526:   switch( op ){
75527:     case TK_INTEGER:
75528:     case TK_STRING:
75529:     case TK_FLOAT:
75530:     case TK_BLOB:
75531:       return 0;
75532:     default:
75533:       return 1;
75534:   }
75535: }
75536: 
75537: /*
75538: ** Generate an OP_IsNull instruction that tests register iReg and jumps
75539: ** to location iDest if the value in iReg is NULL.  The value in iReg 
75540: ** was computed by pExpr.  If we can look at pExpr at compile-time and
75541: ** determine that it can never generate a NULL, then the OP_IsNull operation
75542: ** can be omitted.
75543: */
75544: SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump(
75545:   Vdbe *v,            /* The VDBE under construction */
75546:   const Expr *pExpr,  /* Only generate OP_IsNull if this expr can be NULL */
75547:   int iReg,           /* Test the value in this register for NULL */
75548:   int iDest           /* Jump here if the value is null */
75549: ){
75550:   if( sqlite3ExprCanBeNull(pExpr) ){
75551:     sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iDest);
75552:   }
75553: }
75554: 
75555: /*
75556: ** Return TRUE if the given expression is a constant which would be
75557: ** unchanged by OP_Affinity with the affinity given in the second
75558: ** argument.
75559: **
75560: ** This routine is used to determine if the OP_Affinity operation
75561: ** can be omitted.  When in doubt return FALSE.  A false negative
75562: ** is harmless.  A false positive, however, can result in the wrong
75563: ** answer.
75564: */
75565: SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr *p, char aff){
75566:   u8 op;
75567:   if( aff==SQLITE_AFF_NONE ) return 1;
75568:   while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; }
75569:   op = p->op;
75570:   if( op==TK_REGISTER ) op = p->op2;
75571:   switch( op ){
75572:     case TK_INTEGER: {
75573:       return aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC;
75574:     }
75575:     case TK_FLOAT: {
75576:       return aff==SQLITE_AFF_REAL || aff==SQLITE_AFF_NUMERIC;
75577:     }
75578:     case TK_STRING: {
75579:       return aff==SQLITE_AFF_TEXT;
75580:     }
75581:     case TK_BLOB: {
75582:       return 1;
75583:     }
75584:     case TK_COLUMN: {
75585:       assert( p->iTable>=0 );  /* p cannot be part of a CHECK constraint */
75586:       return p->iColumn<0
75587:           && (aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC);
75588:     }
75589:     default: {
75590:       return 0;
75591:     }
75592:   }
75593: }
75594: 
75595: /*
75596: ** Return TRUE if the given string is a row-id column name.
75597: */
75598: SQLITE_PRIVATE int sqlite3IsRowid(const char *z){
75599:   if( sqlite3StrICmp(z, "_ROWID_")==0 ) return 1;
75600:   if( sqlite3StrICmp(z, "ROWID")==0 ) return 1;
75601:   if( sqlite3StrICmp(z, "OID")==0 ) return 1;
75602:   return 0;
75603: }
75604: 
75605: /*
75606: ** Return true if we are able to the IN operator optimization on a
75607: ** query of the form
75608: **
75609: **       x IN (SELECT ...)
75610: **
75611: ** Where the SELECT... clause is as specified by the parameter to this
75612: ** routine.
75613: **
75614: ** The Select object passed in has already been preprocessed and no
75615: ** errors have been found.
75616: */
75617: #ifndef SQLITE_OMIT_SUBQUERY
75618: static int isCandidateForInOpt(Select *p){
75619:   SrcList *pSrc;
75620:   ExprList *pEList;
75621:   Table *pTab;
75622:   if( p==0 ) return 0;                   /* right-hand side of IN is SELECT */
75623:   if( p->pPrior ) return 0;              /* Not a compound SELECT */
75624:   if( p->selFlags & (SF_Distinct|SF_Aggregate) ){
75625:     testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
75626:     testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
75627:     return 0; /* No DISTINCT keyword and no aggregate functions */
75628:   }
75629:   assert( p->pGroupBy==0 );              /* Has no GROUP BY clause */
75630:   if( p->pLimit ) return 0;              /* Has no LIMIT clause */
75631:   assert( p->pOffset==0 );               /* No LIMIT means no OFFSET */
75632:   if( p->pWhere ) return 0;              /* Has no WHERE clause */
75633:   pSrc = p->pSrc;
75634:   assert( pSrc!=0 );
75635:   if( pSrc->nSrc!=1 ) return 0;          /* Single term in FROM clause */
75636:   if( pSrc->a[0].pSelect ) return 0;     /* FROM is not a subquery or view */
75637:   pTab = pSrc->a[0].pTab;
75638:   if( NEVER(pTab==0) ) return 0;
75639:   assert( pTab->pSelect==0 );            /* FROM clause is not a view */
75640:   if( IsVirtual(pTab) ) return 0;        /* FROM clause not a virtual table */
75641:   pEList = p->pEList;
75642:   if( pEList->nExpr!=1 ) return 0;       /* One column in the result set */
75643:   if( pEList->a[0].pExpr->op!=TK_COLUMN ) return 0; /* Result is a column */
75644:   return 1;
75645: }
75646: #endif /* SQLITE_OMIT_SUBQUERY */
75647: 
75648: /*
75649: ** Code an OP_Once instruction and allocate space for its flag. Return the 
75650: ** address of the new instruction.
75651: */
75652: SQLITE_PRIVATE int sqlite3CodeOnce(Parse *pParse){
75653:   Vdbe *v = sqlite3GetVdbe(pParse);      /* Virtual machine being coded */
75654:   return sqlite3VdbeAddOp1(v, OP_Once, pParse->nOnce++);
75655: }
75656: 
75657: /*
75658: ** This function is used by the implementation of the IN (...) operator.
75659: ** It's job is to find or create a b-tree structure that may be used
75660: ** either to test for membership of the (...) set or to iterate through
75661: ** its members, skipping duplicates.
75662: **
75663: ** The index of the cursor opened on the b-tree (database table, database index 
75664: ** or ephermal table) is stored in pX->iTable before this function returns.
75665: ** The returned value of this function indicates the b-tree type, as follows:
75666: **
75667: **   IN_INDEX_ROWID - The cursor was opened on a database table.
75668: **   IN_INDEX_INDEX - The cursor was opened on a database index.
75669: **   IN_INDEX_EPH -   The cursor was opened on a specially created and
75670: **                    populated epheremal table.
75671: **
75672: ** An existing b-tree may only be used if the SELECT is of the simple
75673: ** form:
75674: **
75675: **     SELECT <column> FROM <table>
75676: **
75677: ** If the prNotFound parameter is 0, then the b-tree will be used to iterate
75678: ** through the set members, skipping any duplicates. In this case an
75679: ** epheremal table must be used unless the selected <column> is guaranteed
75680: ** to be unique - either because it is an INTEGER PRIMARY KEY or it
75681: ** has a UNIQUE constraint or UNIQUE index.
75682: **
75683: ** If the prNotFound parameter is not 0, then the b-tree will be used 
75684: ** for fast set membership tests. In this case an epheremal table must 
75685: ** be used unless <column> is an INTEGER PRIMARY KEY or an index can 
75686: ** be found with <column> as its left-most column.
75687: **
75688: ** When the b-tree is being used for membership tests, the calling function
75689: ** needs to know whether or not the structure contains an SQL NULL 
75690: ** value in order to correctly evaluate expressions like "X IN (Y, Z)".
75691: ** If there is any chance that the (...) might contain a NULL value at
75692: ** runtime, then a register is allocated and the register number written
75693: ** to *prNotFound. If there is no chance that the (...) contains a
75694: ** NULL value, then *prNotFound is left unchanged.
75695: **
75696: ** If a register is allocated and its location stored in *prNotFound, then
75697: ** its initial value is NULL.  If the (...) does not remain constant
75698: ** for the duration of the query (i.e. the SELECT within the (...)
75699: ** is a correlated subquery) then the value of the allocated register is
75700: ** reset to NULL each time the subquery is rerun. This allows the
75701: ** caller to use vdbe code equivalent to the following:
75702: **
75703: **   if( register==NULL ){
75704: **     has_null = <test if data structure contains null>
75705: **     register = 1
75706: **   }
75707: **
75708: ** in order to avoid running the <test if data structure contains null>
75709: ** test more often than is necessary.
75710: */
75711: #ifndef SQLITE_OMIT_SUBQUERY
75712: SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){
75713:   Select *p;                            /* SELECT to the right of IN operator */
75714:   int eType = 0;                        /* Type of RHS table. IN_INDEX_* */
75715:   int iTab = pParse->nTab++;            /* Cursor of the RHS table */
75716:   int mustBeUnique = (prNotFound==0);   /* True if RHS must be unique */
75717:   Vdbe *v = sqlite3GetVdbe(pParse);     /* Virtual machine being coded */
75718: 
75719:   assert( pX->op==TK_IN );
75720: 
75721:   /* Check to see if an existing table or index can be used to
75722:   ** satisfy the query.  This is preferable to generating a new 
75723:   ** ephemeral table.
75724:   */
75725:   p = (ExprHasProperty(pX, EP_xIsSelect) ? pX->x.pSelect : 0);
75726:   if( ALWAYS(pParse->nErr==0) && isCandidateForInOpt(p) ){
75727:     sqlite3 *db = pParse->db;              /* Database connection */
75728:     Table *pTab;                           /* Table <table>. */
75729:     Expr *pExpr;                           /* Expression <column> */
75730:     int iCol;                              /* Index of column <column> */
75731:     int iDb;                               /* Database idx for pTab */
75732: 
75733:     assert( p );                        /* Because of isCandidateForInOpt(p) */
75734:     assert( p->pEList!=0 );             /* Because of isCandidateForInOpt(p) */
75735:     assert( p->pEList->a[0].pExpr!=0 ); /* Because of isCandidateForInOpt(p) */
75736:     assert( p->pSrc!=0 );               /* Because of isCandidateForInOpt(p) */
75737:     pTab = p->pSrc->a[0].pTab;
75738:     pExpr = p->pEList->a[0].pExpr;
75739:     iCol = pExpr->iColumn;
75740:    
75741:     /* Code an OP_VerifyCookie and OP_TableLock for <table>. */
75742:     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
75743:     sqlite3CodeVerifySchema(pParse, iDb);
75744:     sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
75745: 
75746:     /* This function is only called from two places. In both cases the vdbe
75747:     ** has already been allocated. So assume sqlite3GetVdbe() is always
75748:     ** successful here.
75749:     */
75750:     assert(v);
75751:     if( iCol<0 ){
75752:       int iAddr;
75753: 
75754:       iAddr = sqlite3CodeOnce(pParse);
75755: 
75756:       sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
75757:       eType = IN_INDEX_ROWID;
75758: 
75759:       sqlite3VdbeJumpHere(v, iAddr);
75760:     }else{
75761:       Index *pIdx;                         /* Iterator variable */
75762: 
75763:       /* The collation sequence used by the comparison. If an index is to
75764:       ** be used in place of a temp-table, it must be ordered according
75765:       ** to this collation sequence.  */
75766:       CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pExpr);
75767: 
75768:       /* Check that the affinity that will be used to perform the 
75769:       ** comparison is the same as the affinity of the column. If
75770:       ** it is not, it is not possible to use any index.
75771:       */
75772:       char aff = comparisonAffinity(pX);
75773:       int affinity_ok = (pTab->aCol[iCol].affinity==aff||aff==SQLITE_AFF_NONE);
75774: 
75775:       for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){
75776:         if( (pIdx->aiColumn[0]==iCol)
75777:          && sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], 0)==pReq
75778:          && (!mustBeUnique || (pIdx->nColumn==1 && pIdx->onError!=OE_None))
75779:         ){
75780:           int iAddr;
75781:           char *pKey;
75782:   
75783:           pKey = (char *)sqlite3IndexKeyinfo(pParse, pIdx);
75784:           iAddr = sqlite3CodeOnce(pParse);
75785:   
75786:           sqlite3VdbeAddOp4(v, OP_OpenRead, iTab, pIdx->tnum, iDb,
75787:                                pKey,P4_KEYINFO_HANDOFF);
75788:           VdbeComment((v, "%s", pIdx->zName));
75789:           eType = IN_INDEX_INDEX;
75790: 
75791:           sqlite3VdbeJumpHere(v, iAddr);
75792:           if( prNotFound && !pTab->aCol[iCol].notNull ){
75793:             *prNotFound = ++pParse->nMem;
75794:             sqlite3VdbeAddOp2(v, OP_Null, 0, *prNotFound);
75795:           }
75796:         }
75797:       }
75798:     }
75799:   }
75800: 
75801:   if( eType==0 ){
75802:     /* Could not found an existing table or index to use as the RHS b-tree.
75803:     ** We will have to generate an ephemeral table to do the job.
75804:     */
75805:     double savedNQueryLoop = pParse->nQueryLoop;
75806:     int rMayHaveNull = 0;
75807:     eType = IN_INDEX_EPH;
75808:     if( prNotFound ){
75809:       *prNotFound = rMayHaveNull = ++pParse->nMem;
75810:       sqlite3VdbeAddOp2(v, OP_Null, 0, *prNotFound);
75811:     }else{
75812:       testcase( pParse->nQueryLoop>(double)1 );
75813:       pParse->nQueryLoop = (double)1;
75814:       if( pX->pLeft->iColumn<0 && !ExprHasAnyProperty(pX, EP_xIsSelect) ){
75815:         eType = IN_INDEX_ROWID;
75816:       }
75817:     }
75818:     sqlite3CodeSubselect(pParse, pX, rMayHaveNull, eType==IN_INDEX_ROWID);
75819:     pParse->nQueryLoop = savedNQueryLoop;
75820:   }else{
75821:     pX->iTable = iTab;
75822:   }
75823:   return eType;
75824: }
75825: #endif
75826: 
75827: /*
75828: ** Generate code for scalar subqueries used as a subquery expression, EXISTS,
75829: ** or IN operators.  Examples:
75830: **
75831: **     (SELECT a FROM b)          -- subquery
75832: **     EXISTS (SELECT a FROM b)   -- EXISTS subquery
75833: **     x IN (4,5,11)              -- IN operator with list on right-hand side
75834: **     x IN (SELECT a FROM b)     -- IN operator with subquery on the right
75835: **
75836: ** The pExpr parameter describes the expression that contains the IN
75837: ** operator or subquery.
75838: **
75839: ** If parameter isRowid is non-zero, then expression pExpr is guaranteed
75840: ** to be of the form "<rowid> IN (?, ?, ?)", where <rowid> is a reference
75841: ** to some integer key column of a table B-Tree. In this case, use an
75842: ** intkey B-Tree to store the set of IN(...) values instead of the usual
75843: ** (slower) variable length keys B-Tree.
75844: **
75845: ** If rMayHaveNull is non-zero, that means that the operation is an IN
75846: ** (not a SELECT or EXISTS) and that the RHS might contains NULLs.
75847: ** Furthermore, the IN is in a WHERE clause and that we really want
75848: ** to iterate over the RHS of the IN operator in order to quickly locate
75849: ** all corresponding LHS elements.  All this routine does is initialize
75850: ** the register given by rMayHaveNull to NULL.  Calling routines will take
75851: ** care of changing this register value to non-NULL if the RHS is NULL-free.
75852: **
75853: ** If rMayHaveNull is zero, that means that the subquery is being used
75854: ** for membership testing only.  There is no need to initialize any
75855: ** registers to indicate the presense or absence of NULLs on the RHS.
75856: **
75857: ** For a SELECT or EXISTS operator, return the register that holds the
75858: ** result.  For IN operators or if an error occurs, the return value is 0.
75859: */
75860: #ifndef SQLITE_OMIT_SUBQUERY
75861: SQLITE_PRIVATE int sqlite3CodeSubselect(
75862:   Parse *pParse,          /* Parsing context */
75863:   Expr *pExpr,            /* The IN, SELECT, or EXISTS operator */
75864:   int rMayHaveNull,       /* Register that records whether NULLs exist in RHS */
75865:   int isRowid             /* If true, LHS of IN operator is a rowid */
75866: ){
75867:   int testAddr = -1;                      /* One-time test address */
75868:   int rReg = 0;                           /* Register storing resulting */
75869:   Vdbe *v = sqlite3GetVdbe(pParse);
75870:   if( NEVER(v==0) ) return 0;
75871:   sqlite3ExprCachePush(pParse);
75872: 
75873:   /* This code must be run in its entirety every time it is encountered
75874:   ** if any of the following is true:
75875:   **
75876:   **    *  The right-hand side is a correlated subquery
75877:   **    *  The right-hand side is an expression list containing variables
75878:   **    *  We are inside a trigger
75879:   **
75880:   ** If all of the above are false, then we can run this code just once
75881:   ** save the results, and reuse the same result on subsequent invocations.
75882:   */
75883:   if( !ExprHasAnyProperty(pExpr, EP_VarSelect) ){
75884:     testAddr = sqlite3CodeOnce(pParse);
75885:   }
75886: 
75887: #ifndef SQLITE_OMIT_EXPLAIN
75888:   if( pParse->explain==2 ){
75889:     char *zMsg = sqlite3MPrintf(
75890:         pParse->db, "EXECUTE %s%s SUBQUERY %d", testAddr>=0?"":"CORRELATED ",
75891:         pExpr->op==TK_IN?"LIST":"SCALAR", pParse->iNextSelectId
75892:     );
75893:     sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
75894:   }
75895: #endif
75896: 
75897:   switch( pExpr->op ){
75898:     case TK_IN: {
75899:       char affinity;              /* Affinity of the LHS of the IN */
75900:       KeyInfo keyInfo;            /* Keyinfo for the generated table */
75901:       int addr;                   /* Address of OP_OpenEphemeral instruction */
75902:       Expr *pLeft = pExpr->pLeft; /* the LHS of the IN operator */
75903: 
75904:       if( rMayHaveNull ){
75905:         sqlite3VdbeAddOp2(v, OP_Null, 0, rMayHaveNull);
75906:       }
75907: 
75908:       affinity = sqlite3ExprAffinity(pLeft);
75909: 
75910:       /* Whether this is an 'x IN(SELECT...)' or an 'x IN(<exprlist>)'
75911:       ** expression it is handled the same way.  An ephemeral table is 
75912:       ** filled with single-field index keys representing the results
75913:       ** from the SELECT or the <exprlist>.
75914:       **
75915:       ** If the 'x' expression is a column value, or the SELECT...
75916:       ** statement returns a column value, then the affinity of that
75917:       ** column is used to build the index keys. If both 'x' and the
75918:       ** SELECT... statement are columns, then numeric affinity is used
75919:       ** if either column has NUMERIC or INTEGER affinity. If neither
75920:       ** 'x' nor the SELECT... statement are columns, then numeric affinity
75921:       ** is used.
75922:       */
75923:       pExpr->iTable = pParse->nTab++;
75924:       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, !isRowid);
75925:       if( rMayHaveNull==0 ) sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
75926:       memset(&keyInfo, 0, sizeof(keyInfo));
75927:       keyInfo.nField = 1;
75928: 
75929:       if( ExprHasProperty(pExpr, EP_xIsSelect) ){
75930:         /* Case 1:     expr IN (SELECT ...)
75931:         **
75932:         ** Generate code to write the results of the select into the temporary
75933:         ** table allocated and opened above.
75934:         */
75935:         SelectDest dest;
75936:         ExprList *pEList;
75937: 
75938:         assert( !isRowid );
75939:         sqlite3SelectDestInit(&dest, SRT_Set, pExpr->iTable);
75940:         dest.affinity = (u8)affinity;
75941:         assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable );
75942:         pExpr->x.pSelect->iLimit = 0;
75943:         if( sqlite3Select(pParse, pExpr->x.pSelect, &dest) ){
75944:           return 0;
75945:         }
75946:         pEList = pExpr->x.pSelect->pEList;
75947:         if( ALWAYS(pEList!=0 && pEList->nExpr>0) ){ 
75948:           keyInfo.aColl[0] = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft,
75949:               pEList->a[0].pExpr);
75950:         }
75951:       }else if( ALWAYS(pExpr->x.pList!=0) ){
75952:         /* Case 2:     expr IN (exprlist)
75953:         **
75954:         ** For each expression, build an index key from the evaluation and
75955:         ** store it in the temporary table. If <expr> is a column, then use
75956:         ** that columns affinity when building index keys. If <expr> is not
75957:         ** a column, use numeric affinity.
75958:         */
75959:         int i;
75960:         ExprList *pList = pExpr->x.pList;
75961:         struct ExprList_item *pItem;
75962:         int r1, r2, r3;
75963: 
75964:         if( !affinity ){
75965:           affinity = SQLITE_AFF_NONE;
75966:         }
75967:         keyInfo.aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
75968: 
75969:         /* Loop through each expression in <exprlist>. */
75970:         r1 = sqlite3GetTempReg(pParse);
75971:         r2 = sqlite3GetTempReg(pParse);
75972:         sqlite3VdbeAddOp2(v, OP_Null, 0, r2);
75973:         for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){
75974:           Expr *pE2 = pItem->pExpr;
75975:           int iValToIns;
75976: 
75977:           /* If the expression is not constant then we will need to
75978:           ** disable the test that was generated above that makes sure
75979:           ** this code only executes once.  Because for a non-constant
75980:           ** expression we need to rerun this code each time.
75981:           */
75982:           if( testAddr>=0 && !sqlite3ExprIsConstant(pE2) ){
75983:             sqlite3VdbeChangeToNoop(v, testAddr);
75984:             testAddr = -1;
75985:           }
75986: 
75987:           /* Evaluate the expression and insert it into the temp table */
75988:           if( isRowid && sqlite3ExprIsInteger(pE2, &iValToIns) ){
75989:             sqlite3VdbeAddOp3(v, OP_InsertInt, pExpr->iTable, r2, iValToIns);
75990:           }else{
75991:             r3 = sqlite3ExprCodeTarget(pParse, pE2, r1);
75992:             if( isRowid ){
75993:               sqlite3VdbeAddOp2(v, OP_MustBeInt, r3,
75994:                                 sqlite3VdbeCurrentAddr(v)+2);
75995:               sqlite3VdbeAddOp3(v, OP_Insert, pExpr->iTable, r2, r3);
75996:             }else{
75997:               sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1);
75998:               sqlite3ExprCacheAffinityChange(pParse, r3, 1);
75999:               sqlite3VdbeAddOp2(v, OP_IdxInsert, pExpr->iTable, r2);
76000:             }
76001:           }
76002:         }
76003:         sqlite3ReleaseTempReg(pParse, r1);
76004:         sqlite3ReleaseTempReg(pParse, r2);
76005:       }
76006:       if( !isRowid ){
76007:         sqlite3VdbeChangeP4(v, addr, (void *)&keyInfo, P4_KEYINFO);
76008:       }
76009:       break;
76010:     }
76011: 
76012:     case TK_EXISTS:
76013:     case TK_SELECT:
76014:     default: {
76015:       /* If this has to be a scalar SELECT.  Generate code to put the
76016:       ** value of this select in a memory cell and record the number
76017:       ** of the memory cell in iColumn.  If this is an EXISTS, write
76018:       ** an integer 0 (not exists) or 1 (exists) into a memory cell
76019:       ** and record that memory cell in iColumn.
76020:       */
76021:       Select *pSel;                         /* SELECT statement to encode */
76022:       SelectDest dest;                      /* How to deal with SELECt result */
76023: 
76024:       testcase( pExpr->op==TK_EXISTS );
76025:       testcase( pExpr->op==TK_SELECT );
76026:       assert( pExpr->op==TK_EXISTS || pExpr->op==TK_SELECT );
76027: 
76028:       assert( ExprHasProperty(pExpr, EP_xIsSelect) );
76029:       pSel = pExpr->x.pSelect;
76030:       sqlite3SelectDestInit(&dest, 0, ++pParse->nMem);
76031:       if( pExpr->op==TK_SELECT ){
76032:         dest.eDest = SRT_Mem;
76033:         sqlite3VdbeAddOp2(v, OP_Null, 0, dest.iParm);
76034:         VdbeComment((v, "Init subquery result"));
76035:       }else{
76036:         dest.eDest = SRT_Exists;
76037:         sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iParm);
76038:         VdbeComment((v, "Init EXISTS result"));
76039:       }
76040:       sqlite3ExprDelete(pParse->db, pSel->pLimit);
76041:       pSel->pLimit = sqlite3PExpr(pParse, TK_INTEGER, 0, 0,
76042:                                   &sqlite3IntTokens[1]);
76043:       pSel->iLimit = 0;
76044:       if( sqlite3Select(pParse, pSel, &dest) ){
76045:         return 0;
76046:       }
76047:       rReg = dest.iParm;
76048:       ExprSetIrreducible(pExpr);
76049:       break;
76050:     }
76051:   }
76052: 
76053:   if( testAddr>=0 ){
76054:     sqlite3VdbeJumpHere(v, testAddr);
76055:   }
76056:   sqlite3ExprCachePop(pParse, 1);
76057: 
76058:   return rReg;
76059: }
76060: #endif /* SQLITE_OMIT_SUBQUERY */
76061: 
76062: #ifndef SQLITE_OMIT_SUBQUERY
76063: /*
76064: ** Generate code for an IN expression.
76065: **
76066: **      x IN (SELECT ...)
76067: **      x IN (value, value, ...)
76068: **
76069: ** The left-hand side (LHS) is a scalar expression.  The right-hand side (RHS)
76070: ** is an array of zero or more values.  The expression is true if the LHS is
76071: ** contained within the RHS.  The value of the expression is unknown (NULL)
76072: ** if the LHS is NULL or if the LHS is not contained within the RHS and the
76073: ** RHS contains one or more NULL values.
76074: **
76075: ** This routine generates code will jump to destIfFalse if the LHS is not 
76076: ** contained within the RHS.  If due to NULLs we cannot determine if the LHS
76077: ** is contained in the RHS then jump to destIfNull.  If the LHS is contained
76078: ** within the RHS then fall through.
76079: */
76080: static void sqlite3ExprCodeIN(
76081:   Parse *pParse,        /* Parsing and code generating context */
76082:   Expr *pExpr,          /* The IN expression */
76083:   int destIfFalse,      /* Jump here if LHS is not contained in the RHS */
76084:   int destIfNull        /* Jump here if the results are unknown due to NULLs */
76085: ){
76086:   int rRhsHasNull = 0;  /* Register that is true if RHS contains NULL values */
76087:   char affinity;        /* Comparison affinity to use */
76088:   int eType;            /* Type of the RHS */
76089:   int r1;               /* Temporary use register */
76090:   Vdbe *v;              /* Statement under construction */
76091: 
76092:   /* Compute the RHS.   After this step, the table with cursor
76093:   ** pExpr->iTable will contains the values that make up the RHS.
76094:   */
76095:   v = pParse->pVdbe;
76096:   assert( v!=0 );       /* OOM detected prior to this routine */
76097:   VdbeNoopComment((v, "begin IN expr"));
76098:   eType = sqlite3FindInIndex(pParse, pExpr, &rRhsHasNull);
76099: 
76100:   /* Figure out the affinity to use to create a key from the results
76101:   ** of the expression. affinityStr stores a static string suitable for
76102:   ** P4 of OP_MakeRecord.
76103:   */
76104:   affinity = comparisonAffinity(pExpr);
76105: 
76106:   /* Code the LHS, the <expr> from "<expr> IN (...)".
76107:   */
76108:   sqlite3ExprCachePush(pParse);
76109:   r1 = sqlite3GetTempReg(pParse);
76110:   sqlite3ExprCode(pParse, pExpr->pLeft, r1);
76111: 
76112:   /* If the LHS is NULL, then the result is either false or NULL depending
76113:   ** on whether the RHS is empty or not, respectively.
76114:   */
76115:   if( destIfNull==destIfFalse ){
76116:     /* Shortcut for the common case where the false and NULL outcomes are
76117:     ** the same. */
76118:     sqlite3VdbeAddOp2(v, OP_IsNull, r1, destIfNull);
76119:   }else{
76120:     int addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, r1);
76121:     sqlite3VdbeAddOp2(v, OP_Rewind, pExpr->iTable, destIfFalse);
76122:     sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfNull);
76123:     sqlite3VdbeJumpHere(v, addr1);
76124:   }
76125: 
76126:   if( eType==IN_INDEX_ROWID ){
76127:     /* In this case, the RHS is the ROWID of table b-tree
76128:     */
76129:     sqlite3VdbeAddOp2(v, OP_MustBeInt, r1, destIfFalse);
76130:     sqlite3VdbeAddOp3(v, OP_NotExists, pExpr->iTable, destIfFalse, r1);
76131:   }else{
76132:     /* In this case, the RHS is an index b-tree.
76133:     */
76134:     sqlite3VdbeAddOp4(v, OP_Affinity, r1, 1, 0, &affinity, 1);
76135: 
76136:     /* If the set membership test fails, then the result of the 
76137:     ** "x IN (...)" expression must be either 0 or NULL. If the set
76138:     ** contains no NULL values, then the result is 0. If the set 
76139:     ** contains one or more NULL values, then the result of the
76140:     ** expression is also NULL.
76141:     */
76142:     if( rRhsHasNull==0 || destIfFalse==destIfNull ){
76143:       /* This branch runs if it is known at compile time that the RHS
76144:       ** cannot contain NULL values. This happens as the result
76145:       ** of a "NOT NULL" constraint in the database schema.
76146:       **
76147:       ** Also run this branch if NULL is equivalent to FALSE
76148:       ** for this particular IN operator.
76149:       */
76150:       sqlite3VdbeAddOp4Int(v, OP_NotFound, pExpr->iTable, destIfFalse, r1, 1);
76151: 
76152:     }else{
76153:       /* In this branch, the RHS of the IN might contain a NULL and
76154:       ** the presence of a NULL on the RHS makes a difference in the
76155:       ** outcome.
76156:       */
76157:       int j1, j2, j3;
76158: 
76159:       /* First check to see if the LHS is contained in the RHS.  If so,
76160:       ** then the presence of NULLs in the RHS does not matter, so jump
76161:       ** over all of the code that follows.
76162:       */
76163:       j1 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, r1, 1);
76164: 
76165:       /* Here we begin generating code that runs if the LHS is not
76166:       ** contained within the RHS.  Generate additional code that
76167:       ** tests the RHS for NULLs.  If the RHS contains a NULL then
76168:       ** jump to destIfNull.  If there are no NULLs in the RHS then
76169:       ** jump to destIfFalse.
76170:       */
76171:       j2 = sqlite3VdbeAddOp1(v, OP_NotNull, rRhsHasNull);
76172:       j3 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, rRhsHasNull, 1);
76173:       sqlite3VdbeAddOp2(v, OP_Integer, -1, rRhsHasNull);
76174:       sqlite3VdbeJumpHere(v, j3);
76175:       sqlite3VdbeAddOp2(v, OP_AddImm, rRhsHasNull, 1);
76176:       sqlite3VdbeJumpHere(v, j2);
76177: 
76178:       /* Jump to the appropriate target depending on whether or not
76179:       ** the RHS contains a NULL
76180:       */
76181:       sqlite3VdbeAddOp2(v, OP_If, rRhsHasNull, destIfNull);
76182:       sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfFalse);
76183: 
76184:       /* The OP_Found at the top of this branch jumps here when true, 
76185:       ** causing the overall IN expression evaluation to fall through.
76186:       */
76187:       sqlite3VdbeJumpHere(v, j1);
76188:     }
76189:   }
76190:   sqlite3ReleaseTempReg(pParse, r1);
76191:   sqlite3ExprCachePop(pParse, 1);
76192:   VdbeComment((v, "end IN expr"));
76193: }
76194: #endif /* SQLITE_OMIT_SUBQUERY */
76195: 
76196: /*
76197: ** Duplicate an 8-byte value
76198: */
76199: static char *dup8bytes(Vdbe *v, const char *in){
76200:   char *out = sqlite3DbMallocRaw(sqlite3VdbeDb(v), 8);
76201:   if( out ){
76202:     memcpy(out, in, 8);
76203:   }
76204:   return out;
76205: }
76206: 
76207: #ifndef SQLITE_OMIT_FLOATING_POINT
76208: /*
76209: ** Generate an instruction that will put the floating point
76210: ** value described by z[0..n-1] into register iMem.
76211: **
76212: ** The z[] string will probably not be zero-terminated.  But the 
76213: ** z[n] character is guaranteed to be something that does not look
76214: ** like the continuation of the number.
76215: */
76216: static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){
76217:   if( ALWAYS(z!=0) ){
76218:     double value;
76219:     char *zV;
76220:     sqlite3AtoF(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
76221:     assert( !sqlite3IsNaN(value) ); /* The new AtoF never returns NaN */
76222:     if( negateFlag ) value = -value;
76223:     zV = dup8bytes(v, (char*)&value);
76224:     sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL);
76225:   }
76226: }
76227: #endif
76228: 
76229: 
76230: /*
76231: ** Generate an instruction that will put the integer describe by
76232: ** text z[0..n-1] into register iMem.
76233: **
76234: ** Expr.u.zToken is always UTF8 and zero-terminated.
76235: */
76236: static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
76237:   Vdbe *v = pParse->pVdbe;
76238:   if( pExpr->flags & EP_IntValue ){
76239:     int i = pExpr->u.iValue;
76240:     assert( i>=0 );
76241:     if( negFlag ) i = -i;
76242:     sqlite3VdbeAddOp2(v, OP_Integer, i, iMem);
76243:   }else{
76244:     int c;
76245:     i64 value;
76246:     const char *z = pExpr->u.zToken;
76247:     assert( z!=0 );
76248:     c = sqlite3Atoi64(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
76249:     if( c==0 || (c==2 && negFlag) ){
76250:       char *zV;
76251:       if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; }
76252:       zV = dup8bytes(v, (char*)&value);
76253:       sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64);
76254:     }else{
76255: #ifdef SQLITE_OMIT_FLOATING_POINT
76256:       sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z);
76257: #else
76258:       codeReal(v, z, negFlag, iMem);
76259: #endif
76260:     }
76261:   }
76262: }
76263: 
76264: /*
76265: ** Clear a cache entry.
76266: */
76267: static void cacheEntryClear(Parse *pParse, struct yColCache *p){
76268:   if( p->tempReg ){
76269:     if( pParse->nTempReg<ArraySize(pParse->aTempReg) ){
76270:       pParse->aTempReg[pParse->nTempReg++] = p->iReg;
76271:     }
76272:     p->tempReg = 0;
76273:   }
76274: }
76275: 
76276: 
76277: /*
76278: ** Record in the column cache that a particular column from a
76279: ** particular table is stored in a particular register.
76280: */
76281: SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse *pParse, int iTab, int iCol, int iReg){
76282:   int i;
76283:   int minLru;
76284:   int idxLru;
76285:   struct yColCache *p;
76286: 
76287:   assert( iReg>0 );  /* Register numbers are always positive */
76288:   assert( iCol>=-1 && iCol<32768 );  /* Finite column numbers */
76289: 
76290:   /* The SQLITE_ColumnCache flag disables the column cache.  This is used
76291:   ** for testing only - to verify that SQLite always gets the same answer
76292:   ** with and without the column cache.
76293:   */
76294:   if( pParse->db->flags & SQLITE_ColumnCache ) return;
76295: 
76296:   /* First replace any existing entry.
76297:   **
76298:   ** Actually, the way the column cache is currently used, we are guaranteed
76299:   ** that the object will never already be in cache.  Verify this guarantee.
76300:   */
76301: #ifndef NDEBUG
76302:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76303: #if 0 /* This code wold remove the entry from the cache if it existed */
76304:     if( p->iReg && p->iTable==iTab && p->iColumn==iCol ){
76305:       cacheEntryClear(pParse, p);
76306:       p->iLevel = pParse->iCacheLevel;
76307:       p->iReg = iReg;
76308:       p->lru = pParse->iCacheCnt++;
76309:       return;
76310:     }
76311: #endif
76312:     assert( p->iReg==0 || p->iTable!=iTab || p->iColumn!=iCol );
76313:   }
76314: #endif
76315: 
76316:   /* Find an empty slot and replace it */
76317:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76318:     if( p->iReg==0 ){
76319:       p->iLevel = pParse->iCacheLevel;
76320:       p->iTable = iTab;
76321:       p->iColumn = iCol;
76322:       p->iReg = iReg;
76323:       p->tempReg = 0;
76324:       p->lru = pParse->iCacheCnt++;
76325:       return;
76326:     }
76327:   }
76328: 
76329:   /* Replace the last recently used */
76330:   minLru = 0x7fffffff;
76331:   idxLru = -1;
76332:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76333:     if( p->lru<minLru ){
76334:       idxLru = i;
76335:       minLru = p->lru;
76336:     }
76337:   }
76338:   if( ALWAYS(idxLru>=0) ){
76339:     p = &pParse->aColCache[idxLru];
76340:     p->iLevel = pParse->iCacheLevel;
76341:     p->iTable = iTab;
76342:     p->iColumn = iCol;
76343:     p->iReg = iReg;
76344:     p->tempReg = 0;
76345:     p->lru = pParse->iCacheCnt++;
76346:     return;
76347:   }
76348: }
76349: 
76350: /*
76351: ** Indicate that registers between iReg..iReg+nReg-1 are being overwritten.
76352: ** Purge the range of registers from the column cache.
76353: */
76354: SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){
76355:   int i;
76356:   int iLast = iReg + nReg - 1;
76357:   struct yColCache *p;
76358:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76359:     int r = p->iReg;
76360:     if( r>=iReg && r<=iLast ){
76361:       cacheEntryClear(pParse, p);
76362:       p->iReg = 0;
76363:     }
76364:   }
76365: }
76366: 
76367: /*
76368: ** Remember the current column cache context.  Any new entries added
76369: ** added to the column cache after this call are removed when the
76370: ** corresponding pop occurs.
76371: */
76372: SQLITE_PRIVATE void sqlite3ExprCachePush(Parse *pParse){
76373:   pParse->iCacheLevel++;
76374: }
76375: 
76376: /*
76377: ** Remove from the column cache any entries that were added since the
76378: ** the previous N Push operations.  In other words, restore the cache
76379: ** to the state it was in N Pushes ago.
76380: */
76381: SQLITE_PRIVATE void sqlite3ExprCachePop(Parse *pParse, int N){
76382:   int i;
76383:   struct yColCache *p;
76384:   assert( N>0 );
76385:   assert( pParse->iCacheLevel>=N );
76386:   pParse->iCacheLevel -= N;
76387:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76388:     if( p->iReg && p->iLevel>pParse->iCacheLevel ){
76389:       cacheEntryClear(pParse, p);
76390:       p->iReg = 0;
76391:     }
76392:   }
76393: }
76394: 
76395: /*
76396: ** When a cached column is reused, make sure that its register is
76397: ** no longer available as a temp register.  ticket #3879:  that same
76398: ** register might be in the cache in multiple places, so be sure to
76399: ** get them all.
76400: */
76401: static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){
76402:   int i;
76403:   struct yColCache *p;
76404:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76405:     if( p->iReg==iReg ){
76406:       p->tempReg = 0;
76407:     }
76408:   }
76409: }
76410: 
76411: /*
76412: ** Generate code to extract the value of the iCol-th column of a table.
76413: */
76414: SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(
76415:   Vdbe *v,        /* The VDBE under construction */
76416:   Table *pTab,    /* The table containing the value */
76417:   int iTabCur,    /* The cursor for this table */
76418:   int iCol,       /* Index of the column to extract */
76419:   int regOut      /* Extract the valud into this register */
76420: ){
76421:   if( iCol<0 || iCol==pTab->iPKey ){
76422:     sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut);
76423:   }else{
76424:     int op = IsVirtual(pTab) ? OP_VColumn : OP_Column;
76425:     sqlite3VdbeAddOp3(v, op, iTabCur, iCol, regOut);
76426:   }
76427:   if( iCol>=0 ){
76428:     sqlite3ColumnDefault(v, pTab, iCol, regOut);
76429:   }
76430: }
76431: 
76432: /*
76433: ** Generate code that will extract the iColumn-th column from
76434: ** table pTab and store the column value in a register.  An effort
76435: ** is made to store the column value in register iReg, but this is
76436: ** not guaranteed.  The location of the column value is returned.
76437: **
76438: ** There must be an open cursor to pTab in iTable when this routine
76439: ** is called.  If iColumn<0 then code is generated that extracts the rowid.
76440: */
76441: SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(
76442:   Parse *pParse,   /* Parsing and code generating context */
76443:   Table *pTab,     /* Description of the table we are reading from */
76444:   int iColumn,     /* Index of the table column */
76445:   int iTable,      /* The cursor pointing to the table */
76446:   int iReg         /* Store results here */
76447: ){
76448:   Vdbe *v = pParse->pVdbe;
76449:   int i;
76450:   struct yColCache *p;
76451: 
76452:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76453:     if( p->iReg>0 && p->iTable==iTable && p->iColumn==iColumn ){
76454:       p->lru = pParse->iCacheCnt++;
76455:       sqlite3ExprCachePinRegister(pParse, p->iReg);
76456:       return p->iReg;
76457:     }
76458:   }  
76459:   assert( v!=0 );
76460:   sqlite3ExprCodeGetColumnOfTable(v, pTab, iTable, iColumn, iReg);
76461:   sqlite3ExprCacheStore(pParse, iTable, iColumn, iReg);
76462:   return iReg;
76463: }
76464: 
76465: /*
76466: ** Clear all column cache entries.
76467: */
76468: SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse *pParse){
76469:   int i;
76470:   struct yColCache *p;
76471: 
76472:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76473:     if( p->iReg ){
76474:       cacheEntryClear(pParse, p);
76475:       p->iReg = 0;
76476:     }
76477:   }
76478: }
76479: 
76480: /*
76481: ** Record the fact that an affinity change has occurred on iCount
76482: ** registers starting with iStart.
76483: */
76484: SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, int iCount){
76485:   sqlite3ExprCacheRemove(pParse, iStart, iCount);
76486: }
76487: 
76488: /*
76489: ** Generate code to move content from registers iFrom...iFrom+nReg-1
76490: ** over to iTo..iTo+nReg-1. Keep the column cache up-to-date.
76491: */
76492: SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){
76493:   int i;
76494:   struct yColCache *p;
76495:   if( NEVER(iFrom==iTo) ) return;
76496:   sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg);
76497:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76498:     int x = p->iReg;
76499:     if( x>=iFrom && x<iFrom+nReg ){
76500:       p->iReg += iTo-iFrom;
76501:     }
76502:   }
76503: }
76504: 
76505: /*
76506: ** Generate code to copy content from registers iFrom...iFrom+nReg-1
76507: ** over to iTo..iTo+nReg-1.
76508: */
76509: SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, int iFrom, int iTo, int nReg){
76510:   int i;
76511:   if( NEVER(iFrom==iTo) ) return;
76512:   for(i=0; i<nReg; i++){
76513:     sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, iFrom+i, iTo+i);
76514:   }
76515: }
76516: 
76517: #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
76518: /*
76519: ** Return true if any register in the range iFrom..iTo (inclusive)
76520: ** is used as part of the column cache.
76521: **
76522: ** This routine is used within assert() and testcase() macros only
76523: ** and does not appear in a normal build.
76524: */
76525: static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){
76526:   int i;
76527:   struct yColCache *p;
76528:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76529:     int r = p->iReg;
76530:     if( r>=iFrom && r<=iTo ) return 1;    /*NO_TEST*/
76531:   }
76532:   return 0;
76533: }
76534: #endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */
76535: 
76536: /*
76537: ** Generate code into the current Vdbe to evaluate the given
76538: ** expression.  Attempt to store the results in register "target".
76539: ** Return the register where results are stored.
76540: **
76541: ** With this routine, there is no guarantee that results will
76542: ** be stored in target.  The result might be stored in some other
76543: ** register if it is convenient to do so.  The calling function
76544: ** must check the return code and move the results to the desired
76545: ** register.
76546: */
76547: SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){
76548:   Vdbe *v = pParse->pVdbe;  /* The VM under construction */
76549:   int op;                   /* The opcode being coded */
76550:   int inReg = target;       /* Results stored in register inReg */
76551:   int regFree1 = 0;         /* If non-zero free this temporary register */
76552:   int regFree2 = 0;         /* If non-zero free this temporary register */
76553:   int r1, r2, r3, r4;       /* Various register numbers */
76554:   sqlite3 *db = pParse->db; /* The database connection */
76555: 
76556:   assert( target>0 && target<=pParse->nMem );
76557:   if( v==0 ){
76558:     assert( pParse->db->mallocFailed );
76559:     return 0;
76560:   }
76561: 
76562:   if( pExpr==0 ){
76563:     op = TK_NULL;
76564:   }else{
76565:     op = pExpr->op;
76566:   }
76567:   switch( op ){
76568:     case TK_AGG_COLUMN: {
76569:       AggInfo *pAggInfo = pExpr->pAggInfo;
76570:       struct AggInfo_col *pCol = &pAggInfo->aCol[pExpr->iAgg];
76571:       if( !pAggInfo->directMode ){
76572:         assert( pCol->iMem>0 );
76573:         inReg = pCol->iMem;
76574:         break;
76575:       }else if( pAggInfo->useSortingIdx ){
76576:         sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
76577:                               pCol->iSorterColumn, target);
76578:         break;
76579:       }
76580:       /* Otherwise, fall thru into the TK_COLUMN case */
76581:     }
76582:     case TK_COLUMN: {
76583:       if( pExpr->iTable<0 ){
76584:         /* This only happens when coding check constraints */
76585:         assert( pParse->ckBase>0 );
76586:         inReg = pExpr->iColumn + pParse->ckBase;
76587:       }else{
76588:         inReg = sqlite3ExprCodeGetColumn(pParse, pExpr->pTab,
76589:                                  pExpr->iColumn, pExpr->iTable, target);
76590:       }
76591:       break;
76592:     }
76593:     case TK_INTEGER: {
76594:       codeInteger(pParse, pExpr, 0, target);
76595:       break;
76596:     }
76597: #ifndef SQLITE_OMIT_FLOATING_POINT
76598:     case TK_FLOAT: {
76599:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
76600:       codeReal(v, pExpr->u.zToken, 0, target);
76601:       break;
76602:     }
76603: #endif
76604:     case TK_STRING: {
76605:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
76606:       sqlite3VdbeAddOp4(v, OP_String8, 0, target, 0, pExpr->u.zToken, 0);
76607:       break;
76608:     }
76609:     case TK_NULL: {
76610:       sqlite3VdbeAddOp2(v, OP_Null, 0, target);
76611:       break;
76612:     }
76613: #ifndef SQLITE_OMIT_BLOB_LITERAL
76614:     case TK_BLOB: {
76615:       int n;
76616:       const char *z;
76617:       char *zBlob;
76618:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
76619:       assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
76620:       assert( pExpr->u.zToken[1]=='\'' );
76621:       z = &pExpr->u.zToken[2];
76622:       n = sqlite3Strlen30(z) - 1;
76623:       assert( z[n]=='\'' );
76624:       zBlob = sqlite3HexToBlob(sqlite3VdbeDb(v), z, n);
76625:       sqlite3VdbeAddOp4(v, OP_Blob, n/2, target, 0, zBlob, P4_DYNAMIC);
76626:       break;
76627:     }
76628: #endif
76629:     case TK_VARIABLE: {
76630:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
76631:       assert( pExpr->u.zToken!=0 );
76632:       assert( pExpr->u.zToken[0]!=0 );
76633:       sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target);
76634:       if( pExpr->u.zToken[1]!=0 ){
76635:         assert( pExpr->u.zToken[0]=='?' 
76636:              || strcmp(pExpr->u.zToken, pParse->azVar[pExpr->iColumn-1])==0 );
76637:         sqlite3VdbeChangeP4(v, -1, pParse->azVar[pExpr->iColumn-1], P4_STATIC);
76638:       }
76639:       break;
76640:     }
76641:     case TK_REGISTER: {
76642:       inReg = pExpr->iTable;
76643:       break;
76644:     }
76645:     case TK_AS: {
76646:       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
76647:       break;
76648:     }
76649: #ifndef SQLITE_OMIT_CAST
76650:     case TK_CAST: {
76651:       /* Expressions of the form:   CAST(pLeft AS token) */
76652:       int aff, to_op;
76653:       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
76654:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
76655:       aff = sqlite3AffinityType(pExpr->u.zToken);
76656:       to_op = aff - SQLITE_AFF_TEXT + OP_ToText;
76657:       assert( to_op==OP_ToText    || aff!=SQLITE_AFF_TEXT    );
76658:       assert( to_op==OP_ToBlob    || aff!=SQLITE_AFF_NONE    );
76659:       assert( to_op==OP_ToNumeric || aff!=SQLITE_AFF_NUMERIC );
76660:       assert( to_op==OP_ToInt     || aff!=SQLITE_AFF_INTEGER );
76661:       assert( to_op==OP_ToReal    || aff!=SQLITE_AFF_REAL    );
76662:       testcase( to_op==OP_ToText );
76663:       testcase( to_op==OP_ToBlob );
76664:       testcase( to_op==OP_ToNumeric );
76665:       testcase( to_op==OP_ToInt );
76666:       testcase( to_op==OP_ToReal );
76667:       if( inReg!=target ){
76668:         sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target);
76669:         inReg = target;
76670:       }
76671:       sqlite3VdbeAddOp1(v, to_op, inReg);
76672:       testcase( usedAsColumnCache(pParse, inReg, inReg) );
76673:       sqlite3ExprCacheAffinityChange(pParse, inReg, 1);
76674:       break;
76675:     }
76676: #endif /* SQLITE_OMIT_CAST */
76677:     case TK_LT:
76678:     case TK_LE:
76679:     case TK_GT:
76680:     case TK_GE:
76681:     case TK_NE:
76682:     case TK_EQ: {
76683:       assert( TK_LT==OP_Lt );
76684:       assert( TK_LE==OP_Le );
76685:       assert( TK_GT==OP_Gt );
76686:       assert( TK_GE==OP_Ge );
76687:       assert( TK_EQ==OP_Eq );
76688:       assert( TK_NE==OP_Ne );
76689:       testcase( op==TK_LT );
76690:       testcase( op==TK_LE );
76691:       testcase( op==TK_GT );
76692:       testcase( op==TK_GE );
76693:       testcase( op==TK_EQ );
76694:       testcase( op==TK_NE );
76695:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
76696:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
76697:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
76698:                   r1, r2, inReg, SQLITE_STOREP2);
76699:       testcase( regFree1==0 );
76700:       testcase( regFree2==0 );
76701:       break;
76702:     }
76703:     case TK_IS:
76704:     case TK_ISNOT: {
76705:       testcase( op==TK_IS );
76706:       testcase( op==TK_ISNOT );
76707:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
76708:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
76709:       op = (op==TK_IS) ? TK_EQ : TK_NE;
76710:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
76711:                   r1, r2, inReg, SQLITE_STOREP2 | SQLITE_NULLEQ);
76712:       testcase( regFree1==0 );
76713:       testcase( regFree2==0 );
76714:       break;
76715:     }
76716:     case TK_AND:
76717:     case TK_OR:
76718:     case TK_PLUS:
76719:     case TK_STAR:
76720:     case TK_MINUS:
76721:     case TK_REM:
76722:     case TK_BITAND:
76723:     case TK_BITOR:
76724:     case TK_SLASH:
76725:     case TK_LSHIFT:
76726:     case TK_RSHIFT: 
76727:     case TK_CONCAT: {
76728:       assert( TK_AND==OP_And );
76729:       assert( TK_OR==OP_Or );
76730:       assert( TK_PLUS==OP_Add );
76731:       assert( TK_MINUS==OP_Subtract );
76732:       assert( TK_REM==OP_Remainder );
76733:       assert( TK_BITAND==OP_BitAnd );
76734:       assert( TK_BITOR==OP_BitOr );
76735:       assert( TK_SLASH==OP_Divide );
76736:       assert( TK_LSHIFT==OP_ShiftLeft );
76737:       assert( TK_RSHIFT==OP_ShiftRight );
76738:       assert( TK_CONCAT==OP_Concat );
76739:       testcase( op==TK_AND );
76740:       testcase( op==TK_OR );
76741:       testcase( op==TK_PLUS );
76742:       testcase( op==TK_MINUS );
76743:       testcase( op==TK_REM );
76744:       testcase( op==TK_BITAND );
76745:       testcase( op==TK_BITOR );
76746:       testcase( op==TK_SLASH );
76747:       testcase( op==TK_LSHIFT );
76748:       testcase( op==TK_RSHIFT );
76749:       testcase( op==TK_CONCAT );
76750:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
76751:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
76752:       sqlite3VdbeAddOp3(v, op, r2, r1, target);
76753:       testcase( regFree1==0 );
76754:       testcase( regFree2==0 );
76755:       break;
76756:     }
76757:     case TK_UMINUS: {
76758:       Expr *pLeft = pExpr->pLeft;
76759:       assert( pLeft );
76760:       if( pLeft->op==TK_INTEGER ){
76761:         codeInteger(pParse, pLeft, 1, target);
76762: #ifndef SQLITE_OMIT_FLOATING_POINT
76763:       }else if( pLeft->op==TK_FLOAT ){
76764:         assert( !ExprHasProperty(pExpr, EP_IntValue) );
76765:         codeReal(v, pLeft->u.zToken, 1, target);
76766: #endif
76767:       }else{
76768:         regFree1 = r1 = sqlite3GetTempReg(pParse);
76769:         sqlite3VdbeAddOp2(v, OP_Integer, 0, r1);
76770:         r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree2);
76771:         sqlite3VdbeAddOp3(v, OP_Subtract, r2, r1, target);
76772:         testcase( regFree2==0 );
76773:       }
76774:       inReg = target;
76775:       break;
76776:     }
76777:     case TK_BITNOT:
76778:     case TK_NOT: {
76779:       assert( TK_BITNOT==OP_BitNot );
76780:       assert( TK_NOT==OP_Not );
76781:       testcase( op==TK_BITNOT );
76782:       testcase( op==TK_NOT );
76783:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
76784:       testcase( regFree1==0 );
76785:       inReg = target;
76786:       sqlite3VdbeAddOp2(v, op, r1, inReg);
76787:       break;
76788:     }
76789:     case TK_ISNULL:
76790:     case TK_NOTNULL: {
76791:       int addr;
76792:       assert( TK_ISNULL==OP_IsNull );
76793:       assert( TK_NOTNULL==OP_NotNull );
76794:       testcase( op==TK_ISNULL );
76795:       testcase( op==TK_NOTNULL );
76796:       sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
76797:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
76798:       testcase( regFree1==0 );
76799:       addr = sqlite3VdbeAddOp1(v, op, r1);
76800:       sqlite3VdbeAddOp2(v, OP_AddImm, target, -1);
76801:       sqlite3VdbeJumpHere(v, addr);
76802:       break;
76803:     }
76804:     case TK_AGG_FUNCTION: {
76805:       AggInfo *pInfo = pExpr->pAggInfo;
76806:       if( pInfo==0 ){
76807:         assert( !ExprHasProperty(pExpr, EP_IntValue) );
76808:         sqlite3ErrorMsg(pParse, "misuse of aggregate: %s()", pExpr->u.zToken);
76809:       }else{
76810:         inReg = pInfo->aFunc[pExpr->iAgg].iMem;
76811:       }
76812:       break;
76813:     }
76814:     case TK_CONST_FUNC:
76815:     case TK_FUNCTION: {
76816:       ExprList *pFarg;       /* List of function arguments */
76817:       int nFarg;             /* Number of function arguments */
76818:       FuncDef *pDef;         /* The function definition object */
76819:       int nId;               /* Length of the function name in bytes */
76820:       const char *zId;       /* The function name */
76821:       int constMask = 0;     /* Mask of function arguments that are constant */
76822:       int i;                 /* Loop counter */
76823:       u8 enc = ENC(db);      /* The text encoding used by this database */
76824:       CollSeq *pColl = 0;    /* A collating sequence */
76825: 
76826:       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
76827:       testcase( op==TK_CONST_FUNC );
76828:       testcase( op==TK_FUNCTION );
76829:       if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){
76830:         pFarg = 0;
76831:       }else{
76832:         pFarg = pExpr->x.pList;
76833:       }
76834:       nFarg = pFarg ? pFarg->nExpr : 0;
76835:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
76836:       zId = pExpr->u.zToken;
76837:       nId = sqlite3Strlen30(zId);
76838:       pDef = sqlite3FindFunction(db, zId, nId, nFarg, enc, 0);
76839:       if( pDef==0 ){
76840:         sqlite3ErrorMsg(pParse, "unknown function: %.*s()", nId, zId);
76841:         break;
76842:       }
76843: 
76844:       /* Attempt a direct implementation of the built-in COALESCE() and
76845:       ** IFNULL() functions.  This avoids unnecessary evalation of
76846:       ** arguments past the first non-NULL argument.
76847:       */
76848:       if( pDef->flags & SQLITE_FUNC_COALESCE ){
76849:         int endCoalesce = sqlite3VdbeMakeLabel(v);
76850:         assert( nFarg>=2 );
76851:         sqlite3ExprCode(pParse, pFarg->a[0].pExpr, target);
76852:         for(i=1; i<nFarg; i++){
76853:           sqlite3VdbeAddOp2(v, OP_NotNull, target, endCoalesce);
76854:           sqlite3ExprCacheRemove(pParse, target, 1);
76855:           sqlite3ExprCachePush(pParse);
76856:           sqlite3ExprCode(pParse, pFarg->a[i].pExpr, target);
76857:           sqlite3ExprCachePop(pParse, 1);
76858:         }
76859:         sqlite3VdbeResolveLabel(v, endCoalesce);
76860:         break;
76861:       }
76862: 
76863: 
76864:       if( pFarg ){
76865:         r1 = sqlite3GetTempRange(pParse, nFarg);
76866:         sqlite3ExprCachePush(pParse);     /* Ticket 2ea2425d34be */
76867:         sqlite3ExprCodeExprList(pParse, pFarg, r1, 1);
76868:         sqlite3ExprCachePop(pParse, 1);   /* Ticket 2ea2425d34be */
76869:       }else{
76870:         r1 = 0;
76871:       }
76872: #ifndef SQLITE_OMIT_VIRTUALTABLE
76873:       /* Possibly overload the function if the first argument is
76874:       ** a virtual table column.
76875:       **
76876:       ** For infix functions (LIKE, GLOB, REGEXP, and MATCH) use the
76877:       ** second argument, not the first, as the argument to test to
76878:       ** see if it is a column in a virtual table.  This is done because
76879:       ** the left operand of infix functions (the operand we want to
76880:       ** control overloading) ends up as the second argument to the
76881:       ** function.  The expression "A glob B" is equivalent to 
76882:       ** "glob(B,A).  We want to use the A in "A glob B" to test
76883:       ** for function overloading.  But we use the B term in "glob(B,A)".
76884:       */
76885:       if( nFarg>=2 && (pExpr->flags & EP_InfixFunc) ){
76886:         pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr);
76887:       }else if( nFarg>0 ){
76888:         pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr);
76889:       }
76890: #endif
76891:       for(i=0; i<nFarg; i++){
76892:         if( i<32 && sqlite3ExprIsConstant(pFarg->a[i].pExpr) ){
76893:           constMask |= (1<<i);
76894:         }
76895:         if( (pDef->flags & SQLITE_FUNC_NEEDCOLL)!=0 && !pColl ){
76896:           pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr);
76897:         }
76898:       }
76899:       if( pDef->flags & SQLITE_FUNC_NEEDCOLL ){
76900:         if( !pColl ) pColl = db->pDfltColl; 
76901:         sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
76902:       }
76903:       sqlite3VdbeAddOp4(v, OP_Function, constMask, r1, target,
76904:                         (char*)pDef, P4_FUNCDEF);
76905:       sqlite3VdbeChangeP5(v, (u8)nFarg);
76906:       if( nFarg ){
76907:         sqlite3ReleaseTempRange(pParse, r1, nFarg);
76908:       }
76909:       break;
76910:     }
76911: #ifndef SQLITE_OMIT_SUBQUERY
76912:     case TK_EXISTS:
76913:     case TK_SELECT: {
76914:       testcase( op==TK_EXISTS );
76915:       testcase( op==TK_SELECT );
76916:       inReg = sqlite3CodeSubselect(pParse, pExpr, 0, 0);
76917:       break;
76918:     }
76919:     case TK_IN: {
76920:       int destIfFalse = sqlite3VdbeMakeLabel(v);
76921:       int destIfNull = sqlite3VdbeMakeLabel(v);
76922:       sqlite3VdbeAddOp2(v, OP_Null, 0, target);
76923:       sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull);
76924:       sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
76925:       sqlite3VdbeResolveLabel(v, destIfFalse);
76926:       sqlite3VdbeAddOp2(v, OP_AddImm, target, 0);
76927:       sqlite3VdbeResolveLabel(v, destIfNull);
76928:       break;
76929:     }
76930: #endif /* SQLITE_OMIT_SUBQUERY */
76931: 
76932: 
76933:     /*
76934:     **    x BETWEEN y AND z
76935:     **
76936:     ** This is equivalent to
76937:     **
76938:     **    x>=y AND x<=z
76939:     **
76940:     ** X is stored in pExpr->pLeft.
76941:     ** Y is stored in pExpr->pList->a[0].pExpr.
76942:     ** Z is stored in pExpr->pList->a[1].pExpr.
76943:     */
76944:     case TK_BETWEEN: {
76945:       Expr *pLeft = pExpr->pLeft;
76946:       struct ExprList_item *pLItem = pExpr->x.pList->a;
76947:       Expr *pRight = pLItem->pExpr;
76948: 
76949:       r1 = sqlite3ExprCodeTemp(pParse, pLeft, &regFree1);
76950:       r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
76951:       testcase( regFree1==0 );
76952:       testcase( regFree2==0 );
76953:       r3 = sqlite3GetTempReg(pParse);
76954:       r4 = sqlite3GetTempReg(pParse);
76955:       codeCompare(pParse, pLeft, pRight, OP_Ge,
76956:                   r1, r2, r3, SQLITE_STOREP2);
76957:       pLItem++;
76958:       pRight = pLItem->pExpr;
76959:       sqlite3ReleaseTempReg(pParse, regFree2);
76960:       r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
76961:       testcase( regFree2==0 );
76962:       codeCompare(pParse, pLeft, pRight, OP_Le, r1, r2, r4, SQLITE_STOREP2);
76963:       sqlite3VdbeAddOp3(v, OP_And, r3, r4, target);
76964:       sqlite3ReleaseTempReg(pParse, r3);
76965:       sqlite3ReleaseTempReg(pParse, r4);
76966:       break;
76967:     }
76968:     case TK_UPLUS: {
76969:       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
76970:       break;
76971:     }
76972: 
76973:     case TK_TRIGGER: {
76974:       /* If the opcode is TK_TRIGGER, then the expression is a reference
76975:       ** to a column in the new.* or old.* pseudo-tables available to
76976:       ** trigger programs. In this case Expr.iTable is set to 1 for the
76977:       ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn
76978:       ** is set to the column of the pseudo-table to read, or to -1 to
76979:       ** read the rowid field.
76980:       **
76981:       ** The expression is implemented using an OP_Param opcode. The p1
76982:       ** parameter is set to 0 for an old.rowid reference, or to (i+1)
76983:       ** to reference another column of the old.* pseudo-table, where 
76984:       ** i is the index of the column. For a new.rowid reference, p1 is
76985:       ** set to (n+1), where n is the number of columns in each pseudo-table.
76986:       ** For a reference to any other column in the new.* pseudo-table, p1
76987:       ** is set to (n+2+i), where n and i are as defined previously. For
76988:       ** example, if the table on which triggers are being fired is
76989:       ** declared as:
76990:       **
76991:       **   CREATE TABLE t1(a, b);
76992:       **
76993:       ** Then p1 is interpreted as follows:
76994:       **
76995:       **   p1==0   ->    old.rowid     p1==3   ->    new.rowid
76996:       **   p1==1   ->    old.a         p1==4   ->    new.a
76997:       **   p1==2   ->    old.b         p1==5   ->    new.b       
76998:       */
76999:       Table *pTab = pExpr->pTab;
77000:       int p1 = pExpr->iTable * (pTab->nCol+1) + 1 + pExpr->iColumn;
77001: 
77002:       assert( pExpr->iTable==0 || pExpr->iTable==1 );
77003:       assert( pExpr->iColumn>=-1 && pExpr->iColumn<pTab->nCol );
77004:       assert( pTab->iPKey<0 || pExpr->iColumn!=pTab->iPKey );
77005:       assert( p1>=0 && p1<(pTab->nCol*2+2) );
77006: 
77007:       sqlite3VdbeAddOp2(v, OP_Param, p1, target);
77008:       VdbeComment((v, "%s.%s -> $%d",
77009:         (pExpr->iTable ? "new" : "old"),
77010:         (pExpr->iColumn<0 ? "rowid" : pExpr->pTab->aCol[pExpr->iColumn].zName),
77011:         target
77012:       ));
77013: 
77014: #ifndef SQLITE_OMIT_FLOATING_POINT
77015:       /* If the column has REAL affinity, it may currently be stored as an
77016:       ** integer. Use OP_RealAffinity to make sure it is really real.  */
77017:       if( pExpr->iColumn>=0 
77018:        && pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL
77019:       ){
77020:         sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
77021:       }
77022: #endif
77023:       break;
77024:     }
77025: 
77026: 
77027:     /*
77028:     ** Form A:
77029:     **   CASE x WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
77030:     **
77031:     ** Form B:
77032:     **   CASE WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
77033:     **
77034:     ** Form A is can be transformed into the equivalent form B as follows:
77035:     **   CASE WHEN x=e1 THEN r1 WHEN x=e2 THEN r2 ...
77036:     **        WHEN x=eN THEN rN ELSE y END
77037:     **
77038:     ** X (if it exists) is in pExpr->pLeft.
77039:     ** Y is in pExpr->pRight.  The Y is also optional.  If there is no
77040:     ** ELSE clause and no other term matches, then the result of the
77041:     ** exprssion is NULL.
77042:     ** Ei is in pExpr->pList->a[i*2] and Ri is pExpr->pList->a[i*2+1].
77043:     **
77044:     ** The result of the expression is the Ri for the first matching Ei,
77045:     ** or if there is no matching Ei, the ELSE term Y, or if there is
77046:     ** no ELSE term, NULL.
77047:     */
77048:     default: assert( op==TK_CASE ); {
77049:       int endLabel;                     /* GOTO label for end of CASE stmt */
77050:       int nextCase;                     /* GOTO label for next WHEN clause */
77051:       int nExpr;                        /* 2x number of WHEN terms */
77052:       int i;                            /* Loop counter */
77053:       ExprList *pEList;                 /* List of WHEN terms */
77054:       struct ExprList_item *aListelem;  /* Array of WHEN terms */
77055:       Expr opCompare;                   /* The X==Ei expression */
77056:       Expr cacheX;                      /* Cached expression X */
77057:       Expr *pX;                         /* The X expression */
77058:       Expr *pTest = 0;                  /* X==Ei (form A) or just Ei (form B) */
77059:       VVA_ONLY( int iCacheLevel = pParse->iCacheLevel; )
77060: 
77061:       assert( !ExprHasProperty(pExpr, EP_xIsSelect) && pExpr->x.pList );
77062:       assert((pExpr->x.pList->nExpr % 2) == 0);
77063:       assert(pExpr->x.pList->nExpr > 0);
77064:       pEList = pExpr->x.pList;
77065:       aListelem = pEList->a;
77066:       nExpr = pEList->nExpr;
77067:       endLabel = sqlite3VdbeMakeLabel(v);
77068:       if( (pX = pExpr->pLeft)!=0 ){
77069:         cacheX = *pX;
77070:         testcase( pX->op==TK_COLUMN );
77071:         testcase( pX->op==TK_REGISTER );
77072:         cacheX.iTable = sqlite3ExprCodeTemp(pParse, pX, &regFree1);
77073:         testcase( regFree1==0 );
77074:         cacheX.op = TK_REGISTER;
77075:         opCompare.op = TK_EQ;
77076:         opCompare.pLeft = &cacheX;
77077:         pTest = &opCompare;
77078:         /* Ticket b351d95f9cd5ef17e9d9dbae18f5ca8611190001:
77079:         ** The value in regFree1 might get SCopy-ed into the file result.
77080:         ** So make sure that the regFree1 register is not reused for other
77081:         ** purposes and possibly overwritten.  */
77082:         regFree1 = 0;
77083:       }
77084:       for(i=0; i<nExpr; i=i+2){
77085:         sqlite3ExprCachePush(pParse);
77086:         if( pX ){
77087:           assert( pTest!=0 );
77088:           opCompare.pRight = aListelem[i].pExpr;
77089:         }else{
77090:           pTest = aListelem[i].pExpr;
77091:         }
77092:         nextCase = sqlite3VdbeMakeLabel(v);
77093:         testcase( pTest->op==TK_COLUMN );
77094:         sqlite3ExprIfFalse(pParse, pTest, nextCase, SQLITE_JUMPIFNULL);
77095:         testcase( aListelem[i+1].pExpr->op==TK_COLUMN );
77096:         testcase( aListelem[i+1].pExpr->op==TK_REGISTER );
77097:         sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target);
77098:         sqlite3VdbeAddOp2(v, OP_Goto, 0, endLabel);
77099:         sqlite3ExprCachePop(pParse, 1);
77100:         sqlite3VdbeResolveLabel(v, nextCase);
77101:       }
77102:       if( pExpr->pRight ){
77103:         sqlite3ExprCachePush(pParse);
77104:         sqlite3ExprCode(pParse, pExpr->pRight, target);
77105:         sqlite3ExprCachePop(pParse, 1);
77106:       }else{
77107:         sqlite3VdbeAddOp2(v, OP_Null, 0, target);
77108:       }
77109:       assert( db->mallocFailed || pParse->nErr>0 
77110:            || pParse->iCacheLevel==iCacheLevel );
77111:       sqlite3VdbeResolveLabel(v, endLabel);
77112:       break;
77113:     }
77114: #ifndef SQLITE_OMIT_TRIGGER
77115:     case TK_RAISE: {
77116:       assert( pExpr->affinity==OE_Rollback 
77117:            || pExpr->affinity==OE_Abort
77118:            || pExpr->affinity==OE_Fail
77119:            || pExpr->affinity==OE_Ignore
77120:       );
77121:       if( !pParse->pTriggerTab ){
77122:         sqlite3ErrorMsg(pParse,
77123:                        "RAISE() may only be used within a trigger-program");
77124:         return 0;
77125:       }
77126:       if( pExpr->affinity==OE_Abort ){
77127:         sqlite3MayAbort(pParse);
77128:       }
77129:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
77130:       if( pExpr->affinity==OE_Ignore ){
77131:         sqlite3VdbeAddOp4(
77132:             v, OP_Halt, SQLITE_OK, OE_Ignore, 0, pExpr->u.zToken,0);
77133:       }else{
77134:         sqlite3HaltConstraint(pParse, pExpr->affinity, pExpr->u.zToken, 0);
77135:       }
77136: 
77137:       break;
77138:     }
77139: #endif
77140:   }
77141:   sqlite3ReleaseTempReg(pParse, regFree1);
77142:   sqlite3ReleaseTempReg(pParse, regFree2);
77143:   return inReg;
77144: }
77145: 
77146: /*
77147: ** Generate code to evaluate an expression and store the results
77148: ** into a register.  Return the register number where the results
77149: ** are stored.
77150: **
77151: ** If the register is a temporary register that can be deallocated,
77152: ** then write its number into *pReg.  If the result register is not
77153: ** a temporary, then set *pReg to zero.
77154: */
77155: SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){
77156:   int r1 = sqlite3GetTempReg(pParse);
77157:   int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
77158:   if( r2==r1 ){
77159:     *pReg = r1;
77160:   }else{
77161:     sqlite3ReleaseTempReg(pParse, r1);
77162:     *pReg = 0;
77163:   }
77164:   return r2;
77165: }
77166: 
77167: /*
77168: ** Generate code that will evaluate expression pExpr and store the
77169: ** results in register target.  The results are guaranteed to appear
77170: ** in register target.
77171: */
77172: SQLITE_PRIVATE int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){
77173:   int inReg;
77174: 
77175:   assert( target>0 && target<=pParse->nMem );
77176:   if( pExpr && pExpr->op==TK_REGISTER ){
77177:     sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, pExpr->iTable, target);
77178:   }else{
77179:     inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
77180:     assert( pParse->pVdbe || pParse->db->mallocFailed );
77181:     if( inReg!=target && pParse->pVdbe ){
77182:       sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target);
77183:     }
77184:   }
77185:   return target;
77186: }
77187: 
77188: /*
77189: ** Generate code that evalutes the given expression and puts the result
77190: ** in register target.
77191: **
77192: ** Also make a copy of the expression results into another "cache" register
77193: ** and modify the expression so that the next time it is evaluated,
77194: ** the result is a copy of the cache register.
77195: **
77196: ** This routine is used for expressions that are used multiple 
77197: ** times.  They are evaluated once and the results of the expression
77198: ** are reused.
77199: */
77200: SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int target){
77201:   Vdbe *v = pParse->pVdbe;
77202:   int inReg;
77203:   inReg = sqlite3ExprCode(pParse, pExpr, target);
77204:   assert( target>0 );
77205:   /* This routine is called for terms to INSERT or UPDATE.  And the only
77206:   ** other place where expressions can be converted into TK_REGISTER is
77207:   ** in WHERE clause processing.  So as currently implemented, there is
77208:   ** no way for a TK_REGISTER to exist here.  But it seems prudent to
77209:   ** keep the ALWAYS() in case the conditions above change with future
77210:   ** modifications or enhancements. */
77211:   if( ALWAYS(pExpr->op!=TK_REGISTER) ){  
77212:     int iMem;
77213:     iMem = ++pParse->nMem;
77214:     sqlite3VdbeAddOp2(v, OP_Copy, inReg, iMem);
77215:     pExpr->iTable = iMem;
77216:     pExpr->op2 = pExpr->op;
77217:     pExpr->op = TK_REGISTER;
77218:   }
77219:   return inReg;
77220: }
77221: 
77222: #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
77223: /*
77224: ** Generate a human-readable explanation of an expression tree.
77225: */
77226: SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){
77227:   int op;                   /* The opcode being coded */
77228:   const char *zBinOp = 0;   /* Binary operator */
77229:   const char *zUniOp = 0;   /* Unary operator */
77230:   if( pExpr==0 ){
77231:     op = TK_NULL;
77232:   }else{
77233:     op = pExpr->op;
77234:   }
77235:   switch( op ){
77236:     case TK_AGG_COLUMN: {
77237:       sqlite3ExplainPrintf(pOut, "AGG{%d:%d}",
77238:             pExpr->iTable, pExpr->iColumn);
77239:       break;
77240:     }
77241:     case TK_COLUMN: {
77242:       if( pExpr->iTable<0 ){
77243:         /* This only happens when coding check constraints */
77244:         sqlite3ExplainPrintf(pOut, "COLUMN(%d)", pExpr->iColumn);
77245:       }else{
77246:         sqlite3ExplainPrintf(pOut, "{%d:%d}",
77247:                              pExpr->iTable, pExpr->iColumn);
77248:       }
77249:       break;
77250:     }
77251:     case TK_INTEGER: {
77252:       if( pExpr->flags & EP_IntValue ){
77253:         sqlite3ExplainPrintf(pOut, "%d", pExpr->u.iValue);
77254:       }else{
77255:         sqlite3ExplainPrintf(pOut, "%s", pExpr->u.zToken);
77256:       }
77257:       break;
77258:     }
77259: #ifndef SQLITE_OMIT_FLOATING_POINT
77260:     case TK_FLOAT: {
77261:       sqlite3ExplainPrintf(pOut,"%s", pExpr->u.zToken);
77262:       break;
77263:     }
77264: #endif
77265:     case TK_STRING: {
77266:       sqlite3ExplainPrintf(pOut,"%Q", pExpr->u.zToken);
77267:       break;
77268:     }
77269:     case TK_NULL: {
77270:       sqlite3ExplainPrintf(pOut,"NULL");
77271:       break;
77272:     }
77273: #ifndef SQLITE_OMIT_BLOB_LITERAL
77274:     case TK_BLOB: {
77275:       sqlite3ExplainPrintf(pOut,"%s", pExpr->u.zToken);
77276:       break;
77277:     }
77278: #endif
77279:     case TK_VARIABLE: {
77280:       sqlite3ExplainPrintf(pOut,"VARIABLE(%s,%d)",
77281:                            pExpr->u.zToken, pExpr->iColumn);
77282:       break;
77283:     }
77284:     case TK_REGISTER: {
77285:       sqlite3ExplainPrintf(pOut,"REGISTER(%d)", pExpr->iTable);
77286:       break;
77287:     }
77288:     case TK_AS: {
77289:       sqlite3ExplainExpr(pOut, pExpr->pLeft);
77290:       break;
77291:     }
77292: #ifndef SQLITE_OMIT_CAST
77293:     case TK_CAST: {
77294:       /* Expressions of the form:   CAST(pLeft AS token) */
77295:       const char *zAff = "unk";
77296:       switch( sqlite3AffinityType(pExpr->u.zToken) ){
77297:         case SQLITE_AFF_TEXT:    zAff = "TEXT";     break;
77298:         case SQLITE_AFF_NONE:    zAff = "NONE";     break;
77299:         case SQLITE_AFF_NUMERIC: zAff = "NUMERIC";  break;
77300:         case SQLITE_AFF_INTEGER: zAff = "INTEGER";  break;
77301:         case SQLITE_AFF_REAL:    zAff = "REAL";     break;
77302:       }
77303:       sqlite3ExplainPrintf(pOut, "CAST-%s(", zAff);
77304:       sqlite3ExplainExpr(pOut, pExpr->pLeft);
77305:       sqlite3ExplainPrintf(pOut, ")");
77306:       break;
77307:     }
77308: #endif /* SQLITE_OMIT_CAST */
77309:     case TK_LT:      zBinOp = "LT";     break;
77310:     case TK_LE:      zBinOp = "LE";     break;
77311:     case TK_GT:      zBinOp = "GT";     break;
77312:     case TK_GE:      zBinOp = "GE";     break;
77313:     case TK_NE:      zBinOp = "NE";     break;
77314:     case TK_EQ:      zBinOp = "EQ";     break;
77315:     case TK_IS:      zBinOp = "IS";     break;
77316:     case TK_ISNOT:   zBinOp = "ISNOT";  break;
77317:     case TK_AND:     zBinOp = "AND";    break;
77318:     case TK_OR:      zBinOp = "OR";     break;
77319:     case TK_PLUS:    zBinOp = "ADD";    break;
77320:     case TK_STAR:    zBinOp = "MUL";    break;
77321:     case TK_MINUS:   zBinOp = "SUB";    break;
77322:     case TK_REM:     zBinOp = "REM";    break;
77323:     case TK_BITAND:  zBinOp = "BITAND"; break;
77324:     case TK_BITOR:   zBinOp = "BITOR";  break;
77325:     case TK_SLASH:   zBinOp = "DIV";    break;
77326:     case TK_LSHIFT:  zBinOp = "LSHIFT"; break;
77327:     case TK_RSHIFT:  zBinOp = "RSHIFT"; break;
77328:     case TK_CONCAT:  zBinOp = "CONCAT"; break;
77329: 
77330:     case TK_UMINUS:  zUniOp = "UMINUS"; break;
77331:     case TK_UPLUS:   zUniOp = "UPLUS";  break;
77332:     case TK_BITNOT:  zUniOp = "BITNOT"; break;
77333:     case TK_NOT:     zUniOp = "NOT";    break;
77334:     case TK_ISNULL:  zUniOp = "ISNULL"; break;
77335:     case TK_NOTNULL: zUniOp = "NOTNULL"; break;
77336: 
77337:     case TK_AGG_FUNCTION:
77338:     case TK_CONST_FUNC:
77339:     case TK_FUNCTION: {
77340:       ExprList *pFarg;       /* List of function arguments */
77341:       if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){
77342:         pFarg = 0;
77343:       }else{
77344:         pFarg = pExpr->x.pList;
77345:       }
77346:       sqlite3ExplainPrintf(pOut, "%sFUNCTION:%s(",
77347:                            op==TK_AGG_FUNCTION ? "AGG_" : "",
77348:                            pExpr->u.zToken);
77349:       if( pFarg ){
77350:         sqlite3ExplainExprList(pOut, pFarg);
77351:       }
77352:       sqlite3ExplainPrintf(pOut, ")");
77353:       break;
77354:     }
77355: #ifndef SQLITE_OMIT_SUBQUERY
77356:     case TK_EXISTS: {
77357:       sqlite3ExplainPrintf(pOut, "EXISTS(");
77358:       sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
77359:       sqlite3ExplainPrintf(pOut,")");
77360:       break;
77361:     }
77362:     case TK_SELECT: {
77363:       sqlite3ExplainPrintf(pOut, "(");
77364:       sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
77365:       sqlite3ExplainPrintf(pOut, ")");
77366:       break;
77367:     }
77368:     case TK_IN: {
77369:       sqlite3ExplainPrintf(pOut, "IN(");
77370:       sqlite3ExplainExpr(pOut, pExpr->pLeft);
77371:       sqlite3ExplainPrintf(pOut, ",");
77372:       if( ExprHasProperty(pExpr, EP_xIsSelect) ){
77373:         sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
77374:       }else{
77375:         sqlite3ExplainExprList(pOut, pExpr->x.pList);
77376:       }
77377:       sqlite3ExplainPrintf(pOut, ")");
77378:       break;
77379:     }
77380: #endif /* SQLITE_OMIT_SUBQUERY */
77381: 
77382:     /*
77383:     **    x BETWEEN y AND z
77384:     **
77385:     ** This is equivalent to
77386:     **
77387:     **    x>=y AND x<=z
77388:     **
77389:     ** X is stored in pExpr->pLeft.
77390:     ** Y is stored in pExpr->pList->a[0].pExpr.
77391:     ** Z is stored in pExpr->pList->a[1].pExpr.
77392:     */
77393:     case TK_BETWEEN: {
77394:       Expr *pX = pExpr->pLeft;
77395:       Expr *pY = pExpr->x.pList->a[0].pExpr;
77396:       Expr *pZ = pExpr->x.pList->a[1].pExpr;
77397:       sqlite3ExplainPrintf(pOut, "BETWEEN(");
77398:       sqlite3ExplainExpr(pOut, pX);
77399:       sqlite3ExplainPrintf(pOut, ",");
77400:       sqlite3ExplainExpr(pOut, pY);
77401:       sqlite3ExplainPrintf(pOut, ",");
77402:       sqlite3ExplainExpr(pOut, pZ);
77403:       sqlite3ExplainPrintf(pOut, ")");
77404:       break;
77405:     }
77406:     case TK_TRIGGER: {
77407:       /* If the opcode is TK_TRIGGER, then the expression is a reference
77408:       ** to a column in the new.* or old.* pseudo-tables available to
77409:       ** trigger programs. In this case Expr.iTable is set to 1 for the
77410:       ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn
77411:       ** is set to the column of the pseudo-table to read, or to -1 to
77412:       ** read the rowid field.
77413:       */
77414:       sqlite3ExplainPrintf(pOut, "%s(%d)", 
77415:           pExpr->iTable ? "NEW" : "OLD", pExpr->iColumn);
77416:       break;
77417:     }
77418:     case TK_CASE: {
77419:       sqlite3ExplainPrintf(pOut, "CASE(");
77420:       sqlite3ExplainExpr(pOut, pExpr->pLeft);
77421:       sqlite3ExplainPrintf(pOut, ",");
77422:       sqlite3ExplainExprList(pOut, pExpr->x.pList);
77423:       break;
77424:     }
77425: #ifndef SQLITE_OMIT_TRIGGER
77426:     case TK_RAISE: {
77427:       const char *zType = "unk";
77428:       switch( pExpr->affinity ){
77429:         case OE_Rollback:   zType = "rollback";  break;
77430:         case OE_Abort:      zType = "abort";     break;
77431:         case OE_Fail:       zType = "fail";      break;
77432:         case OE_Ignore:     zType = "ignore";    break;
77433:       }
77434:       sqlite3ExplainPrintf(pOut, "RAISE-%s(%s)", zType, pExpr->u.zToken);
77435:       break;
77436:     }
77437: #endif
77438:   }
77439:   if( zBinOp ){
77440:     sqlite3ExplainPrintf(pOut,"%s(", zBinOp);
77441:     sqlite3ExplainExpr(pOut, pExpr->pLeft);
77442:     sqlite3ExplainPrintf(pOut,",");
77443:     sqlite3ExplainExpr(pOut, pExpr->pRight);
77444:     sqlite3ExplainPrintf(pOut,")");
77445:   }else if( zUniOp ){
77446:     sqlite3ExplainPrintf(pOut,"%s(", zUniOp);
77447:     sqlite3ExplainExpr(pOut, pExpr->pLeft);
77448:     sqlite3ExplainPrintf(pOut,")");
77449:   }
77450: }
77451: #endif /* defined(SQLITE_ENABLE_TREE_EXPLAIN) */
77452: 
77453: #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
77454: /*
77455: ** Generate a human-readable explanation of an expression list.
77456: */
77457: SQLITE_PRIVATE void sqlite3ExplainExprList(Vdbe *pOut, ExprList *pList){
77458:   int i;
77459:   if( pList==0 || pList->nExpr==0 ){
77460:     sqlite3ExplainPrintf(pOut, "(empty-list)");
77461:     return;
77462:   }else if( pList->nExpr==1 ){
77463:     sqlite3ExplainExpr(pOut, pList->a[0].pExpr);
77464:   }else{
77465:     sqlite3ExplainPush(pOut);
77466:     for(i=0; i<pList->nExpr; i++){
77467:       sqlite3ExplainPrintf(pOut, "item[%d] = ", i);
77468:       sqlite3ExplainPush(pOut);
77469:       sqlite3ExplainExpr(pOut, pList->a[i].pExpr);
77470:       sqlite3ExplainPop(pOut);
77471:       if( i<pList->nExpr-1 ){
77472:         sqlite3ExplainNL(pOut);
77473:       }
77474:     }
77475:     sqlite3ExplainPop(pOut);
77476:   }
77477: }
77478: #endif /* SQLITE_DEBUG */
77479: 
77480: /*
77481: ** Return TRUE if pExpr is an constant expression that is appropriate
77482: ** for factoring out of a loop.  Appropriate expressions are:
77483: **
77484: **    *  Any expression that evaluates to two or more opcodes.
77485: **
77486: **    *  Any OP_Integer, OP_Real, OP_String, OP_Blob, OP_Null, 
77487: **       or OP_Variable that does not need to be placed in a 
77488: **       specific register.
77489: **
77490: ** There is no point in factoring out single-instruction constant
77491: ** expressions that need to be placed in a particular register.  
77492: ** We could factor them out, but then we would end up adding an
77493: ** OP_SCopy instruction to move the value into the correct register
77494: ** later.  We might as well just use the original instruction and
77495: ** avoid the OP_SCopy.
77496: */
77497: static int isAppropriateForFactoring(Expr *p){
77498:   if( !sqlite3ExprIsConstantNotJoin(p) ){
77499:     return 0;  /* Only constant expressions are appropriate for factoring */
77500:   }
77501:   if( (p->flags & EP_FixedDest)==0 ){
77502:     return 1;  /* Any constant without a fixed destination is appropriate */
77503:   }
77504:   while( p->op==TK_UPLUS ) p = p->pLeft;
77505:   switch( p->op ){
77506: #ifndef SQLITE_OMIT_BLOB_LITERAL
77507:     case TK_BLOB:
77508: #endif
77509:     case TK_VARIABLE:
77510:     case TK_INTEGER:
77511:     case TK_FLOAT:
77512:     case TK_NULL:
77513:     case TK_STRING: {
77514:       testcase( p->op==TK_BLOB );
77515:       testcase( p->op==TK_VARIABLE );
77516:       testcase( p->op==TK_INTEGER );
77517:       testcase( p->op==TK_FLOAT );
77518:       testcase( p->op==TK_NULL );
77519:       testcase( p->op==TK_STRING );
77520:       /* Single-instruction constants with a fixed destination are
77521:       ** better done in-line.  If we factor them, they will just end
77522:       ** up generating an OP_SCopy to move the value to the destination
77523:       ** register. */
77524:       return 0;
77525:     }
77526:     case TK_UMINUS: {
77527:       if( p->pLeft->op==TK_FLOAT || p->pLeft->op==TK_INTEGER ){
77528:         return 0;
77529:       }
77530:       break;
77531:     }
77532:     default: {
77533:       break;
77534:     }
77535:   }
77536:   return 1;
77537: }
77538: 
77539: /*
77540: ** If pExpr is a constant expression that is appropriate for
77541: ** factoring out of a loop, then evaluate the expression
77542: ** into a register and convert the expression into a TK_REGISTER
77543: ** expression.
77544: */
77545: static int evalConstExpr(Walker *pWalker, Expr *pExpr){
77546:   Parse *pParse = pWalker->pParse;
77547:   switch( pExpr->op ){
77548:     case TK_IN:
77549:     case TK_REGISTER: {
77550:       return WRC_Prune;
77551:     }
77552:     case TK_FUNCTION:
77553:     case TK_AGG_FUNCTION:
77554:     case TK_CONST_FUNC: {
77555:       /* The arguments to a function have a fixed destination.
77556:       ** Mark them this way to avoid generated unneeded OP_SCopy
77557:       ** instructions. 
77558:       */
77559:       ExprList *pList = pExpr->x.pList;
77560:       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
77561:       if( pList ){
77562:         int i = pList->nExpr;
77563:         struct ExprList_item *pItem = pList->a;
77564:         for(; i>0; i--, pItem++){
77565:           if( ALWAYS(pItem->pExpr) ) pItem->pExpr->flags |= EP_FixedDest;
77566:         }
77567:       }
77568:       break;
77569:     }
77570:   }
77571:   if( isAppropriateForFactoring(pExpr) ){
77572:     int r1 = ++pParse->nMem;
77573:     int r2;
77574:     r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
77575:     if( NEVER(r1!=r2) ) sqlite3ReleaseTempReg(pParse, r1);
77576:     pExpr->op2 = pExpr->op;
77577:     pExpr->op = TK_REGISTER;
77578:     pExpr->iTable = r2;
77579:     return WRC_Prune;
77580:   }
77581:   return WRC_Continue;
77582: }
77583: 
77584: /*
77585: ** Preevaluate constant subexpressions within pExpr and store the
77586: ** results in registers.  Modify pExpr so that the constant subexpresions
77587: ** are TK_REGISTER opcodes that refer to the precomputed values.
77588: **
77589: ** This routine is a no-op if the jump to the cookie-check code has
77590: ** already occur.  Since the cookie-check jump is generated prior to
77591: ** any other serious processing, this check ensures that there is no
77592: ** way to accidently bypass the constant initializations.
77593: **
77594: ** This routine is also a no-op if the SQLITE_FactorOutConst optimization
77595: ** is disabled via the sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS)
77596: ** interface.  This allows test logic to verify that the same answer is
77597: ** obtained for queries regardless of whether or not constants are
77598: ** precomputed into registers or if they are inserted in-line.
77599: */
77600: SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse *pParse, Expr *pExpr){
77601:   Walker w;
77602:   if( pParse->cookieGoto ) return;
77603:   if( (pParse->db->flags & SQLITE_FactorOutConst)!=0 ) return;
77604:   w.xExprCallback = evalConstExpr;
77605:   w.xSelectCallback = 0;
77606:   w.pParse = pParse;
77607:   sqlite3WalkExpr(&w, pExpr);
77608: }
77609: 
77610: 
77611: /*
77612: ** Generate code that pushes the value of every element of the given
77613: ** expression list into a sequence of registers beginning at target.
77614: **
77615: ** Return the number of elements evaluated.
77616: */
77617: SQLITE_PRIVATE int sqlite3ExprCodeExprList(
77618:   Parse *pParse,     /* Parsing context */
77619:   ExprList *pList,   /* The expression list to be coded */
77620:   int target,        /* Where to write results */
77621:   int doHardCopy     /* Make a hard copy of every element */
77622: ){
77623:   struct ExprList_item *pItem;
77624:   int i, n;
77625:   assert( pList!=0 );
77626:   assert( target>0 );
77627:   assert( pParse->pVdbe!=0 );  /* Never gets this far otherwise */
77628:   n = pList->nExpr;
77629:   for(pItem=pList->a, i=0; i<n; i++, pItem++){
77630:     Expr *pExpr = pItem->pExpr;
77631:     int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
77632:     if( inReg!=target+i ){
77633:       sqlite3VdbeAddOp2(pParse->pVdbe, doHardCopy ? OP_Copy : OP_SCopy,
77634:                         inReg, target+i);
77635:     }
77636:   }
77637:   return n;
77638: }
77639: 
77640: /*
77641: ** Generate code for a BETWEEN operator.
77642: **
77643: **    x BETWEEN y AND z
77644: **
77645: ** The above is equivalent to 
77646: **
77647: **    x>=y AND x<=z
77648: **
77649: ** Code it as such, taking care to do the common subexpression
77650: ** elementation of x.
77651: */
77652: static void exprCodeBetween(
77653:   Parse *pParse,    /* Parsing and code generating context */
77654:   Expr *pExpr,      /* The BETWEEN expression */
77655:   int dest,         /* Jump here if the jump is taken */
77656:   int jumpIfTrue,   /* Take the jump if the BETWEEN is true */
77657:   int jumpIfNull    /* Take the jump if the BETWEEN is NULL */
77658: ){
77659:   Expr exprAnd;     /* The AND operator in  x>=y AND x<=z  */
77660:   Expr compLeft;    /* The  x>=y  term */
77661:   Expr compRight;   /* The  x<=z  term */
77662:   Expr exprX;       /* The  x  subexpression */
77663:   int regFree1 = 0; /* Temporary use register */
77664: 
77665:   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
77666:   exprX = *pExpr->pLeft;
77667:   exprAnd.op = TK_AND;
77668:   exprAnd.pLeft = &compLeft;
77669:   exprAnd.pRight = &compRight;
77670:   compLeft.op = TK_GE;
77671:   compLeft.pLeft = &exprX;
77672:   compLeft.pRight = pExpr->x.pList->a[0].pExpr;
77673:   compRight.op = TK_LE;
77674:   compRight.pLeft = &exprX;
77675:   compRight.pRight = pExpr->x.pList->a[1].pExpr;
77676:   exprX.iTable = sqlite3ExprCodeTemp(pParse, &exprX, &regFree1);
77677:   exprX.op = TK_REGISTER;
77678:   if( jumpIfTrue ){
77679:     sqlite3ExprIfTrue(pParse, &exprAnd, dest, jumpIfNull);
77680:   }else{
77681:     sqlite3ExprIfFalse(pParse, &exprAnd, dest, jumpIfNull);
77682:   }
77683:   sqlite3ReleaseTempReg(pParse, regFree1);
77684: 
77685:   /* Ensure adequate test coverage */
77686:   testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1==0 );
77687:   testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1!=0 );
77688:   testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1==0 );
77689:   testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1!=0 );
77690:   testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1==0 );
77691:   testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1!=0 );
77692:   testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1==0 );
77693:   testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1!=0 );
77694: }
77695: 
77696: /*
77697: ** Generate code for a boolean expression such that a jump is made
77698: ** to the label "dest" if the expression is true but execution
77699: ** continues straight thru if the expression is false.
77700: **
77701: ** If the expression evaluates to NULL (neither true nor false), then
77702: ** take the jump if the jumpIfNull flag is SQLITE_JUMPIFNULL.
77703: **
77704: ** This code depends on the fact that certain token values (ex: TK_EQ)
77705: ** are the same as opcode values (ex: OP_Eq) that implement the corresponding
77706: ** operation.  Special comments in vdbe.c and the mkopcodeh.awk script in
77707: ** the make process cause these values to align.  Assert()s in the code
77708: ** below verify that the numbers are aligned correctly.
77709: */
77710: SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
77711:   Vdbe *v = pParse->pVdbe;
77712:   int op = 0;
77713:   int regFree1 = 0;
77714:   int regFree2 = 0;
77715:   int r1, r2;
77716: 
77717:   assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
77718:   if( NEVER(v==0) )     return;  /* Existance of VDBE checked by caller */
77719:   if( NEVER(pExpr==0) ) return;  /* No way this can happen */
77720:   op = pExpr->op;
77721:   switch( op ){
77722:     case TK_AND: {
77723:       int d2 = sqlite3VdbeMakeLabel(v);
77724:       testcase( jumpIfNull==0 );
77725:       sqlite3ExprCachePush(pParse);
77726:       sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL);
77727:       sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
77728:       sqlite3VdbeResolveLabel(v, d2);
77729:       sqlite3ExprCachePop(pParse, 1);
77730:       break;
77731:     }
77732:     case TK_OR: {
77733:       testcase( jumpIfNull==0 );
77734:       sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
77735:       sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
77736:       break;
77737:     }
77738:     case TK_NOT: {
77739:       testcase( jumpIfNull==0 );
77740:       sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
77741:       break;
77742:     }
77743:     case TK_LT:
77744:     case TK_LE:
77745:     case TK_GT:
77746:     case TK_GE:
77747:     case TK_NE:
77748:     case TK_EQ: {
77749:       assert( TK_LT==OP_Lt );
77750:       assert( TK_LE==OP_Le );
77751:       assert( TK_GT==OP_Gt );
77752:       assert( TK_GE==OP_Ge );
77753:       assert( TK_EQ==OP_Eq );
77754:       assert( TK_NE==OP_Ne );
77755:       testcase( op==TK_LT );
77756:       testcase( op==TK_LE );
77757:       testcase( op==TK_GT );
77758:       testcase( op==TK_GE );
77759:       testcase( op==TK_EQ );
77760:       testcase( op==TK_NE );
77761:       testcase( jumpIfNull==0 );
77762:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77763:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
77764:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
77765:                   r1, r2, dest, jumpIfNull);
77766:       testcase( regFree1==0 );
77767:       testcase( regFree2==0 );
77768:       break;
77769:     }
77770:     case TK_IS:
77771:     case TK_ISNOT: {
77772:       testcase( op==TK_IS );
77773:       testcase( op==TK_ISNOT );
77774:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77775:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
77776:       op = (op==TK_IS) ? TK_EQ : TK_NE;
77777:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
77778:                   r1, r2, dest, SQLITE_NULLEQ);
77779:       testcase( regFree1==0 );
77780:       testcase( regFree2==0 );
77781:       break;
77782:     }
77783:     case TK_ISNULL:
77784:     case TK_NOTNULL: {
77785:       assert( TK_ISNULL==OP_IsNull );
77786:       assert( TK_NOTNULL==OP_NotNull );
77787:       testcase( op==TK_ISNULL );
77788:       testcase( op==TK_NOTNULL );
77789:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77790:       sqlite3VdbeAddOp2(v, op, r1, dest);
77791:       testcase( regFree1==0 );
77792:       break;
77793:     }
77794:     case TK_BETWEEN: {
77795:       testcase( jumpIfNull==0 );
77796:       exprCodeBetween(pParse, pExpr, dest, 1, jumpIfNull);
77797:       break;
77798:     }
77799: #ifndef SQLITE_OMIT_SUBQUERY
77800:     case TK_IN: {
77801:       int destIfFalse = sqlite3VdbeMakeLabel(v);
77802:       int destIfNull = jumpIfNull ? dest : destIfFalse;
77803:       sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull);
77804:       sqlite3VdbeAddOp2(v, OP_Goto, 0, dest);
77805:       sqlite3VdbeResolveLabel(v, destIfFalse);
77806:       break;
77807:     }
77808: #endif
77809:     default: {
77810:       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
77811:       sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0);
77812:       testcase( regFree1==0 );
77813:       testcase( jumpIfNull==0 );
77814:       break;
77815:     }
77816:   }
77817:   sqlite3ReleaseTempReg(pParse, regFree1);
77818:   sqlite3ReleaseTempReg(pParse, regFree2);  
77819: }
77820: 
77821: /*
77822: ** Generate code for a boolean expression such that a jump is made
77823: ** to the label "dest" if the expression is false but execution
77824: ** continues straight thru if the expression is true.
77825: **
77826: ** If the expression evaluates to NULL (neither true nor false) then
77827: ** jump if jumpIfNull is SQLITE_JUMPIFNULL or fall through if jumpIfNull
77828: ** is 0.
77829: */
77830: SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
77831:   Vdbe *v = pParse->pVdbe;
77832:   int op = 0;
77833:   int regFree1 = 0;
77834:   int regFree2 = 0;
77835:   int r1, r2;
77836: 
77837:   assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
77838:   if( NEVER(v==0) ) return; /* Existance of VDBE checked by caller */
77839:   if( pExpr==0 )    return;
77840: 
77841:   /* The value of pExpr->op and op are related as follows:
77842:   **
77843:   **       pExpr->op            op
77844:   **       ---------          ----------
77845:   **       TK_ISNULL          OP_NotNull
77846:   **       TK_NOTNULL         OP_IsNull
77847:   **       TK_NE              OP_Eq
77848:   **       TK_EQ              OP_Ne
77849:   **       TK_GT              OP_Le
77850:   **       TK_LE              OP_Gt
77851:   **       TK_GE              OP_Lt
77852:   **       TK_LT              OP_Ge
77853:   **
77854:   ** For other values of pExpr->op, op is undefined and unused.
77855:   ** The value of TK_ and OP_ constants are arranged such that we
77856:   ** can compute the mapping above using the following expression.
77857:   ** Assert()s verify that the computation is correct.
77858:   */
77859:   op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1);
77860: 
77861:   /* Verify correct alignment of TK_ and OP_ constants
77862:   */
77863:   assert( pExpr->op!=TK_ISNULL || op==OP_NotNull );
77864:   assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull );
77865:   assert( pExpr->op!=TK_NE || op==OP_Eq );
77866:   assert( pExpr->op!=TK_EQ || op==OP_Ne );
77867:   assert( pExpr->op!=TK_LT || op==OP_Ge );
77868:   assert( pExpr->op!=TK_LE || op==OP_Gt );
77869:   assert( pExpr->op!=TK_GT || op==OP_Le );
77870:   assert( pExpr->op!=TK_GE || op==OP_Lt );
77871: 
77872:   switch( pExpr->op ){
77873:     case TK_AND: {
77874:       testcase( jumpIfNull==0 );
77875:       sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
77876:       sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
77877:       break;
77878:     }
77879:     case TK_OR: {
77880:       int d2 = sqlite3VdbeMakeLabel(v);
77881:       testcase( jumpIfNull==0 );
77882:       sqlite3ExprCachePush(pParse);
77883:       sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL);
77884:       sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
77885:       sqlite3VdbeResolveLabel(v, d2);
77886:       sqlite3ExprCachePop(pParse, 1);
77887:       break;
77888:     }
77889:     case TK_NOT: {
77890:       testcase( jumpIfNull==0 );
77891:       sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
77892:       break;
77893:     }
77894:     case TK_LT:
77895:     case TK_LE:
77896:     case TK_GT:
77897:     case TK_GE:
77898:     case TK_NE:
77899:     case TK_EQ: {
77900:       testcase( op==TK_LT );
77901:       testcase( op==TK_LE );
77902:       testcase( op==TK_GT );
77903:       testcase( op==TK_GE );
77904:       testcase( op==TK_EQ );
77905:       testcase( op==TK_NE );
77906:       testcase( jumpIfNull==0 );
77907:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77908:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
77909:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
77910:                   r1, r2, dest, jumpIfNull);
77911:       testcase( regFree1==0 );
77912:       testcase( regFree2==0 );
77913:       break;
77914:     }
77915:     case TK_IS:
77916:     case TK_ISNOT: {
77917:       testcase( pExpr->op==TK_IS );
77918:       testcase( pExpr->op==TK_ISNOT );
77919:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77920:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
77921:       op = (pExpr->op==TK_IS) ? TK_NE : TK_EQ;
77922:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
77923:                   r1, r2, dest, SQLITE_NULLEQ);
77924:       testcase( regFree1==0 );
77925:       testcase( regFree2==0 );
77926:       break;
77927:     }
77928:     case TK_ISNULL:
77929:     case TK_NOTNULL: {
77930:       testcase( op==TK_ISNULL );
77931:       testcase( op==TK_NOTNULL );
77932:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77933:       sqlite3VdbeAddOp2(v, op, r1, dest);
77934:       testcase( regFree1==0 );
77935:       break;
77936:     }
77937:     case TK_BETWEEN: {
77938:       testcase( jumpIfNull==0 );
77939:       exprCodeBetween(pParse, pExpr, dest, 0, jumpIfNull);
77940:       break;
77941:     }
77942: #ifndef SQLITE_OMIT_SUBQUERY
77943:     case TK_IN: {
77944:       if( jumpIfNull ){
77945:         sqlite3ExprCodeIN(pParse, pExpr, dest, dest);
77946:       }else{
77947:         int destIfNull = sqlite3VdbeMakeLabel(v);
77948:         sqlite3ExprCodeIN(pParse, pExpr, dest, destIfNull);
77949:         sqlite3VdbeResolveLabel(v, destIfNull);
77950:       }
77951:       break;
77952:     }
77953: #endif
77954:     default: {
77955:       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
77956:       sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0);
77957:       testcase( regFree1==0 );
77958:       testcase( jumpIfNull==0 );
77959:       break;
77960:     }
77961:   }
77962:   sqlite3ReleaseTempReg(pParse, regFree1);
77963:   sqlite3ReleaseTempReg(pParse, regFree2);
77964: }
77965: 
77966: /*
77967: ** Do a deep comparison of two expression trees.  Return 0 if the two
77968: ** expressions are completely identical.  Return 1 if they differ only
77969: ** by a COLLATE operator at the top level.  Return 2 if there are differences
77970: ** other than the top-level COLLATE operator.
77971: **
77972: ** Sometimes this routine will return 2 even if the two expressions
77973: ** really are equivalent.  If we cannot prove that the expressions are
77974: ** identical, we return 2 just to be safe.  So if this routine
77975: ** returns 2, then you do not really know for certain if the two
77976: ** expressions are the same.  But if you get a 0 or 1 return, then you
77977: ** can be sure the expressions are the same.  In the places where
77978: ** this routine is used, it does not hurt to get an extra 2 - that
77979: ** just might result in some slightly slower code.  But returning
77980: ** an incorrect 0 or 1 could lead to a malfunction.
77981: */
77982: SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB){
77983:   if( pA==0||pB==0 ){
77984:     return pB==pA ? 0 : 2;
77985:   }
77986:   assert( !ExprHasAnyProperty(pA, EP_TokenOnly|EP_Reduced) );
77987:   assert( !ExprHasAnyProperty(pB, EP_TokenOnly|EP_Reduced) );
77988:   if( ExprHasProperty(pA, EP_xIsSelect) || ExprHasProperty(pB, EP_xIsSelect) ){
77989:     return 2;
77990:   }
77991:   if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2;
77992:   if( pA->op!=pB->op ) return 2;
77993:   if( sqlite3ExprCompare(pA->pLeft, pB->pLeft) ) return 2;
77994:   if( sqlite3ExprCompare(pA->pRight, pB->pRight) ) return 2;
77995:   if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList) ) return 2;
77996:   if( pA->iTable!=pB->iTable || pA->iColumn!=pB->iColumn ) return 2;
77997:   if( ExprHasProperty(pA, EP_IntValue) ){
77998:     if( !ExprHasProperty(pB, EP_IntValue) || pA->u.iValue!=pB->u.iValue ){
77999:       return 2;
78000:     }
78001:   }else if( pA->op!=TK_COLUMN && pA->u.zToken ){
78002:     if( ExprHasProperty(pB, EP_IntValue) || NEVER(pB->u.zToken==0) ) return 2;
78003:     if( strcmp(pA->u.zToken,pB->u.zToken)!=0 ){
78004:       return 2;
78005:     }
78006:   }
78007:   if( (pA->flags & EP_ExpCollate)!=(pB->flags & EP_ExpCollate) ) return 1;
78008:   if( (pA->flags & EP_ExpCollate)!=0 && pA->pColl!=pB->pColl ) return 2;
78009:   return 0;
78010: }
78011: 
78012: /*
78013: ** Compare two ExprList objects.  Return 0 if they are identical and 
78014: ** non-zero if they differ in any way.
78015: **
78016: ** This routine might return non-zero for equivalent ExprLists.  The
78017: ** only consequence will be disabled optimizations.  But this routine
78018: ** must never return 0 if the two ExprList objects are different, or
78019: ** a malfunction will result.
78020: **
78021: ** Two NULL pointers are considered to be the same.  But a NULL pointer
78022: ** always differs from a non-NULL pointer.
78023: */
78024: SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList *pA, ExprList *pB){
78025:   int i;
78026:   if( pA==0 && pB==0 ) return 0;
78027:   if( pA==0 || pB==0 ) return 1;
78028:   if( pA->nExpr!=pB->nExpr ) return 1;
78029:   for(i=0; i<pA->nExpr; i++){
78030:     Expr *pExprA = pA->a[i].pExpr;
78031:     Expr *pExprB = pB->a[i].pExpr;
78032:     if( pA->a[i].sortOrder!=pB->a[i].sortOrder ) return 1;
78033:     if( sqlite3ExprCompare(pExprA, pExprB) ) return 1;
78034:   }
78035:   return 0;
78036: }
78037: 
78038: /*
78039: ** Add a new element to the pAggInfo->aCol[] array.  Return the index of
78040: ** the new element.  Return a negative number if malloc fails.
78041: */
78042: static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){
78043:   int i;
78044:   pInfo->aCol = sqlite3ArrayAllocate(
78045:        db,
78046:        pInfo->aCol,
78047:        sizeof(pInfo->aCol[0]),
78048:        3,
78049:        &pInfo->nColumn,
78050:        &pInfo->nColumnAlloc,
78051:        &i
78052:   );
78053:   return i;
78054: }    
78055: 
78056: /*
78057: ** Add a new element to the pAggInfo->aFunc[] array.  Return the index of
78058: ** the new element.  Return a negative number if malloc fails.
78059: */
78060: static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){
78061:   int i;
78062:   pInfo->aFunc = sqlite3ArrayAllocate(
78063:        db, 
78064:        pInfo->aFunc,
78065:        sizeof(pInfo->aFunc[0]),
78066:        3,
78067:        &pInfo->nFunc,
78068:        &pInfo->nFuncAlloc,
78069:        &i
78070:   );
78071:   return i;
78072: }    
78073: 
78074: /*
78075: ** This is the xExprCallback for a tree walker.  It is used to
78076: ** implement sqlite3ExprAnalyzeAggregates().  See sqlite3ExprAnalyzeAggregates
78077: ** for additional information.
78078: */
78079: static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
78080:   int i;
78081:   NameContext *pNC = pWalker->u.pNC;
78082:   Parse *pParse = pNC->pParse;
78083:   SrcList *pSrcList = pNC->pSrcList;
78084:   AggInfo *pAggInfo = pNC->pAggInfo;
78085: 
78086:   switch( pExpr->op ){
78087:     case TK_AGG_COLUMN:
78088:     case TK_COLUMN: {
78089:       testcase( pExpr->op==TK_AGG_COLUMN );
78090:       testcase( pExpr->op==TK_COLUMN );
78091:       /* Check to see if the column is in one of the tables in the FROM
78092:       ** clause of the aggregate query */
78093:       if( ALWAYS(pSrcList!=0) ){
78094:         struct SrcList_item *pItem = pSrcList->a;
78095:         for(i=0; i<pSrcList->nSrc; i++, pItem++){
78096:           struct AggInfo_col *pCol;
78097:           assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
78098:           if( pExpr->iTable==pItem->iCursor ){
78099:             /* If we reach this point, it means that pExpr refers to a table
78100:             ** that is in the FROM clause of the aggregate query.  
78101:             **
78102:             ** Make an entry for the column in pAggInfo->aCol[] if there
78103:             ** is not an entry there already.
78104:             */
78105:             int k;
78106:             pCol = pAggInfo->aCol;
78107:             for(k=0; k<pAggInfo->nColumn; k++, pCol++){
78108:               if( pCol->iTable==pExpr->iTable &&
78109:                   pCol->iColumn==pExpr->iColumn ){
78110:                 break;
78111:               }
78112:             }
78113:             if( (k>=pAggInfo->nColumn)
78114:              && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0 
78115:             ){
78116:               pCol = &pAggInfo->aCol[k];
78117:               pCol->pTab = pExpr->pTab;
78118:               pCol->iTable = pExpr->iTable;
78119:               pCol->iColumn = pExpr->iColumn;
78120:               pCol->iMem = ++pParse->nMem;
78121:               pCol->iSorterColumn = -1;
78122:               pCol->pExpr = pExpr;
78123:               if( pAggInfo->pGroupBy ){
78124:                 int j, n;
78125:                 ExprList *pGB = pAggInfo->pGroupBy;
78126:                 struct ExprList_item *pTerm = pGB->a;
78127:                 n = pGB->nExpr;
78128:                 for(j=0; j<n; j++, pTerm++){
78129:                   Expr *pE = pTerm->pExpr;
78130:                   if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable &&
78131:                       pE->iColumn==pExpr->iColumn ){
78132:                     pCol->iSorterColumn = j;
78133:                     break;
78134:                   }
78135:                 }
78136:               }
78137:               if( pCol->iSorterColumn<0 ){
78138:                 pCol->iSorterColumn = pAggInfo->nSortingColumn++;
78139:               }
78140:             }
78141:             /* There is now an entry for pExpr in pAggInfo->aCol[] (either
78142:             ** because it was there before or because we just created it).
78143:             ** Convert the pExpr to be a TK_AGG_COLUMN referring to that
78144:             ** pAggInfo->aCol[] entry.
78145:             */
78146:             ExprSetIrreducible(pExpr);
78147:             pExpr->pAggInfo = pAggInfo;
78148:             pExpr->op = TK_AGG_COLUMN;
78149:             pExpr->iAgg = (i16)k;
78150:             break;
78151:           } /* endif pExpr->iTable==pItem->iCursor */
78152:         } /* end loop over pSrcList */
78153:       }
78154:       return WRC_Prune;
78155:     }
78156:     case TK_AGG_FUNCTION: {
78157:       /* The pNC->nDepth==0 test causes aggregate functions in subqueries
78158:       ** to be ignored */
78159:       if( pNC->nDepth==0 ){
78160:         /* Check to see if pExpr is a duplicate of another aggregate 
78161:         ** function that is already in the pAggInfo structure
78162:         */
78163:         struct AggInfo_func *pItem = pAggInfo->aFunc;
78164:         for(i=0; i<pAggInfo->nFunc; i++, pItem++){
78165:           if( sqlite3ExprCompare(pItem->pExpr, pExpr)==0 ){
78166:             break;
78167:           }
78168:         }
78169:         if( i>=pAggInfo->nFunc ){
78170:           /* pExpr is original.  Make a new entry in pAggInfo->aFunc[]
78171:           */
78172:           u8 enc = ENC(pParse->db);
78173:           i = addAggInfoFunc(pParse->db, pAggInfo);
78174:           if( i>=0 ){
78175:             assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
78176:             pItem = &pAggInfo->aFunc[i];
78177:             pItem->pExpr = pExpr;
78178:             pItem->iMem = ++pParse->nMem;
78179:             assert( !ExprHasProperty(pExpr, EP_IntValue) );
78180:             pItem->pFunc = sqlite3FindFunction(pParse->db,
78181:                    pExpr->u.zToken, sqlite3Strlen30(pExpr->u.zToken),
78182:                    pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0);
78183:             if( pExpr->flags & EP_Distinct ){
78184:               pItem->iDistinct = pParse->nTab++;
78185:             }else{
78186:               pItem->iDistinct = -1;
78187:             }
78188:           }
78189:         }
78190:         /* Make pExpr point to the appropriate pAggInfo->aFunc[] entry
78191:         */
78192:         assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
78193:         ExprSetIrreducible(pExpr);
78194:         pExpr->iAgg = (i16)i;
78195:         pExpr->pAggInfo = pAggInfo;
78196:         return WRC_Prune;
78197:       }
78198:     }
78199:   }
78200:   return WRC_Continue;
78201: }
78202: static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
78203:   NameContext *pNC = pWalker->u.pNC;
78204:   if( pNC->nDepth==0 ){
78205:     pNC->nDepth++;
78206:     sqlite3WalkSelect(pWalker, pSelect);
78207:     pNC->nDepth--;
78208:     return WRC_Prune;
78209:   }else{
78210:     return WRC_Continue;
78211:   }
78212: }
78213: 
78214: /*
78215: ** Analyze the given expression looking for aggregate functions and
78216: ** for variables that need to be added to the pParse->aAgg[] array.
78217: ** Make additional entries to the pParse->aAgg[] array as necessary.
78218: **
78219: ** This routine should only be called after the expression has been
78220: ** analyzed by sqlite3ResolveExprNames().
78221: */
78222: SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
78223:   Walker w;
78224:   w.xExprCallback = analyzeAggregate;
78225:   w.xSelectCallback = analyzeAggregatesInSelect;
78226:   w.u.pNC = pNC;
78227:   assert( pNC->pSrcList!=0 );
78228:   sqlite3WalkExpr(&w, pExpr);
78229: }
78230: 
78231: /*
78232: ** Call sqlite3ExprAnalyzeAggregates() for every expression in an
78233: ** expression list.  Return the number of errors.
78234: **
78235: ** If an error is found, the analysis is cut short.
78236: */
78237: SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext *pNC, ExprList *pList){
78238:   struct ExprList_item *pItem;
78239:   int i;
78240:   if( pList ){
78241:     for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
78242:       sqlite3ExprAnalyzeAggregates(pNC, pItem->pExpr);
78243:     }
78244:   }
78245: }
78246: 
78247: /*
78248: ** Allocate a single new register for use to hold some intermediate result.
78249: */
78250: SQLITE_PRIVATE int sqlite3GetTempReg(Parse *pParse){
78251:   if( pParse->nTempReg==0 ){
78252:     return ++pParse->nMem;
78253:   }
78254:   return pParse->aTempReg[--pParse->nTempReg];
78255: }
78256: 
78257: /*
78258: ** Deallocate a register, making available for reuse for some other
78259: ** purpose.
78260: **
78261: ** If a register is currently being used by the column cache, then
78262: ** the dallocation is deferred until the column cache line that uses
78263: ** the register becomes stale.
78264: */
78265: SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse *pParse, int iReg){
78266:   if( iReg && pParse->nTempReg<ArraySize(pParse->aTempReg) ){
78267:     int i;
78268:     struct yColCache *p;
78269:     for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
78270:       if( p->iReg==iReg ){
78271:         p->tempReg = 1;
78272:         return;
78273:       }
78274:     }
78275:     pParse->aTempReg[pParse->nTempReg++] = iReg;
78276:   }
78277: }
78278: 
78279: /*
78280: ** Allocate or deallocate a block of nReg consecutive registers
78281: */
78282: SQLITE_PRIVATE int sqlite3GetTempRange(Parse *pParse, int nReg){
78283:   int i, n;
78284:   i = pParse->iRangeReg;
78285:   n = pParse->nRangeReg;
78286:   if( nReg<=n ){
78287:     assert( !usedAsColumnCache(pParse, i, i+n-1) );
78288:     pParse->iRangeReg += nReg;
78289:     pParse->nRangeReg -= nReg;
78290:   }else{
78291:     i = pParse->nMem+1;
78292:     pParse->nMem += nReg;
78293:   }
78294:   return i;
78295: }
78296: SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse *pParse, int iReg, int nReg){
78297:   sqlite3ExprCacheRemove(pParse, iReg, nReg);
78298:   if( nReg>pParse->nRangeReg ){
78299:     pParse->nRangeReg = nReg;
78300:     pParse->iRangeReg = iReg;
78301:   }
78302: }
78303: 
78304: /*
78305: ** Mark all temporary registers as being unavailable for reuse.
78306: */
78307: SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse *pParse){
78308:   pParse->nTempReg = 0;
78309:   pParse->nRangeReg = 0;
78310: }
78311: 
78312: /************** End of expr.c ************************************************/
78313: /************** Begin file alter.c *******************************************/
78314: /*
78315: ** 2005 February 15
78316: **
78317: ** The author disclaims copyright to this source code.  In place of
78318: ** a legal notice, here is a blessing:
78319: **
78320: **    May you do good and not evil.
78321: **    May you find forgiveness for yourself and forgive others.
78322: **    May you share freely, never taking more than you give.
78323: **
78324: *************************************************************************
78325: ** This file contains C code routines that used to generate VDBE code
78326: ** that implements the ALTER TABLE command.
78327: */
78328: 
78329: /*
78330: ** The code in this file only exists if we are not omitting the
78331: ** ALTER TABLE logic from the build.
78332: */
78333: #ifndef SQLITE_OMIT_ALTERTABLE
78334: 
78335: 
78336: /*
78337: ** This function is used by SQL generated to implement the 
78338: ** ALTER TABLE command. The first argument is the text of a CREATE TABLE or
78339: ** CREATE INDEX command. The second is a table name. The table name in 
78340: ** the CREATE TABLE or CREATE INDEX statement is replaced with the third
78341: ** argument and the result returned. Examples:
78342: **
78343: ** sqlite_rename_table('CREATE TABLE abc(a, b, c)', 'def')
78344: **     -> 'CREATE TABLE def(a, b, c)'
78345: **
78346: ** sqlite_rename_table('CREATE INDEX i ON abc(a)', 'def')
78347: **     -> 'CREATE INDEX i ON def(a, b, c)'
78348: */
78349: static void renameTableFunc(
78350:   sqlite3_context *context,
78351:   int NotUsed,
78352:   sqlite3_value **argv
78353: ){
78354:   unsigned char const *zSql = sqlite3_value_text(argv[0]);
78355:   unsigned char const *zTableName = sqlite3_value_text(argv[1]);
78356: 
78357:   int token;
78358:   Token tname;
78359:   unsigned char const *zCsr = zSql;
78360:   int len = 0;
78361:   char *zRet;
78362: 
78363:   sqlite3 *db = sqlite3_context_db_handle(context);
78364: 
78365:   UNUSED_PARAMETER(NotUsed);
78366: 
78367:   /* The principle used to locate the table name in the CREATE TABLE 
78368:   ** statement is that the table name is the first non-space token that
78369:   ** is immediately followed by a TK_LP or TK_USING token.
78370:   */
78371:   if( zSql ){
78372:     do {
78373:       if( !*zCsr ){
78374:         /* Ran out of input before finding an opening bracket. Return NULL. */
78375:         return;
78376:       }
78377: 
78378:       /* Store the token that zCsr points to in tname. */
78379:       tname.z = (char*)zCsr;
78380:       tname.n = len;
78381: 
78382:       /* Advance zCsr to the next token. Store that token type in 'token',
78383:       ** and its length in 'len' (to be used next iteration of this loop).
78384:       */
78385:       do {
78386:         zCsr += len;
78387:         len = sqlite3GetToken(zCsr, &token);
78388:       } while( token==TK_SPACE );
78389:       assert( len>0 );
78390:     } while( token!=TK_LP && token!=TK_USING );
78391: 
78392:     zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql, 
78393:        zTableName, tname.z+tname.n);
78394:     sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC);
78395:   }
78396: }
78397: 
78398: /*
78399: ** This C function implements an SQL user function that is used by SQL code
78400: ** generated by the ALTER TABLE ... RENAME command to modify the definition
78401: ** of any foreign key constraints that use the table being renamed as the 
78402: ** parent table. It is passed three arguments:
78403: **
78404: **   1) The complete text of the CREATE TABLE statement being modified,
78405: **   2) The old name of the table being renamed, and
78406: **   3) The new name of the table being renamed.
78407: **
78408: ** It returns the new CREATE TABLE statement. For example:
78409: **
78410: **   sqlite_rename_parent('CREATE TABLE t1(a REFERENCES t2)', 't2', 't3')
78411: **       -> 'CREATE TABLE t1(a REFERENCES t3)'
78412: */
78413: #ifndef SQLITE_OMIT_FOREIGN_KEY
78414: static void renameParentFunc(
78415:   sqlite3_context *context,
78416:   int NotUsed,
78417:   sqlite3_value **argv
78418: ){
78419:   sqlite3 *db = sqlite3_context_db_handle(context);
78420:   char *zOutput = 0;
78421:   char *zResult;
78422:   unsigned char const *zInput = sqlite3_value_text(argv[0]);
78423:   unsigned char const *zOld = sqlite3_value_text(argv[1]);
78424:   unsigned char const *zNew = sqlite3_value_text(argv[2]);
78425: 
78426:   unsigned const char *z;         /* Pointer to token */
78427:   int n;                          /* Length of token z */
78428:   int token;                      /* Type of token */
78429: 
78430:   UNUSED_PARAMETER(NotUsed);
78431:   for(z=zInput; *z; z=z+n){
78432:     n = sqlite3GetToken(z, &token);
78433:     if( token==TK_REFERENCES ){
78434:       char *zParent;
78435:       do {
78436:         z += n;
78437:         n = sqlite3GetToken(z, &token);
78438:       }while( token==TK_SPACE );
78439: 
78440:       zParent = sqlite3DbStrNDup(db, (const char *)z, n);
78441:       if( zParent==0 ) break;
78442:       sqlite3Dequote(zParent);
78443:       if( 0==sqlite3StrICmp((const char *)zOld, zParent) ){
78444:         char *zOut = sqlite3MPrintf(db, "%s%.*s\"%w\"", 
78445:             (zOutput?zOutput:""), z-zInput, zInput, (const char *)zNew
78446:         );
78447:         sqlite3DbFree(db, zOutput);
78448:         zOutput = zOut;
78449:         zInput = &z[n];
78450:       }
78451:       sqlite3DbFree(db, zParent);
78452:     }
78453:   }
78454: 
78455:   zResult = sqlite3MPrintf(db, "%s%s", (zOutput?zOutput:""), zInput), 
78456:   sqlite3_result_text(context, zResult, -1, SQLITE_DYNAMIC);
78457:   sqlite3DbFree(db, zOutput);
78458: }
78459: #endif
78460: 
78461: #ifndef SQLITE_OMIT_TRIGGER
78462: /* This function is used by SQL generated to implement the
78463: ** ALTER TABLE command. The first argument is the text of a CREATE TRIGGER 
78464: ** statement. The second is a table name. The table name in the CREATE 
78465: ** TRIGGER statement is replaced with the third argument and the result 
78466: ** returned. This is analagous to renameTableFunc() above, except for CREATE
78467: ** TRIGGER, not CREATE INDEX and CREATE TABLE.
78468: */
78469: static void renameTriggerFunc(
78470:   sqlite3_context *context,
78471:   int NotUsed,
78472:   sqlite3_value **argv
78473: ){
78474:   unsigned char const *zSql = sqlite3_value_text(argv[0]);
78475:   unsigned char const *zTableName = sqlite3_value_text(argv[1]);
78476: 
78477:   int token;
78478:   Token tname;
78479:   int dist = 3;
78480:   unsigned char const *zCsr = zSql;
78481:   int len = 0;
78482:   char *zRet;
78483:   sqlite3 *db = sqlite3_context_db_handle(context);
78484: 
78485:   UNUSED_PARAMETER(NotUsed);
78486: 
78487:   /* The principle used to locate the table name in the CREATE TRIGGER 
78488:   ** statement is that the table name is the first token that is immediatedly
78489:   ** preceded by either TK_ON or TK_DOT and immediatedly followed by one
78490:   ** of TK_WHEN, TK_BEGIN or TK_FOR.
78491:   */
78492:   if( zSql ){
78493:     do {
78494: 
78495:       if( !*zCsr ){
78496:         /* Ran out of input before finding the table name. Return NULL. */
78497:         return;
78498:       }
78499: 
78500:       /* Store the token that zCsr points to in tname. */
78501:       tname.z = (char*)zCsr;
78502:       tname.n = len;
78503: 
78504:       /* Advance zCsr to the next token. Store that token type in 'token',
78505:       ** and its length in 'len' (to be used next iteration of this loop).
78506:       */
78507:       do {
78508:         zCsr += len;
78509:         len = sqlite3GetToken(zCsr, &token);
78510:       }while( token==TK_SPACE );
78511:       assert( len>0 );
78512: 
78513:       /* Variable 'dist' stores the number of tokens read since the most
78514:       ** recent TK_DOT or TK_ON. This means that when a WHEN, FOR or BEGIN 
78515:       ** token is read and 'dist' equals 2, the condition stated above
78516:       ** to be met.
78517:       **
78518:       ** Note that ON cannot be a database, table or column name, so
78519:       ** there is no need to worry about syntax like 
78520:       ** "CREATE TRIGGER ... ON ON.ON BEGIN ..." etc.
78521:       */
78522:       dist++;
78523:       if( token==TK_DOT || token==TK_ON ){
78524:         dist = 0;
78525:       }
78526:     } while( dist!=2 || (token!=TK_WHEN && token!=TK_FOR && token!=TK_BEGIN) );
78527: 
78528:     /* Variable tname now contains the token that is the old table-name
78529:     ** in the CREATE TRIGGER statement.
78530:     */
78531:     zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql, 
78532:        zTableName, tname.z+tname.n);
78533:     sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC);
78534:   }
78535: }
78536: #endif   /* !SQLITE_OMIT_TRIGGER */
78537: 
78538: /*
78539: ** Register built-in functions used to help implement ALTER TABLE
78540: */
78541: SQLITE_PRIVATE void sqlite3AlterFunctions(void){
78542:   static SQLITE_WSD FuncDef aAlterTableFuncs[] = {
78543:     FUNCTION(sqlite_rename_table,   2, 0, 0, renameTableFunc),
78544: #ifndef SQLITE_OMIT_TRIGGER
78545:     FUNCTION(sqlite_rename_trigger, 2, 0, 0, renameTriggerFunc),
78546: #endif
78547: #ifndef SQLITE_OMIT_FOREIGN_KEY
78548:     FUNCTION(sqlite_rename_parent,  3, 0, 0, renameParentFunc),
78549: #endif
78550:   };
78551:   int i;
78552:   FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
78553:   FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aAlterTableFuncs);
78554: 
78555:   for(i=0; i<ArraySize(aAlterTableFuncs); i++){
78556:     sqlite3FuncDefInsert(pHash, &aFunc[i]);
78557:   }
78558: }
78559: 
78560: /*
78561: ** This function is used to create the text of expressions of the form:
78562: **
78563: **   name=<constant1> OR name=<constant2> OR ...
78564: **
78565: ** If argument zWhere is NULL, then a pointer string containing the text 
78566: ** "name=<constant>" is returned, where <constant> is the quoted version
78567: ** of the string passed as argument zConstant. The returned buffer is
78568: ** allocated using sqlite3DbMalloc(). It is the responsibility of the
78569: ** caller to ensure that it is eventually freed.
78570: **
78571: ** If argument zWhere is not NULL, then the string returned is 
78572: ** "<where> OR name=<constant>", where <where> is the contents of zWhere.
78573: ** In this case zWhere is passed to sqlite3DbFree() before returning.
78574: ** 
78575: */
78576: static char *whereOrName(sqlite3 *db, char *zWhere, char *zConstant){
78577:   char *zNew;
78578:   if( !zWhere ){
78579:     zNew = sqlite3MPrintf(db, "name=%Q", zConstant);
78580:   }else{
78581:     zNew = sqlite3MPrintf(db, "%s OR name=%Q", zWhere, zConstant);
78582:     sqlite3DbFree(db, zWhere);
78583:   }
78584:   return zNew;
78585: }
78586: 
78587: #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
78588: /*
78589: ** Generate the text of a WHERE expression which can be used to select all
78590: ** tables that have foreign key constraints that refer to table pTab (i.e.
78591: ** constraints for which pTab is the parent table) from the sqlite_master
78592: ** table.
78593: */
78594: static char *whereForeignKeys(Parse *pParse, Table *pTab){
78595:   FKey *p;
78596:   char *zWhere = 0;
78597:   for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
78598:     zWhere = whereOrName(pParse->db, zWhere, p->pFrom->zName);
78599:   }
78600:   return zWhere;
78601: }
78602: #endif
78603: 
78604: /*
78605: ** Generate the text of a WHERE expression which can be used to select all
78606: ** temporary triggers on table pTab from the sqlite_temp_master table. If
78607: ** table pTab has no temporary triggers, or is itself stored in the 
78608: ** temporary database, NULL is returned.
78609: */
78610: static char *whereTempTriggers(Parse *pParse, Table *pTab){
78611:   Trigger *pTrig;
78612:   char *zWhere = 0;
78613:   const Schema *pTempSchema = pParse->db->aDb[1].pSchema; /* Temp db schema */
78614: 
78615:   /* If the table is not located in the temp-db (in which case NULL is 
78616:   ** returned, loop through the tables list of triggers. For each trigger
78617:   ** that is not part of the temp-db schema, add a clause to the WHERE 
78618:   ** expression being built up in zWhere.
78619:   */
78620:   if( pTab->pSchema!=pTempSchema ){
78621:     sqlite3 *db = pParse->db;
78622:     for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){
78623:       if( pTrig->pSchema==pTempSchema ){
78624:         zWhere = whereOrName(db, zWhere, pTrig->zName);
78625:       }
78626:     }
78627:   }
78628:   if( zWhere ){
78629:     char *zNew = sqlite3MPrintf(pParse->db, "type='trigger' AND (%s)", zWhere);
78630:     sqlite3DbFree(pParse->db, zWhere);
78631:     zWhere = zNew;
78632:   }
78633:   return zWhere;
78634: }
78635: 
78636: /*
78637: ** Generate code to drop and reload the internal representation of table
78638: ** pTab from the database, including triggers and temporary triggers.
78639: ** Argument zName is the name of the table in the database schema at
78640: ** the time the generated code is executed. This can be different from
78641: ** pTab->zName if this function is being called to code part of an 
78642: ** "ALTER TABLE RENAME TO" statement.
78643: */
78644: static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zName){
78645:   Vdbe *v;
78646:   char *zWhere;
78647:   int iDb;                   /* Index of database containing pTab */
78648: #ifndef SQLITE_OMIT_TRIGGER
78649:   Trigger *pTrig;
78650: #endif
78651: 
78652:   v = sqlite3GetVdbe(pParse);
78653:   if( NEVER(v==0) ) return;
78654:   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
78655:   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
78656:   assert( iDb>=0 );
78657: 
78658: #ifndef SQLITE_OMIT_TRIGGER
78659:   /* Drop any table triggers from the internal schema. */
78660:   for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){
78661:     int iTrigDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);
78662:     assert( iTrigDb==iDb || iTrigDb==1 );
78663:     sqlite3VdbeAddOp4(v, OP_DropTrigger, iTrigDb, 0, 0, pTrig->zName, 0);
78664:   }
78665: #endif
78666: 
78667:   /* Drop the table and index from the internal schema.  */
78668:   sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0);
78669: 
78670:   /* Reload the table, index and permanent trigger schemas. */
78671:   zWhere = sqlite3MPrintf(pParse->db, "tbl_name=%Q", zName);
78672:   if( !zWhere ) return;
78673:   sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere);
78674: 
78675: #ifndef SQLITE_OMIT_TRIGGER
78676:   /* Now, if the table is not stored in the temp database, reload any temp 
78677:   ** triggers. Don't use IN(...) in case SQLITE_OMIT_SUBQUERY is defined. 
78678:   */
78679:   if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){
78680:     sqlite3VdbeAddParseSchemaOp(v, 1, zWhere);
78681:   }
78682: #endif
78683: }
78684: 
78685: /*
78686: ** Parameter zName is the name of a table that is about to be altered
78687: ** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN).
78688: ** If the table is a system table, this function leaves an error message
78689: ** in pParse->zErr (system tables may not be altered) and returns non-zero.
78690: **
78691: ** Or, if zName is not a system table, zero is returned.
78692: */
78693: static int isSystemTable(Parse *pParse, const char *zName){
78694:   if( sqlite3Strlen30(zName)>6 && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){
78695:     sqlite3ErrorMsg(pParse, "table %s may not be altered", zName);
78696:     return 1;
78697:   }
78698:   return 0;
78699: }
78700: 
78701: /*
78702: ** Generate code to implement the "ALTER TABLE xxx RENAME TO yyy" 
78703: ** command. 
78704: */
78705: SQLITE_PRIVATE void sqlite3AlterRenameTable(
78706:   Parse *pParse,            /* Parser context. */
78707:   SrcList *pSrc,            /* The table to rename. */
78708:   Token *pName              /* The new table name. */
78709: ){
78710:   int iDb;                  /* Database that contains the table */
78711:   char *zDb;                /* Name of database iDb */
78712:   Table *pTab;              /* Table being renamed */
78713:   char *zName = 0;          /* NULL-terminated version of pName */ 
78714:   sqlite3 *db = pParse->db; /* Database connection */
78715:   int nTabName;             /* Number of UTF-8 characters in zTabName */
78716:   const char *zTabName;     /* Original name of the table */
78717:   Vdbe *v;
78718: #ifndef SQLITE_OMIT_TRIGGER
78719:   char *zWhere = 0;         /* Where clause to locate temp triggers */
78720: #endif
78721:   VTable *pVTab = 0;        /* Non-zero if this is a v-tab with an xRename() */
78722:   int savedDbFlags;         /* Saved value of db->flags */
78723: 
78724:   savedDbFlags = db->flags;  
78725:   if( NEVER(db->mallocFailed) ) goto exit_rename_table;
78726:   assert( pSrc->nSrc==1 );
78727:   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
78728: 
78729:   pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase);
78730:   if( !pTab ) goto exit_rename_table;
78731:   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
78732:   zDb = db->aDb[iDb].zName;
78733:   db->flags |= SQLITE_PreferBuiltin;
78734: 
78735:   /* Get a NULL terminated version of the new table name. */
78736:   zName = sqlite3NameFromToken(db, pName);
78737:   if( !zName ) goto exit_rename_table;
78738: 
78739:   /* Check that a table or index named 'zName' does not already exist
78740:   ** in database iDb. If so, this is an error.
78741:   */
78742:   if( sqlite3FindTable(db, zName, zDb) || sqlite3FindIndex(db, zName, zDb) ){
78743:     sqlite3ErrorMsg(pParse, 
78744:         "there is already another table or index with this name: %s", zName);
78745:     goto exit_rename_table;
78746:   }
78747: 
78748:   /* Make sure it is not a system table being altered, or a reserved name
78749:   ** that the table is being renamed to.
78750:   */
78751:   if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ){
78752:     goto exit_rename_table;
78753:   }
78754:   if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ goto
78755:     exit_rename_table;
78756:   }
78757: 
78758: #ifndef SQLITE_OMIT_VIEW
78759:   if( pTab->pSelect ){
78760:     sqlite3ErrorMsg(pParse, "view %s may not be altered", pTab->zName);
78761:     goto exit_rename_table;
78762:   }
78763: #endif
78764: 
78765: #ifndef SQLITE_OMIT_AUTHORIZATION
78766:   /* Invoke the authorization callback. */
78767:   if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){
78768:     goto exit_rename_table;
78769:   }
78770: #endif
78771: 
78772: #ifndef SQLITE_OMIT_VIRTUALTABLE
78773:   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
78774:     goto exit_rename_table;
78775:   }
78776:   if( IsVirtual(pTab) ){
78777:     pVTab = sqlite3GetVTable(db, pTab);
78778:     if( pVTab->pVtab->pModule->xRename==0 ){
78779:       pVTab = 0;
78780:     }
78781:   }
78782: #endif
78783: 
78784:   /* Begin a transaction and code the VerifyCookie for database iDb. 
78785:   ** Then modify the schema cookie (since the ALTER TABLE modifies the
78786:   ** schema). Open a statement transaction if the table is a virtual
78787:   ** table.
78788:   */
78789:   v = sqlite3GetVdbe(pParse);
78790:   if( v==0 ){
78791:     goto exit_rename_table;
78792:   }
78793:   sqlite3BeginWriteOperation(pParse, pVTab!=0, iDb);
78794:   sqlite3ChangeCookie(pParse, iDb);
78795: 
78796:   /* If this is a virtual table, invoke the xRename() function if
78797:   ** one is defined. The xRename() callback will modify the names
78798:   ** of any resources used by the v-table implementation (including other
78799:   ** SQLite tables) that are identified by the name of the virtual table.
78800:   */
78801: #ifndef SQLITE_OMIT_VIRTUALTABLE
78802:   if( pVTab ){
78803:     int i = ++pParse->nMem;
78804:     sqlite3VdbeAddOp4(v, OP_String8, 0, i, 0, zName, 0);
78805:     sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB);
78806:     sqlite3MayAbort(pParse);
78807:   }
78808: #endif
78809: 
78810:   /* figure out how many UTF-8 characters are in zName */
78811:   zTabName = pTab->zName;
78812:   nTabName = sqlite3Utf8CharLen(zTabName, -1);
78813: 
78814: #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
78815:   if( db->flags&SQLITE_ForeignKeys ){
78816:     /* If foreign-key support is enabled, rewrite the CREATE TABLE 
78817:     ** statements corresponding to all child tables of foreign key constraints
78818:     ** for which the renamed table is the parent table.  */
78819:     if( (zWhere=whereForeignKeys(pParse, pTab))!=0 ){
78820:       sqlite3NestedParse(pParse, 
78821:           "UPDATE \"%w\".%s SET "
78822:               "sql = sqlite_rename_parent(sql, %Q, %Q) "
78823:               "WHERE %s;", zDb, SCHEMA_TABLE(iDb), zTabName, zName, zWhere);
78824:       sqlite3DbFree(db, zWhere);
78825:     }
78826:   }
78827: #endif
78828: 
78829:   /* Modify the sqlite_master table to use the new table name. */
78830:   sqlite3NestedParse(pParse,
78831:       "UPDATE %Q.%s SET "
78832: #ifdef SQLITE_OMIT_TRIGGER
78833:           "sql = sqlite_rename_table(sql, %Q), "
78834: #else
78835:           "sql = CASE "
78836:             "WHEN type = 'trigger' THEN sqlite_rename_trigger(sql, %Q)"
78837:             "ELSE sqlite_rename_table(sql, %Q) END, "
78838: #endif
78839:           "tbl_name = %Q, "
78840:           "name = CASE "
78841:             "WHEN type='table' THEN %Q "
78842:             "WHEN name LIKE 'sqlite_autoindex%%' AND type='index' THEN "
78843:              "'sqlite_autoindex_' || %Q || substr(name,%d+18) "
78844:             "ELSE name END "
78845:       "WHERE tbl_name=%Q AND "
78846:           "(type='table' OR type='index' OR type='trigger');", 
78847:       zDb, SCHEMA_TABLE(iDb), zName, zName, zName, 
78848: #ifndef SQLITE_OMIT_TRIGGER
78849:       zName,
78850: #endif
78851:       zName, nTabName, zTabName
78852:   );
78853: 
78854: #ifndef SQLITE_OMIT_AUTOINCREMENT
78855:   /* If the sqlite_sequence table exists in this database, then update 
78856:   ** it with the new table name.
78857:   */
78858:   if( sqlite3FindTable(db, "sqlite_sequence", zDb) ){
78859:     sqlite3NestedParse(pParse,
78860:         "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q",
78861:         zDb, zName, pTab->zName);
78862:   }
78863: #endif
78864: 
78865: #ifndef SQLITE_OMIT_TRIGGER
78866:   /* If there are TEMP triggers on this table, modify the sqlite_temp_master
78867:   ** table. Don't do this if the table being ALTERed is itself located in
78868:   ** the temp database.
78869:   */
78870:   if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){
78871:     sqlite3NestedParse(pParse, 
78872:         "UPDATE sqlite_temp_master SET "
78873:             "sql = sqlite_rename_trigger(sql, %Q), "
78874:             "tbl_name = %Q "
78875:             "WHERE %s;", zName, zName, zWhere);
78876:     sqlite3DbFree(db, zWhere);
78877:   }
78878: #endif
78879: 
78880: #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
78881:   if( db->flags&SQLITE_ForeignKeys ){
78882:     FKey *p;
78883:     for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
78884:       Table *pFrom = p->pFrom;
78885:       if( pFrom!=pTab ){
78886:         reloadTableSchema(pParse, p->pFrom, pFrom->zName);
78887:       }
78888:     }
78889:   }
78890: #endif
78891: 
78892:   /* Drop and reload the internal table schema. */
78893:   reloadTableSchema(pParse, pTab, zName);
78894: 
78895: exit_rename_table:
78896:   sqlite3SrcListDelete(db, pSrc);
78897:   sqlite3DbFree(db, zName);
78898:   db->flags = savedDbFlags;
78899: }
78900: 
78901: 
78902: /*
78903: ** Generate code to make sure the file format number is at least minFormat.
78904: ** The generated code will increase the file format number if necessary.
78905: */
78906: SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse *pParse, int iDb, int minFormat){
78907:   Vdbe *v;
78908:   v = sqlite3GetVdbe(pParse);
78909:   /* The VDBE should have been allocated before this routine is called.
78910:   ** If that allocation failed, we would have quit before reaching this
78911:   ** point */
78912:   if( ALWAYS(v) ){
78913:     int r1 = sqlite3GetTempReg(pParse);
78914:     int r2 = sqlite3GetTempReg(pParse);
78915:     int j1;
78916:     sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT);
78917:     sqlite3VdbeUsesBtree(v, iDb);
78918:     sqlite3VdbeAddOp2(v, OP_Integer, minFormat, r2);
78919:     j1 = sqlite3VdbeAddOp3(v, OP_Ge, r2, 0, r1);
78920:     sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, r2);
78921:     sqlite3VdbeJumpHere(v, j1);
78922:     sqlite3ReleaseTempReg(pParse, r1);
78923:     sqlite3ReleaseTempReg(pParse, r2);
78924:   }
78925: }
78926: 
78927: /*
78928: ** This function is called after an "ALTER TABLE ... ADD" statement
78929: ** has been parsed. Argument pColDef contains the text of the new
78930: ** column definition.
78931: **
78932: ** The Table structure pParse->pNewTable was extended to include
78933: ** the new column during parsing.
78934: */
78935: SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
78936:   Table *pNew;              /* Copy of pParse->pNewTable */
78937:   Table *pTab;              /* Table being altered */
78938:   int iDb;                  /* Database number */
78939:   const char *zDb;          /* Database name */
78940:   const char *zTab;         /* Table name */
78941:   char *zCol;               /* Null-terminated column definition */
78942:   Column *pCol;             /* The new column */
78943:   Expr *pDflt;              /* Default value for the new column */
78944:   sqlite3 *db;              /* The database connection; */
78945: 
78946:   db = pParse->db;
78947:   if( pParse->nErr || db->mallocFailed ) return;
78948:   pNew = pParse->pNewTable;
78949:   assert( pNew );
78950: 
78951:   assert( sqlite3BtreeHoldsAllMutexes(db) );
78952:   iDb = sqlite3SchemaToIndex(db, pNew->pSchema);
78953:   zDb = db->aDb[iDb].zName;
78954:   zTab = &pNew->zName[16];  /* Skip the "sqlite_altertab_" prefix on the name */
78955:   pCol = &pNew->aCol[pNew->nCol-1];
78956:   pDflt = pCol->pDflt;
78957:   pTab = sqlite3FindTable(db, zTab, zDb);
78958:   assert( pTab );
78959: 
78960: #ifndef SQLITE_OMIT_AUTHORIZATION
78961:   /* Invoke the authorization callback. */
78962:   if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){
78963:     return;
78964:   }
78965: #endif
78966: 
78967:   /* If the default value for the new column was specified with a 
78968:   ** literal NULL, then set pDflt to 0. This simplifies checking
78969:   ** for an SQL NULL default below.
78970:   */
78971:   if( pDflt && pDflt->op==TK_NULL ){
78972:     pDflt = 0;
78973:   }
78974: 
78975:   /* Check that the new column is not specified as PRIMARY KEY or UNIQUE.
78976:   ** If there is a NOT NULL constraint, then the default value for the
78977:   ** column must not be NULL.
78978:   */
78979:   if( pCol->isPrimKey ){
78980:     sqlite3ErrorMsg(pParse, "Cannot add a PRIMARY KEY column");
78981:     return;
78982:   }
78983:   if( pNew->pIndex ){
78984:     sqlite3ErrorMsg(pParse, "Cannot add a UNIQUE column");
78985:     return;
78986:   }
78987:   if( (db->flags&SQLITE_ForeignKeys) && pNew->pFKey && pDflt ){
78988:     sqlite3ErrorMsg(pParse, 
78989:         "Cannot add a REFERENCES column with non-NULL default value");
78990:     return;
78991:   }
78992:   if( pCol->notNull && !pDflt ){
78993:     sqlite3ErrorMsg(pParse, 
78994:         "Cannot add a NOT NULL column with default value NULL");
78995:     return;
78996:   }
78997: 
78998:   /* Ensure the default expression is something that sqlite3ValueFromExpr()
78999:   ** can handle (i.e. not CURRENT_TIME etc.)
79000:   */
79001:   if( pDflt ){
79002:     sqlite3_value *pVal;
79003:     if( sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_NONE, &pVal) ){
79004:       db->mallocFailed = 1;
79005:       return;
79006:     }
79007:     if( !pVal ){
79008:       sqlite3ErrorMsg(pParse, "Cannot add a column with non-constant default");
79009:       return;
79010:     }
79011:     sqlite3ValueFree(pVal);
79012:   }
79013: 
79014:   /* Modify the CREATE TABLE statement. */
79015:   zCol = sqlite3DbStrNDup(db, (char*)pColDef->z, pColDef->n);
79016:   if( zCol ){
79017:     char *zEnd = &zCol[pColDef->n-1];
79018:     int savedDbFlags = db->flags;
79019:     while( zEnd>zCol && (*zEnd==';' || sqlite3Isspace(*zEnd)) ){
79020:       *zEnd-- = '\0';
79021:     }
79022:     db->flags |= SQLITE_PreferBuiltin;
79023:     sqlite3NestedParse(pParse, 
79024:         "UPDATE \"%w\".%s SET "
79025:           "sql = substr(sql,1,%d) || ', ' || %Q || substr(sql,%d) "
79026:         "WHERE type = 'table' AND name = %Q", 
79027:       zDb, SCHEMA_TABLE(iDb), pNew->addColOffset, zCol, pNew->addColOffset+1,
79028:       zTab
79029:     );
79030:     sqlite3DbFree(db, zCol);
79031:     db->flags = savedDbFlags;
79032:   }
79033: 
79034:   /* If the default value of the new column is NULL, then set the file
79035:   ** format to 2. If the default value of the new column is not NULL,
79036:   ** the file format becomes 3.
79037:   */
79038:   sqlite3MinimumFileFormat(pParse, iDb, pDflt ? 3 : 2);
79039: 
79040:   /* Reload the schema of the modified table. */
79041:   reloadTableSchema(pParse, pTab, pTab->zName);
79042: }
79043: 
79044: /*
79045: ** This function is called by the parser after the table-name in
79046: ** an "ALTER TABLE <table-name> ADD" statement is parsed. Argument 
79047: ** pSrc is the full-name of the table being altered.
79048: **
79049: ** This routine makes a (partial) copy of the Table structure
79050: ** for the table being altered and sets Parse.pNewTable to point
79051: ** to it. Routines called by the parser as the column definition
79052: ** is parsed (i.e. sqlite3AddColumn()) add the new Column data to 
79053: ** the copy. The copy of the Table structure is deleted by tokenize.c 
79054: ** after parsing is finished.
79055: **
79056: ** Routine sqlite3AlterFinishAddColumn() will be called to complete
79057: ** coding the "ALTER TABLE ... ADD" statement.
79058: */
79059: SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
79060:   Table *pNew;
79061:   Table *pTab;
79062:   Vdbe *v;
79063:   int iDb;
79064:   int i;
79065:   int nAlloc;
79066:   sqlite3 *db = pParse->db;
79067: 
79068:   /* Look up the table being altered. */
79069:   assert( pParse->pNewTable==0 );
79070:   assert( sqlite3BtreeHoldsAllMutexes(db) );
79071:   if( db->mallocFailed ) goto exit_begin_add_column;
79072:   pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase);
79073:   if( !pTab ) goto exit_begin_add_column;
79074: 
79075: #ifndef SQLITE_OMIT_VIRTUALTABLE
79076:   if( IsVirtual(pTab) ){
79077:     sqlite3ErrorMsg(pParse, "virtual tables may not be altered");
79078:     goto exit_begin_add_column;
79079:   }
79080: #endif
79081: 
79082:   /* Make sure this is not an attempt to ALTER a view. */
79083:   if( pTab->pSelect ){
79084:     sqlite3ErrorMsg(pParse, "Cannot add a column to a view");
79085:     goto exit_begin_add_column;
79086:   }
79087:   if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ){
79088:     goto exit_begin_add_column;
79089:   }
79090: 
79091:   assert( pTab->addColOffset>0 );
79092:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
79093: 
79094:   /* Put a copy of the Table struct in Parse.pNewTable for the
79095:   ** sqlite3AddColumn() function and friends to modify.  But modify
79096:   ** the name by adding an "sqlite_altertab_" prefix.  By adding this
79097:   ** prefix, we insure that the name will not collide with an existing
79098:   ** table because user table are not allowed to have the "sqlite_"
79099:   ** prefix on their name.
79100:   */
79101:   pNew = (Table*)sqlite3DbMallocZero(db, sizeof(Table));
79102:   if( !pNew ) goto exit_begin_add_column;
79103:   pParse->pNewTable = pNew;
79104:   pNew->nRef = 1;
79105:   pNew->nCol = pTab->nCol;
79106:   assert( pNew->nCol>0 );
79107:   nAlloc = (((pNew->nCol-1)/8)*8)+8;
79108:   assert( nAlloc>=pNew->nCol && nAlloc%8==0 && nAlloc-pNew->nCol<8 );
79109:   pNew->aCol = (Column*)sqlite3DbMallocZero(db, sizeof(Column)*nAlloc);
79110:   pNew->zName = sqlite3MPrintf(db, "sqlite_altertab_%s", pTab->zName);
79111:   if( !pNew->aCol || !pNew->zName ){
79112:     db->mallocFailed = 1;
79113:     goto exit_begin_add_column;
79114:   }
79115:   memcpy(pNew->aCol, pTab->aCol, sizeof(Column)*pNew->nCol);
79116:   for(i=0; i<pNew->nCol; i++){
79117:     Column *pCol = &pNew->aCol[i];
79118:     pCol->zName = sqlite3DbStrDup(db, pCol->zName);
79119:     pCol->zColl = 0;
79120:     pCol->zType = 0;
79121:     pCol->pDflt = 0;
79122:     pCol->zDflt = 0;
79123:   }
79124:   pNew->pSchema = db->aDb[iDb].pSchema;
79125:   pNew->addColOffset = pTab->addColOffset;
79126:   pNew->nRef = 1;
79127: 
79128:   /* Begin a transaction and increment the schema cookie.  */
79129:   sqlite3BeginWriteOperation(pParse, 0, iDb);
79130:   v = sqlite3GetVdbe(pParse);
79131:   if( !v ) goto exit_begin_add_column;
79132:   sqlite3ChangeCookie(pParse, iDb);
79133: 
79134: exit_begin_add_column:
79135:   sqlite3SrcListDelete(db, pSrc);
79136:   return;
79137: }
79138: #endif  /* SQLITE_ALTER_TABLE */
79139: 
79140: /************** End of alter.c ***********************************************/
79141: /************** Begin file analyze.c *****************************************/
79142: /*
79143: ** 2005 July 8
79144: **
79145: ** The author disclaims copyright to this source code.  In place of
79146: ** a legal notice, here is a blessing:
79147: **
79148: **    May you do good and not evil.
79149: **    May you find forgiveness for yourself and forgive others.
79150: **    May you share freely, never taking more than you give.
79151: **
79152: *************************************************************************
79153: ** This file contains code associated with the ANALYZE command.
79154: **
79155: ** The ANALYZE command gather statistics about the content of tables
79156: ** and indices.  These statistics are made available to the query planner
79157: ** to help it make better decisions about how to perform queries.
79158: **
79159: ** The following system tables are or have been supported:
79160: **
79161: **    CREATE TABLE sqlite_stat1(tbl, idx, stat);
79162: **    CREATE TABLE sqlite_stat2(tbl, idx, sampleno, sample);
79163: **    CREATE TABLE sqlite_stat3(tbl, idx, nEq, nLt, nDLt, sample);
79164: **
79165: ** Additional tables might be added in future releases of SQLite.
79166: ** The sqlite_stat2 table is not created or used unless the SQLite version
79167: ** is between 3.6.18 and 3.7.8, inclusive, and unless SQLite is compiled
79168: ** with SQLITE_ENABLE_STAT2.  The sqlite_stat2 table is deprecated.
79169: ** The sqlite_stat2 table is superceded by sqlite_stat3, which is only
79170: ** created and used by SQLite versions 3.7.9 and later and with
79171: ** SQLITE_ENABLE_STAT3 defined.  The fucntionality of sqlite_stat3
79172: ** is a superset of sqlite_stat2.  
79173: **
79174: ** Format of sqlite_stat1:
79175: **
79176: ** There is normally one row per index, with the index identified by the
79177: ** name in the idx column.  The tbl column is the name of the table to
79178: ** which the index belongs.  In each such row, the stat column will be
79179: ** a string consisting of a list of integers.  The first integer in this
79180: ** list is the number of rows in the index and in the table.  The second
79181: ** integer is the average number of rows in the index that have the same
79182: ** value in the first column of the index.  The third integer is the average
79183: ** number of rows in the index that have the same value for the first two
79184: ** columns.  The N-th integer (for N>1) is the average number of rows in 
79185: ** the index which have the same value for the first N-1 columns.  For
79186: ** a K-column index, there will be K+1 integers in the stat column.  If
79187: ** the index is unique, then the last integer will be 1.
79188: **
79189: ** The list of integers in the stat column can optionally be followed
79190: ** by the keyword "unordered".  The "unordered" keyword, if it is present,
79191: ** must be separated from the last integer by a single space.  If the
79192: ** "unordered" keyword is present, then the query planner assumes that
79193: ** the index is unordered and will not use the index for a range query.
79194: ** 
79195: ** If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat
79196: ** column contains a single integer which is the (estimated) number of
79197: ** rows in the table identified by sqlite_stat1.tbl.
79198: **
79199: ** Format of sqlite_stat2:
79200: **
79201: ** The sqlite_stat2 is only created and is only used if SQLite is compiled
79202: ** with SQLITE_ENABLE_STAT2 and if the SQLite version number is between
79203: ** 3.6.18 and 3.7.8.  The "stat2" table contains additional information
79204: ** about the distribution of keys within an index.  The index is identified by
79205: ** the "idx" column and the "tbl" column is the name of the table to which
79206: ** the index belongs.  There are usually 10 rows in the sqlite_stat2
79207: ** table for each index.
79208: **
79209: ** The sqlite_stat2 entries for an index that have sampleno between 0 and 9
79210: ** inclusive are samples of the left-most key value in the index taken at
79211: ** evenly spaced points along the index.  Let the number of samples be S
79212: ** (10 in the standard build) and let C be the number of rows in the index.
79213: ** Then the sampled rows are given by:
79214: **
79215: **     rownumber = (i*C*2 + C)/(S*2)
79216: **
79217: ** For i between 0 and S-1.  Conceptually, the index space is divided into
79218: ** S uniform buckets and the samples are the middle row from each bucket.
79219: **
79220: ** The format for sqlite_stat2 is recorded here for legacy reference.  This
79221: ** version of SQLite does not support sqlite_stat2.  It neither reads nor
79222: ** writes the sqlite_stat2 table.  This version of SQLite only supports
79223: ** sqlite_stat3.
79224: **
79225: ** Format for sqlite_stat3:
79226: **
79227: ** The sqlite_stat3 is an enhancement to sqlite_stat2.  A new name is
79228: ** used to avoid compatibility problems.  
79229: **
79230: ** The format of the sqlite_stat3 table is similar to the format of
79231: ** the sqlite_stat2 table.  There are multiple entries for each index.
79232: ** The idx column names the index and the tbl column is the table of the
79233: ** index.  If the idx and tbl columns are the same, then the sample is
79234: ** of the INTEGER PRIMARY KEY.  The sample column is a value taken from
79235: ** the left-most column of the index.  The nEq column is the approximate
79236: ** number of entires in the index whose left-most column exactly matches
79237: ** the sample.  nLt is the approximate number of entires whose left-most
79238: ** column is less than the sample.  The nDLt column is the approximate
79239: ** number of distinct left-most entries in the index that are less than
79240: ** the sample.
79241: **
79242: ** Future versions of SQLite might change to store a string containing
79243: ** multiple integers values in the nDLt column of sqlite_stat3.  The first
79244: ** integer will be the number of prior index entires that are distinct in
79245: ** the left-most column.  The second integer will be the number of prior index
79246: ** entries that are distinct in the first two columns.  The third integer
79247: ** will be the number of prior index entries that are distinct in the first
79248: ** three columns.  And so forth.  With that extension, the nDLt field is
79249: ** similar in function to the sqlite_stat1.stat field.
79250: **
79251: ** There can be an arbitrary number of sqlite_stat3 entries per index.
79252: ** The ANALYZE command will typically generate sqlite_stat3 tables
79253: ** that contain between 10 and 40 samples which are distributed across
79254: ** the key space, though not uniformly, and which include samples with
79255: ** largest possible nEq values.
79256: */
79257: #ifndef SQLITE_OMIT_ANALYZE
79258: 
79259: /*
79260: ** This routine generates code that opens the sqlite_stat1 table for
79261: ** writing with cursor iStatCur. If the library was built with the
79262: ** SQLITE_ENABLE_STAT3 macro defined, then the sqlite_stat3 table is
79263: ** opened for writing using cursor (iStatCur+1)
79264: **
79265: ** If the sqlite_stat1 tables does not previously exist, it is created.
79266: ** Similarly, if the sqlite_stat3 table does not exist and the library
79267: ** is compiled with SQLITE_ENABLE_STAT3 defined, it is created. 
79268: **
79269: ** Argument zWhere may be a pointer to a buffer containing a table name,
79270: ** or it may be a NULL pointer. If it is not NULL, then all entries in
79271: ** the sqlite_stat1 and (if applicable) sqlite_stat3 tables associated
79272: ** with the named table are deleted. If zWhere==0, then code is generated
79273: ** to delete all stat table entries.
79274: */
79275: static void openStatTable(
79276:   Parse *pParse,          /* Parsing context */
79277:   int iDb,                /* The database we are looking in */
79278:   int iStatCur,           /* Open the sqlite_stat1 table on this cursor */
79279:   const char *zWhere,     /* Delete entries for this table or index */
79280:   const char *zWhereType  /* Either "tbl" or "idx" */
79281: ){
79282:   static const struct {
79283:     const char *zName;
79284:     const char *zCols;
79285:   } aTable[] = {
79286:     { "sqlite_stat1", "tbl,idx,stat" },
79287: #ifdef SQLITE_ENABLE_STAT3
79288:     { "sqlite_stat3", "tbl,idx,neq,nlt,ndlt,sample" },
79289: #endif
79290:   };
79291: 
79292:   int aRoot[] = {0, 0};
79293:   u8 aCreateTbl[] = {0, 0};
79294: 
79295:   int i;
79296:   sqlite3 *db = pParse->db;
79297:   Db *pDb;
79298:   Vdbe *v = sqlite3GetVdbe(pParse);
79299:   if( v==0 ) return;
79300:   assert( sqlite3BtreeHoldsAllMutexes(db) );
79301:   assert( sqlite3VdbeDb(v)==db );
79302:   pDb = &db->aDb[iDb];
79303: 
79304:   /* Create new statistic tables if they do not exist, or clear them
79305:   ** if they do already exist.
79306:   */
79307:   for(i=0; i<ArraySize(aTable); i++){
79308:     const char *zTab = aTable[i].zName;
79309:     Table *pStat;
79310:     if( (pStat = sqlite3FindTable(db, zTab, pDb->zName))==0 ){
79311:       /* The sqlite_stat[12] table does not exist. Create it. Note that a 
79312:       ** side-effect of the CREATE TABLE statement is to leave the rootpage 
79313:       ** of the new table in register pParse->regRoot. This is important 
79314:       ** because the OpenWrite opcode below will be needing it. */
79315:       sqlite3NestedParse(pParse,
79316:           "CREATE TABLE %Q.%s(%s)", pDb->zName, zTab, aTable[i].zCols
79317:       );
79318:       aRoot[i] = pParse->regRoot;
79319:       aCreateTbl[i] = 1;
79320:     }else{
79321:       /* The table already exists. If zWhere is not NULL, delete all entries 
79322:       ** associated with the table zWhere. If zWhere is NULL, delete the
79323:       ** entire contents of the table. */
79324:       aRoot[i] = pStat->tnum;
79325:       sqlite3TableLock(pParse, iDb, aRoot[i], 1, zTab);
79326:       if( zWhere ){
79327:         sqlite3NestedParse(pParse,
79328:            "DELETE FROM %Q.%s WHERE %s=%Q", pDb->zName, zTab, zWhereType, zWhere
79329:         );
79330:       }else{
79331:         /* The sqlite_stat[12] table already exists.  Delete all rows. */
79332:         sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], iDb);
79333:       }
79334:     }
79335:   }
79336: 
79337:   /* Open the sqlite_stat[13] tables for writing. */
79338:   for(i=0; i<ArraySize(aTable); i++){
79339:     sqlite3VdbeAddOp3(v, OP_OpenWrite, iStatCur+i, aRoot[i], iDb);
79340:     sqlite3VdbeChangeP4(v, -1, (char *)3, P4_INT32);
79341:     sqlite3VdbeChangeP5(v, aCreateTbl[i]);
79342:   }
79343: }
79344: 
79345: /*
79346: ** Recommended number of samples for sqlite_stat3
79347: */
79348: #ifndef SQLITE_STAT3_SAMPLES
79349: # define SQLITE_STAT3_SAMPLES 24
79350: #endif
79351: 
79352: /*
79353: ** Three SQL functions - stat3_init(), stat3_push(), and stat3_pop() -
79354: ** share an instance of the following structure to hold their state
79355: ** information.
79356: */
79357: typedef struct Stat3Accum Stat3Accum;
79358: struct Stat3Accum {
79359:   tRowcnt nRow;             /* Number of rows in the entire table */
79360:   tRowcnt nPSample;         /* How often to do a periodic sample */
79361:   int iMin;                 /* Index of entry with minimum nEq and hash */
79362:   int mxSample;             /* Maximum number of samples to accumulate */
79363:   int nSample;              /* Current number of samples */
79364:   u32 iPrn;                 /* Pseudo-random number used for sampling */
79365:   struct Stat3Sample {
79366:     i64 iRowid;                /* Rowid in main table of the key */
79367:     tRowcnt nEq;               /* sqlite_stat3.nEq */
79368:     tRowcnt nLt;               /* sqlite_stat3.nLt */
79369:     tRowcnt nDLt;              /* sqlite_stat3.nDLt */
79370:     u8 isPSample;              /* True if a periodic sample */
79371:     u32 iHash;                 /* Tiebreaker hash */
79372:   } *a;                     /* An array of samples */
79373: };
79374: 
79375: #ifdef SQLITE_ENABLE_STAT3
79376: /*
79377: ** Implementation of the stat3_init(C,S) SQL function.  The two parameters
79378: ** are the number of rows in the table or index (C) and the number of samples
79379: ** to accumulate (S).
79380: **
79381: ** This routine allocates the Stat3Accum object.
79382: **
79383: ** The return value is the Stat3Accum object (P).
79384: */
79385: static void stat3Init(
79386:   sqlite3_context *context,
79387:   int argc,
79388:   sqlite3_value **argv
79389: ){
79390:   Stat3Accum *p;
79391:   tRowcnt nRow;
79392:   int mxSample;
79393:   int n;
79394: 
79395:   UNUSED_PARAMETER(argc);
79396:   nRow = (tRowcnt)sqlite3_value_int64(argv[0]);
79397:   mxSample = sqlite3_value_int(argv[1]);
79398:   n = sizeof(*p) + sizeof(p->a[0])*mxSample;
79399:   p = sqlite3_malloc( n );
79400:   if( p==0 ){
79401:     sqlite3_result_error_nomem(context);
79402:     return;
79403:   }
79404:   memset(p, 0, n);
79405:   p->a = (struct Stat3Sample*)&p[1];
79406:   p->nRow = nRow;
79407:   p->mxSample = mxSample;
79408:   p->nPSample = p->nRow/(mxSample/3+1) + 1;
79409:   sqlite3_randomness(sizeof(p->iPrn), &p->iPrn);
79410:   sqlite3_result_blob(context, p, sizeof(p), sqlite3_free);
79411: }
79412: static const FuncDef stat3InitFuncdef = {
79413:   2,                /* nArg */
79414:   SQLITE_UTF8,      /* iPrefEnc */
79415:   0,                /* flags */
79416:   0,                /* pUserData */
79417:   0,                /* pNext */
79418:   stat3Init,        /* xFunc */
79419:   0,                /* xStep */
79420:   0,                /* xFinalize */
79421:   "stat3_init",     /* zName */
79422:   0,                /* pHash */
79423:   0                 /* pDestructor */
79424: };
79425: 
79426: 
79427: /*
79428: ** Implementation of the stat3_push(nEq,nLt,nDLt,rowid,P) SQL function.  The
79429: ** arguments describe a single key instance.  This routine makes the 
79430: ** decision about whether or not to retain this key for the sqlite_stat3
79431: ** table.
79432: **
79433: ** The return value is NULL.
79434: */
79435: static void stat3Push(
79436:   sqlite3_context *context,
79437:   int argc,
79438:   sqlite3_value **argv
79439: ){
79440:   Stat3Accum *p = (Stat3Accum*)sqlite3_value_blob(argv[4]);
79441:   tRowcnt nEq = sqlite3_value_int64(argv[0]);
79442:   tRowcnt nLt = sqlite3_value_int64(argv[1]);
79443:   tRowcnt nDLt = sqlite3_value_int64(argv[2]);
79444:   i64 rowid = sqlite3_value_int64(argv[3]);
79445:   u8 isPSample = 0;
79446:   u8 doInsert = 0;
79447:   int iMin = p->iMin;
79448:   struct Stat3Sample *pSample;
79449:   int i;
79450:   u32 h;
79451: 
79452:   UNUSED_PARAMETER(context);
79453:   UNUSED_PARAMETER(argc);
79454:   if( nEq==0 ) return;
79455:   h = p->iPrn = p->iPrn*1103515245 + 12345;
79456:   if( (nLt/p->nPSample)!=((nEq+nLt)/p->nPSample) ){
79457:     doInsert = isPSample = 1;
79458:   }else if( p->nSample<p->mxSample ){
79459:     doInsert = 1;
79460:   }else{
79461:     if( nEq>p->a[iMin].nEq || (nEq==p->a[iMin].nEq && h>p->a[iMin].iHash) ){
79462:       doInsert = 1;
79463:     }
79464:   }
79465:   if( !doInsert ) return;
79466:   if( p->nSample==p->mxSample ){
79467:     assert( p->nSample - iMin - 1 >= 0 );
79468:     memmove(&p->a[iMin], &p->a[iMin+1], sizeof(p->a[0])*(p->nSample-iMin-1));
79469:     pSample = &p->a[p->nSample-1];
79470:   }else{
79471:     pSample = &p->a[p->nSample++];
79472:   }
79473:   pSample->iRowid = rowid;
79474:   pSample->nEq = nEq;
79475:   pSample->nLt = nLt;
79476:   pSample->nDLt = nDLt;
79477:   pSample->iHash = h;
79478:   pSample->isPSample = isPSample;
79479: 
79480:   /* Find the new minimum */
79481:   if( p->nSample==p->mxSample ){
79482:     pSample = p->a;
79483:     i = 0;
79484:     while( pSample->isPSample ){
79485:       i++;
79486:       pSample++;
79487:       assert( i<p->nSample );
79488:     }
79489:     nEq = pSample->nEq;
79490:     h = pSample->iHash;
79491:     iMin = i;
79492:     for(i++, pSample++; i<p->nSample; i++, pSample++){
79493:       if( pSample->isPSample ) continue;
79494:       if( pSample->nEq<nEq
79495:        || (pSample->nEq==nEq && pSample->iHash<h)
79496:       ){
79497:         iMin = i;
79498:         nEq = pSample->nEq;
79499:         h = pSample->iHash;
79500:       }
79501:     }
79502:     p->iMin = iMin;
79503:   }
79504: }
79505: static const FuncDef stat3PushFuncdef = {
79506:   5,                /* nArg */
79507:   SQLITE_UTF8,      /* iPrefEnc */
79508:   0,                /* flags */
79509:   0,                /* pUserData */
79510:   0,                /* pNext */
79511:   stat3Push,        /* xFunc */
79512:   0,                /* xStep */
79513:   0,                /* xFinalize */
79514:   "stat3_push",     /* zName */
79515:   0,                /* pHash */
79516:   0                 /* pDestructor */
79517: };
79518: 
79519: /*
79520: ** Implementation of the stat3_get(P,N,...) SQL function.  This routine is
79521: ** used to query the results.  Content is returned for the Nth sqlite_stat3
79522: ** row where N is between 0 and S-1 and S is the number of samples.  The
79523: ** value returned depends on the number of arguments.
79524: **
79525: **   argc==2    result:  rowid
79526: **   argc==3    result:  nEq
79527: **   argc==4    result:  nLt
79528: **   argc==5    result:  nDLt
79529: */
79530: static void stat3Get(
79531:   sqlite3_context *context,
79532:   int argc,
79533:   sqlite3_value **argv
79534: ){
79535:   int n = sqlite3_value_int(argv[1]);
79536:   Stat3Accum *p = (Stat3Accum*)sqlite3_value_blob(argv[0]);
79537: 
79538:   assert( p!=0 );
79539:   if( p->nSample<=n ) return;
79540:   switch( argc ){
79541:     case 2:  sqlite3_result_int64(context, p->a[n].iRowid); break;
79542:     case 3:  sqlite3_result_int64(context, p->a[n].nEq);    break;
79543:     case 4:  sqlite3_result_int64(context, p->a[n].nLt);    break;
79544:     default: sqlite3_result_int64(context, p->a[n].nDLt);   break;
79545:   }
79546: }
79547: static const FuncDef stat3GetFuncdef = {
79548:   -1,               /* nArg */
79549:   SQLITE_UTF8,      /* iPrefEnc */
79550:   0,                /* flags */
79551:   0,                /* pUserData */
79552:   0,                /* pNext */
79553:   stat3Get,         /* xFunc */
79554:   0,                /* xStep */
79555:   0,                /* xFinalize */
79556:   "stat3_get",     /* zName */
79557:   0,                /* pHash */
79558:   0                 /* pDestructor */
79559: };
79560: #endif /* SQLITE_ENABLE_STAT3 */
79561: 
79562: 
79563: 
79564: 
79565: /*
79566: ** Generate code to do an analysis of all indices associated with
79567: ** a single table.
79568: */
79569: static void analyzeOneTable(
79570:   Parse *pParse,   /* Parser context */
79571:   Table *pTab,     /* Table whose indices are to be analyzed */
79572:   Index *pOnlyIdx, /* If not NULL, only analyze this one index */
79573:   int iStatCur,    /* Index of VdbeCursor that writes the sqlite_stat1 table */
79574:   int iMem         /* Available memory locations begin here */
79575: ){
79576:   sqlite3 *db = pParse->db;    /* Database handle */
79577:   Index *pIdx;                 /* An index to being analyzed */
79578:   int iIdxCur;                 /* Cursor open on index being analyzed */
79579:   Vdbe *v;                     /* The virtual machine being built up */
79580:   int i;                       /* Loop counter */
79581:   int topOfLoop;               /* The top of the loop */
79582:   int endOfLoop;               /* The end of the loop */
79583:   int jZeroRows = -1;          /* Jump from here if number of rows is zero */
79584:   int iDb;                     /* Index of database containing pTab */
79585:   int regTabname = iMem++;     /* Register containing table name */
79586:   int regIdxname = iMem++;     /* Register containing index name */
79587:   int regStat1 = iMem++;       /* The stat column of sqlite_stat1 */
79588: #ifdef SQLITE_ENABLE_STAT3
79589:   int regNumEq = regStat1;     /* Number of instances.  Same as regStat1 */
79590:   int regNumLt = iMem++;       /* Number of keys less than regSample */
79591:   int regNumDLt = iMem++;      /* Number of distinct keys less than regSample */
79592:   int regSample = iMem++;      /* The next sample value */
79593:   int regRowid = regSample;    /* Rowid of a sample */
79594:   int regAccum = iMem++;       /* Register to hold Stat3Accum object */
79595:   int regLoop = iMem++;        /* Loop counter */
79596:   int regCount = iMem++;       /* Number of rows in the table or index */
79597:   int regTemp1 = iMem++;       /* Intermediate register */
79598:   int regTemp2 = iMem++;       /* Intermediate register */
79599:   int once = 1;                /* One-time initialization */
79600:   int shortJump = 0;           /* Instruction address */
79601:   int iTabCur = pParse->nTab++; /* Table cursor */
79602: #endif
79603:   int regCol = iMem++;         /* Content of a column in analyzed table */
79604:   int regRec = iMem++;         /* Register holding completed record */
79605:   int regTemp = iMem++;        /* Temporary use register */
79606:   int regNewRowid = iMem++;    /* Rowid for the inserted record */
79607: 
79608: 
79609:   v = sqlite3GetVdbe(pParse);
79610:   if( v==0 || NEVER(pTab==0) ){
79611:     return;
79612:   }
79613:   if( pTab->tnum==0 ){
79614:     /* Do not gather statistics on views or virtual tables */
79615:     return;
79616:   }
79617:   if( memcmp(pTab->zName, "sqlite_", 7)==0 ){
79618:     /* Do not gather statistics on system tables */
79619:     return;
79620:   }
79621:   assert( sqlite3BtreeHoldsAllMutexes(db) );
79622:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
79623:   assert( iDb>=0 );
79624:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
79625: #ifndef SQLITE_OMIT_AUTHORIZATION
79626:   if( sqlite3AuthCheck(pParse, SQLITE_ANALYZE, pTab->zName, 0,
79627:       db->aDb[iDb].zName ) ){
79628:     return;
79629:   }
79630: #endif
79631: 
79632:   /* Establish a read-lock on the table at the shared-cache level. */
79633:   sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
79634: 
79635:   iIdxCur = pParse->nTab++;
79636:   sqlite3VdbeAddOp4(v, OP_String8, 0, regTabname, 0, pTab->zName, 0);
79637:   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
79638:     int nCol;
79639:     KeyInfo *pKey;
79640:     int addrIfNot = 0;           /* address of OP_IfNot */
79641:     int *aChngAddr;              /* Array of jump instruction addresses */
79642: 
79643:     if( pOnlyIdx && pOnlyIdx!=pIdx ) continue;
79644:     VdbeNoopComment((v, "Begin analysis of %s", pIdx->zName));
79645:     nCol = pIdx->nColumn;
79646:     aChngAddr = sqlite3DbMallocRaw(db, sizeof(int)*nCol);
79647:     if( aChngAddr==0 ) continue;
79648:     pKey = sqlite3IndexKeyinfo(pParse, pIdx);
79649:     if( iMem+1+(nCol*2)>pParse->nMem ){
79650:       pParse->nMem = iMem+1+(nCol*2);
79651:     }
79652: 
79653:     /* Open a cursor to the index to be analyzed. */
79654:     assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) );
79655:     sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb,
79656:         (char *)pKey, P4_KEYINFO_HANDOFF);
79657:     VdbeComment((v, "%s", pIdx->zName));
79658: 
79659:     /* Populate the register containing the index name. */
79660:     sqlite3VdbeAddOp4(v, OP_String8, 0, regIdxname, 0, pIdx->zName, 0);
79661: 
79662: #ifdef SQLITE_ENABLE_STAT3
79663:     if( once ){
79664:       once = 0;
79665:       sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead);
79666:     }
79667:     sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regCount);
79668:     sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_STAT3_SAMPLES, regTemp1);
79669:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regNumEq);
79670:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regNumLt);
79671:     sqlite3VdbeAddOp2(v, OP_Integer, -1, regNumDLt);
79672:     sqlite3VdbeAddOp3(v, OP_Null, 0, regSample, regAccum);
79673:     sqlite3VdbeAddOp4(v, OP_Function, 1, regCount, regAccum,
79674:                       (char*)&stat3InitFuncdef, P4_FUNCDEF);
79675:     sqlite3VdbeChangeP5(v, 2);
79676: #endif /* SQLITE_ENABLE_STAT3 */
79677: 
79678:     /* The block of memory cells initialized here is used as follows.
79679:     **
79680:     **    iMem:                
79681:     **        The total number of rows in the table.
79682:     **
79683:     **    iMem+1 .. iMem+nCol: 
79684:     **        Number of distinct entries in index considering the 
79685:     **        left-most N columns only, where N is between 1 and nCol, 
79686:     **        inclusive.
79687:     **
79688:     **    iMem+nCol+1 .. Mem+2*nCol:  
79689:     **        Previous value of indexed columns, from left to right.
79690:     **
79691:     ** Cells iMem through iMem+nCol are initialized to 0. The others are 
79692:     ** initialized to contain an SQL NULL.
79693:     */
79694:     for(i=0; i<=nCol; i++){
79695:       sqlite3VdbeAddOp2(v, OP_Integer, 0, iMem+i);
79696:     }
79697:     for(i=0; i<nCol; i++){
79698:       sqlite3VdbeAddOp2(v, OP_Null, 0, iMem+nCol+i+1);
79699:     }
79700: 
79701:     /* Start the analysis loop. This loop runs through all the entries in
79702:     ** the index b-tree.  */
79703:     endOfLoop = sqlite3VdbeMakeLabel(v);
79704:     sqlite3VdbeAddOp2(v, OP_Rewind, iIdxCur, endOfLoop);
79705:     topOfLoop = sqlite3VdbeCurrentAddr(v);
79706:     sqlite3VdbeAddOp2(v, OP_AddImm, iMem, 1);  /* Increment row counter */
79707: 
79708:     for(i=0; i<nCol; i++){
79709:       CollSeq *pColl;
79710:       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regCol);
79711:       if( i==0 ){
79712:         /* Always record the very first row */
79713:         addrIfNot = sqlite3VdbeAddOp1(v, OP_IfNot, iMem+1);
79714:       }
79715:       assert( pIdx->azColl!=0 );
79716:       assert( pIdx->azColl[i]!=0 );
79717:       pColl = sqlite3LocateCollSeq(pParse, pIdx->azColl[i]);
79718:       aChngAddr[i] = sqlite3VdbeAddOp4(v, OP_Ne, regCol, 0, iMem+nCol+i+1,
79719:                                       (char*)pColl, P4_COLLSEQ);
79720:       sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
79721:       VdbeComment((v, "jump if column %d changed", i));
79722: #ifdef SQLITE_ENABLE_STAT3
79723:       if( i==0 ){
79724:         sqlite3VdbeAddOp2(v, OP_AddImm, regNumEq, 1);
79725:         VdbeComment((v, "incr repeat count"));
79726:       }
79727: #endif
79728:     }
79729:     sqlite3VdbeAddOp2(v, OP_Goto, 0, endOfLoop);
79730:     for(i=0; i<nCol; i++){
79731:       sqlite3VdbeJumpHere(v, aChngAddr[i]);  /* Set jump dest for the OP_Ne */
79732:       if( i==0 ){
79733:         sqlite3VdbeJumpHere(v, addrIfNot);   /* Jump dest for OP_IfNot */
79734: #ifdef SQLITE_ENABLE_STAT3
79735:         sqlite3VdbeAddOp4(v, OP_Function, 1, regNumEq, regTemp2,
79736:                           (char*)&stat3PushFuncdef, P4_FUNCDEF);
79737:         sqlite3VdbeChangeP5(v, 5);
79738:         sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, pIdx->nColumn, regRowid);
79739:         sqlite3VdbeAddOp3(v, OP_Add, regNumEq, regNumLt, regNumLt);
79740:         sqlite3VdbeAddOp2(v, OP_AddImm, regNumDLt, 1);
79741:         sqlite3VdbeAddOp2(v, OP_Integer, 1, regNumEq);
79742: #endif        
79743:       }
79744:       sqlite3VdbeAddOp2(v, OP_AddImm, iMem+i+1, 1);
79745:       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, iMem+nCol+i+1);
79746:     }
79747:     sqlite3DbFree(db, aChngAddr);
79748: 
79749:     /* Always jump here after updating the iMem+1...iMem+1+nCol counters */
79750:     sqlite3VdbeResolveLabel(v, endOfLoop);
79751: 
79752:     sqlite3VdbeAddOp2(v, OP_Next, iIdxCur, topOfLoop);
79753:     sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
79754: #ifdef SQLITE_ENABLE_STAT3
79755:     sqlite3VdbeAddOp4(v, OP_Function, 1, regNumEq, regTemp2,
79756:                       (char*)&stat3PushFuncdef, P4_FUNCDEF);
79757:     sqlite3VdbeChangeP5(v, 5);
79758:     sqlite3VdbeAddOp2(v, OP_Integer, -1, regLoop);
79759:     shortJump = 
79760:     sqlite3VdbeAddOp2(v, OP_AddImm, regLoop, 1);
79761:     sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regTemp1,
79762:                       (char*)&stat3GetFuncdef, P4_FUNCDEF);
79763:     sqlite3VdbeChangeP5(v, 2);
79764:     sqlite3VdbeAddOp1(v, OP_IsNull, regTemp1);
79765:     sqlite3VdbeAddOp3(v, OP_NotExists, iTabCur, shortJump, regTemp1);
79766:     sqlite3VdbeAddOp3(v, OP_Column, iTabCur, pIdx->aiColumn[0], regSample);
79767:     sqlite3ColumnDefault(v, pTab, pIdx->aiColumn[0], regSample);
79768:     sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumEq,
79769:                       (char*)&stat3GetFuncdef, P4_FUNCDEF);
79770:     sqlite3VdbeChangeP5(v, 3);
79771:     sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumLt,
79772:                       (char*)&stat3GetFuncdef, P4_FUNCDEF);
79773:     sqlite3VdbeChangeP5(v, 4);
79774:     sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumDLt,
79775:                       (char*)&stat3GetFuncdef, P4_FUNCDEF);
79776:     sqlite3VdbeChangeP5(v, 5);
79777:     sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 6, regRec, "bbbbbb", 0);
79778:     sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur+1, regNewRowid);
79779:     sqlite3VdbeAddOp3(v, OP_Insert, iStatCur+1, regRec, regNewRowid);
79780:     sqlite3VdbeAddOp2(v, OP_Goto, 0, shortJump);
79781:     sqlite3VdbeJumpHere(v, shortJump+2);
79782: #endif        
79783: 
79784:     /* Store the results in sqlite_stat1.
79785:     **
79786:     ** The result is a single row of the sqlite_stat1 table.  The first
79787:     ** two columns are the names of the table and index.  The third column
79788:     ** is a string composed of a list of integer statistics about the
79789:     ** index.  The first integer in the list is the total number of entries
79790:     ** in the index.  There is one additional integer in the list for each
79791:     ** column of the table.  This additional integer is a guess of how many
79792:     ** rows of the table the index will select.  If D is the count of distinct
79793:     ** values and K is the total number of rows, then the integer is computed
79794:     ** as:
79795:     **
79796:     **        I = (K+D-1)/D
79797:     **
79798:     ** If K==0 then no entry is made into the sqlite_stat1 table.  
79799:     ** If K>0 then it is always the case the D>0 so division by zero
79800:     ** is never possible.
79801:     */
79802:     sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regStat1);
79803:     if( jZeroRows<0 ){
79804:       jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, iMem);
79805:     }
79806:     for(i=0; i<nCol; i++){
79807:       sqlite3VdbeAddOp4(v, OP_String8, 0, regTemp, 0, " ", 0);
79808:       sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regStat1, regStat1);
79809:       sqlite3VdbeAddOp3(v, OP_Add, iMem, iMem+i+1, regTemp);
79810:       sqlite3VdbeAddOp2(v, OP_AddImm, regTemp, -1);
79811:       sqlite3VdbeAddOp3(v, OP_Divide, iMem+i+1, regTemp, regTemp);
79812:       sqlite3VdbeAddOp1(v, OP_ToInt, regTemp);
79813:       sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regStat1, regStat1);
79814:     }
79815:     sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
79816:     sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
79817:     sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regNewRowid);
79818:     sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
79819:   }
79820: 
79821:   /* If the table has no indices, create a single sqlite_stat1 entry
79822:   ** containing NULL as the index name and the row count as the content.
79823:   */
79824:   if( pTab->pIndex==0 ){
79825:     sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pTab->tnum, iDb);
79826:     VdbeComment((v, "%s", pTab->zName));
79827:     sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regStat1);
79828:     sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
79829:     jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1);
79830:   }else{
79831:     sqlite3VdbeJumpHere(v, jZeroRows);
79832:     jZeroRows = sqlite3VdbeAddOp0(v, OP_Goto);
79833:   }
79834:   sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname);
79835:   sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
79836:   sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
79837:   sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regNewRowid);
79838:   sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
79839:   if( pParse->nMem<regRec ) pParse->nMem = regRec;
79840:   sqlite3VdbeJumpHere(v, jZeroRows);
79841: }
79842: 
79843: 
79844: /*
79845: ** Generate code that will cause the most recent index analysis to
79846: ** be loaded into internal hash tables where is can be used.
79847: */
79848: static void loadAnalysis(Parse *pParse, int iDb){
79849:   Vdbe *v = sqlite3GetVdbe(pParse);
79850:   if( v ){
79851:     sqlite3VdbeAddOp1(v, OP_LoadAnalysis, iDb);
79852:   }
79853: }
79854: 
79855: /*
79856: ** Generate code that will do an analysis of an entire database
79857: */
79858: static void analyzeDatabase(Parse *pParse, int iDb){
79859:   sqlite3 *db = pParse->db;
79860:   Schema *pSchema = db->aDb[iDb].pSchema;    /* Schema of database iDb */
79861:   HashElem *k;
79862:   int iStatCur;
79863:   int iMem;
79864: 
79865:   sqlite3BeginWriteOperation(pParse, 0, iDb);
79866:   iStatCur = pParse->nTab;
79867:   pParse->nTab += 3;
79868:   openStatTable(pParse, iDb, iStatCur, 0, 0);
79869:   iMem = pParse->nMem+1;
79870:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
79871:   for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){
79872:     Table *pTab = (Table*)sqliteHashData(k);
79873:     analyzeOneTable(pParse, pTab, 0, iStatCur, iMem);
79874:   }
79875:   loadAnalysis(pParse, iDb);
79876: }
79877: 
79878: /*
79879: ** Generate code that will do an analysis of a single table in
79880: ** a database.  If pOnlyIdx is not NULL then it is a single index
79881: ** in pTab that should be analyzed.
79882: */
79883: static void analyzeTable(Parse *pParse, Table *pTab, Index *pOnlyIdx){
79884:   int iDb;
79885:   int iStatCur;
79886: 
79887:   assert( pTab!=0 );
79888:   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
79889:   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
79890:   sqlite3BeginWriteOperation(pParse, 0, iDb);
79891:   iStatCur = pParse->nTab;
79892:   pParse->nTab += 3;
79893:   if( pOnlyIdx ){
79894:     openStatTable(pParse, iDb, iStatCur, pOnlyIdx->zName, "idx");
79895:   }else{
79896:     openStatTable(pParse, iDb, iStatCur, pTab->zName, "tbl");
79897:   }
79898:   analyzeOneTable(pParse, pTab, pOnlyIdx, iStatCur, pParse->nMem+1);
79899:   loadAnalysis(pParse, iDb);
79900: }
79901: 
79902: /*
79903: ** Generate code for the ANALYZE command.  The parser calls this routine
79904: ** when it recognizes an ANALYZE command.
79905: **
79906: **        ANALYZE                            -- 1
79907: **        ANALYZE  <database>                -- 2
79908: **        ANALYZE  ?<database>.?<tablename>  -- 3
79909: **
79910: ** Form 1 causes all indices in all attached databases to be analyzed.
79911: ** Form 2 analyzes all indices the single database named.
79912: ** Form 3 analyzes all indices associated with the named table.
79913: */
79914: SQLITE_PRIVATE void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){
79915:   sqlite3 *db = pParse->db;
79916:   int iDb;
79917:   int i;
79918:   char *z, *zDb;
79919:   Table *pTab;
79920:   Index *pIdx;
79921:   Token *pTableName;
79922: 
79923:   /* Read the database schema. If an error occurs, leave an error message
79924:   ** and code in pParse and return NULL. */
79925:   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
79926:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
79927:     return;
79928:   }
79929: 
79930:   assert( pName2!=0 || pName1==0 );
79931:   if( pName1==0 ){
79932:     /* Form 1:  Analyze everything */
79933:     for(i=0; i<db->nDb; i++){
79934:       if( i==1 ) continue;  /* Do not analyze the TEMP database */
79935:       analyzeDatabase(pParse, i);
79936:     }
79937:   }else if( pName2->n==0 ){
79938:     /* Form 2:  Analyze the database or table named */
79939:     iDb = sqlite3FindDb(db, pName1);
79940:     if( iDb>=0 ){
79941:       analyzeDatabase(pParse, iDb);
79942:     }else{
79943:       z = sqlite3NameFromToken(db, pName1);
79944:       if( z ){
79945:         if( (pIdx = sqlite3FindIndex(db, z, 0))!=0 ){
79946:           analyzeTable(pParse, pIdx->pTable, pIdx);
79947:         }else if( (pTab = sqlite3LocateTable(pParse, 0, z, 0))!=0 ){
79948:           analyzeTable(pParse, pTab, 0);
79949:         }
79950:         sqlite3DbFree(db, z);
79951:       }
79952:     }
79953:   }else{
79954:     /* Form 3: Analyze the fully qualified table name */
79955:     iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pTableName);
79956:     if( iDb>=0 ){
79957:       zDb = db->aDb[iDb].zName;
79958:       z = sqlite3NameFromToken(db, pTableName);
79959:       if( z ){
79960:         if( (pIdx = sqlite3FindIndex(db, z, zDb))!=0 ){
79961:           analyzeTable(pParse, pIdx->pTable, pIdx);
79962:         }else if( (pTab = sqlite3LocateTable(pParse, 0, z, zDb))!=0 ){
79963:           analyzeTable(pParse, pTab, 0);
79964:         }
79965:         sqlite3DbFree(db, z);
79966:       }
79967:     }   
79968:   }
79969: }
79970: 
79971: /*
79972: ** Used to pass information from the analyzer reader through to the
79973: ** callback routine.
79974: */
79975: typedef struct analysisInfo analysisInfo;
79976: struct analysisInfo {
79977:   sqlite3 *db;
79978:   const char *zDatabase;
79979: };
79980: 
79981: /*
79982: ** This callback is invoked once for each index when reading the
79983: ** sqlite_stat1 table.  
79984: **
79985: **     argv[0] = name of the table
79986: **     argv[1] = name of the index (might be NULL)
79987: **     argv[2] = results of analysis - on integer for each column
79988: **
79989: ** Entries for which argv[1]==NULL simply record the number of rows in
79990: ** the table.
79991: */
79992: static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){
79993:   analysisInfo *pInfo = (analysisInfo*)pData;
79994:   Index *pIndex;
79995:   Table *pTable;
79996:   int i, c, n;
79997:   tRowcnt v;
79998:   const char *z;
79999: 
80000:   assert( argc==3 );
80001:   UNUSED_PARAMETER2(NotUsed, argc);
80002: 
80003:   if( argv==0 || argv[0]==0 || argv[2]==0 ){
80004:     return 0;
80005:   }
80006:   pTable = sqlite3FindTable(pInfo->db, argv[0], pInfo->zDatabase);
80007:   if( pTable==0 ){
80008:     return 0;
80009:   }
80010:   if( argv[1] ){
80011:     pIndex = sqlite3FindIndex(pInfo->db, argv[1], pInfo->zDatabase);
80012:   }else{
80013:     pIndex = 0;
80014:   }
80015:   n = pIndex ? pIndex->nColumn : 0;
80016:   z = argv[2];
80017:   for(i=0; *z && i<=n; i++){
80018:     v = 0;
80019:     while( (c=z[0])>='0' && c<='9' ){
80020:       v = v*10 + c - '0';
80021:       z++;
80022:     }
80023:     if( i==0 ) pTable->nRowEst = v;
80024:     if( pIndex==0 ) break;
80025:     pIndex->aiRowEst[i] = v;
80026:     if( *z==' ' ) z++;
80027:     if( memcmp(z, "unordered", 10)==0 ){
80028:       pIndex->bUnordered = 1;
80029:       break;
80030:     }
80031:   }
80032:   return 0;
80033: }
80034: 
80035: /*
80036: ** If the Index.aSample variable is not NULL, delete the aSample[] array
80037: ** and its contents.
80038: */
80039: SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){
80040: #ifdef SQLITE_ENABLE_STAT3
80041:   if( pIdx->aSample ){
80042:     int j;
80043:     for(j=0; j<pIdx->nSample; j++){
80044:       IndexSample *p = &pIdx->aSample[j];
80045:       if( p->eType==SQLITE_TEXT || p->eType==SQLITE_BLOB ){
80046:         sqlite3DbFree(db, p->u.z);
80047:       }
80048:     }
80049:     sqlite3DbFree(db, pIdx->aSample);
80050:   }
80051:   if( db && db->pnBytesFreed==0 ){
80052:     pIdx->nSample = 0;
80053:     pIdx->aSample = 0;
80054:   }
80055: #else
80056:   UNUSED_PARAMETER(db);
80057:   UNUSED_PARAMETER(pIdx);
80058: #endif
80059: }
80060: 
80061: #ifdef SQLITE_ENABLE_STAT3
80062: /*
80063: ** Load content from the sqlite_stat3 table into the Index.aSample[]
80064: ** arrays of all indices.
80065: */
80066: static int loadStat3(sqlite3 *db, const char *zDb){
80067:   int rc;                       /* Result codes from subroutines */
80068:   sqlite3_stmt *pStmt = 0;      /* An SQL statement being run */
80069:   char *zSql;                   /* Text of the SQL statement */
80070:   Index *pPrevIdx = 0;          /* Previous index in the loop */
80071:   int idx = 0;                  /* slot in pIdx->aSample[] for next sample */
80072:   int eType;                    /* Datatype of a sample */
80073:   IndexSample *pSample;         /* A slot in pIdx->aSample[] */
80074: 
80075:   if( !sqlite3FindTable(db, "sqlite_stat3", zDb) ){
80076:     return SQLITE_OK;
80077:   }
80078: 
80079:   zSql = sqlite3MPrintf(db, 
80080:       "SELECT idx,count(*) FROM %Q.sqlite_stat3"
80081:       " GROUP BY idx", zDb);
80082:   if( !zSql ){
80083:     return SQLITE_NOMEM;
80084:   }
80085:   rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
80086:   sqlite3DbFree(db, zSql);
80087:   if( rc ) return rc;
80088: 
80089:   while( sqlite3_step(pStmt)==SQLITE_ROW ){
80090:     char *zIndex;   /* Index name */
80091:     Index *pIdx;    /* Pointer to the index object */
80092:     int nSample;    /* Number of samples */
80093: 
80094:     zIndex = (char *)sqlite3_column_text(pStmt, 0);
80095:     if( zIndex==0 ) continue;
80096:     nSample = sqlite3_column_int(pStmt, 1);
80097:     pIdx = sqlite3FindIndex(db, zIndex, zDb);
80098:     if( pIdx==0 ) continue;
80099:     assert( pIdx->nSample==0 );
80100:     pIdx->nSample = nSample;
80101:     pIdx->aSample = sqlite3MallocZero( nSample*sizeof(IndexSample) );
80102:     pIdx->avgEq = pIdx->aiRowEst[1];
80103:     if( pIdx->aSample==0 ){
80104:       db->mallocFailed = 1;
80105:       sqlite3_finalize(pStmt);
80106:       return SQLITE_NOMEM;
80107:     }
80108:   }
80109:   rc = sqlite3_finalize(pStmt);
80110:   if( rc ) return rc;
80111: 
80112:   zSql = sqlite3MPrintf(db, 
80113:       "SELECT idx,neq,nlt,ndlt,sample FROM %Q.sqlite_stat3", zDb);
80114:   if( !zSql ){
80115:     return SQLITE_NOMEM;
80116:   }
80117:   rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
80118:   sqlite3DbFree(db, zSql);
80119:   if( rc ) return rc;
80120: 
80121:   while( sqlite3_step(pStmt)==SQLITE_ROW ){
80122:     char *zIndex;   /* Index name */
80123:     Index *pIdx;    /* Pointer to the index object */
80124:     int i;          /* Loop counter */
80125:     tRowcnt sumEq;  /* Sum of the nEq values */
80126: 
80127:     zIndex = (char *)sqlite3_column_text(pStmt, 0);
80128:     if( zIndex==0 ) continue;
80129:     pIdx = sqlite3FindIndex(db, zIndex, zDb);
80130:     if( pIdx==0 ) continue;
80131:     if( pIdx==pPrevIdx ){
80132:       idx++;
80133:     }else{
80134:       pPrevIdx = pIdx;
80135:       idx = 0;
80136:     }
80137:     assert( idx<pIdx->nSample );
80138:     pSample = &pIdx->aSample[idx];
80139:     pSample->nEq = (tRowcnt)sqlite3_column_int64(pStmt, 1);
80140:     pSample->nLt = (tRowcnt)sqlite3_column_int64(pStmt, 2);
80141:     pSample->nDLt = (tRowcnt)sqlite3_column_int64(pStmt, 3);
80142:     if( idx==pIdx->nSample-1 ){
80143:       if( pSample->nDLt>0 ){
80144:         for(i=0, sumEq=0; i<=idx-1; i++) sumEq += pIdx->aSample[i].nEq;
80145:         pIdx->avgEq = (pSample->nLt - sumEq)/pSample->nDLt;
80146:       }
80147:       if( pIdx->avgEq<=0 ) pIdx->avgEq = 1;
80148:     }
80149:     eType = sqlite3_column_type(pStmt, 4);
80150:     pSample->eType = (u8)eType;
80151:     switch( eType ){
80152:       case SQLITE_INTEGER: {
80153:         pSample->u.i = sqlite3_column_int64(pStmt, 4);
80154:         break;
80155:       }
80156:       case SQLITE_FLOAT: {
80157:         pSample->u.r = sqlite3_column_double(pStmt, 4);
80158:         break;
80159:       }
80160:       case SQLITE_NULL: {
80161:         break;
80162:       }
80163:       default: assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB ); {
80164:         const char *z = (const char *)(
80165:               (eType==SQLITE_BLOB) ?
80166:               sqlite3_column_blob(pStmt, 4):
80167:               sqlite3_column_text(pStmt, 4)
80168:            );
80169:         int n = z ? sqlite3_column_bytes(pStmt, 4) : 0;
80170:         pSample->nByte = n;
80171:         if( n < 1){
80172:           pSample->u.z = 0;
80173:         }else{
80174:           pSample->u.z = sqlite3Malloc(n);
80175:           if( pSample->u.z==0 ){
80176:             db->mallocFailed = 1;
80177:             sqlite3_finalize(pStmt);
80178:             return SQLITE_NOMEM;
80179:           }
80180:           memcpy(pSample->u.z, z, n);
80181:         }
80182:       }
80183:     }
80184:   }
80185:   return sqlite3_finalize(pStmt);
80186: }
80187: #endif /* SQLITE_ENABLE_STAT3 */
80188: 
80189: /*
80190: ** Load the content of the sqlite_stat1 and sqlite_stat3 tables. The
80191: ** contents of sqlite_stat1 are used to populate the Index.aiRowEst[]
80192: ** arrays. The contents of sqlite_stat3 are used to populate the
80193: ** Index.aSample[] arrays.
80194: **
80195: ** If the sqlite_stat1 table is not present in the database, SQLITE_ERROR
80196: ** is returned. In this case, even if SQLITE_ENABLE_STAT3 was defined 
80197: ** during compilation and the sqlite_stat3 table is present, no data is 
80198: ** read from it.
80199: **
80200: ** If SQLITE_ENABLE_STAT3 was defined during compilation and the 
80201: ** sqlite_stat3 table is not present in the database, SQLITE_ERROR is
80202: ** returned. However, in this case, data is read from the sqlite_stat1
80203: ** table (if it is present) before returning.
80204: **
80205: ** If an OOM error occurs, this function always sets db->mallocFailed.
80206: ** This means if the caller does not care about other errors, the return
80207: ** code may be ignored.
80208: */
80209: SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){
80210:   analysisInfo sInfo;
80211:   HashElem *i;
80212:   char *zSql;
80213:   int rc;
80214: 
80215:   assert( iDb>=0 && iDb<db->nDb );
80216:   assert( db->aDb[iDb].pBt!=0 );
80217: 
80218:   /* Clear any prior statistics */
80219:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
80220:   for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){
80221:     Index *pIdx = sqliteHashData(i);
80222:     sqlite3DefaultRowEst(pIdx);
80223: #ifdef SQLITE_ENABLE_STAT3
80224:     sqlite3DeleteIndexSamples(db, pIdx);
80225:     pIdx->aSample = 0;
80226: #endif
80227:   }
80228: 
80229:   /* Check to make sure the sqlite_stat1 table exists */
80230:   sInfo.db = db;
80231:   sInfo.zDatabase = db->aDb[iDb].zName;
80232:   if( sqlite3FindTable(db, "sqlite_stat1", sInfo.zDatabase)==0 ){
80233:     return SQLITE_ERROR;
80234:   }
80235: 
80236:   /* Load new statistics out of the sqlite_stat1 table */
80237:   zSql = sqlite3MPrintf(db, 
80238:       "SELECT tbl,idx,stat FROM %Q.sqlite_stat1", sInfo.zDatabase);
80239:   if( zSql==0 ){
80240:     rc = SQLITE_NOMEM;
80241:   }else{
80242:     rc = sqlite3_exec(db, zSql, analysisLoader, &sInfo, 0);
80243:     sqlite3DbFree(db, zSql);
80244:   }
80245: 
80246: 
80247:   /* Load the statistics from the sqlite_stat3 table. */
80248: #ifdef SQLITE_ENABLE_STAT3
80249:   if( rc==SQLITE_OK ){
80250:     rc = loadStat3(db, sInfo.zDatabase);
80251:   }
80252: #endif
80253: 
80254:   if( rc==SQLITE_NOMEM ){
80255:     db->mallocFailed = 1;
80256:   }
80257:   return rc;
80258: }
80259: 
80260: 
80261: #endif /* SQLITE_OMIT_ANALYZE */
80262: 
80263: /************** End of analyze.c *********************************************/
80264: /************** Begin file attach.c ******************************************/
80265: /*
80266: ** 2003 April 6
80267: **
80268: ** The author disclaims copyright to this source code.  In place of
80269: ** a legal notice, here is a blessing:
80270: **
80271: **    May you do good and not evil.
80272: **    May you find forgiveness for yourself and forgive others.
80273: **    May you share freely, never taking more than you give.
80274: **
80275: *************************************************************************
80276: ** This file contains code used to implement the ATTACH and DETACH commands.
80277: */
80278: 
80279: #ifndef SQLITE_OMIT_ATTACH
80280: /*
80281: ** Resolve an expression that was part of an ATTACH or DETACH statement. This
80282: ** is slightly different from resolving a normal SQL expression, because simple
80283: ** identifiers are treated as strings, not possible column names or aliases.
80284: **
80285: ** i.e. if the parser sees:
80286: **
80287: **     ATTACH DATABASE abc AS def
80288: **
80289: ** it treats the two expressions as literal strings 'abc' and 'def' instead of
80290: ** looking for columns of the same name.
80291: **
80292: ** This only applies to the root node of pExpr, so the statement:
80293: **
80294: **     ATTACH DATABASE abc||def AS 'db2'
80295: **
80296: ** will fail because neither abc or def can be resolved.
80297: */
80298: static int resolveAttachExpr(NameContext *pName, Expr *pExpr)
80299: {
80300:   int rc = SQLITE_OK;
80301:   if( pExpr ){
80302:     if( pExpr->op!=TK_ID ){
80303:       rc = sqlite3ResolveExprNames(pName, pExpr);
80304:       if( rc==SQLITE_OK && !sqlite3ExprIsConstant(pExpr) ){
80305:         sqlite3ErrorMsg(pName->pParse, "invalid name: \"%s\"", pExpr->u.zToken);
80306:         return SQLITE_ERROR;
80307:       }
80308:     }else{
80309:       pExpr->op = TK_STRING;
80310:     }
80311:   }
80312:   return rc;
80313: }
80314: 
80315: /*
80316: ** An SQL user-function registered to do the work of an ATTACH statement. The
80317: ** three arguments to the function come directly from an attach statement:
80318: **
80319: **     ATTACH DATABASE x AS y KEY z
80320: **
80321: **     SELECT sqlite_attach(x, y, z)
80322: **
80323: ** If the optional "KEY z" syntax is omitted, an SQL NULL is passed as the
80324: ** third argument.
80325: */
80326: static void attachFunc(
80327:   sqlite3_context *context,
80328:   int NotUsed,
80329:   sqlite3_value **argv
80330: ){
80331:   int i;
80332:   int rc = 0;
80333:   sqlite3 *db = sqlite3_context_db_handle(context);
80334:   const char *zName;
80335:   const char *zFile;
80336:   char *zPath = 0;
80337:   char *zErr = 0;
80338:   unsigned int flags;
80339:   Db *aNew;
80340:   char *zErrDyn = 0;
80341:   sqlite3_vfs *pVfs;
80342: 
80343:   UNUSED_PARAMETER(NotUsed);
80344: 
80345:   zFile = (const char *)sqlite3_value_text(argv[0]);
80346:   zName = (const char *)sqlite3_value_text(argv[1]);
80347:   if( zFile==0 ) zFile = "";
80348:   if( zName==0 ) zName = "";
80349: 
80350:   /* Check for the following errors:
80351:   **
80352:   **     * Too many attached databases,
80353:   **     * Transaction currently open
80354:   **     * Specified database name already being used.
80355:   */
80356:   if( db->nDb>=db->aLimit[SQLITE_LIMIT_ATTACHED]+2 ){
80357:     zErrDyn = sqlite3MPrintf(db, "too many attached databases - max %d", 
80358:       db->aLimit[SQLITE_LIMIT_ATTACHED]
80359:     );
80360:     goto attach_error;
80361:   }
80362:   if( !db->autoCommit ){
80363:     zErrDyn = sqlite3MPrintf(db, "cannot ATTACH database within transaction");
80364:     goto attach_error;
80365:   }
80366:   for(i=0; i<db->nDb; i++){
80367:     char *z = db->aDb[i].zName;
80368:     assert( z && zName );
80369:     if( sqlite3StrICmp(z, zName)==0 ){
80370:       zErrDyn = sqlite3MPrintf(db, "database %s is already in use", zName);
80371:       goto attach_error;
80372:     }
80373:   }
80374: 
80375:   /* Allocate the new entry in the db->aDb[] array and initialise the schema
80376:   ** hash tables.
80377:   */
80378:   if( db->aDb==db->aDbStatic ){
80379:     aNew = sqlite3DbMallocRaw(db, sizeof(db->aDb[0])*3 );
80380:     if( aNew==0 ) return;
80381:     memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2);
80382:   }else{
80383:     aNew = sqlite3DbRealloc(db, db->aDb, sizeof(db->aDb[0])*(db->nDb+1) );
80384:     if( aNew==0 ) return;
80385:   }
80386:   db->aDb = aNew;
80387:   aNew = &db->aDb[db->nDb];
80388:   memset(aNew, 0, sizeof(*aNew));
80389: 
80390:   /* Open the database file. If the btree is successfully opened, use
80391:   ** it to obtain the database schema. At this point the schema may
80392:   ** or may not be initialised.
80393:   */
80394:   flags = db->openFlags;
80395:   rc = sqlite3ParseUri(db->pVfs->zName, zFile, &flags, &pVfs, &zPath, &zErr);
80396:   if( rc!=SQLITE_OK ){
80397:     if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
80398:     sqlite3_result_error(context, zErr, -1);
80399:     sqlite3_free(zErr);
80400:     return;
80401:   }
80402:   assert( pVfs );
80403:   flags |= SQLITE_OPEN_MAIN_DB;
80404:   rc = sqlite3BtreeOpen(pVfs, zPath, db, &aNew->pBt, 0, flags);
80405:   sqlite3_free( zPath );
80406:   db->nDb++;
80407:   if( rc==SQLITE_CONSTRAINT ){
80408:     rc = SQLITE_ERROR;
80409:     zErrDyn = sqlite3MPrintf(db, "database is already attached");
80410:   }else if( rc==SQLITE_OK ){
80411:     Pager *pPager;
80412:     aNew->pSchema = sqlite3SchemaGet(db, aNew->pBt);
80413:     if( !aNew->pSchema ){
80414:       rc = SQLITE_NOMEM;
80415:     }else if( aNew->pSchema->file_format && aNew->pSchema->enc!=ENC(db) ){
80416:       zErrDyn = sqlite3MPrintf(db, 
80417:         "attached databases must use the same text encoding as main database");
80418:       rc = SQLITE_ERROR;
80419:     }
80420:     pPager = sqlite3BtreePager(aNew->pBt);
80421:     sqlite3PagerLockingMode(pPager, db->dfltLockMode);
80422:     sqlite3BtreeSecureDelete(aNew->pBt,
80423:                              sqlite3BtreeSecureDelete(db->aDb[0].pBt,-1) );
80424:   }
80425:   aNew->safety_level = 3;
80426:   aNew->zName = sqlite3DbStrDup(db, zName);
80427:   if( rc==SQLITE_OK && aNew->zName==0 ){
80428:     rc = SQLITE_NOMEM;
80429:   }
80430: 
80431: 
80432: #ifdef SQLITE_HAS_CODEC
80433:   if( rc==SQLITE_OK ){
80434:     extern int sqlite3CodecAttach(sqlite3*, int, const void*, int);
80435:     extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);
80436:     int nKey;
80437:     char *zKey;
80438:     int t = sqlite3_value_type(argv[2]);
80439:     switch( t ){
80440:       case SQLITE_INTEGER:
80441:       case SQLITE_FLOAT:
80442:         zErrDyn = sqlite3DbStrDup(db, "Invalid key value");
80443:         rc = SQLITE_ERROR;
80444:         break;
80445:         
80446:       case SQLITE_TEXT:
80447:       case SQLITE_BLOB:
80448:         nKey = sqlite3_value_bytes(argv[2]);
80449:         zKey = (char *)sqlite3_value_blob(argv[2]);
80450:         rc = sqlite3CodecAttach(db, db->nDb-1, zKey, nKey);
80451:         break;
80452: 
80453:       case SQLITE_NULL:
80454:         /* No key specified.  Use the key from the main database */
80455:         sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey);
80456:         if( nKey>0 || sqlite3BtreeGetReserve(db->aDb[0].pBt)>0 ){
80457:           rc = sqlite3CodecAttach(db, db->nDb-1, zKey, nKey);
80458:         }
80459:         break;
80460:     }
80461:   }
80462: #endif
80463: 
80464:   /* If the file was opened successfully, read the schema for the new database.
80465:   ** If this fails, or if opening the file failed, then close the file and 
80466:   ** remove the entry from the db->aDb[] array. i.e. put everything back the way
80467:   ** we found it.
80468:   */
80469:   if( rc==SQLITE_OK ){
80470:     sqlite3BtreeEnterAll(db);
80471:     rc = sqlite3Init(db, &zErrDyn);
80472:     sqlite3BtreeLeaveAll(db);
80473:   }
80474:   if( rc ){
80475:     int iDb = db->nDb - 1;
80476:     assert( iDb>=2 );
80477:     if( db->aDb[iDb].pBt ){
80478:       sqlite3BtreeClose(db->aDb[iDb].pBt);
80479:       db->aDb[iDb].pBt = 0;
80480:       db->aDb[iDb].pSchema = 0;
80481:     }
80482:     sqlite3ResetInternalSchema(db, -1);
80483:     db->nDb = iDb;
80484:     if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
80485:       db->mallocFailed = 1;
80486:       sqlite3DbFree(db, zErrDyn);
80487:       zErrDyn = sqlite3MPrintf(db, "out of memory");
80488:     }else if( zErrDyn==0 ){
80489:       zErrDyn = sqlite3MPrintf(db, "unable to open database: %s", zFile);
80490:     }
80491:     goto attach_error;
80492:   }
80493:   
80494:   return;
80495: 
80496: attach_error:
80497:   /* Return an error if we get here */
80498:   if( zErrDyn ){
80499:     sqlite3_result_error(context, zErrDyn, -1);
80500:     sqlite3DbFree(db, zErrDyn);
80501:   }
80502:   if( rc ) sqlite3_result_error_code(context, rc);
80503: }
80504: 
80505: /*
80506: ** An SQL user-function registered to do the work of an DETACH statement. The
80507: ** three arguments to the function come directly from a detach statement:
80508: **
80509: **     DETACH DATABASE x
80510: **
80511: **     SELECT sqlite_detach(x)
80512: */
80513: static void detachFunc(
80514:   sqlite3_context *context,
80515:   int NotUsed,
80516:   sqlite3_value **argv
80517: ){
80518:   const char *zName = (const char *)sqlite3_value_text(argv[0]);
80519:   sqlite3 *db = sqlite3_context_db_handle(context);
80520:   int i;
80521:   Db *pDb = 0;
80522:   char zErr[128];
80523: 
80524:   UNUSED_PARAMETER(NotUsed);
80525: 
80526:   if( zName==0 ) zName = "";
80527:   for(i=0; i<db->nDb; i++){
80528:     pDb = &db->aDb[i];
80529:     if( pDb->pBt==0 ) continue;
80530:     if( sqlite3StrICmp(pDb->zName, zName)==0 ) break;
80531:   }
80532: 
80533:   if( i>=db->nDb ){
80534:     sqlite3_snprintf(sizeof(zErr),zErr, "no such database: %s", zName);
80535:     goto detach_error;
80536:   }
80537:   if( i<2 ){
80538:     sqlite3_snprintf(sizeof(zErr),zErr, "cannot detach database %s", zName);
80539:     goto detach_error;
80540:   }
80541:   if( !db->autoCommit ){
80542:     sqlite3_snprintf(sizeof(zErr), zErr,
80543:                      "cannot DETACH database within transaction");
80544:     goto detach_error;
80545:   }
80546:   if( sqlite3BtreeIsInReadTrans(pDb->pBt) || sqlite3BtreeIsInBackup(pDb->pBt) ){
80547:     sqlite3_snprintf(sizeof(zErr),zErr, "database %s is locked", zName);
80548:     goto detach_error;
80549:   }
80550: 
80551:   sqlite3BtreeClose(pDb->pBt);
80552:   pDb->pBt = 0;
80553:   pDb->pSchema = 0;
80554:   sqlite3ResetInternalSchema(db, -1);
80555:   return;
80556: 
80557: detach_error:
80558:   sqlite3_result_error(context, zErr, -1);
80559: }
80560: 
80561: /*
80562: ** This procedure generates VDBE code for a single invocation of either the
80563: ** sqlite_detach() or sqlite_attach() SQL user functions.
80564: */
80565: static void codeAttach(
80566:   Parse *pParse,       /* The parser context */
80567:   int type,            /* Either SQLITE_ATTACH or SQLITE_DETACH */
80568:   FuncDef const *pFunc,/* FuncDef wrapper for detachFunc() or attachFunc() */
80569:   Expr *pAuthArg,      /* Expression to pass to authorization callback */
80570:   Expr *pFilename,     /* Name of database file */
80571:   Expr *pDbname,       /* Name of the database to use internally */
80572:   Expr *pKey           /* Database key for encryption extension */
80573: ){
80574:   int rc;
80575:   NameContext sName;
80576:   Vdbe *v;
80577:   sqlite3* db = pParse->db;
80578:   int regArgs;
80579: 
80580:   memset(&sName, 0, sizeof(NameContext));
80581:   sName.pParse = pParse;
80582: 
80583:   if( 
80584:       SQLITE_OK!=(rc = resolveAttachExpr(&sName, pFilename)) ||
80585:       SQLITE_OK!=(rc = resolveAttachExpr(&sName, pDbname)) ||
80586:       SQLITE_OK!=(rc = resolveAttachExpr(&sName, pKey))
80587:   ){
80588:     pParse->nErr++;
80589:     goto attach_end;
80590:   }
80591: 
80592: #ifndef SQLITE_OMIT_AUTHORIZATION
80593:   if( pAuthArg ){
80594:     char *zAuthArg;
80595:     if( pAuthArg->op==TK_STRING ){
80596:       zAuthArg = pAuthArg->u.zToken;
80597:     }else{
80598:       zAuthArg = 0;
80599:     }
80600:     rc = sqlite3AuthCheck(pParse, type, zAuthArg, 0, 0);
80601:     if(rc!=SQLITE_OK ){
80602:       goto attach_end;
80603:     }
80604:   }
80605: #endif /* SQLITE_OMIT_AUTHORIZATION */
80606: 
80607: 
80608:   v = sqlite3GetVdbe(pParse);
80609:   regArgs = sqlite3GetTempRange(pParse, 4);
80610:   sqlite3ExprCode(pParse, pFilename, regArgs);
80611:   sqlite3ExprCode(pParse, pDbname, regArgs+1);
80612:   sqlite3ExprCode(pParse, pKey, regArgs+2);
80613: 
80614:   assert( v || db->mallocFailed );
80615:   if( v ){
80616:     sqlite3VdbeAddOp3(v, OP_Function, 0, regArgs+3-pFunc->nArg, regArgs+3);
80617:     assert( pFunc->nArg==-1 || (pFunc->nArg&0xff)==pFunc->nArg );
80618:     sqlite3VdbeChangeP5(v, (u8)(pFunc->nArg));
80619:     sqlite3VdbeChangeP4(v, -1, (char *)pFunc, P4_FUNCDEF);
80620: 
80621:     /* Code an OP_Expire. For an ATTACH statement, set P1 to true (expire this
80622:     ** statement only). For DETACH, set it to false (expire all existing
80623:     ** statements).
80624:     */
80625:     sqlite3VdbeAddOp1(v, OP_Expire, (type==SQLITE_ATTACH));
80626:   }
80627:   
80628: attach_end:
80629:   sqlite3ExprDelete(db, pFilename);
80630:   sqlite3ExprDelete(db, pDbname);
80631:   sqlite3ExprDelete(db, pKey);
80632: }
80633: 
80634: /*
80635: ** Called by the parser to compile a DETACH statement.
80636: **
80637: **     DETACH pDbname
80638: */
80639: SQLITE_PRIVATE void sqlite3Detach(Parse *pParse, Expr *pDbname){
80640:   static const FuncDef detach_func = {
80641:     1,                /* nArg */
80642:     SQLITE_UTF8,      /* iPrefEnc */
80643:     0,                /* flags */
80644:     0,                /* pUserData */
80645:     0,                /* pNext */
80646:     detachFunc,       /* xFunc */
80647:     0,                /* xStep */
80648:     0,                /* xFinalize */
80649:     "sqlite_detach",  /* zName */
80650:     0,                /* pHash */
80651:     0                 /* pDestructor */
80652:   };
80653:   codeAttach(pParse, SQLITE_DETACH, &detach_func, pDbname, 0, 0, pDbname);
80654: }
80655: 
80656: /*
80657: ** Called by the parser to compile an ATTACH statement.
80658: **
80659: **     ATTACH p AS pDbname KEY pKey
80660: */
80661: SQLITE_PRIVATE void sqlite3Attach(Parse *pParse, Expr *p, Expr *pDbname, Expr *pKey){
80662:   static const FuncDef attach_func = {
80663:     3,                /* nArg */
80664:     SQLITE_UTF8,      /* iPrefEnc */
80665:     0,                /* flags */
80666:     0,                /* pUserData */
80667:     0,                /* pNext */
80668:     attachFunc,       /* xFunc */
80669:     0,                /* xStep */
80670:     0,                /* xFinalize */
80671:     "sqlite_attach",  /* zName */
80672:     0,                /* pHash */
80673:     0                 /* pDestructor */
80674:   };
80675:   codeAttach(pParse, SQLITE_ATTACH, &attach_func, p, p, pDbname, pKey);
80676: }
80677: #endif /* SQLITE_OMIT_ATTACH */
80678: 
80679: /*
80680: ** Initialize a DbFixer structure.  This routine must be called prior
80681: ** to passing the structure to one of the sqliteFixAAAA() routines below.
80682: **
80683: ** The return value indicates whether or not fixation is required.  TRUE
80684: ** means we do need to fix the database references, FALSE means we do not.
80685: */
80686: SQLITE_PRIVATE int sqlite3FixInit(
80687:   DbFixer *pFix,      /* The fixer to be initialized */
80688:   Parse *pParse,      /* Error messages will be written here */
80689:   int iDb,            /* This is the database that must be used */
80690:   const char *zType,  /* "view", "trigger", or "index" */
80691:   const Token *pName  /* Name of the view, trigger, or index */
80692: ){
80693:   sqlite3 *db;
80694: 
80695:   if( NEVER(iDb<0) || iDb==1 ) return 0;
80696:   db = pParse->db;
80697:   assert( db->nDb>iDb );
80698:   pFix->pParse = pParse;
80699:   pFix->zDb = db->aDb[iDb].zName;
80700:   pFix->zType = zType;
80701:   pFix->pName = pName;
80702:   return 1;
80703: }
80704: 
80705: /*
80706: ** The following set of routines walk through the parse tree and assign
80707: ** a specific database to all table references where the database name
80708: ** was left unspecified in the original SQL statement.  The pFix structure
80709: ** must have been initialized by a prior call to sqlite3FixInit().
80710: **
80711: ** These routines are used to make sure that an index, trigger, or
80712: ** view in one database does not refer to objects in a different database.
80713: ** (Exception: indices, triggers, and views in the TEMP database are
80714: ** allowed to refer to anything.)  If a reference is explicitly made
80715: ** to an object in a different database, an error message is added to
80716: ** pParse->zErrMsg and these routines return non-zero.  If everything
80717: ** checks out, these routines return 0.
80718: */
80719: SQLITE_PRIVATE int sqlite3FixSrcList(
80720:   DbFixer *pFix,       /* Context of the fixation */
80721:   SrcList *pList       /* The Source list to check and modify */
80722: ){
80723:   int i;
80724:   const char *zDb;
80725:   struct SrcList_item *pItem;
80726: 
80727:   if( NEVER(pList==0) ) return 0;
80728:   zDb = pFix->zDb;
80729:   for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
80730:     if( pItem->zDatabase==0 ){
80731:       pItem->zDatabase = sqlite3DbStrDup(pFix->pParse->db, zDb);
80732:     }else if( sqlite3StrICmp(pItem->zDatabase,zDb)!=0 ){
80733:       sqlite3ErrorMsg(pFix->pParse,
80734:          "%s %T cannot reference objects in database %s",
80735:          pFix->zType, pFix->pName, pItem->zDatabase);
80736:       return 1;
80737:     }
80738: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
80739:     if( sqlite3FixSelect(pFix, pItem->pSelect) ) return 1;
80740:     if( sqlite3FixExpr(pFix, pItem->pOn) ) return 1;
80741: #endif
80742:   }
80743:   return 0;
80744: }
80745: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
80746: SQLITE_PRIVATE int sqlite3FixSelect(
80747:   DbFixer *pFix,       /* Context of the fixation */
80748:   Select *pSelect      /* The SELECT statement to be fixed to one database */
80749: ){
80750:   while( pSelect ){
80751:     if( sqlite3FixExprList(pFix, pSelect->pEList) ){
80752:       return 1;
80753:     }
80754:     if( sqlite3FixSrcList(pFix, pSelect->pSrc) ){
80755:       return 1;
80756:     }
80757:     if( sqlite3FixExpr(pFix, pSelect->pWhere) ){
80758:       return 1;
80759:     }
80760:     if( sqlite3FixExpr(pFix, pSelect->pHaving) ){
80761:       return 1;
80762:     }
80763:     pSelect = pSelect->pPrior;
80764:   }
80765:   return 0;
80766: }
80767: SQLITE_PRIVATE int sqlite3FixExpr(
80768:   DbFixer *pFix,     /* Context of the fixation */
80769:   Expr *pExpr        /* The expression to be fixed to one database */
80770: ){
80771:   while( pExpr ){
80772:     if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ) break;
80773:     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
80774:       if( sqlite3FixSelect(pFix, pExpr->x.pSelect) ) return 1;
80775:     }else{
80776:       if( sqlite3FixExprList(pFix, pExpr->x.pList) ) return 1;
80777:     }
80778:     if( sqlite3FixExpr(pFix, pExpr->pRight) ){
80779:       return 1;
80780:     }
80781:     pExpr = pExpr->pLeft;
80782:   }
80783:   return 0;
80784: }
80785: SQLITE_PRIVATE int sqlite3FixExprList(
80786:   DbFixer *pFix,     /* Context of the fixation */
80787:   ExprList *pList    /* The expression to be fixed to one database */
80788: ){
80789:   int i;
80790:   struct ExprList_item *pItem;
80791:   if( pList==0 ) return 0;
80792:   for(i=0, pItem=pList->a; i<pList->nExpr; i++, pItem++){
80793:     if( sqlite3FixExpr(pFix, pItem->pExpr) ){
80794:       return 1;
80795:     }
80796:   }
80797:   return 0;
80798: }
80799: #endif
80800: 
80801: #ifndef SQLITE_OMIT_TRIGGER
80802: SQLITE_PRIVATE int sqlite3FixTriggerStep(
80803:   DbFixer *pFix,     /* Context of the fixation */
80804:   TriggerStep *pStep /* The trigger step be fixed to one database */
80805: ){
80806:   while( pStep ){
80807:     if( sqlite3FixSelect(pFix, pStep->pSelect) ){
80808:       return 1;
80809:     }
80810:     if( sqlite3FixExpr(pFix, pStep->pWhere) ){
80811:       return 1;
80812:     }
80813:     if( sqlite3FixExprList(pFix, pStep->pExprList) ){
80814:       return 1;
80815:     }
80816:     pStep = pStep->pNext;
80817:   }
80818:   return 0;
80819: }
80820: #endif
80821: 
80822: /************** End of attach.c **********************************************/
80823: /************** Begin file auth.c ********************************************/
80824: /*
80825: ** 2003 January 11
80826: **
80827: ** The author disclaims copyright to this source code.  In place of
80828: ** a legal notice, here is a blessing:
80829: **
80830: **    May you do good and not evil.
80831: **    May you find forgiveness for yourself and forgive others.
80832: **    May you share freely, never taking more than you give.
80833: **
80834: *************************************************************************
80835: ** This file contains code used to implement the sqlite3_set_authorizer()
80836: ** API.  This facility is an optional feature of the library.  Embedded
80837: ** systems that do not need this facility may omit it by recompiling
80838: ** the library with -DSQLITE_OMIT_AUTHORIZATION=1
80839: */
80840: 
80841: /*
80842: ** All of the code in this file may be omitted by defining a single
80843: ** macro.
80844: */
80845: #ifndef SQLITE_OMIT_AUTHORIZATION
80846: 
80847: /*
80848: ** Set or clear the access authorization function.
80849: **
80850: ** The access authorization function is be called during the compilation
80851: ** phase to verify that the user has read and/or write access permission on
80852: ** various fields of the database.  The first argument to the auth function
80853: ** is a copy of the 3rd argument to this routine.  The second argument
80854: ** to the auth function is one of these constants:
80855: **
80856: **       SQLITE_CREATE_INDEX
80857: **       SQLITE_CREATE_TABLE
80858: **       SQLITE_CREATE_TEMP_INDEX
80859: **       SQLITE_CREATE_TEMP_TABLE
80860: **       SQLITE_CREATE_TEMP_TRIGGER
80861: **       SQLITE_CREATE_TEMP_VIEW
80862: **       SQLITE_CREATE_TRIGGER
80863: **       SQLITE_CREATE_VIEW
80864: **       SQLITE_DELETE
80865: **       SQLITE_DROP_INDEX
80866: **       SQLITE_DROP_TABLE
80867: **       SQLITE_DROP_TEMP_INDEX
80868: **       SQLITE_DROP_TEMP_TABLE
80869: **       SQLITE_DROP_TEMP_TRIGGER
80870: **       SQLITE_DROP_TEMP_VIEW
80871: **       SQLITE_DROP_TRIGGER
80872: **       SQLITE_DROP_VIEW
80873: **       SQLITE_INSERT
80874: **       SQLITE_PRAGMA
80875: **       SQLITE_READ
80876: **       SQLITE_SELECT
80877: **       SQLITE_TRANSACTION
80878: **       SQLITE_UPDATE
80879: **
80880: ** The third and fourth arguments to the auth function are the name of
80881: ** the table and the column that are being accessed.  The auth function
80882: ** should return either SQLITE_OK, SQLITE_DENY, or SQLITE_IGNORE.  If
80883: ** SQLITE_OK is returned, it means that access is allowed.  SQLITE_DENY
80884: ** means that the SQL statement will never-run - the sqlite3_exec() call
80885: ** will return with an error.  SQLITE_IGNORE means that the SQL statement
80886: ** should run but attempts to read the specified column will return NULL
80887: ** and attempts to write the column will be ignored.
80888: **
80889: ** Setting the auth function to NULL disables this hook.  The default
80890: ** setting of the auth function is NULL.
80891: */
80892: SQLITE_API int sqlite3_set_authorizer(
80893:   sqlite3 *db,
80894:   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
80895:   void *pArg
80896: ){
80897:   sqlite3_mutex_enter(db->mutex);
80898:   db->xAuth = xAuth;
80899:   db->pAuthArg = pArg;
80900:   sqlite3ExpirePreparedStatements(db);
80901:   sqlite3_mutex_leave(db->mutex);
80902:   return SQLITE_OK;
80903: }
80904: 
80905: /*
80906: ** Write an error message into pParse->zErrMsg that explains that the
80907: ** user-supplied authorization function returned an illegal value.
80908: */
80909: static void sqliteAuthBadReturnCode(Parse *pParse){
80910:   sqlite3ErrorMsg(pParse, "authorizer malfunction");
80911:   pParse->rc = SQLITE_ERROR;
80912: }
80913: 
80914: /*
80915: ** Invoke the authorization callback for permission to read column zCol from
80916: ** table zTab in database zDb. This function assumes that an authorization
80917: ** callback has been registered (i.e. that sqlite3.xAuth is not NULL).
80918: **
80919: ** If SQLITE_IGNORE is returned and pExpr is not NULL, then pExpr is changed
80920: ** to an SQL NULL expression. Otherwise, if pExpr is NULL, then SQLITE_IGNORE
80921: ** is treated as SQLITE_DENY. In this case an error is left in pParse.
80922: */
80923: SQLITE_PRIVATE int sqlite3AuthReadCol(
80924:   Parse *pParse,                  /* The parser context */
80925:   const char *zTab,               /* Table name */
80926:   const char *zCol,               /* Column name */
80927:   int iDb                         /* Index of containing database. */
80928: ){
80929:   sqlite3 *db = pParse->db;       /* Database handle */
80930:   char *zDb = db->aDb[iDb].zName; /* Name of attached database */
80931:   int rc;                         /* Auth callback return code */
80932: 
80933:   rc = db->xAuth(db->pAuthArg, SQLITE_READ, zTab,zCol,zDb,pParse->zAuthContext);
80934:   if( rc==SQLITE_DENY ){
80935:     if( db->nDb>2 || iDb!=0 ){
80936:       sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited",zDb,zTab,zCol);
80937:     }else{
80938:       sqlite3ErrorMsg(pParse, "access to %s.%s is prohibited", zTab, zCol);
80939:     }
80940:     pParse->rc = SQLITE_AUTH;
80941:   }else if( rc!=SQLITE_IGNORE && rc!=SQLITE_OK ){
80942:     sqliteAuthBadReturnCode(pParse);
80943:   }
80944:   return rc;
80945: }
80946: 
80947: /*
80948: ** The pExpr should be a TK_COLUMN expression.  The table referred to
80949: ** is in pTabList or else it is the NEW or OLD table of a trigger.  
80950: ** Check to see if it is OK to read this particular column.
80951: **
80952: ** If the auth function returns SQLITE_IGNORE, change the TK_COLUMN 
80953: ** instruction into a TK_NULL.  If the auth function returns SQLITE_DENY,
80954: ** then generate an error.
80955: */
80956: SQLITE_PRIVATE void sqlite3AuthRead(
80957:   Parse *pParse,        /* The parser context */
80958:   Expr *pExpr,          /* The expression to check authorization on */
80959:   Schema *pSchema,      /* The schema of the expression */
80960:   SrcList *pTabList     /* All table that pExpr might refer to */
80961: ){
80962:   sqlite3 *db = pParse->db;
80963:   Table *pTab = 0;      /* The table being read */
80964:   const char *zCol;     /* Name of the column of the table */
80965:   int iSrc;             /* Index in pTabList->a[] of table being read */
80966:   int iDb;              /* The index of the database the expression refers to */
80967:   int iCol;             /* Index of column in table */
80968: 
80969:   if( db->xAuth==0 ) return;
80970:   iDb = sqlite3SchemaToIndex(pParse->db, pSchema);
80971:   if( iDb<0 ){
80972:     /* An attempt to read a column out of a subquery or other
80973:     ** temporary table. */
80974:     return;
80975:   }
80976: 
80977:   assert( pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER );
80978:   if( pExpr->op==TK_TRIGGER ){
80979:     pTab = pParse->pTriggerTab;
80980:   }else{
80981:     assert( pTabList );
80982:     for(iSrc=0; ALWAYS(iSrc<pTabList->nSrc); iSrc++){
80983:       if( pExpr->iTable==pTabList->a[iSrc].iCursor ){
80984:         pTab = pTabList->a[iSrc].pTab;
80985:         break;
80986:       }
80987:     }
80988:   }
80989:   iCol = pExpr->iColumn;
80990:   if( NEVER(pTab==0) ) return;
80991: 
80992:   if( iCol>=0 ){
80993:     assert( iCol<pTab->nCol );
80994:     zCol = pTab->aCol[iCol].zName;
80995:   }else if( pTab->iPKey>=0 ){
80996:     assert( pTab->iPKey<pTab->nCol );
80997:     zCol = pTab->aCol[pTab->iPKey].zName;
80998:   }else{
80999:     zCol = "ROWID";
81000:   }
81001:   assert( iDb>=0 && iDb<db->nDb );
81002:   if( SQLITE_IGNORE==sqlite3AuthReadCol(pParse, pTab->zName, zCol, iDb) ){
81003:     pExpr->op = TK_NULL;
81004:   }
81005: }
81006: 
81007: /*
81008: ** Do an authorization check using the code and arguments given.  Return
81009: ** either SQLITE_OK (zero) or SQLITE_IGNORE or SQLITE_DENY.  If SQLITE_DENY
81010: ** is returned, then the error count and error message in pParse are
81011: ** modified appropriately.
81012: */
81013: SQLITE_PRIVATE int sqlite3AuthCheck(
81014:   Parse *pParse,
81015:   int code,
81016:   const char *zArg1,
81017:   const char *zArg2,
81018:   const char *zArg3
81019: ){
81020:   sqlite3 *db = pParse->db;
81021:   int rc;
81022: 
81023:   /* Don't do any authorization checks if the database is initialising
81024:   ** or if the parser is being invoked from within sqlite3_declare_vtab.
81025:   */
81026:   if( db->init.busy || IN_DECLARE_VTAB ){
81027:     return SQLITE_OK;
81028:   }
81029: 
81030:   if( db->xAuth==0 ){
81031:     return SQLITE_OK;
81032:   }
81033:   rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext);
81034:   if( rc==SQLITE_DENY ){
81035:     sqlite3ErrorMsg(pParse, "not authorized");
81036:     pParse->rc = SQLITE_AUTH;
81037:   }else if( rc!=SQLITE_OK && rc!=SQLITE_IGNORE ){
81038:     rc = SQLITE_DENY;
81039:     sqliteAuthBadReturnCode(pParse);
81040:   }
81041:   return rc;
81042: }
81043: 
81044: /*
81045: ** Push an authorization context.  After this routine is called, the
81046: ** zArg3 argument to authorization callbacks will be zContext until
81047: ** popped.  Or if pParse==0, this routine is a no-op.
81048: */
81049: SQLITE_PRIVATE void sqlite3AuthContextPush(
81050:   Parse *pParse,
81051:   AuthContext *pContext, 
81052:   const char *zContext
81053: ){
81054:   assert( pParse );
81055:   pContext->pParse = pParse;
81056:   pContext->zAuthContext = pParse->zAuthContext;
81057:   pParse->zAuthContext = zContext;
81058: }
81059: 
81060: /*
81061: ** Pop an authorization context that was previously pushed
81062: ** by sqlite3AuthContextPush
81063: */
81064: SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext *pContext){
81065:   if( pContext->pParse ){
81066:     pContext->pParse->zAuthContext = pContext->zAuthContext;
81067:     pContext->pParse = 0;
81068:   }
81069: }
81070: 
81071: #endif /* SQLITE_OMIT_AUTHORIZATION */
81072: 
81073: /************** End of auth.c ************************************************/
81074: /************** Begin file build.c *******************************************/
81075: /*
81076: ** 2001 September 15
81077: **
81078: ** The author disclaims copyright to this source code.  In place of
81079: ** a legal notice, here is a blessing:
81080: **
81081: **    May you do good and not evil.
81082: **    May you find forgiveness for yourself and forgive others.
81083: **    May you share freely, never taking more than you give.
81084: **
81085: *************************************************************************
81086: ** This file contains C code routines that are called by the SQLite parser
81087: ** when syntax rules are reduced.  The routines in this file handle the
81088: ** following kinds of SQL syntax:
81089: **
81090: **     CREATE TABLE
81091: **     DROP TABLE
81092: **     CREATE INDEX
81093: **     DROP INDEX
81094: **     creating ID lists
81095: **     BEGIN TRANSACTION
81096: **     COMMIT
81097: **     ROLLBACK
81098: */
81099: 
81100: /*
81101: ** This routine is called when a new SQL statement is beginning to
81102: ** be parsed.  Initialize the pParse structure as needed.
81103: */
81104: SQLITE_PRIVATE void sqlite3BeginParse(Parse *pParse, int explainFlag){
81105:   pParse->explain = (u8)explainFlag;
81106:   pParse->nVar = 0;
81107: }
81108: 
81109: #ifndef SQLITE_OMIT_SHARED_CACHE
81110: /*
81111: ** The TableLock structure is only used by the sqlite3TableLock() and
81112: ** codeTableLocks() functions.
81113: */
81114: struct TableLock {
81115:   int iDb;             /* The database containing the table to be locked */
81116:   int iTab;            /* The root page of the table to be locked */
81117:   u8 isWriteLock;      /* True for write lock.  False for a read lock */
81118:   const char *zName;   /* Name of the table */
81119: };
81120: 
81121: /*
81122: ** Record the fact that we want to lock a table at run-time.  
81123: **
81124: ** The table to be locked has root page iTab and is found in database iDb.
81125: ** A read or a write lock can be taken depending on isWritelock.
81126: **
81127: ** This routine just records the fact that the lock is desired.  The
81128: ** code to make the lock occur is generated by a later call to
81129: ** codeTableLocks() which occurs during sqlite3FinishCoding().
81130: */
81131: SQLITE_PRIVATE void sqlite3TableLock(
81132:   Parse *pParse,     /* Parsing context */
81133:   int iDb,           /* Index of the database containing the table to lock */
81134:   int iTab,          /* Root page number of the table to be locked */
81135:   u8 isWriteLock,    /* True for a write lock */
81136:   const char *zName  /* Name of the table to be locked */
81137: ){
81138:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
81139:   int i;
81140:   int nBytes;
81141:   TableLock *p;
81142:   assert( iDb>=0 );
81143: 
81144:   for(i=0; i<pToplevel->nTableLock; i++){
81145:     p = &pToplevel->aTableLock[i];
81146:     if( p->iDb==iDb && p->iTab==iTab ){
81147:       p->isWriteLock = (p->isWriteLock || isWriteLock);
81148:       return;
81149:     }
81150:   }
81151: 
81152:   nBytes = sizeof(TableLock) * (pToplevel->nTableLock+1);
81153:   pToplevel->aTableLock =
81154:       sqlite3DbReallocOrFree(pToplevel->db, pToplevel->aTableLock, nBytes);
81155:   if( pToplevel->aTableLock ){
81156:     p = &pToplevel->aTableLock[pToplevel->nTableLock++];
81157:     p->iDb = iDb;
81158:     p->iTab = iTab;
81159:     p->isWriteLock = isWriteLock;
81160:     p->zName = zName;
81161:   }else{
81162:     pToplevel->nTableLock = 0;
81163:     pToplevel->db->mallocFailed = 1;
81164:   }
81165: }
81166: 
81167: /*
81168: ** Code an OP_TableLock instruction for each table locked by the
81169: ** statement (configured by calls to sqlite3TableLock()).
81170: */
81171: static void codeTableLocks(Parse *pParse){
81172:   int i;
81173:   Vdbe *pVdbe; 
81174: 
81175:   pVdbe = sqlite3GetVdbe(pParse);
81176:   assert( pVdbe!=0 ); /* sqlite3GetVdbe cannot fail: VDBE already allocated */
81177: 
81178:   for(i=0; i<pParse->nTableLock; i++){
81179:     TableLock *p = &pParse->aTableLock[i];
81180:     int p1 = p->iDb;
81181:     sqlite3VdbeAddOp4(pVdbe, OP_TableLock, p1, p->iTab, p->isWriteLock,
81182:                       p->zName, P4_STATIC);
81183:   }
81184: }
81185: #else
81186:   #define codeTableLocks(x)
81187: #endif
81188: 
81189: /*
81190: ** This routine is called after a single SQL statement has been
81191: ** parsed and a VDBE program to execute that statement has been
81192: ** prepared.  This routine puts the finishing touches on the
81193: ** VDBE program and resets the pParse structure for the next
81194: ** parse.
81195: **
81196: ** Note that if an error occurred, it might be the case that
81197: ** no VDBE code was generated.
81198: */
81199: SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
81200:   sqlite3 *db;
81201:   Vdbe *v;
81202: 
81203:   db = pParse->db;
81204:   if( db->mallocFailed ) return;
81205:   if( pParse->nested ) return;
81206:   if( pParse->nErr ) return;
81207: 
81208:   /* Begin by generating some termination code at the end of the
81209:   ** vdbe program
81210:   */
81211:   v = sqlite3GetVdbe(pParse);
81212:   assert( !pParse->isMultiWrite 
81213:        || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort));
81214:   if( v ){
81215:     sqlite3VdbeAddOp0(v, OP_Halt);
81216: 
81217:     /* The cookie mask contains one bit for each database file open.
81218:     ** (Bit 0 is for main, bit 1 is for temp, and so forth.)  Bits are
81219:     ** set for each database that is used.  Generate code to start a
81220:     ** transaction on each used database and to verify the schema cookie
81221:     ** on each used database.
81222:     */
81223:     if( pParse->cookieGoto>0 ){
81224:       yDbMask mask;
81225:       int iDb;
81226:       sqlite3VdbeJumpHere(v, pParse->cookieGoto-1);
81227:       for(iDb=0, mask=1; iDb<db->nDb; mask<<=1, iDb++){
81228:         if( (mask & pParse->cookieMask)==0 ) continue;
81229:         sqlite3VdbeUsesBtree(v, iDb);
81230:         sqlite3VdbeAddOp2(v,OP_Transaction, iDb, (mask & pParse->writeMask)!=0);
81231:         if( db->init.busy==0 ){
81232:           assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
81233:           sqlite3VdbeAddOp3(v, OP_VerifyCookie,
81234:                             iDb, pParse->cookieValue[iDb],
81235:                             db->aDb[iDb].pSchema->iGeneration);
81236:         }
81237:       }
81238: #ifndef SQLITE_OMIT_VIRTUALTABLE
81239:       {
81240:         int i;
81241:         for(i=0; i<pParse->nVtabLock; i++){
81242:           char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]);
81243:           sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB);
81244:         }
81245:         pParse->nVtabLock = 0;
81246:       }
81247: #endif
81248: 
81249:       /* Once all the cookies have been verified and transactions opened, 
81250:       ** obtain the required table-locks. This is a no-op unless the 
81251:       ** shared-cache feature is enabled.
81252:       */
81253:       codeTableLocks(pParse);
81254: 
81255:       /* Initialize any AUTOINCREMENT data structures required.
81256:       */
81257:       sqlite3AutoincrementBegin(pParse);
81258: 
81259:       /* Finally, jump back to the beginning of the executable code. */
81260:       sqlite3VdbeAddOp2(v, OP_Goto, 0, pParse->cookieGoto);
81261:     }
81262:   }
81263: 
81264: 
81265:   /* Get the VDBE program ready for execution
81266:   */
81267:   if( v && ALWAYS(pParse->nErr==0) && !db->mallocFailed ){
81268: #ifdef SQLITE_DEBUG
81269:     FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0;
81270:     sqlite3VdbeTrace(v, trace);
81271: #endif
81272:     assert( pParse->iCacheLevel==0 );  /* Disables and re-enables match */
81273:     /* A minimum of one cursor is required if autoincrement is used
81274:     *  See ticket [a696379c1f08866] */
81275:     if( pParse->pAinc!=0 && pParse->nTab==0 ) pParse->nTab = 1;
81276:     sqlite3VdbeMakeReady(v, pParse);
81277:     pParse->rc = SQLITE_DONE;
81278:     pParse->colNamesSet = 0;
81279:   }else{
81280:     pParse->rc = SQLITE_ERROR;
81281:   }
81282:   pParse->nTab = 0;
81283:   pParse->nMem = 0;
81284:   pParse->nSet = 0;
81285:   pParse->nVar = 0;
81286:   pParse->cookieMask = 0;
81287:   pParse->cookieGoto = 0;
81288: }
81289: 
81290: /*
81291: ** Run the parser and code generator recursively in order to generate
81292: ** code for the SQL statement given onto the end of the pParse context
81293: ** currently under construction.  When the parser is run recursively
81294: ** this way, the final OP_Halt is not appended and other initialization
81295: ** and finalization steps are omitted because those are handling by the
81296: ** outermost parser.
81297: **
81298: ** Not everything is nestable.  This facility is designed to permit
81299: ** INSERT, UPDATE, and DELETE operations against SQLITE_MASTER.  Use
81300: ** care if you decide to try to use this routine for some other purposes.
81301: */
81302: SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){
81303:   va_list ap;
81304:   char *zSql;
81305:   char *zErrMsg = 0;
81306:   sqlite3 *db = pParse->db;
81307: # define SAVE_SZ  (sizeof(Parse) - offsetof(Parse,nVar))
81308:   char saveBuf[SAVE_SZ];
81309: 
81310:   if( pParse->nErr ) return;
81311:   assert( pParse->nested<10 );  /* Nesting should only be of limited depth */
81312:   va_start(ap, zFormat);
81313:   zSql = sqlite3VMPrintf(db, zFormat, ap);
81314:   va_end(ap);
81315:   if( zSql==0 ){
81316:     return;   /* A malloc must have failed */
81317:   }
81318:   pParse->nested++;
81319:   memcpy(saveBuf, &pParse->nVar, SAVE_SZ);
81320:   memset(&pParse->nVar, 0, SAVE_SZ);
81321:   sqlite3RunParser(pParse, zSql, &zErrMsg);
81322:   sqlite3DbFree(db, zErrMsg);
81323:   sqlite3DbFree(db, zSql);
81324:   memcpy(&pParse->nVar, saveBuf, SAVE_SZ);
81325:   pParse->nested--;
81326: }
81327: 
81328: /*
81329: ** Locate the in-memory structure that describes a particular database
81330: ** table given the name of that table and (optionally) the name of the
81331: ** database containing the table.  Return NULL if not found.
81332: **
81333: ** If zDatabase is 0, all databases are searched for the table and the
81334: ** first matching table is returned.  (No checking for duplicate table
81335: ** names is done.)  The search order is TEMP first, then MAIN, then any
81336: ** auxiliary databases added using the ATTACH command.
81337: **
81338: ** See also sqlite3LocateTable().
81339: */
81340: SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){
81341:   Table *p = 0;
81342:   int i;
81343:   int nName;
81344:   assert( zName!=0 );
81345:   nName = sqlite3Strlen30(zName);
81346:   /* All mutexes are required for schema access.  Make sure we hold them. */
81347:   assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) );
81348:   for(i=OMIT_TEMPDB; i<db->nDb; i++){
81349:     int j = (i<2) ? i^1 : i;   /* Search TEMP before MAIN */
81350:     if( zDatabase!=0 && sqlite3StrICmp(zDatabase, db->aDb[j].zName) ) continue;
81351:     assert( sqlite3SchemaMutexHeld(db, j, 0) );
81352:     p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName, nName);
81353:     if( p ) break;
81354:   }
81355:   return p;
81356: }
81357: 
81358: /*
81359: ** Locate the in-memory structure that describes a particular database
81360: ** table given the name of that table and (optionally) the name of the
81361: ** database containing the table.  Return NULL if not found.  Also leave an
81362: ** error message in pParse->zErrMsg.
81363: **
81364: ** The difference between this routine and sqlite3FindTable() is that this
81365: ** routine leaves an error message in pParse->zErrMsg where
81366: ** sqlite3FindTable() does not.
81367: */
81368: SQLITE_PRIVATE Table *sqlite3LocateTable(
81369:   Parse *pParse,         /* context in which to report errors */
81370:   int isView,            /* True if looking for a VIEW rather than a TABLE */
81371:   const char *zName,     /* Name of the table we are looking for */
81372:   const char *zDbase     /* Name of the database.  Might be NULL */
81373: ){
81374:   Table *p;
81375: 
81376:   /* Read the database schema. If an error occurs, leave an error message
81377:   ** and code in pParse and return NULL. */
81378:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
81379:     return 0;
81380:   }
81381: 
81382:   p = sqlite3FindTable(pParse->db, zName, zDbase);
81383:   if( p==0 ){
81384:     const char *zMsg = isView ? "no such view" : "no such table";
81385:     if( zDbase ){
81386:       sqlite3ErrorMsg(pParse, "%s: %s.%s", zMsg, zDbase, zName);
81387:     }else{
81388:       sqlite3ErrorMsg(pParse, "%s: %s", zMsg, zName);
81389:     }
81390:     pParse->checkSchema = 1;
81391:   }
81392:   return p;
81393: }
81394: 
81395: /*
81396: ** Locate the in-memory structure that describes 
81397: ** a particular index given the name of that index
81398: ** and the name of the database that contains the index.
81399: ** Return NULL if not found.
81400: **
81401: ** If zDatabase is 0, all databases are searched for the
81402: ** table and the first matching index is returned.  (No checking
81403: ** for duplicate index names is done.)  The search order is
81404: ** TEMP first, then MAIN, then any auxiliary databases added
81405: ** using the ATTACH command.
81406: */
81407: SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){
81408:   Index *p = 0;
81409:   int i;
81410:   int nName = sqlite3Strlen30(zName);
81411:   /* All mutexes are required for schema access.  Make sure we hold them. */
81412:   assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
81413:   for(i=OMIT_TEMPDB; i<db->nDb; i++){
81414:     int j = (i<2) ? i^1 : i;  /* Search TEMP before MAIN */
81415:     Schema *pSchema = db->aDb[j].pSchema;
81416:     assert( pSchema );
81417:     if( zDb && sqlite3StrICmp(zDb, db->aDb[j].zName) ) continue;
81418:     assert( sqlite3SchemaMutexHeld(db, j, 0) );
81419:     p = sqlite3HashFind(&pSchema->idxHash, zName, nName);
81420:     if( p ) break;
81421:   }
81422:   return p;
81423: }
81424: 
81425: /*
81426: ** Reclaim the memory used by an index
81427: */
81428: static void freeIndex(sqlite3 *db, Index *p){
81429: #ifndef SQLITE_OMIT_ANALYZE
81430:   sqlite3DeleteIndexSamples(db, p);
81431: #endif
81432:   sqlite3DbFree(db, p->zColAff);
81433:   sqlite3DbFree(db, p);
81434: }
81435: 
81436: /*
81437: ** For the index called zIdxName which is found in the database iDb,
81438: ** unlike that index from its Table then remove the index from
81439: ** the index hash table and free all memory structures associated
81440: ** with the index.
81441: */
81442: SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){
81443:   Index *pIndex;
81444:   int len;
81445:   Hash *pHash;
81446: 
81447:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
81448:   pHash = &db->aDb[iDb].pSchema->idxHash;
81449:   len = sqlite3Strlen30(zIdxName);
81450:   pIndex = sqlite3HashInsert(pHash, zIdxName, len, 0);
81451:   if( ALWAYS(pIndex) ){
81452:     if( pIndex->pTable->pIndex==pIndex ){
81453:       pIndex->pTable->pIndex = pIndex->pNext;
81454:     }else{
81455:       Index *p;
81456:       /* Justification of ALWAYS();  The index must be on the list of
81457:       ** indices. */
81458:       p = pIndex->pTable->pIndex;
81459:       while( ALWAYS(p) && p->pNext!=pIndex ){ p = p->pNext; }
81460:       if( ALWAYS(p && p->pNext==pIndex) ){
81461:         p->pNext = pIndex->pNext;
81462:       }
81463:     }
81464:     freeIndex(db, pIndex);
81465:   }
81466:   db->flags |= SQLITE_InternChanges;
81467: }
81468: 
81469: /*
81470: ** Erase all schema information from the in-memory hash tables of
81471: ** a single database.  This routine is called to reclaim memory
81472: ** before the database closes.  It is also called during a rollback
81473: ** if there were schema changes during the transaction or if a
81474: ** schema-cookie mismatch occurs.
81475: **
81476: ** If iDb<0 then reset the internal schema tables for all database
81477: ** files.  If iDb>=0 then reset the internal schema for only the
81478: ** single file indicated.
81479: */
81480: SQLITE_PRIVATE void sqlite3ResetInternalSchema(sqlite3 *db, int iDb){
81481:   int i, j;
81482:   assert( iDb<db->nDb );
81483: 
81484:   if( iDb>=0 ){
81485:     /* Case 1:  Reset the single schema identified by iDb */
81486:     Db *pDb = &db->aDb[iDb];
81487:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
81488:     assert( pDb->pSchema!=0 );
81489:     sqlite3SchemaClear(pDb->pSchema);
81490: 
81491:     /* If any database other than TEMP is reset, then also reset TEMP
81492:     ** since TEMP might be holding triggers that reference tables in the
81493:     ** other database.
81494:     */
81495:     if( iDb!=1 ){
81496:       pDb = &db->aDb[1];
81497:       assert( pDb->pSchema!=0 );
81498:       sqlite3SchemaClear(pDb->pSchema);
81499:     }
81500:     return;
81501:   }
81502:   /* Case 2 (from here to the end): Reset all schemas for all attached
81503:   ** databases. */
81504:   assert( iDb<0 );
81505:   sqlite3BtreeEnterAll(db);
81506:   for(i=0; i<db->nDb; i++){
81507:     Db *pDb = &db->aDb[i];
81508:     if( pDb->pSchema ){
81509:       sqlite3SchemaClear(pDb->pSchema);
81510:     }
81511:   }
81512:   db->flags &= ~SQLITE_InternChanges;
81513:   sqlite3VtabUnlockList(db);
81514:   sqlite3BtreeLeaveAll(db);
81515: 
81516:   /* If one or more of the auxiliary database files has been closed,
81517:   ** then remove them from the auxiliary database list.  We take the
81518:   ** opportunity to do this here since we have just deleted all of the
81519:   ** schema hash tables and therefore do not have to make any changes
81520:   ** to any of those tables.
81521:   */
81522:   for(i=j=2; i<db->nDb; i++){
81523:     struct Db *pDb = &db->aDb[i];
81524:     if( pDb->pBt==0 ){
81525:       sqlite3DbFree(db, pDb->zName);
81526:       pDb->zName = 0;
81527:       continue;
81528:     }
81529:     if( j<i ){
81530:       db->aDb[j] = db->aDb[i];
81531:     }
81532:     j++;
81533:   }
81534:   memset(&db->aDb[j], 0, (db->nDb-j)*sizeof(db->aDb[j]));
81535:   db->nDb = j;
81536:   if( db->nDb<=2 && db->aDb!=db->aDbStatic ){
81537:     memcpy(db->aDbStatic, db->aDb, 2*sizeof(db->aDb[0]));
81538:     sqlite3DbFree(db, db->aDb);
81539:     db->aDb = db->aDbStatic;
81540:   }
81541: }
81542: 
81543: /*
81544: ** This routine is called when a commit occurs.
81545: */
81546: SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3 *db){
81547:   db->flags &= ~SQLITE_InternChanges;
81548: }
81549: 
81550: /*
81551: ** Delete memory allocated for the column names of a table or view (the
81552: ** Table.aCol[] array).
81553: */
81554: static void sqliteDeleteColumnNames(sqlite3 *db, Table *pTable){
81555:   int i;
81556:   Column *pCol;
81557:   assert( pTable!=0 );
81558:   if( (pCol = pTable->aCol)!=0 ){
81559:     for(i=0; i<pTable->nCol; i++, pCol++){
81560:       sqlite3DbFree(db, pCol->zName);
81561:       sqlite3ExprDelete(db, pCol->pDflt);
81562:       sqlite3DbFree(db, pCol->zDflt);
81563:       sqlite3DbFree(db, pCol->zType);
81564:       sqlite3DbFree(db, pCol->zColl);
81565:     }
81566:     sqlite3DbFree(db, pTable->aCol);
81567:   }
81568: }
81569: 
81570: /*
81571: ** Remove the memory data structures associated with the given
81572: ** Table.  No changes are made to disk by this routine.
81573: **
81574: ** This routine just deletes the data structure.  It does not unlink
81575: ** the table data structure from the hash table.  But it does destroy
81576: ** memory structures of the indices and foreign keys associated with 
81577: ** the table.
81578: */
81579: SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
81580:   Index *pIndex, *pNext;
81581: 
81582:   assert( !pTable || pTable->nRef>0 );
81583: 
81584:   /* Do not delete the table until the reference count reaches zero. */
81585:   if( !pTable ) return;
81586:   if( ((!db || db->pnBytesFreed==0) && (--pTable->nRef)>0) ) return;
81587: 
81588:   /* Delete all indices associated with this table. */
81589:   for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
81590:     pNext = pIndex->pNext;
81591:     assert( pIndex->pSchema==pTable->pSchema );
81592:     if( !db || db->pnBytesFreed==0 ){
81593:       char *zName = pIndex->zName; 
81594:       TESTONLY ( Index *pOld = ) sqlite3HashInsert(
81595: 	  &pIndex->pSchema->idxHash, zName, sqlite3Strlen30(zName), 0
81596:       );
81597:       assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
81598:       assert( pOld==pIndex || pOld==0 );
81599:     }
81600:     freeIndex(db, pIndex);
81601:   }
81602: 
81603:   /* Delete any foreign keys attached to this table. */
81604:   sqlite3FkDelete(db, pTable);
81605: 
81606:   /* Delete the Table structure itself.
81607:   */
81608:   sqliteDeleteColumnNames(db, pTable);
81609:   sqlite3DbFree(db, pTable->zName);
81610:   sqlite3DbFree(db, pTable->zColAff);
81611:   sqlite3SelectDelete(db, pTable->pSelect);
81612: #ifndef SQLITE_OMIT_CHECK
81613:   sqlite3ExprDelete(db, pTable->pCheck);
81614: #endif
81615: #ifndef SQLITE_OMIT_VIRTUALTABLE
81616:   sqlite3VtabClear(db, pTable);
81617: #endif
81618:   sqlite3DbFree(db, pTable);
81619: }
81620: 
81621: /*
81622: ** Unlink the given table from the hash tables and the delete the
81623: ** table structure with all its indices and foreign keys.
81624: */
81625: SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char *zTabName){
81626:   Table *p;
81627:   Db *pDb;
81628: 
81629:   assert( db!=0 );
81630:   assert( iDb>=0 && iDb<db->nDb );
81631:   assert( zTabName );
81632:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
81633:   testcase( zTabName[0]==0 );  /* Zero-length table names are allowed */
81634:   pDb = &db->aDb[iDb];
81635:   p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName,
81636:                         sqlite3Strlen30(zTabName),0);
81637:   sqlite3DeleteTable(db, p);
81638:   db->flags |= SQLITE_InternChanges;
81639: }
81640: 
81641: /*
81642: ** Given a token, return a string that consists of the text of that
81643: ** token.  Space to hold the returned string
81644: ** is obtained from sqliteMalloc() and must be freed by the calling
81645: ** function.
81646: **
81647: ** Any quotation marks (ex:  "name", 'name', [name], or `name`) that
81648: ** surround the body of the token are removed.
81649: **
81650: ** Tokens are often just pointers into the original SQL text and so
81651: ** are not \000 terminated and are not persistent.  The returned string
81652: ** is \000 terminated and is persistent.
81653: */
81654: SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3 *db, Token *pName){
81655:   char *zName;
81656:   if( pName ){
81657:     zName = sqlite3DbStrNDup(db, (char*)pName->z, pName->n);
81658:     sqlite3Dequote(zName);
81659:   }else{
81660:     zName = 0;
81661:   }
81662:   return zName;
81663: }
81664: 
81665: /*
81666: ** Open the sqlite_master table stored in database number iDb for
81667: ** writing. The table is opened using cursor 0.
81668: */
81669: SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *p, int iDb){
81670:   Vdbe *v = sqlite3GetVdbe(p);
81671:   sqlite3TableLock(p, iDb, MASTER_ROOT, 1, SCHEMA_TABLE(iDb));
81672:   sqlite3VdbeAddOp3(v, OP_OpenWrite, 0, MASTER_ROOT, iDb);
81673:   sqlite3VdbeChangeP4(v, -1, (char *)5, P4_INT32);  /* 5 column table */
81674:   if( p->nTab==0 ){
81675:     p->nTab = 1;
81676:   }
81677: }
81678: 
81679: /*
81680: ** Parameter zName points to a nul-terminated buffer containing the name
81681: ** of a database ("main", "temp" or the name of an attached db). This
81682: ** function returns the index of the named database in db->aDb[], or
81683: ** -1 if the named db cannot be found.
81684: */
81685: SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *db, const char *zName){
81686:   int i = -1;         /* Database number */
81687:   if( zName ){
81688:     Db *pDb;
81689:     int n = sqlite3Strlen30(zName);
81690:     for(i=(db->nDb-1), pDb=&db->aDb[i]; i>=0; i--, pDb--){
81691:       if( (!OMIT_TEMPDB || i!=1 ) && n==sqlite3Strlen30(pDb->zName) && 
81692:           0==sqlite3StrICmp(pDb->zName, zName) ){
81693:         break;
81694:       }
81695:     }
81696:   }
81697:   return i;
81698: }
81699: 
81700: /*
81701: ** The token *pName contains the name of a database (either "main" or
81702: ** "temp" or the name of an attached db). This routine returns the
81703: ** index of the named database in db->aDb[], or -1 if the named db 
81704: ** does not exist.
81705: */
81706: SQLITE_PRIVATE int sqlite3FindDb(sqlite3 *db, Token *pName){
81707:   int i;                               /* Database number */
81708:   char *zName;                         /* Name we are searching for */
81709:   zName = sqlite3NameFromToken(db, pName);
81710:   i = sqlite3FindDbName(db, zName);
81711:   sqlite3DbFree(db, zName);
81712:   return i;
81713: }
81714: 
81715: /* The table or view or trigger name is passed to this routine via tokens
81716: ** pName1 and pName2. If the table name was fully qualified, for example:
81717: **
81718: ** CREATE TABLE xxx.yyy (...);
81719: ** 
81720: ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
81721: ** the table name is not fully qualified, i.e.:
81722: **
81723: ** CREATE TABLE yyy(...);
81724: **
81725: ** Then pName1 is set to "yyy" and pName2 is "".
81726: **
81727: ** This routine sets the *ppUnqual pointer to point at the token (pName1 or
81728: ** pName2) that stores the unqualified table name.  The index of the
81729: ** database "xxx" is returned.
81730: */
81731: SQLITE_PRIVATE int sqlite3TwoPartName(
81732:   Parse *pParse,      /* Parsing and code generating context */
81733:   Token *pName1,      /* The "xxx" in the name "xxx.yyy" or "xxx" */
81734:   Token *pName2,      /* The "yyy" in the name "xxx.yyy" */
81735:   Token **pUnqual     /* Write the unqualified object name here */
81736: ){
81737:   int iDb;                    /* Database holding the object */
81738:   sqlite3 *db = pParse->db;
81739: 
81740:   if( ALWAYS(pName2!=0) && pName2->n>0 ){
81741:     if( db->init.busy ) {
81742:       sqlite3ErrorMsg(pParse, "corrupt database");
81743:       pParse->nErr++;
81744:       return -1;
81745:     }
81746:     *pUnqual = pName2;
81747:     iDb = sqlite3FindDb(db, pName1);
81748:     if( iDb<0 ){
81749:       sqlite3ErrorMsg(pParse, "unknown database %T", pName1);
81750:       pParse->nErr++;
81751:       return -1;
81752:     }
81753:   }else{
81754:     assert( db->init.iDb==0 || db->init.busy );
81755:     iDb = db->init.iDb;
81756:     *pUnqual = pName1;
81757:   }
81758:   return iDb;
81759: }
81760: 
81761: /*
81762: ** This routine is used to check if the UTF-8 string zName is a legal
81763: ** unqualified name for a new schema object (table, index, view or
81764: ** trigger). All names are legal except those that begin with the string
81765: ** "sqlite_" (in upper, lower or mixed case). This portion of the namespace
81766: ** is reserved for internal use.
81767: */
81768: SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *pParse, const char *zName){
81769:   if( !pParse->db->init.busy && pParse->nested==0 
81770:           && (pParse->db->flags & SQLITE_WriteSchema)==0
81771:           && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){
81772:     sqlite3ErrorMsg(pParse, "object name reserved for internal use: %s", zName);
81773:     return SQLITE_ERROR;
81774:   }
81775:   return SQLITE_OK;
81776: }
81777: 
81778: /*
81779: ** Begin constructing a new table representation in memory.  This is
81780: ** the first of several action routines that get called in response
81781: ** to a CREATE TABLE statement.  In particular, this routine is called
81782: ** after seeing tokens "CREATE" and "TABLE" and the table name. The isTemp
81783: ** flag is true if the table should be stored in the auxiliary database
81784: ** file instead of in the main database file.  This is normally the case
81785: ** when the "TEMP" or "TEMPORARY" keyword occurs in between
81786: ** CREATE and TABLE.
81787: **
81788: ** The new table record is initialized and put in pParse->pNewTable.
81789: ** As more of the CREATE TABLE statement is parsed, additional action
81790: ** routines will be called to add more information to this record.
81791: ** At the end of the CREATE TABLE statement, the sqlite3EndTable() routine
81792: ** is called to complete the construction of the new table record.
81793: */
81794: SQLITE_PRIVATE void sqlite3StartTable(
81795:   Parse *pParse,   /* Parser context */
81796:   Token *pName1,   /* First part of the name of the table or view */
81797:   Token *pName2,   /* Second part of the name of the table or view */
81798:   int isTemp,      /* True if this is a TEMP table */
81799:   int isView,      /* True if this is a VIEW */
81800:   int isVirtual,   /* True if this is a VIRTUAL table */
81801:   int noErr        /* Do nothing if table already exists */
81802: ){
81803:   Table *pTable;
81804:   char *zName = 0; /* The name of the new table */
81805:   sqlite3 *db = pParse->db;
81806:   Vdbe *v;
81807:   int iDb;         /* Database number to create the table in */
81808:   Token *pName;    /* Unqualified name of the table to create */
81809: 
81810:   /* The table or view name to create is passed to this routine via tokens
81811:   ** pName1 and pName2. If the table name was fully qualified, for example:
81812:   **
81813:   ** CREATE TABLE xxx.yyy (...);
81814:   ** 
81815:   ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
81816:   ** the table name is not fully qualified, i.e.:
81817:   **
81818:   ** CREATE TABLE yyy(...);
81819:   **
81820:   ** Then pName1 is set to "yyy" and pName2 is "".
81821:   **
81822:   ** The call below sets the pName pointer to point at the token (pName1 or
81823:   ** pName2) that stores the unqualified table name. The variable iDb is
81824:   ** set to the index of the database that the table or view is to be
81825:   ** created in.
81826:   */
81827:   iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
81828:   if( iDb<0 ) return;
81829:   if( !OMIT_TEMPDB && isTemp && pName2->n>0 && iDb!=1 ){
81830:     /* If creating a temp table, the name may not be qualified. Unless 
81831:     ** the database name is "temp" anyway.  */
81832:     sqlite3ErrorMsg(pParse, "temporary table name must be unqualified");
81833:     return;
81834:   }
81835:   if( !OMIT_TEMPDB && isTemp ) iDb = 1;
81836: 
81837:   pParse->sNameToken = *pName;
81838:   zName = sqlite3NameFromToken(db, pName);
81839:   if( zName==0 ) return;
81840:   if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
81841:     goto begin_table_error;
81842:   }
81843:   if( db->init.iDb==1 ) isTemp = 1;
81844: #ifndef SQLITE_OMIT_AUTHORIZATION
81845:   assert( (isTemp & 1)==isTemp );
81846:   {
81847:     int code;
81848:     char *zDb = db->aDb[iDb].zName;
81849:     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(isTemp), 0, zDb) ){
81850:       goto begin_table_error;
81851:     }
81852:     if( isView ){
81853:       if( !OMIT_TEMPDB && isTemp ){
81854:         code = SQLITE_CREATE_TEMP_VIEW;
81855:       }else{
81856:         code = SQLITE_CREATE_VIEW;
81857:       }
81858:     }else{
81859:       if( !OMIT_TEMPDB && isTemp ){
81860:         code = SQLITE_CREATE_TEMP_TABLE;
81861:       }else{
81862:         code = SQLITE_CREATE_TABLE;
81863:       }
81864:     }
81865:     if( !isVirtual && sqlite3AuthCheck(pParse, code, zName, 0, zDb) ){
81866:       goto begin_table_error;
81867:     }
81868:   }
81869: #endif
81870: 
81871:   /* Make sure the new table name does not collide with an existing
81872:   ** index or table name in the same database.  Issue an error message if
81873:   ** it does. The exception is if the statement being parsed was passed
81874:   ** to an sqlite3_declare_vtab() call. In that case only the column names
81875:   ** and types will be used, so there is no need to test for namespace
81876:   ** collisions.
81877:   */
81878:   if( !IN_DECLARE_VTAB ){
81879:     char *zDb = db->aDb[iDb].zName;
81880:     if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
81881:       goto begin_table_error;
81882:     }
81883:     pTable = sqlite3FindTable(db, zName, zDb);
81884:     if( pTable ){
81885:       if( !noErr ){
81886:         sqlite3ErrorMsg(pParse, "table %T already exists", pName);
81887:       }else{
81888:         assert( !db->init.busy );
81889:         sqlite3CodeVerifySchema(pParse, iDb);
81890:       }
81891:       goto begin_table_error;
81892:     }
81893:     if( sqlite3FindIndex(db, zName, zDb)!=0 ){
81894:       sqlite3ErrorMsg(pParse, "there is already an index named %s", zName);
81895:       goto begin_table_error;
81896:     }
81897:   }
81898: 
81899:   pTable = sqlite3DbMallocZero(db, sizeof(Table));
81900:   if( pTable==0 ){
81901:     db->mallocFailed = 1;
81902:     pParse->rc = SQLITE_NOMEM;
81903:     pParse->nErr++;
81904:     goto begin_table_error;
81905:   }
81906:   pTable->zName = zName;
81907:   pTable->iPKey = -1;
81908:   pTable->pSchema = db->aDb[iDb].pSchema;
81909:   pTable->nRef = 1;
81910:   pTable->nRowEst = 1000000;
81911:   assert( pParse->pNewTable==0 );
81912:   pParse->pNewTable = pTable;
81913: 
81914:   /* If this is the magic sqlite_sequence table used by autoincrement,
81915:   ** then record a pointer to this table in the main database structure
81916:   ** so that INSERT can find the table easily.
81917:   */
81918: #ifndef SQLITE_OMIT_AUTOINCREMENT
81919:   if( !pParse->nested && strcmp(zName, "sqlite_sequence")==0 ){
81920:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
81921:     pTable->pSchema->pSeqTab = pTable;
81922:   }
81923: #endif
81924: 
81925:   /* Begin generating the code that will insert the table record into
81926:   ** the SQLITE_MASTER table.  Note in particular that we must go ahead
81927:   ** and allocate the record number for the table entry now.  Before any
81928:   ** PRIMARY KEY or UNIQUE keywords are parsed.  Those keywords will cause
81929:   ** indices to be created and the table record must come before the 
81930:   ** indices.  Hence, the record number for the table must be allocated
81931:   ** now.
81932:   */
81933:   if( !db->init.busy && (v = sqlite3GetVdbe(pParse))!=0 ){
81934:     int j1;
81935:     int fileFormat;
81936:     int reg1, reg2, reg3;
81937:     sqlite3BeginWriteOperation(pParse, 0, iDb);
81938: 
81939: #ifndef SQLITE_OMIT_VIRTUALTABLE
81940:     if( isVirtual ){
81941:       sqlite3VdbeAddOp0(v, OP_VBegin);
81942:     }
81943: #endif
81944: 
81945:     /* If the file format and encoding in the database have not been set, 
81946:     ** set them now.
81947:     */
81948:     reg1 = pParse->regRowid = ++pParse->nMem;
81949:     reg2 = pParse->regRoot = ++pParse->nMem;
81950:     reg3 = ++pParse->nMem;
81951:     sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, reg3, BTREE_FILE_FORMAT);
81952:     sqlite3VdbeUsesBtree(v, iDb);
81953:     j1 = sqlite3VdbeAddOp1(v, OP_If, reg3);
81954:     fileFormat = (db->flags & SQLITE_LegacyFileFmt)!=0 ?
81955:                   1 : SQLITE_MAX_FILE_FORMAT;
81956:     sqlite3VdbeAddOp2(v, OP_Integer, fileFormat, reg3);
81957:     sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, reg3);
81958:     sqlite3VdbeAddOp2(v, OP_Integer, ENC(db), reg3);
81959:     sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_TEXT_ENCODING, reg3);
81960:     sqlite3VdbeJumpHere(v, j1);
81961: 
81962:     /* This just creates a place-holder record in the sqlite_master table.
81963:     ** The record created does not contain anything yet.  It will be replaced
81964:     ** by the real entry in code generated at sqlite3EndTable().
81965:     **
81966:     ** The rowid for the new entry is left in register pParse->regRowid.
81967:     ** The root page number of the new table is left in reg pParse->regRoot.
81968:     ** The rowid and root page number values are needed by the code that
81969:     ** sqlite3EndTable will generate.
81970:     */
81971: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
81972:     if( isView || isVirtual ){
81973:       sqlite3VdbeAddOp2(v, OP_Integer, 0, reg2);
81974:     }else
81975: #endif
81976:     {
81977:       sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2);
81978:     }
81979:     sqlite3OpenMasterTable(pParse, iDb);
81980:     sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1);
81981:     sqlite3VdbeAddOp2(v, OP_Null, 0, reg3);
81982:     sqlite3VdbeAddOp3(v, OP_Insert, 0, reg3, reg1);
81983:     sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
81984:     sqlite3VdbeAddOp0(v, OP_Close);
81985:   }
81986: 
81987:   /* Normal (non-error) return. */
81988:   return;
81989: 
81990:   /* If an error occurs, we jump here */
81991: begin_table_error:
81992:   sqlite3DbFree(db, zName);
81993:   return;
81994: }
81995: 
81996: /*
81997: ** This macro is used to compare two strings in a case-insensitive manner.
81998: ** It is slightly faster than calling sqlite3StrICmp() directly, but
81999: ** produces larger code.
82000: **
82001: ** WARNING: This macro is not compatible with the strcmp() family. It
82002: ** returns true if the two strings are equal, otherwise false.
82003: */
82004: #define STRICMP(x, y) (\
82005: sqlite3UpperToLower[*(unsigned char *)(x)]==   \
82006: sqlite3UpperToLower[*(unsigned char *)(y)]     \
82007: && sqlite3StrICmp((x)+1,(y)+1)==0 )
82008: 
82009: /*
82010: ** Add a new column to the table currently being constructed.
82011: **
82012: ** The parser calls this routine once for each column declaration
82013: ** in a CREATE TABLE statement.  sqlite3StartTable() gets called
82014: ** first to get things going.  Then this routine is called for each
82015: ** column.
82016: */
82017: SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName){
82018:   Table *p;
82019:   int i;
82020:   char *z;
82021:   Column *pCol;
82022:   sqlite3 *db = pParse->db;
82023:   if( (p = pParse->pNewTable)==0 ) return;
82024: #if SQLITE_MAX_COLUMN
82025:   if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){
82026:     sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName);
82027:     return;
82028:   }
82029: #endif
82030:   z = sqlite3NameFromToken(db, pName);
82031:   if( z==0 ) return;
82032:   for(i=0; i<p->nCol; i++){
82033:     if( STRICMP(z, p->aCol[i].zName) ){
82034:       sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
82035:       sqlite3DbFree(db, z);
82036:       return;
82037:     }
82038:   }
82039:   if( (p->nCol & 0x7)==0 ){
82040:     Column *aNew;
82041:     aNew = sqlite3DbRealloc(db,p->aCol,(p->nCol+8)*sizeof(p->aCol[0]));
82042:     if( aNew==0 ){
82043:       sqlite3DbFree(db, z);
82044:       return;
82045:     }
82046:     p->aCol = aNew;
82047:   }
82048:   pCol = &p->aCol[p->nCol];
82049:   memset(pCol, 0, sizeof(p->aCol[0]));
82050:   pCol->zName = z;
82051:  
82052:   /* If there is no type specified, columns have the default affinity
82053:   ** 'NONE'. If there is a type specified, then sqlite3AddColumnType() will
82054:   ** be called next to set pCol->affinity correctly.
82055:   */
82056:   pCol->affinity = SQLITE_AFF_NONE;
82057:   p->nCol++;
82058: }
82059: 
82060: /*
82061: ** This routine is called by the parser while in the middle of
82062: ** parsing a CREATE TABLE statement.  A "NOT NULL" constraint has
82063: ** been seen on a column.  This routine sets the notNull flag on
82064: ** the column currently under construction.
82065: */
82066: SQLITE_PRIVATE void sqlite3AddNotNull(Parse *pParse, int onError){
82067:   Table *p;
82068:   p = pParse->pNewTable;
82069:   if( p==0 || NEVER(p->nCol<1) ) return;
82070:   p->aCol[p->nCol-1].notNull = (u8)onError;
82071: }
82072: 
82073: /*
82074: ** Scan the column type name zType (length nType) and return the
82075: ** associated affinity type.
82076: **
82077: ** This routine does a case-independent search of zType for the 
82078: ** substrings in the following table. If one of the substrings is
82079: ** found, the corresponding affinity is returned. If zType contains
82080: ** more than one of the substrings, entries toward the top of 
82081: ** the table take priority. For example, if zType is 'BLOBINT', 
82082: ** SQLITE_AFF_INTEGER is returned.
82083: **
82084: ** Substring     | Affinity
82085: ** --------------------------------
82086: ** 'INT'         | SQLITE_AFF_INTEGER
82087: ** 'CHAR'        | SQLITE_AFF_TEXT
82088: ** 'CLOB'        | SQLITE_AFF_TEXT
82089: ** 'TEXT'        | SQLITE_AFF_TEXT
82090: ** 'BLOB'        | SQLITE_AFF_NONE
82091: ** 'REAL'        | SQLITE_AFF_REAL
82092: ** 'FLOA'        | SQLITE_AFF_REAL
82093: ** 'DOUB'        | SQLITE_AFF_REAL
82094: **
82095: ** If none of the substrings in the above table are found,
82096: ** SQLITE_AFF_NUMERIC is returned.
82097: */
82098: SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn){
82099:   u32 h = 0;
82100:   char aff = SQLITE_AFF_NUMERIC;
82101: 
82102:   if( zIn ) while( zIn[0] ){
82103:     h = (h<<8) + sqlite3UpperToLower[(*zIn)&0xff];
82104:     zIn++;
82105:     if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){             /* CHAR */
82106:       aff = SQLITE_AFF_TEXT; 
82107:     }else if( h==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){       /* CLOB */
82108:       aff = SQLITE_AFF_TEXT;
82109:     }else if( h==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){       /* TEXT */
82110:       aff = SQLITE_AFF_TEXT;
82111:     }else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b')          /* BLOB */
82112:         && (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){
82113:       aff = SQLITE_AFF_NONE;
82114: #ifndef SQLITE_OMIT_FLOATING_POINT
82115:     }else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l')          /* REAL */
82116:         && aff==SQLITE_AFF_NUMERIC ){
82117:       aff = SQLITE_AFF_REAL;
82118:     }else if( h==(('f'<<24)+('l'<<16)+('o'<<8)+'a')          /* FLOA */
82119:         && aff==SQLITE_AFF_NUMERIC ){
82120:       aff = SQLITE_AFF_REAL;
82121:     }else if( h==(('d'<<24)+('o'<<16)+('u'<<8)+'b')          /* DOUB */
82122:         && aff==SQLITE_AFF_NUMERIC ){
82123:       aff = SQLITE_AFF_REAL;
82124: #endif
82125:     }else if( (h&0x00FFFFFF)==(('i'<<16)+('n'<<8)+'t') ){    /* INT */
82126:       aff = SQLITE_AFF_INTEGER;
82127:       break;
82128:     }
82129:   }
82130: 
82131:   return aff;
82132: }
82133: 
82134: /*
82135: ** This routine is called by the parser while in the middle of
82136: ** parsing a CREATE TABLE statement.  The pFirst token is the first
82137: ** token in the sequence of tokens that describe the type of the
82138: ** column currently under construction.   pLast is the last token
82139: ** in the sequence.  Use this information to construct a string
82140: ** that contains the typename of the column and store that string
82141: ** in zType.
82142: */ 
82143: SQLITE_PRIVATE void sqlite3AddColumnType(Parse *pParse, Token *pType){
82144:   Table *p;
82145:   Column *pCol;
82146: 
82147:   p = pParse->pNewTable;
82148:   if( p==0 || NEVER(p->nCol<1) ) return;
82149:   pCol = &p->aCol[p->nCol-1];
82150:   assert( pCol->zType==0 );
82151:   pCol->zType = sqlite3NameFromToken(pParse->db, pType);
82152:   pCol->affinity = sqlite3AffinityType(pCol->zType);
82153: }
82154: 
82155: /*
82156: ** The expression is the default value for the most recently added column
82157: ** of the table currently under construction.
82158: **
82159: ** Default value expressions must be constant.  Raise an exception if this
82160: ** is not the case.
82161: **
82162: ** This routine is called by the parser while in the middle of
82163: ** parsing a CREATE TABLE statement.
82164: */
82165: SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){
82166:   Table *p;
82167:   Column *pCol;
82168:   sqlite3 *db = pParse->db;
82169:   p = pParse->pNewTable;
82170:   if( p!=0 ){
82171:     pCol = &(p->aCol[p->nCol-1]);
82172:     if( !sqlite3ExprIsConstantOrFunction(pSpan->pExpr) ){
82173:       sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant",
82174:           pCol->zName);
82175:     }else{
82176:       /* A copy of pExpr is used instead of the original, as pExpr contains
82177:       ** tokens that point to volatile memory. The 'span' of the expression
82178:       ** is required by pragma table_info.
82179:       */
82180:       sqlite3ExprDelete(db, pCol->pDflt);
82181:       pCol->pDflt = sqlite3ExprDup(db, pSpan->pExpr, EXPRDUP_REDUCE);
82182:       sqlite3DbFree(db, pCol->zDflt);
82183:       pCol->zDflt = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
82184:                                      (int)(pSpan->zEnd - pSpan->zStart));
82185:     }
82186:   }
82187:   sqlite3ExprDelete(db, pSpan->pExpr);
82188: }
82189: 
82190: /*
82191: ** Designate the PRIMARY KEY for the table.  pList is a list of names 
82192: ** of columns that form the primary key.  If pList is NULL, then the
82193: ** most recently added column of the table is the primary key.
82194: **
82195: ** A table can have at most one primary key.  If the table already has
82196: ** a primary key (and this is the second primary key) then create an
82197: ** error.
82198: **
82199: ** If the PRIMARY KEY is on a single column whose datatype is INTEGER,
82200: ** then we will try to use that column as the rowid.  Set the Table.iPKey
82201: ** field of the table under construction to be the index of the
82202: ** INTEGER PRIMARY KEY column.  Table.iPKey is set to -1 if there is
82203: ** no INTEGER PRIMARY KEY.
82204: **
82205: ** If the key is not an INTEGER PRIMARY KEY, then create a unique
82206: ** index for the key.  No index is created for INTEGER PRIMARY KEYs.
82207: */
82208: SQLITE_PRIVATE void sqlite3AddPrimaryKey(
82209:   Parse *pParse,    /* Parsing context */
82210:   ExprList *pList,  /* List of field names to be indexed */
82211:   int onError,      /* What to do with a uniqueness conflict */
82212:   int autoInc,      /* True if the AUTOINCREMENT keyword is present */
82213:   int sortOrder     /* SQLITE_SO_ASC or SQLITE_SO_DESC */
82214: ){
82215:   Table *pTab = pParse->pNewTable;
82216:   char *zType = 0;
82217:   int iCol = -1, i;
82218:   if( pTab==0 || IN_DECLARE_VTAB ) goto primary_key_exit;
82219:   if( pTab->tabFlags & TF_HasPrimaryKey ){
82220:     sqlite3ErrorMsg(pParse, 
82221:       "table \"%s\" has more than one primary key", pTab->zName);
82222:     goto primary_key_exit;
82223:   }
82224:   pTab->tabFlags |= TF_HasPrimaryKey;
82225:   if( pList==0 ){
82226:     iCol = pTab->nCol - 1;
82227:     pTab->aCol[iCol].isPrimKey = 1;
82228:   }else{
82229:     for(i=0; i<pList->nExpr; i++){
82230:       for(iCol=0; iCol<pTab->nCol; iCol++){
82231:         if( sqlite3StrICmp(pList->a[i].zName, pTab->aCol[iCol].zName)==0 ){
82232:           break;
82233:         }
82234:       }
82235:       if( iCol<pTab->nCol ){
82236:         pTab->aCol[iCol].isPrimKey = 1;
82237:       }
82238:     }
82239:     if( pList->nExpr>1 ) iCol = -1;
82240:   }
82241:   if( iCol>=0 && iCol<pTab->nCol ){
82242:     zType = pTab->aCol[iCol].zType;
82243:   }
82244:   if( zType && sqlite3StrICmp(zType, "INTEGER")==0
82245:         && sortOrder==SQLITE_SO_ASC ){
82246:     pTab->iPKey = iCol;
82247:     pTab->keyConf = (u8)onError;
82248:     assert( autoInc==0 || autoInc==1 );
82249:     pTab->tabFlags |= autoInc*TF_Autoincrement;
82250:   }else if( autoInc ){
82251: #ifndef SQLITE_OMIT_AUTOINCREMENT
82252:     sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an "
82253:        "INTEGER PRIMARY KEY");
82254: #endif
82255:   }else{
82256:     Index *p;
82257:     p = sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0, 0, sortOrder, 0);
82258:     if( p ){
82259:       p->autoIndex = 2;
82260:     }
82261:     pList = 0;
82262:   }
82263: 
82264: primary_key_exit:
82265:   sqlite3ExprListDelete(pParse->db, pList);
82266:   return;
82267: }
82268: 
82269: /*
82270: ** Add a new CHECK constraint to the table currently under construction.
82271: */
82272: SQLITE_PRIVATE void sqlite3AddCheckConstraint(
82273:   Parse *pParse,    /* Parsing context */
82274:   Expr *pCheckExpr  /* The check expression */
82275: ){
82276:   sqlite3 *db = pParse->db;
82277: #ifndef SQLITE_OMIT_CHECK
82278:   Table *pTab = pParse->pNewTable;
82279:   if( pTab && !IN_DECLARE_VTAB ){
82280:     pTab->pCheck = sqlite3ExprAnd(db, pTab->pCheck, pCheckExpr);
82281:   }else
82282: #endif
82283:   {
82284:     sqlite3ExprDelete(db, pCheckExpr);
82285:   }
82286: }
82287: 
82288: /*
82289: ** Set the collation function of the most recently parsed table column
82290: ** to the CollSeq given.
82291: */
82292: SQLITE_PRIVATE void sqlite3AddCollateType(Parse *pParse, Token *pToken){
82293:   Table *p;
82294:   int i;
82295:   char *zColl;              /* Dequoted name of collation sequence */
82296:   sqlite3 *db;
82297: 
82298:   if( (p = pParse->pNewTable)==0 ) return;
82299:   i = p->nCol-1;
82300:   db = pParse->db;
82301:   zColl = sqlite3NameFromToken(db, pToken);
82302:   if( !zColl ) return;
82303: 
82304:   if( sqlite3LocateCollSeq(pParse, zColl) ){
82305:     Index *pIdx;
82306:     p->aCol[i].zColl = zColl;
82307:   
82308:     /* If the column is declared as "<name> PRIMARY KEY COLLATE <type>",
82309:     ** then an index may have been created on this column before the
82310:     ** collation type was added. Correct this if it is the case.
82311:     */
82312:     for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){
82313:       assert( pIdx->nColumn==1 );
82314:       if( pIdx->aiColumn[0]==i ){
82315:         pIdx->azColl[0] = p->aCol[i].zColl;
82316:       }
82317:     }
82318:   }else{
82319:     sqlite3DbFree(db, zColl);
82320:   }
82321: }
82322: 
82323: /*
82324: ** This function returns the collation sequence for database native text
82325: ** encoding identified by the string zName, length nName.
82326: **
82327: ** If the requested collation sequence is not available, or not available
82328: ** in the database native encoding, the collation factory is invoked to
82329: ** request it. If the collation factory does not supply such a sequence,
82330: ** and the sequence is available in another text encoding, then that is
82331: ** returned instead.
82332: **
82333: ** If no versions of the requested collations sequence are available, or
82334: ** another error occurs, NULL is returned and an error message written into
82335: ** pParse.
82336: **
82337: ** This routine is a wrapper around sqlite3FindCollSeq().  This routine
82338: ** invokes the collation factory if the named collation cannot be found
82339: ** and generates an error message.
82340: **
82341: ** See also: sqlite3FindCollSeq(), sqlite3GetCollSeq()
82342: */
82343: SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){
82344:   sqlite3 *db = pParse->db;
82345:   u8 enc = ENC(db);
82346:   u8 initbusy = db->init.busy;
82347:   CollSeq *pColl;
82348: 
82349:   pColl = sqlite3FindCollSeq(db, enc, zName, initbusy);
82350:   if( !initbusy && (!pColl || !pColl->xCmp) ){
82351:     pColl = sqlite3GetCollSeq(db, enc, pColl, zName);
82352:     if( !pColl ){
82353:       sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
82354:     }
82355:   }
82356: 
82357:   return pColl;
82358: }
82359: 
82360: 
82361: /*
82362: ** Generate code that will increment the schema cookie.
82363: **
82364: ** The schema cookie is used to determine when the schema for the
82365: ** database changes.  After each schema change, the cookie value
82366: ** changes.  When a process first reads the schema it records the
82367: ** cookie.  Thereafter, whenever it goes to access the database,
82368: ** it checks the cookie to make sure the schema has not changed
82369: ** since it was last read.
82370: **
82371: ** This plan is not completely bullet-proof.  It is possible for
82372: ** the schema to change multiple times and for the cookie to be
82373: ** set back to prior value.  But schema changes are infrequent
82374: ** and the probability of hitting the same cookie value is only
82375: ** 1 chance in 2^32.  So we're safe enough.
82376: */
82377: SQLITE_PRIVATE void sqlite3ChangeCookie(Parse *pParse, int iDb){
82378:   int r1 = sqlite3GetTempReg(pParse);
82379:   sqlite3 *db = pParse->db;
82380:   Vdbe *v = pParse->pVdbe;
82381:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
82382:   sqlite3VdbeAddOp2(v, OP_Integer, db->aDb[iDb].pSchema->schema_cookie+1, r1);
82383:   sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_SCHEMA_VERSION, r1);
82384:   sqlite3ReleaseTempReg(pParse, r1);
82385: }
82386: 
82387: /*
82388: ** Measure the number of characters needed to output the given
82389: ** identifier.  The number returned includes any quotes used
82390: ** but does not include the null terminator.
82391: **
82392: ** The estimate is conservative.  It might be larger that what is
82393: ** really needed.
82394: */
82395: static int identLength(const char *z){
82396:   int n;
82397:   for(n=0; *z; n++, z++){
82398:     if( *z=='"' ){ n++; }
82399:   }
82400:   return n + 2;
82401: }
82402: 
82403: /*
82404: ** The first parameter is a pointer to an output buffer. The second 
82405: ** parameter is a pointer to an integer that contains the offset at
82406: ** which to write into the output buffer. This function copies the
82407: ** nul-terminated string pointed to by the third parameter, zSignedIdent,
82408: ** to the specified offset in the buffer and updates *pIdx to refer
82409: ** to the first byte after the last byte written before returning.
82410: ** 
82411: ** If the string zSignedIdent consists entirely of alpha-numeric
82412: ** characters, does not begin with a digit and is not an SQL keyword,
82413: ** then it is copied to the output buffer exactly as it is. Otherwise,
82414: ** it is quoted using double-quotes.
82415: */
82416: static void identPut(char *z, int *pIdx, char *zSignedIdent){
82417:   unsigned char *zIdent = (unsigned char*)zSignedIdent;
82418:   int i, j, needQuote;
82419:   i = *pIdx;
82420: 
82421:   for(j=0; zIdent[j]; j++){
82422:     if( !sqlite3Isalnum(zIdent[j]) && zIdent[j]!='_' ) break;
82423:   }
82424:   needQuote = sqlite3Isdigit(zIdent[0]) || sqlite3KeywordCode(zIdent, j)!=TK_ID;
82425:   if( !needQuote ){
82426:     needQuote = zIdent[j];
82427:   }
82428: 
82429:   if( needQuote ) z[i++] = '"';
82430:   for(j=0; zIdent[j]; j++){
82431:     z[i++] = zIdent[j];
82432:     if( zIdent[j]=='"' ) z[i++] = '"';
82433:   }
82434:   if( needQuote ) z[i++] = '"';
82435:   z[i] = 0;
82436:   *pIdx = i;
82437: }
82438: 
82439: /*
82440: ** Generate a CREATE TABLE statement appropriate for the given
82441: ** table.  Memory to hold the text of the statement is obtained
82442: ** from sqliteMalloc() and must be freed by the calling function.
82443: */
82444: static char *createTableStmt(sqlite3 *db, Table *p){
82445:   int i, k, n;
82446:   char *zStmt;
82447:   char *zSep, *zSep2, *zEnd;
82448:   Column *pCol;
82449:   n = 0;
82450:   for(pCol = p->aCol, i=0; i<p->nCol; i++, pCol++){
82451:     n += identLength(pCol->zName) + 5;
82452:   }
82453:   n += identLength(p->zName);
82454:   if( n<50 ){ 
82455:     zSep = "";
82456:     zSep2 = ",";
82457:     zEnd = ")";
82458:   }else{
82459:     zSep = "\n  ";
82460:     zSep2 = ",\n  ";
82461:     zEnd = "\n)";
82462:   }
82463:   n += 35 + 6*p->nCol;
82464:   zStmt = sqlite3DbMallocRaw(0, n);
82465:   if( zStmt==0 ){
82466:     db->mallocFailed = 1;
82467:     return 0;
82468:   }
82469:   sqlite3_snprintf(n, zStmt, "CREATE TABLE ");
82470:   k = sqlite3Strlen30(zStmt);
82471:   identPut(zStmt, &k, p->zName);
82472:   zStmt[k++] = '(';
82473:   for(pCol=p->aCol, i=0; i<p->nCol; i++, pCol++){
82474:     static const char * const azType[] = {
82475:         /* SQLITE_AFF_TEXT    */ " TEXT",
82476:         /* SQLITE_AFF_NONE    */ "",
82477:         /* SQLITE_AFF_NUMERIC */ " NUM",
82478:         /* SQLITE_AFF_INTEGER */ " INT",
82479:         /* SQLITE_AFF_REAL    */ " REAL"
82480:     };
82481:     int len;
82482:     const char *zType;
82483: 
82484:     sqlite3_snprintf(n-k, &zStmt[k], zSep);
82485:     k += sqlite3Strlen30(&zStmt[k]);
82486:     zSep = zSep2;
82487:     identPut(zStmt, &k, pCol->zName);
82488:     assert( pCol->affinity-SQLITE_AFF_TEXT >= 0 );
82489:     assert( pCol->affinity-SQLITE_AFF_TEXT < ArraySize(azType) );
82490:     testcase( pCol->affinity==SQLITE_AFF_TEXT );
82491:     testcase( pCol->affinity==SQLITE_AFF_NONE );
82492:     testcase( pCol->affinity==SQLITE_AFF_NUMERIC );
82493:     testcase( pCol->affinity==SQLITE_AFF_INTEGER );
82494:     testcase( pCol->affinity==SQLITE_AFF_REAL );
82495:     
82496:     zType = azType[pCol->affinity - SQLITE_AFF_TEXT];
82497:     len = sqlite3Strlen30(zType);
82498:     assert( pCol->affinity==SQLITE_AFF_NONE 
82499:             || pCol->affinity==sqlite3AffinityType(zType) );
82500:     memcpy(&zStmt[k], zType, len);
82501:     k += len;
82502:     assert( k<=n );
82503:   }
82504:   sqlite3_snprintf(n-k, &zStmt[k], "%s", zEnd);
82505:   return zStmt;
82506: }
82507: 
82508: /*
82509: ** This routine is called to report the final ")" that terminates
82510: ** a CREATE TABLE statement.
82511: **
82512: ** The table structure that other action routines have been building
82513: ** is added to the internal hash tables, assuming no errors have
82514: ** occurred.
82515: **
82516: ** An entry for the table is made in the master table on disk, unless
82517: ** this is a temporary table or db->init.busy==1.  When db->init.busy==1
82518: ** it means we are reading the sqlite_master table because we just
82519: ** connected to the database or because the sqlite_master table has
82520: ** recently changed, so the entry for this table already exists in
82521: ** the sqlite_master table.  We do not want to create it again.
82522: **
82523: ** If the pSelect argument is not NULL, it means that this routine
82524: ** was called to create a table generated from a 
82525: ** "CREATE TABLE ... AS SELECT ..." statement.  The column names of
82526: ** the new table will match the result set of the SELECT.
82527: */
82528: SQLITE_PRIVATE void sqlite3EndTable(
82529:   Parse *pParse,          /* Parse context */
82530:   Token *pCons,           /* The ',' token after the last column defn. */
82531:   Token *pEnd,            /* The final ')' token in the CREATE TABLE */
82532:   Select *pSelect         /* Select from a "CREATE ... AS SELECT" */
82533: ){
82534:   Table *p;
82535:   sqlite3 *db = pParse->db;
82536:   int iDb;
82537: 
82538:   if( (pEnd==0 && pSelect==0) || db->mallocFailed ){
82539:     return;
82540:   }
82541:   p = pParse->pNewTable;
82542:   if( p==0 ) return;
82543: 
82544:   assert( !db->init.busy || !pSelect );
82545: 
82546:   iDb = sqlite3SchemaToIndex(db, p->pSchema);
82547: 
82548: #ifndef SQLITE_OMIT_CHECK
82549:   /* Resolve names in all CHECK constraint expressions.
82550:   */
82551:   if( p->pCheck ){
82552:     SrcList sSrc;                   /* Fake SrcList for pParse->pNewTable */
82553:     NameContext sNC;                /* Name context for pParse->pNewTable */
82554: 
82555:     memset(&sNC, 0, sizeof(sNC));
82556:     memset(&sSrc, 0, sizeof(sSrc));
82557:     sSrc.nSrc = 1;
82558:     sSrc.a[0].zName = p->zName;
82559:     sSrc.a[0].pTab = p;
82560:     sSrc.a[0].iCursor = -1;
82561:     sNC.pParse = pParse;
82562:     sNC.pSrcList = &sSrc;
82563:     sNC.isCheck = 1;
82564:     if( sqlite3ResolveExprNames(&sNC, p->pCheck) ){
82565:       return;
82566:     }
82567:   }
82568: #endif /* !defined(SQLITE_OMIT_CHECK) */
82569: 
82570:   /* If the db->init.busy is 1 it means we are reading the SQL off the
82571:   ** "sqlite_master" or "sqlite_temp_master" table on the disk.
82572:   ** So do not write to the disk again.  Extract the root page number
82573:   ** for the table from the db->init.newTnum field.  (The page number
82574:   ** should have been put there by the sqliteOpenCb routine.)
82575:   */
82576:   if( db->init.busy ){
82577:     p->tnum = db->init.newTnum;
82578:   }
82579: 
82580:   /* If not initializing, then create a record for the new table
82581:   ** in the SQLITE_MASTER table of the database.
82582:   **
82583:   ** If this is a TEMPORARY table, write the entry into the auxiliary
82584:   ** file instead of into the main database file.
82585:   */
82586:   if( !db->init.busy ){
82587:     int n;
82588:     Vdbe *v;
82589:     char *zType;    /* "view" or "table" */
82590:     char *zType2;   /* "VIEW" or "TABLE" */
82591:     char *zStmt;    /* Text of the CREATE TABLE or CREATE VIEW statement */
82592: 
82593:     v = sqlite3GetVdbe(pParse);
82594:     if( NEVER(v==0) ) return;
82595: 
82596:     sqlite3VdbeAddOp1(v, OP_Close, 0);
82597: 
82598:     /* 
82599:     ** Initialize zType for the new view or table.
82600:     */
82601:     if( p->pSelect==0 ){
82602:       /* A regular table */
82603:       zType = "table";
82604:       zType2 = "TABLE";
82605: #ifndef SQLITE_OMIT_VIEW
82606:     }else{
82607:       /* A view */
82608:       zType = "view";
82609:       zType2 = "VIEW";
82610: #endif
82611:     }
82612: 
82613:     /* If this is a CREATE TABLE xx AS SELECT ..., execute the SELECT
82614:     ** statement to populate the new table. The root-page number for the
82615:     ** new table is in register pParse->regRoot.
82616:     **
82617:     ** Once the SELECT has been coded by sqlite3Select(), it is in a
82618:     ** suitable state to query for the column names and types to be used
82619:     ** by the new table.
82620:     **
82621:     ** A shared-cache write-lock is not required to write to the new table,
82622:     ** as a schema-lock must have already been obtained to create it. Since
82623:     ** a schema-lock excludes all other database users, the write-lock would
82624:     ** be redundant.
82625:     */
82626:     if( pSelect ){
82627:       SelectDest dest;
82628:       Table *pSelTab;
82629: 
82630:       assert(pParse->nTab==1);
82631:       sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb);
82632:       sqlite3VdbeChangeP5(v, 1);
82633:       pParse->nTab = 2;
82634:       sqlite3SelectDestInit(&dest, SRT_Table, 1);
82635:       sqlite3Select(pParse, pSelect, &dest);
82636:       sqlite3VdbeAddOp1(v, OP_Close, 1);
82637:       if( pParse->nErr==0 ){
82638:         pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect);
82639:         if( pSelTab==0 ) return;
82640:         assert( p->aCol==0 );
82641:         p->nCol = pSelTab->nCol;
82642:         p->aCol = pSelTab->aCol;
82643:         pSelTab->nCol = 0;
82644:         pSelTab->aCol = 0;
82645:         sqlite3DeleteTable(db, pSelTab);
82646:       }
82647:     }
82648: 
82649:     /* Compute the complete text of the CREATE statement */
82650:     if( pSelect ){
82651:       zStmt = createTableStmt(db, p);
82652:     }else{
82653:       n = (int)(pEnd->z - pParse->sNameToken.z) + 1;
82654:       zStmt = sqlite3MPrintf(db, 
82655:           "CREATE %s %.*s", zType2, n, pParse->sNameToken.z
82656:       );
82657:     }
82658: 
82659:     /* A slot for the record has already been allocated in the 
82660:     ** SQLITE_MASTER table.  We just need to update that slot with all
82661:     ** the information we've collected.
82662:     */
82663:     sqlite3NestedParse(pParse,
82664:       "UPDATE %Q.%s "
82665:          "SET type='%s', name=%Q, tbl_name=%Q, rootpage=#%d, sql=%Q "
82666:        "WHERE rowid=#%d",
82667:       db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
82668:       zType,
82669:       p->zName,
82670:       p->zName,
82671:       pParse->regRoot,
82672:       zStmt,
82673:       pParse->regRowid
82674:     );
82675:     sqlite3DbFree(db, zStmt);
82676:     sqlite3ChangeCookie(pParse, iDb);
82677: 
82678: #ifndef SQLITE_OMIT_AUTOINCREMENT
82679:     /* Check to see if we need to create an sqlite_sequence table for
82680:     ** keeping track of autoincrement keys.
82681:     */
82682:     if( p->tabFlags & TF_Autoincrement ){
82683:       Db *pDb = &db->aDb[iDb];
82684:       assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
82685:       if( pDb->pSchema->pSeqTab==0 ){
82686:         sqlite3NestedParse(pParse,
82687:           "CREATE TABLE %Q.sqlite_sequence(name,seq)",
82688:           pDb->zName
82689:         );
82690:       }
82691:     }
82692: #endif
82693: 
82694:     /* Reparse everything to update our internal data structures */
82695:     sqlite3VdbeAddParseSchemaOp(v, iDb,
82696:                sqlite3MPrintf(db, "tbl_name='%q'", p->zName));
82697:   }
82698: 
82699: 
82700:   /* Add the table to the in-memory representation of the database.
82701:   */
82702:   if( db->init.busy ){
82703:     Table *pOld;
82704:     Schema *pSchema = p->pSchema;
82705:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
82706:     pOld = sqlite3HashInsert(&pSchema->tblHash, p->zName,
82707:                              sqlite3Strlen30(p->zName),p);
82708:     if( pOld ){
82709:       assert( p==pOld );  /* Malloc must have failed inside HashInsert() */
82710:       db->mallocFailed = 1;
82711:       return;
82712:     }
82713:     pParse->pNewTable = 0;
82714:     db->nTable++;
82715:     db->flags |= SQLITE_InternChanges;
82716: 
82717: #ifndef SQLITE_OMIT_ALTERTABLE
82718:     if( !p->pSelect ){
82719:       const char *zName = (const char *)pParse->sNameToken.z;
82720:       int nName;
82721:       assert( !pSelect && pCons && pEnd );
82722:       if( pCons->z==0 ){
82723:         pCons = pEnd;
82724:       }
82725:       nName = (int)((const char *)pCons->z - zName);
82726:       p->addColOffset = 13 + sqlite3Utf8CharLen(zName, nName);
82727:     }
82728: #endif
82729:   }
82730: }
82731: 
82732: #ifndef SQLITE_OMIT_VIEW
82733: /*
82734: ** The parser calls this routine in order to create a new VIEW
82735: */
82736: SQLITE_PRIVATE void sqlite3CreateView(
82737:   Parse *pParse,     /* The parsing context */
82738:   Token *pBegin,     /* The CREATE token that begins the statement */
82739:   Token *pName1,     /* The token that holds the name of the view */
82740:   Token *pName2,     /* The token that holds the name of the view */
82741:   Select *pSelect,   /* A SELECT statement that will become the new view */
82742:   int isTemp,        /* TRUE for a TEMPORARY view */
82743:   int noErr          /* Suppress error messages if VIEW already exists */
82744: ){
82745:   Table *p;
82746:   int n;
82747:   const char *z;
82748:   Token sEnd;
82749:   DbFixer sFix;
82750:   Token *pName = 0;
82751:   int iDb;
82752:   sqlite3 *db = pParse->db;
82753: 
82754:   if( pParse->nVar>0 ){
82755:     sqlite3ErrorMsg(pParse, "parameters are not allowed in views");
82756:     sqlite3SelectDelete(db, pSelect);
82757:     return;
82758:   }
82759:   sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr);
82760:   p = pParse->pNewTable;
82761:   if( p==0 || pParse->nErr ){
82762:     sqlite3SelectDelete(db, pSelect);
82763:     return;
82764:   }
82765:   sqlite3TwoPartName(pParse, pName1, pName2, &pName);
82766:   iDb = sqlite3SchemaToIndex(db, p->pSchema);
82767:   if( sqlite3FixInit(&sFix, pParse, iDb, "view", pName)
82768:     && sqlite3FixSelect(&sFix, pSelect)
82769:   ){
82770:     sqlite3SelectDelete(db, pSelect);
82771:     return;
82772:   }
82773: 
82774:   /* Make a copy of the entire SELECT statement that defines the view.
82775:   ** This will force all the Expr.token.z values to be dynamically
82776:   ** allocated rather than point to the input string - which means that
82777:   ** they will persist after the current sqlite3_exec() call returns.
82778:   */
82779:   p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
82780:   sqlite3SelectDelete(db, pSelect);
82781:   if( db->mallocFailed ){
82782:     return;
82783:   }
82784:   if( !db->init.busy ){
82785:     sqlite3ViewGetColumnNames(pParse, p);
82786:   }
82787: 
82788:   /* Locate the end of the CREATE VIEW statement.  Make sEnd point to
82789:   ** the end.
82790:   */
82791:   sEnd = pParse->sLastToken;
82792:   if( ALWAYS(sEnd.z[0]!=0) && sEnd.z[0]!=';' ){
82793:     sEnd.z += sEnd.n;
82794:   }
82795:   sEnd.n = 0;
82796:   n = (int)(sEnd.z - pBegin->z);
82797:   z = pBegin->z;
82798:   while( ALWAYS(n>0) && sqlite3Isspace(z[n-1]) ){ n--; }
82799:   sEnd.z = &z[n-1];
82800:   sEnd.n = 1;
82801: 
82802:   /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */
82803:   sqlite3EndTable(pParse, 0, &sEnd, 0);
82804:   return;
82805: }
82806: #endif /* SQLITE_OMIT_VIEW */
82807: 
82808: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
82809: /*
82810: ** The Table structure pTable is really a VIEW.  Fill in the names of
82811: ** the columns of the view in the pTable structure.  Return the number
82812: ** of errors.  If an error is seen leave an error message in pParse->zErrMsg.
82813: */
82814: SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
82815:   Table *pSelTab;   /* A fake table from which we get the result set */
82816:   Select *pSel;     /* Copy of the SELECT that implements the view */
82817:   int nErr = 0;     /* Number of errors encountered */
82818:   int n;            /* Temporarily holds the number of cursors assigned */
82819:   sqlite3 *db = pParse->db;  /* Database connection for malloc errors */
82820:   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
82821: 
82822:   assert( pTable );
82823: 
82824: #ifndef SQLITE_OMIT_VIRTUALTABLE
82825:   if( sqlite3VtabCallConnect(pParse, pTable) ){
82826:     return SQLITE_ERROR;
82827:   }
82828:   if( IsVirtual(pTable) ) return 0;
82829: #endif
82830: 
82831: #ifndef SQLITE_OMIT_VIEW
82832:   /* A positive nCol means the columns names for this view are
82833:   ** already known.
82834:   */
82835:   if( pTable->nCol>0 ) return 0;
82836: 
82837:   /* A negative nCol is a special marker meaning that we are currently
82838:   ** trying to compute the column names.  If we enter this routine with
82839:   ** a negative nCol, it means two or more views form a loop, like this:
82840:   **
82841:   **     CREATE VIEW one AS SELECT * FROM two;
82842:   **     CREATE VIEW two AS SELECT * FROM one;
82843:   **
82844:   ** Actually, the error above is now caught prior to reaching this point.
82845:   ** But the following test is still important as it does come up
82846:   ** in the following:
82847:   ** 
82848:   **     CREATE TABLE main.ex1(a);
82849:   **     CREATE TEMP VIEW ex1 AS SELECT a FROM ex1;
82850:   **     SELECT * FROM temp.ex1;
82851:   */
82852:   if( pTable->nCol<0 ){
82853:     sqlite3ErrorMsg(pParse, "view %s is circularly defined", pTable->zName);
82854:     return 1;
82855:   }
82856:   assert( pTable->nCol>=0 );
82857: 
82858:   /* If we get this far, it means we need to compute the table names.
82859:   ** Note that the call to sqlite3ResultSetOfSelect() will expand any
82860:   ** "*" elements in the results set of the view and will assign cursors
82861:   ** to the elements of the FROM clause.  But we do not want these changes
82862:   ** to be permanent.  So the computation is done on a copy of the SELECT
82863:   ** statement that defines the view.
82864:   */
82865:   assert( pTable->pSelect );
82866:   pSel = sqlite3SelectDup(db, pTable->pSelect, 0);
82867:   if( pSel ){
82868:     u8 enableLookaside = db->lookaside.bEnabled;
82869:     n = pParse->nTab;
82870:     sqlite3SrcListAssignCursors(pParse, pSel->pSrc);
82871:     pTable->nCol = -1;
82872:     db->lookaside.bEnabled = 0;
82873: #ifndef SQLITE_OMIT_AUTHORIZATION
82874:     xAuth = db->xAuth;
82875:     db->xAuth = 0;
82876:     pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
82877:     db->xAuth = xAuth;
82878: #else
82879:     pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
82880: #endif
82881:     db->lookaside.bEnabled = enableLookaside;
82882:     pParse->nTab = n;
82883:     if( pSelTab ){
82884:       assert( pTable->aCol==0 );
82885:       pTable->nCol = pSelTab->nCol;
82886:       pTable->aCol = pSelTab->aCol;
82887:       pSelTab->nCol = 0;
82888:       pSelTab->aCol = 0;
82889:       sqlite3DeleteTable(db, pSelTab);
82890:       assert( sqlite3SchemaMutexHeld(db, 0, pTable->pSchema) );
82891:       pTable->pSchema->flags |= DB_UnresetViews;
82892:     }else{
82893:       pTable->nCol = 0;
82894:       nErr++;
82895:     }
82896:     sqlite3SelectDelete(db, pSel);
82897:   } else {
82898:     nErr++;
82899:   }
82900: #endif /* SQLITE_OMIT_VIEW */
82901:   return nErr;  
82902: }
82903: #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */
82904: 
82905: #ifndef SQLITE_OMIT_VIEW
82906: /*
82907: ** Clear the column names from every VIEW in database idx.
82908: */
82909: static void sqliteViewResetAll(sqlite3 *db, int idx){
82910:   HashElem *i;
82911:   assert( sqlite3SchemaMutexHeld(db, idx, 0) );
82912:   if( !DbHasProperty(db, idx, DB_UnresetViews) ) return;
82913:   for(i=sqliteHashFirst(&db->aDb[idx].pSchema->tblHash); i;i=sqliteHashNext(i)){
82914:     Table *pTab = sqliteHashData(i);
82915:     if( pTab->pSelect ){
82916:       sqliteDeleteColumnNames(db, pTab);
82917:       pTab->aCol = 0;
82918:       pTab->nCol = 0;
82919:     }
82920:   }
82921:   DbClearProperty(db, idx, DB_UnresetViews);
82922: }
82923: #else
82924: # define sqliteViewResetAll(A,B)
82925: #endif /* SQLITE_OMIT_VIEW */
82926: 
82927: /*
82928: ** This function is called by the VDBE to adjust the internal schema
82929: ** used by SQLite when the btree layer moves a table root page. The
82930: ** root-page of a table or index in database iDb has changed from iFrom
82931: ** to iTo.
82932: **
82933: ** Ticket #1728:  The symbol table might still contain information
82934: ** on tables and/or indices that are the process of being deleted.
82935: ** If you are unlucky, one of those deleted indices or tables might
82936: ** have the same rootpage number as the real table or index that is
82937: ** being moved.  So we cannot stop searching after the first match 
82938: ** because the first match might be for one of the deleted indices
82939: ** or tables and not the table/index that is actually being moved.
82940: ** We must continue looping until all tables and indices with
82941: ** rootpage==iFrom have been converted to have a rootpage of iTo
82942: ** in order to be certain that we got the right one.
82943: */
82944: #ifndef SQLITE_OMIT_AUTOVACUUM
82945: SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3 *db, int iDb, int iFrom, int iTo){
82946:   HashElem *pElem;
82947:   Hash *pHash;
82948:   Db *pDb;
82949: 
82950:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
82951:   pDb = &db->aDb[iDb];
82952:   pHash = &pDb->pSchema->tblHash;
82953:   for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
82954:     Table *pTab = sqliteHashData(pElem);
82955:     if( pTab->tnum==iFrom ){
82956:       pTab->tnum = iTo;
82957:     }
82958:   }
82959:   pHash = &pDb->pSchema->idxHash;
82960:   for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
82961:     Index *pIdx = sqliteHashData(pElem);
82962:     if( pIdx->tnum==iFrom ){
82963:       pIdx->tnum = iTo;
82964:     }
82965:   }
82966: }
82967: #endif
82968: 
82969: /*
82970: ** Write code to erase the table with root-page iTable from database iDb.
82971: ** Also write code to modify the sqlite_master table and internal schema
82972: ** if a root-page of another table is moved by the btree-layer whilst
82973: ** erasing iTable (this can happen with an auto-vacuum database).
82974: */ 
82975: static void destroyRootPage(Parse *pParse, int iTable, int iDb){
82976:   Vdbe *v = sqlite3GetVdbe(pParse);
82977:   int r1 = sqlite3GetTempReg(pParse);
82978:   sqlite3VdbeAddOp3(v, OP_Destroy, iTable, r1, iDb);
82979:   sqlite3MayAbort(pParse);
82980: #ifndef SQLITE_OMIT_AUTOVACUUM
82981:   /* OP_Destroy stores an in integer r1. If this integer
82982:   ** is non-zero, then it is the root page number of a table moved to
82983:   ** location iTable. The following code modifies the sqlite_master table to
82984:   ** reflect this.
82985:   **
82986:   ** The "#NNN" in the SQL is a special constant that means whatever value
82987:   ** is in register NNN.  See grammar rules associated with the TK_REGISTER
82988:   ** token for additional information.
82989:   */
82990:   sqlite3NestedParse(pParse, 
82991:      "UPDATE %Q.%s SET rootpage=%d WHERE #%d AND rootpage=#%d",
82992:      pParse->db->aDb[iDb].zName, SCHEMA_TABLE(iDb), iTable, r1, r1);
82993: #endif
82994:   sqlite3ReleaseTempReg(pParse, r1);
82995: }
82996: 
82997: /*
82998: ** Write VDBE code to erase table pTab and all associated indices on disk.
82999: ** Code to update the sqlite_master tables and internal schema definitions
83000: ** in case a root-page belonging to another table is moved by the btree layer
83001: ** is also added (this can happen with an auto-vacuum database).
83002: */
83003: static void destroyTable(Parse *pParse, Table *pTab){
83004: #ifdef SQLITE_OMIT_AUTOVACUUM
83005:   Index *pIdx;
83006:   int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
83007:   destroyRootPage(pParse, pTab->tnum, iDb);
83008:   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
83009:     destroyRootPage(pParse, pIdx->tnum, iDb);
83010:   }
83011: #else
83012:   /* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM
83013:   ** is not defined), then it is important to call OP_Destroy on the
83014:   ** table and index root-pages in order, starting with the numerically 
83015:   ** largest root-page number. This guarantees that none of the root-pages
83016:   ** to be destroyed is relocated by an earlier OP_Destroy. i.e. if the
83017:   ** following were coded:
83018:   **
83019:   ** OP_Destroy 4 0
83020:   ** ...
83021:   ** OP_Destroy 5 0
83022:   **
83023:   ** and root page 5 happened to be the largest root-page number in the
83024:   ** database, then root page 5 would be moved to page 4 by the 
83025:   ** "OP_Destroy 4 0" opcode. The subsequent "OP_Destroy 5 0" would hit
83026:   ** a free-list page.
83027:   */
83028:   int iTab = pTab->tnum;
83029:   int iDestroyed = 0;
83030: 
83031:   while( 1 ){
83032:     Index *pIdx;
83033:     int iLargest = 0;
83034: 
83035:     if( iDestroyed==0 || iTab<iDestroyed ){
83036:       iLargest = iTab;
83037:     }
83038:     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
83039:       int iIdx = pIdx->tnum;
83040:       assert( pIdx->pSchema==pTab->pSchema );
83041:       if( (iDestroyed==0 || (iIdx<iDestroyed)) && iIdx>iLargest ){
83042:         iLargest = iIdx;
83043:       }
83044:     }
83045:     if( iLargest==0 ){
83046:       return;
83047:     }else{
83048:       int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
83049:       destroyRootPage(pParse, iLargest, iDb);
83050:       iDestroyed = iLargest;
83051:     }
83052:   }
83053: #endif
83054: }
83055: 
83056: /*
83057: ** Remove entries from the sqlite_statN tables (for N in (1,2,3))
83058: ** after a DROP INDEX or DROP TABLE command.
83059: */
83060: static void sqlite3ClearStatTables(
83061:   Parse *pParse,         /* The parsing context */
83062:   int iDb,               /* The database number */
83063:   const char *zType,     /* "idx" or "tbl" */
83064:   const char *zName      /* Name of index or table */
83065: ){
83066:   int i;
83067:   const char *zDbName = pParse->db->aDb[iDb].zName;
83068:   for(i=1; i<=3; i++){
83069:     char zTab[24];
83070:     sqlite3_snprintf(sizeof(zTab),zTab,"sqlite_stat%d",i);
83071:     if( sqlite3FindTable(pParse->db, zTab, zDbName) ){
83072:       sqlite3NestedParse(pParse,
83073:         "DELETE FROM %Q.%s WHERE %s=%Q",
83074:         zDbName, zTab, zType, zName
83075:       );
83076:     }
83077:   }
83078: }
83079: 
83080: /*
83081: ** Generate code to drop a table.
83082: */
83083: SQLITE_PRIVATE void sqlite3CodeDropTable(Parse *pParse, Table *pTab, int iDb, int isView){
83084:   Vdbe *v;
83085:   sqlite3 *db = pParse->db;
83086:   Trigger *pTrigger;
83087:   Db *pDb = &db->aDb[iDb];
83088: 
83089:   v = sqlite3GetVdbe(pParse);
83090:   assert( v!=0 );
83091:   sqlite3BeginWriteOperation(pParse, 1, iDb);
83092: 
83093: #ifndef SQLITE_OMIT_VIRTUALTABLE
83094:   if( IsVirtual(pTab) ){
83095:     sqlite3VdbeAddOp0(v, OP_VBegin);
83096:   }
83097: #endif
83098: 
83099:   /* Drop all triggers associated with the table being dropped. Code
83100:   ** is generated to remove entries from sqlite_master and/or
83101:   ** sqlite_temp_master if required.
83102:   */
83103:   pTrigger = sqlite3TriggerList(pParse, pTab);
83104:   while( pTrigger ){
83105:     assert( pTrigger->pSchema==pTab->pSchema || 
83106:         pTrigger->pSchema==db->aDb[1].pSchema );
83107:     sqlite3DropTriggerPtr(pParse, pTrigger);
83108:     pTrigger = pTrigger->pNext;
83109:   }
83110: 
83111: #ifndef SQLITE_OMIT_AUTOINCREMENT
83112:   /* Remove any entries of the sqlite_sequence table associated with
83113:   ** the table being dropped. This is done before the table is dropped
83114:   ** at the btree level, in case the sqlite_sequence table needs to
83115:   ** move as a result of the drop (can happen in auto-vacuum mode).
83116:   */
83117:   if( pTab->tabFlags & TF_Autoincrement ){
83118:     sqlite3NestedParse(pParse,
83119:       "DELETE FROM %Q.sqlite_sequence WHERE name=%Q",
83120:       pDb->zName, pTab->zName
83121:     );
83122:   }
83123: #endif
83124: 
83125:   /* Drop all SQLITE_MASTER table and index entries that refer to the
83126:   ** table. The program name loops through the master table and deletes
83127:   ** every row that refers to a table of the same name as the one being
83128:   ** dropped. Triggers are handled seperately because a trigger can be
83129:   ** created in the temp database that refers to a table in another
83130:   ** database.
83131:   */
83132:   sqlite3NestedParse(pParse, 
83133:       "DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'",
83134:       pDb->zName, SCHEMA_TABLE(iDb), pTab->zName);
83135:   if( !isView && !IsVirtual(pTab) ){
83136:     destroyTable(pParse, pTab);
83137:   }
83138: 
83139:   /* Remove the table entry from SQLite's internal schema and modify
83140:   ** the schema cookie.
83141:   */
83142:   if( IsVirtual(pTab) ){
83143:     sqlite3VdbeAddOp4(v, OP_VDestroy, iDb, 0, 0, pTab->zName, 0);
83144:   }
83145:   sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0);
83146:   sqlite3ChangeCookie(pParse, iDb);
83147:   sqliteViewResetAll(db, iDb);
83148: }
83149: 
83150: /*
83151: ** This routine is called to do the work of a DROP TABLE statement.
83152: ** pName is the name of the table to be dropped.
83153: */
83154: SQLITE_PRIVATE void sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noErr){
83155:   Table *pTab;
83156:   Vdbe *v;
83157:   sqlite3 *db = pParse->db;
83158:   int iDb;
83159: 
83160:   if( db->mallocFailed ){
83161:     goto exit_drop_table;
83162:   }
83163:   assert( pParse->nErr==0 );
83164:   assert( pName->nSrc==1 );
83165:   if( noErr ) db->suppressErr++;
83166:   pTab = sqlite3LocateTable(pParse, isView, 
83167:                             pName->a[0].zName, pName->a[0].zDatabase);
83168:   if( noErr ) db->suppressErr--;
83169: 
83170:   if( pTab==0 ){
83171:     if( noErr ) sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
83172:     goto exit_drop_table;
83173:   }
83174:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
83175:   assert( iDb>=0 && iDb<db->nDb );
83176: 
83177:   /* If pTab is a virtual table, call ViewGetColumnNames() to ensure
83178:   ** it is initialized.
83179:   */
83180:   if( IsVirtual(pTab) && sqlite3ViewGetColumnNames(pParse, pTab) ){
83181:     goto exit_drop_table;
83182:   }
83183: #ifndef SQLITE_OMIT_AUTHORIZATION
83184:   {
83185:     int code;
83186:     const char *zTab = SCHEMA_TABLE(iDb);
83187:     const char *zDb = db->aDb[iDb].zName;
83188:     const char *zArg2 = 0;
83189:     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb)){
83190:       goto exit_drop_table;
83191:     }
83192:     if( isView ){
83193:       if( !OMIT_TEMPDB && iDb==1 ){
83194:         code = SQLITE_DROP_TEMP_VIEW;
83195:       }else{
83196:         code = SQLITE_DROP_VIEW;
83197:       }
83198: #ifndef SQLITE_OMIT_VIRTUALTABLE
83199:     }else if( IsVirtual(pTab) ){
83200:       code = SQLITE_DROP_VTABLE;
83201:       zArg2 = sqlite3GetVTable(db, pTab)->pMod->zName;
83202: #endif
83203:     }else{
83204:       if( !OMIT_TEMPDB && iDb==1 ){
83205:         code = SQLITE_DROP_TEMP_TABLE;
83206:       }else{
83207:         code = SQLITE_DROP_TABLE;
83208:       }
83209:     }
83210:     if( sqlite3AuthCheck(pParse, code, pTab->zName, zArg2, zDb) ){
83211:       goto exit_drop_table;
83212:     }
83213:     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb) ){
83214:       goto exit_drop_table;
83215:     }
83216:   }
83217: #endif
83218:   if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 
83219:     && sqlite3StrNICmp(pTab->zName, "sqlite_stat", 11)!=0 ){
83220:     sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName);
83221:     goto exit_drop_table;
83222:   }
83223: 
83224: #ifndef SQLITE_OMIT_VIEW
83225:   /* Ensure DROP TABLE is not used on a view, and DROP VIEW is not used
83226:   ** on a table.
83227:   */
83228:   if( isView && pTab->pSelect==0 ){
83229:     sqlite3ErrorMsg(pParse, "use DROP TABLE to delete table %s", pTab->zName);
83230:     goto exit_drop_table;
83231:   }
83232:   if( !isView && pTab->pSelect ){
83233:     sqlite3ErrorMsg(pParse, "use DROP VIEW to delete view %s", pTab->zName);
83234:     goto exit_drop_table;
83235:   }
83236: #endif
83237: 
83238:   /* Generate code to remove the table from the master table
83239:   ** on disk.
83240:   */
83241:   v = sqlite3GetVdbe(pParse);
83242:   if( v ){
83243:     sqlite3BeginWriteOperation(pParse, 1, iDb);
83244:     sqlite3ClearStatTables(pParse, iDb, "tbl", pTab->zName);
83245:     sqlite3FkDropTable(pParse, pName, pTab);
83246:     sqlite3CodeDropTable(pParse, pTab, iDb, isView);
83247:   }
83248: 
83249: exit_drop_table:
83250:   sqlite3SrcListDelete(db, pName);
83251: }
83252: 
83253: /*
83254: ** This routine is called to create a new foreign key on the table
83255: ** currently under construction.  pFromCol determines which columns
83256: ** in the current table point to the foreign key.  If pFromCol==0 then
83257: ** connect the key to the last column inserted.  pTo is the name of
83258: ** the table referred to.  pToCol is a list of tables in the other
83259: ** pTo table that the foreign key points to.  flags contains all
83260: ** information about the conflict resolution algorithms specified
83261: ** in the ON DELETE, ON UPDATE and ON INSERT clauses.
83262: **
83263: ** An FKey structure is created and added to the table currently
83264: ** under construction in the pParse->pNewTable field.
83265: **
83266: ** The foreign key is set for IMMEDIATE processing.  A subsequent call
83267: ** to sqlite3DeferForeignKey() might change this to DEFERRED.
83268: */
83269: SQLITE_PRIVATE void sqlite3CreateForeignKey(
83270:   Parse *pParse,       /* Parsing context */
83271:   ExprList *pFromCol,  /* Columns in this table that point to other table */
83272:   Token *pTo,          /* Name of the other table */
83273:   ExprList *pToCol,    /* Columns in the other table */
83274:   int flags            /* Conflict resolution algorithms. */
83275: ){
83276:   sqlite3 *db = pParse->db;
83277: #ifndef SQLITE_OMIT_FOREIGN_KEY
83278:   FKey *pFKey = 0;
83279:   FKey *pNextTo;
83280:   Table *p = pParse->pNewTable;
83281:   int nByte;
83282:   int i;
83283:   int nCol;
83284:   char *z;
83285: 
83286:   assert( pTo!=0 );
83287:   if( p==0 || IN_DECLARE_VTAB ) goto fk_end;
83288:   if( pFromCol==0 ){
83289:     int iCol = p->nCol-1;
83290:     if( NEVER(iCol<0) ) goto fk_end;
83291:     if( pToCol && pToCol->nExpr!=1 ){
83292:       sqlite3ErrorMsg(pParse, "foreign key on %s"
83293:          " should reference only one column of table %T",
83294:          p->aCol[iCol].zName, pTo);
83295:       goto fk_end;
83296:     }
83297:     nCol = 1;
83298:   }else if( pToCol && pToCol->nExpr!=pFromCol->nExpr ){
83299:     sqlite3ErrorMsg(pParse,
83300:         "number of columns in foreign key does not match the number of "
83301:         "columns in the referenced table");
83302:     goto fk_end;
83303:   }else{
83304:     nCol = pFromCol->nExpr;
83305:   }
83306:   nByte = sizeof(*pFKey) + (nCol-1)*sizeof(pFKey->aCol[0]) + pTo->n + 1;
83307:   if( pToCol ){
83308:     for(i=0; i<pToCol->nExpr; i++){
83309:       nByte += sqlite3Strlen30(pToCol->a[i].zName) + 1;
83310:     }
83311:   }
83312:   pFKey = sqlite3DbMallocZero(db, nByte );
83313:   if( pFKey==0 ){
83314:     goto fk_end;
83315:   }
83316:   pFKey->pFrom = p;
83317:   pFKey->pNextFrom = p->pFKey;
83318:   z = (char*)&pFKey->aCol[nCol];
83319:   pFKey->zTo = z;
83320:   memcpy(z, pTo->z, pTo->n);
83321:   z[pTo->n] = 0;
83322:   sqlite3Dequote(z);
83323:   z += pTo->n+1;
83324:   pFKey->nCol = nCol;
83325:   if( pFromCol==0 ){
83326:     pFKey->aCol[0].iFrom = p->nCol-1;
83327:   }else{
83328:     for(i=0; i<nCol; i++){
83329:       int j;
83330:       for(j=0; j<p->nCol; j++){
83331:         if( sqlite3StrICmp(p->aCol[j].zName, pFromCol->a[i].zName)==0 ){
83332:           pFKey->aCol[i].iFrom = j;
83333:           break;
83334:         }
83335:       }
83336:       if( j>=p->nCol ){
83337:         sqlite3ErrorMsg(pParse, 
83338:           "unknown column \"%s\" in foreign key definition", 
83339:           pFromCol->a[i].zName);
83340:         goto fk_end;
83341:       }
83342:     }
83343:   }
83344:   if( pToCol ){
83345:     for(i=0; i<nCol; i++){
83346:       int n = sqlite3Strlen30(pToCol->a[i].zName);
83347:       pFKey->aCol[i].zCol = z;
83348:       memcpy(z, pToCol->a[i].zName, n);
83349:       z[n] = 0;
83350:       z += n+1;
83351:     }
83352:   }
83353:   pFKey->isDeferred = 0;
83354:   pFKey->aAction[0] = (u8)(flags & 0xff);            /* ON DELETE action */
83355:   pFKey->aAction[1] = (u8)((flags >> 8 ) & 0xff);    /* ON UPDATE action */
83356: 
83357:   assert( sqlite3SchemaMutexHeld(db, 0, p->pSchema) );
83358:   pNextTo = (FKey *)sqlite3HashInsert(&p->pSchema->fkeyHash, 
83359:       pFKey->zTo, sqlite3Strlen30(pFKey->zTo), (void *)pFKey
83360:   );
83361:   if( pNextTo==pFKey ){
83362:     db->mallocFailed = 1;
83363:     goto fk_end;
83364:   }
83365:   if( pNextTo ){
83366:     assert( pNextTo->pPrevTo==0 );
83367:     pFKey->pNextTo = pNextTo;
83368:     pNextTo->pPrevTo = pFKey;
83369:   }
83370: 
83371:   /* Link the foreign key to the table as the last step.
83372:   */
83373:   p->pFKey = pFKey;
83374:   pFKey = 0;
83375: 
83376: fk_end:
83377:   sqlite3DbFree(db, pFKey);
83378: #endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
83379:   sqlite3ExprListDelete(db, pFromCol);
83380:   sqlite3ExprListDelete(db, pToCol);
83381: }
83382: 
83383: /*
83384: ** This routine is called when an INITIALLY IMMEDIATE or INITIALLY DEFERRED
83385: ** clause is seen as part of a foreign key definition.  The isDeferred
83386: ** parameter is 1 for INITIALLY DEFERRED and 0 for INITIALLY IMMEDIATE.
83387: ** The behavior of the most recently created foreign key is adjusted
83388: ** accordingly.
83389: */
83390: SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){
83391: #ifndef SQLITE_OMIT_FOREIGN_KEY
83392:   Table *pTab;
83393:   FKey *pFKey;
83394:   if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return;
83395:   assert( isDeferred==0 || isDeferred==1 ); /* EV: R-30323-21917 */
83396:   pFKey->isDeferred = (u8)isDeferred;
83397: #endif
83398: }
83399: 
83400: /*
83401: ** Generate code that will erase and refill index *pIdx.  This is
83402: ** used to initialize a newly created index or to recompute the
83403: ** content of an index in response to a REINDEX command.
83404: **
83405: ** if memRootPage is not negative, it means that the index is newly
83406: ** created.  The register specified by memRootPage contains the
83407: ** root page number of the index.  If memRootPage is negative, then
83408: ** the index already exists and must be cleared before being refilled and
83409: ** the root page number of the index is taken from pIndex->tnum.
83410: */
83411: static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
83412:   Table *pTab = pIndex->pTable;  /* The table that is indexed */
83413:   int iTab = pParse->nTab++;     /* Btree cursor used for pTab */
83414:   int iIdx = pParse->nTab++;     /* Btree cursor used for pIndex */
83415:   int iSorter;                   /* Cursor opened by OpenSorter (if in use) */
83416:   int addr1;                     /* Address of top of loop */
83417:   int addr2;                     /* Address to jump to for next iteration */
83418:   int tnum;                      /* Root page of index */
83419:   Vdbe *v;                       /* Generate code into this virtual machine */
83420:   KeyInfo *pKey;                 /* KeyInfo for index */
83421: #ifdef SQLITE_OMIT_MERGE_SORT
83422:   int regIdxKey;                 /* Registers containing the index key */
83423: #endif
83424:   int regRecord;                 /* Register holding assemblied index record */
83425:   sqlite3 *db = pParse->db;      /* The database connection */
83426:   int iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
83427: 
83428: #ifndef SQLITE_OMIT_AUTHORIZATION
83429:   if( sqlite3AuthCheck(pParse, SQLITE_REINDEX, pIndex->zName, 0,
83430:       db->aDb[iDb].zName ) ){
83431:     return;
83432:   }
83433: #endif
83434: 
83435:   /* Require a write-lock on the table to perform this operation */
83436:   sqlite3TableLock(pParse, iDb, pTab->tnum, 1, pTab->zName);
83437: 
83438:   v = sqlite3GetVdbe(pParse);
83439:   if( v==0 ) return;
83440:   if( memRootPage>=0 ){
83441:     tnum = memRootPage;
83442:   }else{
83443:     tnum = pIndex->tnum;
83444:     sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb);
83445:   }
83446:   pKey = sqlite3IndexKeyinfo(pParse, pIndex);
83447:   sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, tnum, iDb, 
83448:                     (char *)pKey, P4_KEYINFO_HANDOFF);
83449:   if( memRootPage>=0 ){
83450:     sqlite3VdbeChangeP5(v, 1);
83451:   }
83452: 
83453: #ifndef SQLITE_OMIT_MERGE_SORT
83454:   /* Open the sorter cursor if we are to use one. */
83455:   iSorter = pParse->nTab++;
83456:   sqlite3VdbeAddOp4(v, OP_SorterOpen, iSorter, 0, 0, (char*)pKey, P4_KEYINFO);
83457: #else
83458:   iSorter = iTab;
83459: #endif
83460: 
83461:   /* Open the table. Loop through all rows of the table, inserting index
83462:   ** records into the sorter. */
83463:   sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
83464:   addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0);
83465:   regRecord = sqlite3GetTempReg(pParse);
83466: 
83467: #ifndef SQLITE_OMIT_MERGE_SORT
83468:   sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1);
83469:   sqlite3VdbeAddOp2(v, OP_SorterInsert, iSorter, regRecord);
83470:   sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1);
83471:   sqlite3VdbeJumpHere(v, addr1);
83472:   addr1 = sqlite3VdbeAddOp2(v, OP_SorterSort, iSorter, 0);
83473:   if( pIndex->onError!=OE_None ){
83474:     int j2 = sqlite3VdbeCurrentAddr(v) + 3;
83475:     sqlite3VdbeAddOp2(v, OP_Goto, 0, j2);
83476:     addr2 = sqlite3VdbeCurrentAddr(v);
83477:     sqlite3VdbeAddOp3(v, OP_SorterCompare, iSorter, j2, regRecord);
83478:     sqlite3HaltConstraint(
83479:         pParse, OE_Abort, "indexed columns are not unique", P4_STATIC
83480:     );
83481:   }else{
83482:     addr2 = sqlite3VdbeCurrentAddr(v);
83483:   }
83484:   sqlite3VdbeAddOp2(v, OP_SorterData, iSorter, regRecord);
83485:   sqlite3VdbeAddOp3(v, OP_IdxInsert, iIdx, regRecord, 1);
83486:   sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
83487: #else
83488:   regIdxKey = sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1);
83489:   addr2 = addr1 + 1;
83490:   if( pIndex->onError!=OE_None ){
83491:     const int regRowid = regIdxKey + pIndex->nColumn;
83492:     const int j2 = sqlite3VdbeCurrentAddr(v) + 2;
83493:     void * const pRegKey = SQLITE_INT_TO_PTR(regIdxKey);
83494: 
83495:     /* The registers accessed by the OP_IsUnique opcode were allocated
83496:     ** using sqlite3GetTempRange() inside of the sqlite3GenerateIndexKey()
83497:     ** call above. Just before that function was freed they were released
83498:     ** (made available to the compiler for reuse) using 
83499:     ** sqlite3ReleaseTempRange(). So in some ways having the OP_IsUnique
83500:     ** opcode use the values stored within seems dangerous. However, since
83501:     ** we can be sure that no other temp registers have been allocated
83502:     ** since sqlite3ReleaseTempRange() was called, it is safe to do so.
83503:     */
83504:     sqlite3VdbeAddOp4(v, OP_IsUnique, iIdx, j2, regRowid, pRegKey, P4_INT32);
83505:     sqlite3HaltConstraint(
83506:         pParse, OE_Abort, "indexed columns are not unique", P4_STATIC);
83507:   }
83508:   sqlite3VdbeAddOp3(v, OP_IdxInsert, iIdx, regRecord, 0);
83509:   sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
83510: #endif
83511:   sqlite3ReleaseTempReg(pParse, regRecord);
83512:   sqlite3VdbeAddOp2(v, OP_SorterNext, iSorter, addr2);
83513:   sqlite3VdbeJumpHere(v, addr1);
83514: 
83515:   sqlite3VdbeAddOp1(v, OP_Close, iTab);
83516:   sqlite3VdbeAddOp1(v, OP_Close, iIdx);
83517:   sqlite3VdbeAddOp1(v, OP_Close, iSorter);
83518: }
83519: 
83520: /*
83521: ** Create a new index for an SQL table.  pName1.pName2 is the name of the index 
83522: ** and pTblList is the name of the table that is to be indexed.  Both will 
83523: ** be NULL for a primary key or an index that is created to satisfy a
83524: ** UNIQUE constraint.  If pTable and pIndex are NULL, use pParse->pNewTable
83525: ** as the table to be indexed.  pParse->pNewTable is a table that is
83526: ** currently being constructed by a CREATE TABLE statement.
83527: **
83528: ** pList is a list of columns to be indexed.  pList will be NULL if this
83529: ** is a primary key or unique-constraint on the most recent column added
83530: ** to the table currently under construction.  
83531: **
83532: ** If the index is created successfully, return a pointer to the new Index
83533: ** structure. This is used by sqlite3AddPrimaryKey() to mark the index
83534: ** as the tables primary key (Index.autoIndex==2).
83535: */
83536: SQLITE_PRIVATE Index *sqlite3CreateIndex(
83537:   Parse *pParse,     /* All information about this parse */
83538:   Token *pName1,     /* First part of index name. May be NULL */
83539:   Token *pName2,     /* Second part of index name. May be NULL */
83540:   SrcList *pTblName, /* Table to index. Use pParse->pNewTable if 0 */
83541:   ExprList *pList,   /* A list of columns to be indexed */
83542:   int onError,       /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
83543:   Token *pStart,     /* The CREATE token that begins this statement */
83544:   Token *pEnd,       /* The ")" that closes the CREATE INDEX statement */
83545:   int sortOrder,     /* Sort order of primary key when pList==NULL */
83546:   int ifNotExist     /* Omit error if index already exists */
83547: ){
83548:   Index *pRet = 0;     /* Pointer to return */
83549:   Table *pTab = 0;     /* Table to be indexed */
83550:   Index *pIndex = 0;   /* The index to be created */
83551:   char *zName = 0;     /* Name of the index */
83552:   int nName;           /* Number of characters in zName */
83553:   int i, j;
83554:   Token nullId;        /* Fake token for an empty ID list */
83555:   DbFixer sFix;        /* For assigning database names to pTable */
83556:   int sortOrderMask;   /* 1 to honor DESC in index.  0 to ignore. */
83557:   sqlite3 *db = pParse->db;
83558:   Db *pDb;             /* The specific table containing the indexed database */
83559:   int iDb;             /* Index of the database that is being written */
83560:   Token *pName = 0;    /* Unqualified name of the index to create */
83561:   struct ExprList_item *pListItem; /* For looping over pList */
83562:   int nCol;
83563:   int nExtra = 0;
83564:   char *zExtra;
83565: 
83566:   assert( pStart==0 || pEnd!=0 ); /* pEnd must be non-NULL if pStart is */
83567:   assert( pParse->nErr==0 );      /* Never called with prior errors */
83568:   if( db->mallocFailed || IN_DECLARE_VTAB ){
83569:     goto exit_create_index;
83570:   }
83571:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
83572:     goto exit_create_index;
83573:   }
83574: 
83575:   /*
83576:   ** Find the table that is to be indexed.  Return early if not found.
83577:   */
83578:   if( pTblName!=0 ){
83579: 
83580:     /* Use the two-part index name to determine the database 
83581:     ** to search for the table. 'Fix' the table name to this db
83582:     ** before looking up the table.
83583:     */
83584:     assert( pName1 && pName2 );
83585:     iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
83586:     if( iDb<0 ) goto exit_create_index;
83587:     assert( pName && pName->z );
83588: 
83589: #ifndef SQLITE_OMIT_TEMPDB
83590:     /* If the index name was unqualified, check if the the table
83591:     ** is a temp table. If so, set the database to 1. Do not do this
83592:     ** if initialising a database schema.
83593:     */
83594:     if( !db->init.busy ){
83595:       pTab = sqlite3SrcListLookup(pParse, pTblName);
83596:       if( pName2->n==0 && pTab && pTab->pSchema==db->aDb[1].pSchema ){
83597:         iDb = 1;
83598:       }
83599:     }
83600: #endif
83601: 
83602:     if( sqlite3FixInit(&sFix, pParse, iDb, "index", pName) &&
83603:         sqlite3FixSrcList(&sFix, pTblName)
83604:     ){
83605:       /* Because the parser constructs pTblName from a single identifier,
83606:       ** sqlite3FixSrcList can never fail. */
83607:       assert(0);
83608:     }
83609:     pTab = sqlite3LocateTable(pParse, 0, pTblName->a[0].zName, 
83610:         pTblName->a[0].zDatabase);
83611:     if( !pTab || db->mallocFailed ) goto exit_create_index;
83612:     assert( db->aDb[iDb].pSchema==pTab->pSchema );
83613:   }else{
83614:     assert( pName==0 );
83615:     assert( pStart==0 );
83616:     pTab = pParse->pNewTable;
83617:     if( !pTab ) goto exit_create_index;
83618:     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
83619:   }
83620:   pDb = &db->aDb[iDb];
83621: 
83622:   assert( pTab!=0 );
83623:   assert( pParse->nErr==0 );
83624:   if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 
83625:        && memcmp(&pTab->zName[7],"altertab_",9)!=0 ){
83626:     sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
83627:     goto exit_create_index;
83628:   }
83629: #ifndef SQLITE_OMIT_VIEW
83630:   if( pTab->pSelect ){
83631:     sqlite3ErrorMsg(pParse, "views may not be indexed");
83632:     goto exit_create_index;
83633:   }
83634: #endif
83635: #ifndef SQLITE_OMIT_VIRTUALTABLE
83636:   if( IsVirtual(pTab) ){
83637:     sqlite3ErrorMsg(pParse, "virtual tables may not be indexed");
83638:     goto exit_create_index;
83639:   }
83640: #endif
83641: 
83642:   /*
83643:   ** Find the name of the index.  Make sure there is not already another
83644:   ** index or table with the same name.  
83645:   **
83646:   ** Exception:  If we are reading the names of permanent indices from the
83647:   ** sqlite_master table (because some other process changed the schema) and
83648:   ** one of the index names collides with the name of a temporary table or
83649:   ** index, then we will continue to process this index.
83650:   **
83651:   ** If pName==0 it means that we are
83652:   ** dealing with a primary key or UNIQUE constraint.  We have to invent our
83653:   ** own name.
83654:   */
83655:   if( pName ){
83656:     zName = sqlite3NameFromToken(db, pName);
83657:     if( zName==0 ) goto exit_create_index;
83658:     assert( pName->z!=0 );
83659:     if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
83660:       goto exit_create_index;
83661:     }
83662:     if( !db->init.busy ){
83663:       if( sqlite3FindTable(db, zName, 0)!=0 ){
83664:         sqlite3ErrorMsg(pParse, "there is already a table named %s", zName);
83665:         goto exit_create_index;
83666:       }
83667:     }
83668:     if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){
83669:       if( !ifNotExist ){
83670:         sqlite3ErrorMsg(pParse, "index %s already exists", zName);
83671:       }else{
83672:         assert( !db->init.busy );
83673:         sqlite3CodeVerifySchema(pParse, iDb);
83674:       }
83675:       goto exit_create_index;
83676:     }
83677:   }else{
83678:     int n;
83679:     Index *pLoop;
83680:     for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){}
83681:     zName = sqlite3MPrintf(db, "sqlite_autoindex_%s_%d", pTab->zName, n);
83682:     if( zName==0 ){
83683:       goto exit_create_index;
83684:     }
83685:   }
83686: 
83687:   /* Check for authorization to create an index.
83688:   */
83689: #ifndef SQLITE_OMIT_AUTHORIZATION
83690:   {
83691:     const char *zDb = pDb->zName;
83692:     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iDb), 0, zDb) ){
83693:       goto exit_create_index;
83694:     }
83695:     i = SQLITE_CREATE_INDEX;
83696:     if( !OMIT_TEMPDB && iDb==1 ) i = SQLITE_CREATE_TEMP_INDEX;
83697:     if( sqlite3AuthCheck(pParse, i, zName, pTab->zName, zDb) ){
83698:       goto exit_create_index;
83699:     }
83700:   }
83701: #endif
83702: 
83703:   /* If pList==0, it means this routine was called to make a primary
83704:   ** key out of the last column added to the table under construction.
83705:   ** So create a fake list to simulate this.
83706:   */
83707:   if( pList==0 ){
83708:     nullId.z = pTab->aCol[pTab->nCol-1].zName;
83709:     nullId.n = sqlite3Strlen30((char*)nullId.z);
83710:     pList = sqlite3ExprListAppend(pParse, 0, 0);
83711:     if( pList==0 ) goto exit_create_index;
83712:     sqlite3ExprListSetName(pParse, pList, &nullId, 0);
83713:     pList->a[0].sortOrder = (u8)sortOrder;
83714:   }
83715: 
83716:   /* Figure out how many bytes of space are required to store explicitly
83717:   ** specified collation sequence names.
83718:   */
83719:   for(i=0; i<pList->nExpr; i++){
83720:     Expr *pExpr = pList->a[i].pExpr;
83721:     if( pExpr ){
83722:       CollSeq *pColl = pExpr->pColl;
83723:       /* Either pColl!=0 or there was an OOM failure.  But if an OOM
83724:       ** failure we have quit before reaching this point. */
83725:       if( ALWAYS(pColl) ){
83726:         nExtra += (1 + sqlite3Strlen30(pColl->zName));
83727:       }
83728:     }
83729:   }
83730: 
83731:   /* 
83732:   ** Allocate the index structure. 
83733:   */
83734:   nName = sqlite3Strlen30(zName);
83735:   nCol = pList->nExpr;
83736:   pIndex = sqlite3DbMallocZero(db, 
83737:       ROUND8(sizeof(Index)) +              /* Index structure  */
83738:       ROUND8(sizeof(tRowcnt)*(nCol+1)) +   /* Index.aiRowEst   */
83739:       sizeof(char *)*nCol +                /* Index.azColl     */
83740:       sizeof(int)*nCol +                   /* Index.aiColumn   */
83741:       sizeof(u8)*nCol +                    /* Index.aSortOrder */
83742:       nName + 1 +                          /* Index.zName      */
83743:       nExtra                               /* Collation sequence names */
83744:   );
83745:   if( db->mallocFailed ){
83746:     goto exit_create_index;
83747:   }
83748:   zExtra = (char*)pIndex;
83749:   pIndex->aiRowEst = (tRowcnt*)&zExtra[ROUND8(sizeof(Index))];
83750:   pIndex->azColl = (char**)
83751:      ((char*)pIndex->aiRowEst + ROUND8(sizeof(tRowcnt)*nCol+1));
83752:   assert( EIGHT_BYTE_ALIGNMENT(pIndex->aiRowEst) );
83753:   assert( EIGHT_BYTE_ALIGNMENT(pIndex->azColl) );
83754:   pIndex->aiColumn = (int *)(&pIndex->azColl[nCol]);
83755:   pIndex->aSortOrder = (u8 *)(&pIndex->aiColumn[nCol]);
83756:   pIndex->zName = (char *)(&pIndex->aSortOrder[nCol]);
83757:   zExtra = (char *)(&pIndex->zName[nName+1]);
83758:   memcpy(pIndex->zName, zName, nName+1);
83759:   pIndex->pTable = pTab;
83760:   pIndex->nColumn = pList->nExpr;
83761:   pIndex->onError = (u8)onError;
83762:   pIndex->autoIndex = (u8)(pName==0);
83763:   pIndex->pSchema = db->aDb[iDb].pSchema;
83764:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
83765: 
83766:   /* Check to see if we should honor DESC requests on index columns
83767:   */
83768:   if( pDb->pSchema->file_format>=4 ){
83769:     sortOrderMask = -1;   /* Honor DESC */
83770:   }else{
83771:     sortOrderMask = 0;    /* Ignore DESC */
83772:   }
83773: 
83774:   /* Scan the names of the columns of the table to be indexed and
83775:   ** load the column indices into the Index structure.  Report an error
83776:   ** if any column is not found.
83777:   **
83778:   ** TODO:  Add a test to make sure that the same column is not named
83779:   ** more than once within the same index.  Only the first instance of
83780:   ** the column will ever be used by the optimizer.  Note that using the
83781:   ** same column more than once cannot be an error because that would 
83782:   ** break backwards compatibility - it needs to be a warning.
83783:   */
83784:   for(i=0, pListItem=pList->a; i<pList->nExpr; i++, pListItem++){
83785:     const char *zColName = pListItem->zName;
83786:     Column *pTabCol;
83787:     int requestedSortOrder;
83788:     char *zColl;                   /* Collation sequence name */
83789: 
83790:     for(j=0, pTabCol=pTab->aCol; j<pTab->nCol; j++, pTabCol++){
83791:       if( sqlite3StrICmp(zColName, pTabCol->zName)==0 ) break;
83792:     }
83793:     if( j>=pTab->nCol ){
83794:       sqlite3ErrorMsg(pParse, "table %s has no column named %s",
83795:         pTab->zName, zColName);
83796:       pParse->checkSchema = 1;
83797:       goto exit_create_index;
83798:     }
83799:     pIndex->aiColumn[i] = j;
83800:     /* Justification of the ALWAYS(pListItem->pExpr->pColl):  Because of
83801:     ** the way the "idxlist" non-terminal is constructed by the parser,
83802:     ** if pListItem->pExpr is not null then either pListItem->pExpr->pColl
83803:     ** must exist or else there must have been an OOM error.  But if there
83804:     ** was an OOM error, we would never reach this point. */
83805:     if( pListItem->pExpr && ALWAYS(pListItem->pExpr->pColl) ){
83806:       int nColl;
83807:       zColl = pListItem->pExpr->pColl->zName;
83808:       nColl = sqlite3Strlen30(zColl) + 1;
83809:       assert( nExtra>=nColl );
83810:       memcpy(zExtra, zColl, nColl);
83811:       zColl = zExtra;
83812:       zExtra += nColl;
83813:       nExtra -= nColl;
83814:     }else{
83815:       zColl = pTab->aCol[j].zColl;
83816:       if( !zColl ){
83817:         zColl = db->pDfltColl->zName;
83818:       }
83819:     }
83820:     if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){
83821:       goto exit_create_index;
83822:     }
83823:     pIndex->azColl[i] = zColl;
83824:     requestedSortOrder = pListItem->sortOrder & sortOrderMask;
83825:     pIndex->aSortOrder[i] = (u8)requestedSortOrder;
83826:   }
83827:   sqlite3DefaultRowEst(pIndex);
83828: 
83829:   if( pTab==pParse->pNewTable ){
83830:     /* This routine has been called to create an automatic index as a
83831:     ** result of a PRIMARY KEY or UNIQUE clause on a column definition, or
83832:     ** a PRIMARY KEY or UNIQUE clause following the column definitions.
83833:     ** i.e. one of:
83834:     **
83835:     ** CREATE TABLE t(x PRIMARY KEY, y);
83836:     ** CREATE TABLE t(x, y, UNIQUE(x, y));
83837:     **
83838:     ** Either way, check to see if the table already has such an index. If
83839:     ** so, don't bother creating this one. This only applies to
83840:     ** automatically created indices. Users can do as they wish with
83841:     ** explicit indices.
83842:     **
83843:     ** Two UNIQUE or PRIMARY KEY constraints are considered equivalent
83844:     ** (and thus suppressing the second one) even if they have different
83845:     ** sort orders.
83846:     **
83847:     ** If there are different collating sequences or if the columns of
83848:     ** the constraint occur in different orders, then the constraints are
83849:     ** considered distinct and both result in separate indices.
83850:     */
83851:     Index *pIdx;
83852:     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
83853:       int k;
83854:       assert( pIdx->onError!=OE_None );
83855:       assert( pIdx->autoIndex );
83856:       assert( pIndex->onError!=OE_None );
83857: 
83858:       if( pIdx->nColumn!=pIndex->nColumn ) continue;
83859:       for(k=0; k<pIdx->nColumn; k++){
83860:         const char *z1;
83861:         const char *z2;
83862:         if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break;
83863:         z1 = pIdx->azColl[k];
83864:         z2 = pIndex->azColl[k];
83865:         if( z1!=z2 && sqlite3StrICmp(z1, z2) ) break;
83866:       }
83867:       if( k==pIdx->nColumn ){
83868:         if( pIdx->onError!=pIndex->onError ){
83869:           /* This constraint creates the same index as a previous
83870:           ** constraint specified somewhere in the CREATE TABLE statement.
83871:           ** However the ON CONFLICT clauses are different. If both this 
83872:           ** constraint and the previous equivalent constraint have explicit
83873:           ** ON CONFLICT clauses this is an error. Otherwise, use the
83874:           ** explicitly specified behaviour for the index.
83875:           */
83876:           if( !(pIdx->onError==OE_Default || pIndex->onError==OE_Default) ){
83877:             sqlite3ErrorMsg(pParse, 
83878:                 "conflicting ON CONFLICT clauses specified", 0);
83879:           }
83880:           if( pIdx->onError==OE_Default ){
83881:             pIdx->onError = pIndex->onError;
83882:           }
83883:         }
83884:         goto exit_create_index;
83885:       }
83886:     }
83887:   }
83888: 
83889:   /* Link the new Index structure to its table and to the other
83890:   ** in-memory database structures. 
83891:   */
83892:   if( db->init.busy ){
83893:     Index *p;
83894:     assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
83895:     p = sqlite3HashInsert(&pIndex->pSchema->idxHash, 
83896:                           pIndex->zName, sqlite3Strlen30(pIndex->zName),
83897:                           pIndex);
83898:     if( p ){
83899:       assert( p==pIndex );  /* Malloc must have failed */
83900:       db->mallocFailed = 1;
83901:       goto exit_create_index;
83902:     }
83903:     db->flags |= SQLITE_InternChanges;
83904:     if( pTblName!=0 ){
83905:       pIndex->tnum = db->init.newTnum;
83906:     }
83907:   }
83908: 
83909:   /* If the db->init.busy is 0 then create the index on disk.  This
83910:   ** involves writing the index into the master table and filling in the
83911:   ** index with the current table contents.
83912:   **
83913:   ** The db->init.busy is 0 when the user first enters a CREATE INDEX 
83914:   ** command.  db->init.busy is 1 when a database is opened and 
83915:   ** CREATE INDEX statements are read out of the master table.  In
83916:   ** the latter case the index already exists on disk, which is why
83917:   ** we don't want to recreate it.
83918:   **
83919:   ** If pTblName==0 it means this index is generated as a primary key
83920:   ** or UNIQUE constraint of a CREATE TABLE statement.  Since the table
83921:   ** has just been created, it contains no data and the index initialization
83922:   ** step can be skipped.
83923:   */
83924:   else{ /* if( db->init.busy==0 ) */
83925:     Vdbe *v;
83926:     char *zStmt;
83927:     int iMem = ++pParse->nMem;
83928: 
83929:     v = sqlite3GetVdbe(pParse);
83930:     if( v==0 ) goto exit_create_index;
83931: 
83932: 
83933:     /* Create the rootpage for the index
83934:     */
83935:     sqlite3BeginWriteOperation(pParse, 1, iDb);
83936:     sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem);
83937: 
83938:     /* Gather the complete text of the CREATE INDEX statement into
83939:     ** the zStmt variable
83940:     */
83941:     if( pStart ){
83942:       assert( pEnd!=0 );
83943:       /* A named index with an explicit CREATE INDEX statement */
83944:       zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s",
83945:         onError==OE_None ? "" : " UNIQUE",
83946:         (int)(pEnd->z - pName->z) + 1,
83947:         pName->z);
83948:     }else{
83949:       /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */
83950:       /* zStmt = sqlite3MPrintf(""); */
83951:       zStmt = 0;
83952:     }
83953: 
83954:     /* Add an entry in sqlite_master for this index
83955:     */
83956:     sqlite3NestedParse(pParse, 
83957:         "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);",
83958:         db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
83959:         pIndex->zName,
83960:         pTab->zName,
83961:         iMem,
83962:         zStmt
83963:     );
83964:     sqlite3DbFree(db, zStmt);
83965: 
83966:     /* Fill the index with data and reparse the schema. Code an OP_Expire
83967:     ** to invalidate all pre-compiled statements.
83968:     */
83969:     if( pTblName ){
83970:       sqlite3RefillIndex(pParse, pIndex, iMem);
83971:       sqlite3ChangeCookie(pParse, iDb);
83972:       sqlite3VdbeAddParseSchemaOp(v, iDb,
83973:          sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName));
83974:       sqlite3VdbeAddOp1(v, OP_Expire, 0);
83975:     }
83976:   }
83977: 
83978:   /* When adding an index to the list of indices for a table, make
83979:   ** sure all indices labeled OE_Replace come after all those labeled
83980:   ** OE_Ignore.  This is necessary for the correct constraint check
83981:   ** processing (in sqlite3GenerateConstraintChecks()) as part of
83982:   ** UPDATE and INSERT statements.  
83983:   */
83984:   if( db->init.busy || pTblName==0 ){
83985:     if( onError!=OE_Replace || pTab->pIndex==0
83986:          || pTab->pIndex->onError==OE_Replace){
83987:       pIndex->pNext = pTab->pIndex;
83988:       pTab->pIndex = pIndex;
83989:     }else{
83990:       Index *pOther = pTab->pIndex;
83991:       while( pOther->pNext && pOther->pNext->onError!=OE_Replace ){
83992:         pOther = pOther->pNext;
83993:       }
83994:       pIndex->pNext = pOther->pNext;
83995:       pOther->pNext = pIndex;
83996:     }
83997:     pRet = pIndex;
83998:     pIndex = 0;
83999:   }
84000: 
84001:   /* Clean up before exiting */
84002: exit_create_index:
84003:   if( pIndex ){
84004:     sqlite3DbFree(db, pIndex->zColAff);
84005:     sqlite3DbFree(db, pIndex);
84006:   }
84007:   sqlite3ExprListDelete(db, pList);
84008:   sqlite3SrcListDelete(db, pTblName);
84009:   sqlite3DbFree(db, zName);
84010:   return pRet;
84011: }
84012: 
84013: /*
84014: ** Fill the Index.aiRowEst[] array with default information - information
84015: ** to be used when we have not run the ANALYZE command.
84016: **
84017: ** aiRowEst[0] is suppose to contain the number of elements in the index.
84018: ** Since we do not know, guess 1 million.  aiRowEst[1] is an estimate of the
84019: ** number of rows in the table that match any particular value of the
84020: ** first column of the index.  aiRowEst[2] is an estimate of the number
84021: ** of rows that match any particular combiniation of the first 2 columns
84022: ** of the index.  And so forth.  It must always be the case that
84023: *
84024: **           aiRowEst[N]<=aiRowEst[N-1]
84025: **           aiRowEst[N]>=1
84026: **
84027: ** Apart from that, we have little to go on besides intuition as to
84028: ** how aiRowEst[] should be initialized.  The numbers generated here
84029: ** are based on typical values found in actual indices.
84030: */
84031: SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){
84032:   tRowcnt *a = pIdx->aiRowEst;
84033:   int i;
84034:   tRowcnt n;
84035:   assert( a!=0 );
84036:   a[0] = pIdx->pTable->nRowEst;
84037:   if( a[0]<10 ) a[0] = 10;
84038:   n = 10;
84039:   for(i=1; i<=pIdx->nColumn; i++){
84040:     a[i] = n;
84041:     if( n>5 ) n--;
84042:   }
84043:   if( pIdx->onError!=OE_None ){
84044:     a[pIdx->nColumn] = 1;
84045:   }
84046: }
84047: 
84048: /*
84049: ** This routine will drop an existing named index.  This routine
84050: ** implements the DROP INDEX statement.
84051: */
84052: SQLITE_PRIVATE void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){
84053:   Index *pIndex;
84054:   Vdbe *v;
84055:   sqlite3 *db = pParse->db;
84056:   int iDb;
84057: 
84058:   assert( pParse->nErr==0 );   /* Never called with prior errors */
84059:   if( db->mallocFailed ){
84060:     goto exit_drop_index;
84061:   }
84062:   assert( pName->nSrc==1 );
84063:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
84064:     goto exit_drop_index;
84065:   }
84066:   pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].zDatabase);
84067:   if( pIndex==0 ){
84068:     if( !ifExists ){
84069:       sqlite3ErrorMsg(pParse, "no such index: %S", pName, 0);
84070:     }else{
84071:       sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
84072:     }
84073:     pParse->checkSchema = 1;
84074:     goto exit_drop_index;
84075:   }
84076:   if( pIndex->autoIndex ){
84077:     sqlite3ErrorMsg(pParse, "index associated with UNIQUE "
84078:       "or PRIMARY KEY constraint cannot be dropped", 0);
84079:     goto exit_drop_index;
84080:   }
84081:   iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
84082: #ifndef SQLITE_OMIT_AUTHORIZATION
84083:   {
84084:     int code = SQLITE_DROP_INDEX;
84085:     Table *pTab = pIndex->pTable;
84086:     const char *zDb = db->aDb[iDb].zName;
84087:     const char *zTab = SCHEMA_TABLE(iDb);
84088:     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
84089:       goto exit_drop_index;
84090:     }
84091:     if( !OMIT_TEMPDB && iDb ) code = SQLITE_DROP_TEMP_INDEX;
84092:     if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){
84093:       goto exit_drop_index;
84094:     }
84095:   }
84096: #endif
84097: 
84098:   /* Generate code to remove the index and from the master table */
84099:   v = sqlite3GetVdbe(pParse);
84100:   if( v ){
84101:     sqlite3BeginWriteOperation(pParse, 1, iDb);
84102:     sqlite3NestedParse(pParse,
84103:        "DELETE FROM %Q.%s WHERE name=%Q AND type='index'",
84104:        db->aDb[iDb].zName, SCHEMA_TABLE(iDb), pIndex->zName
84105:     );
84106:     sqlite3ClearStatTables(pParse, iDb, "idx", pIndex->zName);
84107:     sqlite3ChangeCookie(pParse, iDb);
84108:     destroyRootPage(pParse, pIndex->tnum, iDb);
84109:     sqlite3VdbeAddOp4(v, OP_DropIndex, iDb, 0, 0, pIndex->zName, 0);
84110:   }
84111: 
84112: exit_drop_index:
84113:   sqlite3SrcListDelete(db, pName);
84114: }
84115: 
84116: /*
84117: ** pArray is a pointer to an array of objects.  Each object in the
84118: ** array is szEntry bytes in size.  This routine allocates a new
84119: ** object on the end of the array.
84120: **
84121: ** *pnEntry is the number of entries already in use.  *pnAlloc is
84122: ** the previously allocated size of the array.  initSize is the
84123: ** suggested initial array size allocation.
84124: **
84125: ** The index of the new entry is returned in *pIdx.
84126: **
84127: ** This routine returns a pointer to the array of objects.  This
84128: ** might be the same as the pArray parameter or it might be a different
84129: ** pointer if the array was resized.
84130: */
84131: SQLITE_PRIVATE void *sqlite3ArrayAllocate(
84132:   sqlite3 *db,      /* Connection to notify of malloc failures */
84133:   void *pArray,     /* Array of objects.  Might be reallocated */
84134:   int szEntry,      /* Size of each object in the array */
84135:   int initSize,     /* Suggested initial allocation, in elements */
84136:   int *pnEntry,     /* Number of objects currently in use */
84137:   int *pnAlloc,     /* Current size of the allocation, in elements */
84138:   int *pIdx         /* Write the index of a new slot here */
84139: ){
84140:   char *z;
84141:   if( *pnEntry >= *pnAlloc ){
84142:     void *pNew;
84143:     int newSize;
84144:     newSize = (*pnAlloc)*2 + initSize;
84145:     pNew = sqlite3DbRealloc(db, pArray, newSize*szEntry);
84146:     if( pNew==0 ){
84147:       *pIdx = -1;
84148:       return pArray;
84149:     }
84150:     *pnAlloc = sqlite3DbMallocSize(db, pNew)/szEntry;
84151:     pArray = pNew;
84152:   }
84153:   z = (char*)pArray;
84154:   memset(&z[*pnEntry * szEntry], 0, szEntry);
84155:   *pIdx = *pnEntry;
84156:   ++*pnEntry;
84157:   return pArray;
84158: }
84159: 
84160: /*
84161: ** Append a new element to the given IdList.  Create a new IdList if
84162: ** need be.
84163: **
84164: ** A new IdList is returned, or NULL if malloc() fails.
84165: */
84166: SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, Token *pToken){
84167:   int i;
84168:   if( pList==0 ){
84169:     pList = sqlite3DbMallocZero(db, sizeof(IdList) );
84170:     if( pList==0 ) return 0;
84171:     pList->nAlloc = 0;
84172:   }
84173:   pList->a = sqlite3ArrayAllocate(
84174:       db,
84175:       pList->a,
84176:       sizeof(pList->a[0]),
84177:       5,
84178:       &pList->nId,
84179:       &pList->nAlloc,
84180:       &i
84181:   );
84182:   if( i<0 ){
84183:     sqlite3IdListDelete(db, pList);
84184:     return 0;
84185:   }
84186:   pList->a[i].zName = sqlite3NameFromToken(db, pToken);
84187:   return pList;
84188: }
84189: 
84190: /*
84191: ** Delete an IdList.
84192: */
84193: SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){
84194:   int i;
84195:   if( pList==0 ) return;
84196:   for(i=0; i<pList->nId; i++){
84197:     sqlite3DbFree(db, pList->a[i].zName);
84198:   }
84199:   sqlite3DbFree(db, pList->a);
84200:   sqlite3DbFree(db, pList);
84201: }
84202: 
84203: /*
84204: ** Return the index in pList of the identifier named zId.  Return -1
84205: ** if not found.
84206: */
84207: SQLITE_PRIVATE int sqlite3IdListIndex(IdList *pList, const char *zName){
84208:   int i;
84209:   if( pList==0 ) return -1;
84210:   for(i=0; i<pList->nId; i++){
84211:     if( sqlite3StrICmp(pList->a[i].zName, zName)==0 ) return i;
84212:   }
84213:   return -1;
84214: }
84215: 
84216: /*
84217: ** Expand the space allocated for the given SrcList object by
84218: ** creating nExtra new slots beginning at iStart.  iStart is zero based.
84219: ** New slots are zeroed.
84220: **
84221: ** For example, suppose a SrcList initially contains two entries: A,B.
84222: ** To append 3 new entries onto the end, do this:
84223: **
84224: **    sqlite3SrcListEnlarge(db, pSrclist, 3, 2);
84225: **
84226: ** After the call above it would contain:  A, B, nil, nil, nil.
84227: ** If the iStart argument had been 1 instead of 2, then the result
84228: ** would have been:  A, nil, nil, nil, B.  To prepend the new slots,
84229: ** the iStart value would be 0.  The result then would
84230: ** be: nil, nil, nil, A, B.
84231: **
84232: ** If a memory allocation fails the SrcList is unchanged.  The
84233: ** db->mallocFailed flag will be set to true.
84234: */
84235: SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(
84236:   sqlite3 *db,       /* Database connection to notify of OOM errors */
84237:   SrcList *pSrc,     /* The SrcList to be enlarged */
84238:   int nExtra,        /* Number of new slots to add to pSrc->a[] */
84239:   int iStart         /* Index in pSrc->a[] of first new slot */
84240: ){
84241:   int i;
84242: 
84243:   /* Sanity checking on calling parameters */
84244:   assert( iStart>=0 );
84245:   assert( nExtra>=1 );
84246:   assert( pSrc!=0 );
84247:   assert( iStart<=pSrc->nSrc );
84248: 
84249:   /* Allocate additional space if needed */
84250:   if( pSrc->nSrc+nExtra>pSrc->nAlloc ){
84251:     SrcList *pNew;
84252:     int nAlloc = pSrc->nSrc+nExtra;
84253:     int nGot;
84254:     pNew = sqlite3DbRealloc(db, pSrc,
84255:                sizeof(*pSrc) + (nAlloc-1)*sizeof(pSrc->a[0]) );
84256:     if( pNew==0 ){
84257:       assert( db->mallocFailed );
84258:       return pSrc;
84259:     }
84260:     pSrc = pNew;
84261:     nGot = (sqlite3DbMallocSize(db, pNew) - sizeof(*pSrc))/sizeof(pSrc->a[0])+1;
84262:     pSrc->nAlloc = (u16)nGot;
84263:   }
84264: 
84265:   /* Move existing slots that come after the newly inserted slots
84266:   ** out of the way */
84267:   for(i=pSrc->nSrc-1; i>=iStart; i--){
84268:     pSrc->a[i+nExtra] = pSrc->a[i];
84269:   }
84270:   pSrc->nSrc += (i16)nExtra;
84271: 
84272:   /* Zero the newly allocated slots */
84273:   memset(&pSrc->a[iStart], 0, sizeof(pSrc->a[0])*nExtra);
84274:   for(i=iStart; i<iStart+nExtra; i++){
84275:     pSrc->a[i].iCursor = -1;
84276:   }
84277: 
84278:   /* Return a pointer to the enlarged SrcList */
84279:   return pSrc;
84280: }
84281: 
84282: 
84283: /*
84284: ** Append a new table name to the given SrcList.  Create a new SrcList if
84285: ** need be.  A new entry is created in the SrcList even if pTable is NULL.
84286: **
84287: ** A SrcList is returned, or NULL if there is an OOM error.  The returned
84288: ** SrcList might be the same as the SrcList that was input or it might be
84289: ** a new one.  If an OOM error does occurs, then the prior value of pList
84290: ** that is input to this routine is automatically freed.
84291: **
84292: ** If pDatabase is not null, it means that the table has an optional
84293: ** database name prefix.  Like this:  "database.table".  The pDatabase
84294: ** points to the table name and the pTable points to the database name.
84295: ** The SrcList.a[].zName field is filled with the table name which might
84296: ** come from pTable (if pDatabase is NULL) or from pDatabase.  
84297: ** SrcList.a[].zDatabase is filled with the database name from pTable,
84298: ** or with NULL if no database is specified.
84299: **
84300: ** In other words, if call like this:
84301: **
84302: **         sqlite3SrcListAppend(D,A,B,0);
84303: **
84304: ** Then B is a table name and the database name is unspecified.  If called
84305: ** like this:
84306: **
84307: **         sqlite3SrcListAppend(D,A,B,C);
84308: **
84309: ** Then C is the table name and B is the database name.  If C is defined
84310: ** then so is B.  In other words, we never have a case where:
84311: **
84312: **         sqlite3SrcListAppend(D,A,0,C);
84313: **
84314: ** Both pTable and pDatabase are assumed to be quoted.  They are dequoted
84315: ** before being added to the SrcList.
84316: */
84317: SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(
84318:   sqlite3 *db,        /* Connection to notify of malloc failures */
84319:   SrcList *pList,     /* Append to this SrcList. NULL creates a new SrcList */
84320:   Token *pTable,      /* Table to append */
84321:   Token *pDatabase    /* Database of the table */
84322: ){
84323:   struct SrcList_item *pItem;
84324:   assert( pDatabase==0 || pTable!=0 );  /* Cannot have C without B */
84325:   if( pList==0 ){
84326:     pList = sqlite3DbMallocZero(db, sizeof(SrcList) );
84327:     if( pList==0 ) return 0;
84328:     pList->nAlloc = 1;
84329:   }
84330:   pList = sqlite3SrcListEnlarge(db, pList, 1, pList->nSrc);
84331:   if( db->mallocFailed ){
84332:     sqlite3SrcListDelete(db, pList);
84333:     return 0;
84334:   }
84335:   pItem = &pList->a[pList->nSrc-1];
84336:   if( pDatabase && pDatabase->z==0 ){
84337:     pDatabase = 0;
84338:   }
84339:   if( pDatabase ){
84340:     Token *pTemp = pDatabase;
84341:     pDatabase = pTable;
84342:     pTable = pTemp;
84343:   }
84344:   pItem->zName = sqlite3NameFromToken(db, pTable);
84345:   pItem->zDatabase = sqlite3NameFromToken(db, pDatabase);
84346:   return pList;
84347: }
84348: 
84349: /*
84350: ** Assign VdbeCursor index numbers to all tables in a SrcList
84351: */
84352: SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){
84353:   int i;
84354:   struct SrcList_item *pItem;
84355:   assert(pList || pParse->db->mallocFailed );
84356:   if( pList ){
84357:     for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
84358:       if( pItem->iCursor>=0 ) break;
84359:       pItem->iCursor = pParse->nTab++;
84360:       if( pItem->pSelect ){
84361:         sqlite3SrcListAssignCursors(pParse, pItem->pSelect->pSrc);
84362:       }
84363:     }
84364:   }
84365: }
84366: 
84367: /*
84368: ** Delete an entire SrcList including all its substructure.
84369: */
84370: SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
84371:   int i;
84372:   struct SrcList_item *pItem;
84373:   if( pList==0 ) return;
84374:   for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
84375:     sqlite3DbFree(db, pItem->zDatabase);
84376:     sqlite3DbFree(db, pItem->zName);
84377:     sqlite3DbFree(db, pItem->zAlias);
84378:     sqlite3DbFree(db, pItem->zIndex);
84379:     sqlite3DeleteTable(db, pItem->pTab);
84380:     sqlite3SelectDelete(db, pItem->pSelect);
84381:     sqlite3ExprDelete(db, pItem->pOn);
84382:     sqlite3IdListDelete(db, pItem->pUsing);
84383:   }
84384:   sqlite3DbFree(db, pList);
84385: }
84386: 
84387: /*
84388: ** This routine is called by the parser to add a new term to the
84389: ** end of a growing FROM clause.  The "p" parameter is the part of
84390: ** the FROM clause that has already been constructed.  "p" is NULL
84391: ** if this is the first term of the FROM clause.  pTable and pDatabase
84392: ** are the name of the table and database named in the FROM clause term.
84393: ** pDatabase is NULL if the database name qualifier is missing - the
84394: ** usual case.  If the term has a alias, then pAlias points to the
84395: ** alias token.  If the term is a subquery, then pSubquery is the
84396: ** SELECT statement that the subquery encodes.  The pTable and
84397: ** pDatabase parameters are NULL for subqueries.  The pOn and pUsing
84398: ** parameters are the content of the ON and USING clauses.
84399: **
84400: ** Return a new SrcList which encodes is the FROM with the new
84401: ** term added.
84402: */
84403: SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(
84404:   Parse *pParse,          /* Parsing context */
84405:   SrcList *p,             /* The left part of the FROM clause already seen */
84406:   Token *pTable,          /* Name of the table to add to the FROM clause */
84407:   Token *pDatabase,       /* Name of the database containing pTable */
84408:   Token *pAlias,          /* The right-hand side of the AS subexpression */
84409:   Select *pSubquery,      /* A subquery used in place of a table name */
84410:   Expr *pOn,              /* The ON clause of a join */
84411:   IdList *pUsing          /* The USING clause of a join */
84412: ){
84413:   struct SrcList_item *pItem;
84414:   sqlite3 *db = pParse->db;
84415:   if( !p && (pOn || pUsing) ){
84416:     sqlite3ErrorMsg(pParse, "a JOIN clause is required before %s", 
84417:       (pOn ? "ON" : "USING")
84418:     );
84419:     goto append_from_error;
84420:   }
84421:   p = sqlite3SrcListAppend(db, p, pTable, pDatabase);
84422:   if( p==0 || NEVER(p->nSrc==0) ){
84423:     goto append_from_error;
84424:   }
84425:   pItem = &p->a[p->nSrc-1];
84426:   assert( pAlias!=0 );
84427:   if( pAlias->n ){
84428:     pItem->zAlias = sqlite3NameFromToken(db, pAlias);
84429:   }
84430:   pItem->pSelect = pSubquery;
84431:   pItem->pOn = pOn;
84432:   pItem->pUsing = pUsing;
84433:   return p;
84434: 
84435:  append_from_error:
84436:   assert( p==0 );
84437:   sqlite3ExprDelete(db, pOn);
84438:   sqlite3IdListDelete(db, pUsing);
84439:   sqlite3SelectDelete(db, pSubquery);
84440:   return 0;
84441: }
84442: 
84443: /*
84444: ** Add an INDEXED BY or NOT INDEXED clause to the most recently added 
84445: ** element of the source-list passed as the second argument.
84446: */
84447: SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
84448:   assert( pIndexedBy!=0 );
84449:   if( p && ALWAYS(p->nSrc>0) ){
84450:     struct SrcList_item *pItem = &p->a[p->nSrc-1];
84451:     assert( pItem->notIndexed==0 && pItem->zIndex==0 );
84452:     if( pIndexedBy->n==1 && !pIndexedBy->z ){
84453:       /* A "NOT INDEXED" clause was supplied. See parse.y 
84454:       ** construct "indexed_opt" for details. */
84455:       pItem->notIndexed = 1;
84456:     }else{
84457:       pItem->zIndex = sqlite3NameFromToken(pParse->db, pIndexedBy);
84458:     }
84459:   }
84460: }
84461: 
84462: /*
84463: ** When building up a FROM clause in the parser, the join operator
84464: ** is initially attached to the left operand.  But the code generator
84465: ** expects the join operator to be on the right operand.  This routine
84466: ** Shifts all join operators from left to right for an entire FROM
84467: ** clause.
84468: **
84469: ** Example: Suppose the join is like this:
84470: **
84471: **           A natural cross join B
84472: **
84473: ** The operator is "natural cross join".  The A and B operands are stored
84474: ** in p->a[0] and p->a[1], respectively.  The parser initially stores the
84475: ** operator with A.  This routine shifts that operator over to B.
84476: */
84477: SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList *p){
84478:   if( p ){
84479:     int i;
84480:     assert( p->a || p->nSrc==0 );
84481:     for(i=p->nSrc-1; i>0; i--){
84482:       p->a[i].jointype = p->a[i-1].jointype;
84483:     }
84484:     p->a[0].jointype = 0;
84485:   }
84486: }
84487: 
84488: /*
84489: ** Begin a transaction
84490: */
84491: SQLITE_PRIVATE void sqlite3BeginTransaction(Parse *pParse, int type){
84492:   sqlite3 *db;
84493:   Vdbe *v;
84494:   int i;
84495: 
84496:   assert( pParse!=0 );
84497:   db = pParse->db;
84498:   assert( db!=0 );
84499: /*  if( db->aDb[0].pBt==0 ) return; */
84500:   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "BEGIN", 0, 0) ){
84501:     return;
84502:   }
84503:   v = sqlite3GetVdbe(pParse);
84504:   if( !v ) return;
84505:   if( type!=TK_DEFERRED ){
84506:     for(i=0; i<db->nDb; i++){
84507:       sqlite3VdbeAddOp2(v, OP_Transaction, i, (type==TK_EXCLUSIVE)+1);
84508:       sqlite3VdbeUsesBtree(v, i);
84509:     }
84510:   }
84511:   sqlite3VdbeAddOp2(v, OP_AutoCommit, 0, 0);
84512: }
84513: 
84514: /*
84515: ** Commit a transaction
84516: */
84517: SQLITE_PRIVATE void sqlite3CommitTransaction(Parse *pParse){
84518:   Vdbe *v;
84519: 
84520:   assert( pParse!=0 );
84521:   assert( pParse->db!=0 );
84522:   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "COMMIT", 0, 0) ){
84523:     return;
84524:   }
84525:   v = sqlite3GetVdbe(pParse);
84526:   if( v ){
84527:     sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 0);
84528:   }
84529: }
84530: 
84531: /*
84532: ** Rollback a transaction
84533: */
84534: SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse *pParse){
84535:   Vdbe *v;
84536: 
84537:   assert( pParse!=0 );
84538:   assert( pParse->db!=0 );
84539:   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "ROLLBACK", 0, 0) ){
84540:     return;
84541:   }
84542:   v = sqlite3GetVdbe(pParse);
84543:   if( v ){
84544:     sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 1);
84545:   }
84546: }
84547: 
84548: /*
84549: ** This function is called by the parser when it parses a command to create,
84550: ** release or rollback an SQL savepoint. 
84551: */
84552: SQLITE_PRIVATE void sqlite3Savepoint(Parse *pParse, int op, Token *pName){
84553:   char *zName = sqlite3NameFromToken(pParse->db, pName);
84554:   if( zName ){
84555:     Vdbe *v = sqlite3GetVdbe(pParse);
84556: #ifndef SQLITE_OMIT_AUTHORIZATION
84557:     static const char * const az[] = { "BEGIN", "RELEASE", "ROLLBACK" };
84558:     assert( !SAVEPOINT_BEGIN && SAVEPOINT_RELEASE==1 && SAVEPOINT_ROLLBACK==2 );
84559: #endif
84560:     if( !v || sqlite3AuthCheck(pParse, SQLITE_SAVEPOINT, az[op], zName, 0) ){
84561:       sqlite3DbFree(pParse->db, zName);
84562:       return;
84563:     }
84564:     sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, P4_DYNAMIC);
84565:   }
84566: }
84567: 
84568: /*
84569: ** Make sure the TEMP database is open and available for use.  Return
84570: ** the number of errors.  Leave any error messages in the pParse structure.
84571: */
84572: SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *pParse){
84573:   sqlite3 *db = pParse->db;
84574:   if( db->aDb[1].pBt==0 && !pParse->explain ){
84575:     int rc;
84576:     Btree *pBt;
84577:     static const int flags = 
84578:           SQLITE_OPEN_READWRITE |
84579:           SQLITE_OPEN_CREATE |
84580:           SQLITE_OPEN_EXCLUSIVE |
84581:           SQLITE_OPEN_DELETEONCLOSE |
84582:           SQLITE_OPEN_TEMP_DB;
84583: 
84584:     rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pBt, 0, flags);
84585:     if( rc!=SQLITE_OK ){
84586:       sqlite3ErrorMsg(pParse, "unable to open a temporary database "
84587:         "file for storing temporary tables");
84588:       pParse->rc = rc;
84589:       return 1;
84590:     }
84591:     db->aDb[1].pBt = pBt;
84592:     assert( db->aDb[1].pSchema );
84593:     if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize, -1, 0) ){
84594:       db->mallocFailed = 1;
84595:       return 1;
84596:     }
84597:   }
84598:   return 0;
84599: }
84600: 
84601: /*
84602: ** Generate VDBE code that will verify the schema cookie and start
84603: ** a read-transaction for all named database files.
84604: **
84605: ** It is important that all schema cookies be verified and all
84606: ** read transactions be started before anything else happens in
84607: ** the VDBE program.  But this routine can be called after much other
84608: ** code has been generated.  So here is what we do:
84609: **
84610: ** The first time this routine is called, we code an OP_Goto that
84611: ** will jump to a subroutine at the end of the program.  Then we
84612: ** record every database that needs its schema verified in the
84613: ** pParse->cookieMask field.  Later, after all other code has been
84614: ** generated, the subroutine that does the cookie verifications and
84615: ** starts the transactions will be coded and the OP_Goto P2 value
84616: ** will be made to point to that subroutine.  The generation of the
84617: ** cookie verification subroutine code happens in sqlite3FinishCoding().
84618: **
84619: ** If iDb<0 then code the OP_Goto only - don't set flag to verify the
84620: ** schema on any databases.  This can be used to position the OP_Goto
84621: ** early in the code, before we know if any database tables will be used.
84622: */
84623: SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse *pParse, int iDb){
84624:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
84625: 
84626:   if( pToplevel->cookieGoto==0 ){
84627:     Vdbe *v = sqlite3GetVdbe(pToplevel);
84628:     if( v==0 ) return;  /* This only happens if there was a prior error */
84629:     pToplevel->cookieGoto = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0)+1;
84630:   }
84631:   if( iDb>=0 ){
84632:     sqlite3 *db = pToplevel->db;
84633:     yDbMask mask;
84634: 
84635:     assert( iDb<db->nDb );
84636:     assert( db->aDb[iDb].pBt!=0 || iDb==1 );
84637:     assert( iDb<SQLITE_MAX_ATTACHED+2 );
84638:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
84639:     mask = ((yDbMask)1)<<iDb;
84640:     if( (pToplevel->cookieMask & mask)==0 ){
84641:       pToplevel->cookieMask |= mask;
84642:       pToplevel->cookieValue[iDb] = db->aDb[iDb].pSchema->schema_cookie;
84643:       if( !OMIT_TEMPDB && iDb==1 ){
84644:         sqlite3OpenTempDatabase(pToplevel);
84645:       }
84646:     }
84647:   }
84648: }
84649: 
84650: /*
84651: ** If argument zDb is NULL, then call sqlite3CodeVerifySchema() for each 
84652: ** attached database. Otherwise, invoke it for the database named zDb only.
84653: */
84654: SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse *pParse, const char *zDb){
84655:   sqlite3 *db = pParse->db;
84656:   int i;
84657:   for(i=0; i<db->nDb; i++){
84658:     Db *pDb = &db->aDb[i];
84659:     if( pDb->pBt && (!zDb || 0==sqlite3StrICmp(zDb, pDb->zName)) ){
84660:       sqlite3CodeVerifySchema(pParse, i);
84661:     }
84662:   }
84663: }
84664: 
84665: /*
84666: ** Generate VDBE code that prepares for doing an operation that
84667: ** might change the database.
84668: **
84669: ** This routine starts a new transaction if we are not already within
84670: ** a transaction.  If we are already within a transaction, then a checkpoint
84671: ** is set if the setStatement parameter is true.  A checkpoint should
84672: ** be set for operations that might fail (due to a constraint) part of
84673: ** the way through and which will need to undo some writes without having to
84674: ** rollback the whole transaction.  For operations where all constraints
84675: ** can be checked before any changes are made to the database, it is never
84676: ** necessary to undo a write and the checkpoint should not be set.
84677: */
84678: SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){
84679:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
84680:   sqlite3CodeVerifySchema(pParse, iDb);
84681:   pToplevel->writeMask |= ((yDbMask)1)<<iDb;
84682:   pToplevel->isMultiWrite |= setStatement;
84683: }
84684: 
84685: /*
84686: ** Indicate that the statement currently under construction might write
84687: ** more than one entry (example: deleting one row then inserting another,
84688: ** inserting multiple rows in a table, or inserting a row and index entries.)
84689: ** If an abort occurs after some of these writes have completed, then it will
84690: ** be necessary to undo the completed writes.
84691: */
84692: SQLITE_PRIVATE void sqlite3MultiWrite(Parse *pParse){
84693:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
84694:   pToplevel->isMultiWrite = 1;
84695: }
84696: 
84697: /* 
84698: ** The code generator calls this routine if is discovers that it is
84699: ** possible to abort a statement prior to completion.  In order to 
84700: ** perform this abort without corrupting the database, we need to make
84701: ** sure that the statement is protected by a statement transaction.
84702: **
84703: ** Technically, we only need to set the mayAbort flag if the
84704: ** isMultiWrite flag was previously set.  There is a time dependency
84705: ** such that the abort must occur after the multiwrite.  This makes
84706: ** some statements involving the REPLACE conflict resolution algorithm
84707: ** go a little faster.  But taking advantage of this time dependency
84708: ** makes it more difficult to prove that the code is correct (in 
84709: ** particular, it prevents us from writing an effective
84710: ** implementation of sqlite3AssertMayAbort()) and so we have chosen
84711: ** to take the safe route and skip the optimization.
84712: */
84713: SQLITE_PRIVATE void sqlite3MayAbort(Parse *pParse){
84714:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
84715:   pToplevel->mayAbort = 1;
84716: }
84717: 
84718: /*
84719: ** Code an OP_Halt that causes the vdbe to return an SQLITE_CONSTRAINT
84720: ** error. The onError parameter determines which (if any) of the statement
84721: ** and/or current transaction is rolled back.
84722: */
84723: SQLITE_PRIVATE void sqlite3HaltConstraint(Parse *pParse, int onError, char *p4, int p4type){
84724:   Vdbe *v = sqlite3GetVdbe(pParse);
84725:   if( onError==OE_Abort ){
84726:     sqlite3MayAbort(pParse);
84727:   }
84728:   sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, onError, 0, p4, p4type);
84729: }
84730: 
84731: /*
84732: ** Check to see if pIndex uses the collating sequence pColl.  Return
84733: ** true if it does and false if it does not.
84734: */
84735: #ifndef SQLITE_OMIT_REINDEX
84736: static int collationMatch(const char *zColl, Index *pIndex){
84737:   int i;
84738:   assert( zColl!=0 );
84739:   for(i=0; i<pIndex->nColumn; i++){
84740:     const char *z = pIndex->azColl[i];
84741:     assert( z!=0 );
84742:     if( 0==sqlite3StrICmp(z, zColl) ){
84743:       return 1;
84744:     }
84745:   }
84746:   return 0;
84747: }
84748: #endif
84749: 
84750: /*
84751: ** Recompute all indices of pTab that use the collating sequence pColl.
84752: ** If pColl==0 then recompute all indices of pTab.
84753: */
84754: #ifndef SQLITE_OMIT_REINDEX
84755: static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){
84756:   Index *pIndex;              /* An index associated with pTab */
84757: 
84758:   for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
84759:     if( zColl==0 || collationMatch(zColl, pIndex) ){
84760:       int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
84761:       sqlite3BeginWriteOperation(pParse, 0, iDb);
84762:       sqlite3RefillIndex(pParse, pIndex, -1);
84763:     }
84764:   }
84765: }
84766: #endif
84767: 
84768: /*
84769: ** Recompute all indices of all tables in all databases where the
84770: ** indices use the collating sequence pColl.  If pColl==0 then recompute
84771: ** all indices everywhere.
84772: */
84773: #ifndef SQLITE_OMIT_REINDEX
84774: static void reindexDatabases(Parse *pParse, char const *zColl){
84775:   Db *pDb;                    /* A single database */
84776:   int iDb;                    /* The database index number */
84777:   sqlite3 *db = pParse->db;   /* The database connection */
84778:   HashElem *k;                /* For looping over tables in pDb */
84779:   Table *pTab;                /* A table in the database */
84780: 
84781:   assert( sqlite3BtreeHoldsAllMutexes(db) );  /* Needed for schema access */
84782:   for(iDb=0, pDb=db->aDb; iDb<db->nDb; iDb++, pDb++){
84783:     assert( pDb!=0 );
84784:     for(k=sqliteHashFirst(&pDb->pSchema->tblHash);  k; k=sqliteHashNext(k)){
84785:       pTab = (Table*)sqliteHashData(k);
84786:       reindexTable(pParse, pTab, zColl);
84787:     }
84788:   }
84789: }
84790: #endif
84791: 
84792: /*
84793: ** Generate code for the REINDEX command.
84794: **
84795: **        REINDEX                            -- 1
84796: **        REINDEX  <collation>               -- 2
84797: **        REINDEX  ?<database>.?<tablename>  -- 3
84798: **        REINDEX  ?<database>.?<indexname>  -- 4
84799: **
84800: ** Form 1 causes all indices in all attached databases to be rebuilt.
84801: ** Form 2 rebuilds all indices in all databases that use the named
84802: ** collating function.  Forms 3 and 4 rebuild the named index or all
84803: ** indices associated with the named table.
84804: */
84805: #ifndef SQLITE_OMIT_REINDEX
84806: SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){
84807:   CollSeq *pColl;             /* Collating sequence to be reindexed, or NULL */
84808:   char *z;                    /* Name of a table or index */
84809:   const char *zDb;            /* Name of the database */
84810:   Table *pTab;                /* A table in the database */
84811:   Index *pIndex;              /* An index associated with pTab */
84812:   int iDb;                    /* The database index number */
84813:   sqlite3 *db = pParse->db;   /* The database connection */
84814:   Token *pObjName;            /* Name of the table or index to be reindexed */
84815: 
84816:   /* Read the database schema. If an error occurs, leave an error message
84817:   ** and code in pParse and return NULL. */
84818:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
84819:     return;
84820:   }
84821: 
84822:   if( pName1==0 ){
84823:     reindexDatabases(pParse, 0);
84824:     return;
84825:   }else if( NEVER(pName2==0) || pName2->z==0 ){
84826:     char *zColl;
84827:     assert( pName1->z );
84828:     zColl = sqlite3NameFromToken(pParse->db, pName1);
84829:     if( !zColl ) return;
84830:     pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0);
84831:     if( pColl ){
84832:       reindexDatabases(pParse, zColl);
84833:       sqlite3DbFree(db, zColl);
84834:       return;
84835:     }
84836:     sqlite3DbFree(db, zColl);
84837:   }
84838:   iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pObjName);
84839:   if( iDb<0 ) return;
84840:   z = sqlite3NameFromToken(db, pObjName);
84841:   if( z==0 ) return;
84842:   zDb = db->aDb[iDb].zName;
84843:   pTab = sqlite3FindTable(db, z, zDb);
84844:   if( pTab ){
84845:     reindexTable(pParse, pTab, 0);
84846:     sqlite3DbFree(db, z);
84847:     return;
84848:   }
84849:   pIndex = sqlite3FindIndex(db, z, zDb);
84850:   sqlite3DbFree(db, z);
84851:   if( pIndex ){
84852:     sqlite3BeginWriteOperation(pParse, 0, iDb);
84853:     sqlite3RefillIndex(pParse, pIndex, -1);
84854:     return;
84855:   }
84856:   sqlite3ErrorMsg(pParse, "unable to identify the object to be reindexed");
84857: }
84858: #endif
84859: 
84860: /*
84861: ** Return a dynamicly allocated KeyInfo structure that can be used
84862: ** with OP_OpenRead or OP_OpenWrite to access database index pIdx.
84863: **
84864: ** If successful, a pointer to the new structure is returned. In this case
84865: ** the caller is responsible for calling sqlite3DbFree(db, ) on the returned 
84866: ** pointer. If an error occurs (out of memory or missing collation 
84867: ** sequence), NULL is returned and the state of pParse updated to reflect
84868: ** the error.
84869: */
84870: SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *pParse, Index *pIdx){
84871:   int i;
84872:   int nCol = pIdx->nColumn;
84873:   int nBytes = sizeof(KeyInfo) + (nCol-1)*sizeof(CollSeq*) + nCol;
84874:   sqlite3 *db = pParse->db;
84875:   KeyInfo *pKey = (KeyInfo *)sqlite3DbMallocZero(db, nBytes);
84876: 
84877:   if( pKey ){
84878:     pKey->db = pParse->db;
84879:     pKey->aSortOrder = (u8 *)&(pKey->aColl[nCol]);
84880:     assert( &pKey->aSortOrder[nCol]==&(((u8 *)pKey)[nBytes]) );
84881:     for(i=0; i<nCol; i++){
84882:       char *zColl = pIdx->azColl[i];
84883:       assert( zColl );
84884:       pKey->aColl[i] = sqlite3LocateCollSeq(pParse, zColl);
84885:       pKey->aSortOrder[i] = pIdx->aSortOrder[i];
84886:     }
84887:     pKey->nField = (u16)nCol;
84888:   }
84889: 
84890:   if( pParse->nErr ){
84891:     sqlite3DbFree(db, pKey);
84892:     pKey = 0;
84893:   }
84894:   return pKey;
84895: }
84896: 
84897: /************** End of build.c ***********************************************/
84898: /************** Begin file callback.c ****************************************/
84899: /*
84900: ** 2005 May 23 
84901: **
84902: ** The author disclaims copyright to this source code.  In place of
84903: ** a legal notice, here is a blessing:
84904: **
84905: **    May you do good and not evil.
84906: **    May you find forgiveness for yourself and forgive others.
84907: **    May you share freely, never taking more than you give.
84908: **
84909: *************************************************************************
84910: **
84911: ** This file contains functions used to access the internal hash tables
84912: ** of user defined functions and collation sequences.
84913: */
84914: 
84915: 
84916: /*
84917: ** Invoke the 'collation needed' callback to request a collation sequence
84918: ** in the encoding enc of name zName, length nName.
84919: */
84920: static void callCollNeeded(sqlite3 *db, int enc, const char *zName){
84921:   assert( !db->xCollNeeded || !db->xCollNeeded16 );
84922:   if( db->xCollNeeded ){
84923:     char *zExternal = sqlite3DbStrDup(db, zName);
84924:     if( !zExternal ) return;
84925:     db->xCollNeeded(db->pCollNeededArg, db, enc, zExternal);
84926:     sqlite3DbFree(db, zExternal);
84927:   }
84928: #ifndef SQLITE_OMIT_UTF16
84929:   if( db->xCollNeeded16 ){
84930:     char const *zExternal;
84931:     sqlite3_value *pTmp = sqlite3ValueNew(db);
84932:     sqlite3ValueSetStr(pTmp, -1, zName, SQLITE_UTF8, SQLITE_STATIC);
84933:     zExternal = sqlite3ValueText(pTmp, SQLITE_UTF16NATIVE);
84934:     if( zExternal ){
84935:       db->xCollNeeded16(db->pCollNeededArg, db, (int)ENC(db), zExternal);
84936:     }
84937:     sqlite3ValueFree(pTmp);
84938:   }
84939: #endif
84940: }
84941: 
84942: /*
84943: ** This routine is called if the collation factory fails to deliver a
84944: ** collation function in the best encoding but there may be other versions
84945: ** of this collation function (for other text encodings) available. Use one
84946: ** of these instead if they exist. Avoid a UTF-8 <-> UTF-16 conversion if
84947: ** possible.
84948: */
84949: static int synthCollSeq(sqlite3 *db, CollSeq *pColl){
84950:   CollSeq *pColl2;
84951:   char *z = pColl->zName;
84952:   int i;
84953:   static const u8 aEnc[] = { SQLITE_UTF16BE, SQLITE_UTF16LE, SQLITE_UTF8 };
84954:   for(i=0; i<3; i++){
84955:     pColl2 = sqlite3FindCollSeq(db, aEnc[i], z, 0);
84956:     if( pColl2->xCmp!=0 ){
84957:       memcpy(pColl, pColl2, sizeof(CollSeq));
84958:       pColl->xDel = 0;         /* Do not copy the destructor */
84959:       return SQLITE_OK;
84960:     }
84961:   }
84962:   return SQLITE_ERROR;
84963: }
84964: 
84965: /*
84966: ** This function is responsible for invoking the collation factory callback
84967: ** or substituting a collation sequence of a different encoding when the
84968: ** requested collation sequence is not available in the desired encoding.
84969: ** 
84970: ** If it is not NULL, then pColl must point to the database native encoding 
84971: ** collation sequence with name zName, length nName.
84972: **
84973: ** The return value is either the collation sequence to be used in database
84974: ** db for collation type name zName, length nName, or NULL, if no collation
84975: ** sequence can be found.
84976: **
84977: ** See also: sqlite3LocateCollSeq(), sqlite3FindCollSeq()
84978: */
84979: SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(
84980:   sqlite3* db,          /* The database connection */
84981:   u8 enc,               /* The desired encoding for the collating sequence */
84982:   CollSeq *pColl,       /* Collating sequence with native encoding, or NULL */
84983:   const char *zName     /* Collating sequence name */
84984: ){
84985:   CollSeq *p;
84986: 
84987:   p = pColl;
84988:   if( !p ){
84989:     p = sqlite3FindCollSeq(db, enc, zName, 0);
84990:   }
84991:   if( !p || !p->xCmp ){
84992:     /* No collation sequence of this type for this encoding is registered.
84993:     ** Call the collation factory to see if it can supply us with one.
84994:     */
84995:     callCollNeeded(db, enc, zName);
84996:     p = sqlite3FindCollSeq(db, enc, zName, 0);
84997:   }
84998:   if( p && !p->xCmp && synthCollSeq(db, p) ){
84999:     p = 0;
85000:   }
85001:   assert( !p || p->xCmp );
85002:   return p;
85003: }
85004: 
85005: /*
85006: ** This routine is called on a collation sequence before it is used to
85007: ** check that it is defined. An undefined collation sequence exists when
85008: ** a database is loaded that contains references to collation sequences
85009: ** that have not been defined by sqlite3_create_collation() etc.
85010: **
85011: ** If required, this routine calls the 'collation needed' callback to
85012: ** request a definition of the collating sequence. If this doesn't work, 
85013: ** an equivalent collating sequence that uses a text encoding different
85014: ** from the main database is substituted, if one is available.
85015: */
85016: SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){
85017:   if( pColl ){
85018:     const char *zName = pColl->zName;
85019:     sqlite3 *db = pParse->db;
85020:     CollSeq *p = sqlite3GetCollSeq(db, ENC(db), pColl, zName);
85021:     if( !p ){
85022:       sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
85023:       pParse->nErr++;
85024:       return SQLITE_ERROR;
85025:     }
85026:     assert( p==pColl );
85027:   }
85028:   return SQLITE_OK;
85029: }
85030: 
85031: 
85032: 
85033: /*
85034: ** Locate and return an entry from the db.aCollSeq hash table. If the entry
85035: ** specified by zName and nName is not found and parameter 'create' is
85036: ** true, then create a new entry. Otherwise return NULL.
85037: **
85038: ** Each pointer stored in the sqlite3.aCollSeq hash table contains an
85039: ** array of three CollSeq structures. The first is the collation sequence
85040: ** prefferred for UTF-8, the second UTF-16le, and the third UTF-16be.
85041: **
85042: ** Stored immediately after the three collation sequences is a copy of
85043: ** the collation sequence name. A pointer to this string is stored in
85044: ** each collation sequence structure.
85045: */
85046: static CollSeq *findCollSeqEntry(
85047:   sqlite3 *db,          /* Database connection */
85048:   const char *zName,    /* Name of the collating sequence */
85049:   int create            /* Create a new entry if true */
85050: ){
85051:   CollSeq *pColl;
85052:   int nName = sqlite3Strlen30(zName);
85053:   pColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
85054: 
85055:   if( 0==pColl && create ){
85056:     pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName + 1 );
85057:     if( pColl ){
85058:       CollSeq *pDel = 0;
85059:       pColl[0].zName = (char*)&pColl[3];
85060:       pColl[0].enc = SQLITE_UTF8;
85061:       pColl[1].zName = (char*)&pColl[3];
85062:       pColl[1].enc = SQLITE_UTF16LE;
85063:       pColl[2].zName = (char*)&pColl[3];
85064:       pColl[2].enc = SQLITE_UTF16BE;
85065:       memcpy(pColl[0].zName, zName, nName);
85066:       pColl[0].zName[nName] = 0;
85067:       pDel = sqlite3HashInsert(&db->aCollSeq, pColl[0].zName, nName, pColl);
85068: 
85069:       /* If a malloc() failure occurred in sqlite3HashInsert(), it will 
85070:       ** return the pColl pointer to be deleted (because it wasn't added
85071:       ** to the hash table).
85072:       */
85073:       assert( pDel==0 || pDel==pColl );
85074:       if( pDel!=0 ){
85075:         db->mallocFailed = 1;
85076:         sqlite3DbFree(db, pDel);
85077:         pColl = 0;
85078:       }
85079:     }
85080:   }
85081:   return pColl;
85082: }
85083: 
85084: /*
85085: ** Parameter zName points to a UTF-8 encoded string nName bytes long.
85086: ** Return the CollSeq* pointer for the collation sequence named zName
85087: ** for the encoding 'enc' from the database 'db'.
85088: **
85089: ** If the entry specified is not found and 'create' is true, then create a
85090: ** new entry.  Otherwise return NULL.
85091: **
85092: ** A separate function sqlite3LocateCollSeq() is a wrapper around
85093: ** this routine.  sqlite3LocateCollSeq() invokes the collation factory
85094: ** if necessary and generates an error message if the collating sequence
85095: ** cannot be found.
85096: **
85097: ** See also: sqlite3LocateCollSeq(), sqlite3GetCollSeq()
85098: */
85099: SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(
85100:   sqlite3 *db,
85101:   u8 enc,
85102:   const char *zName,
85103:   int create
85104: ){
85105:   CollSeq *pColl;
85106:   if( zName ){
85107:     pColl = findCollSeqEntry(db, zName, create);
85108:   }else{
85109:     pColl = db->pDfltColl;
85110:   }
85111:   assert( SQLITE_UTF8==1 && SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 );
85112:   assert( enc>=SQLITE_UTF8 && enc<=SQLITE_UTF16BE );
85113:   if( pColl ) pColl += enc-1;
85114:   return pColl;
85115: }
85116: 
85117: /* During the search for the best function definition, this procedure
85118: ** is called to test how well the function passed as the first argument
85119: ** matches the request for a function with nArg arguments in a system
85120: ** that uses encoding enc. The value returned indicates how well the
85121: ** request is matched. A higher value indicates a better match.
85122: **
85123: ** The returned value is always between 0 and 6, as follows:
85124: **
85125: ** 0: Not a match, or if nArg<0 and the function is has no implementation.
85126: ** 1: A variable arguments function that prefers UTF-8 when a UTF-16
85127: **    encoding is requested, or vice versa.
85128: ** 2: A variable arguments function that uses UTF-16BE when UTF-16LE is
85129: **    requested, or vice versa.
85130: ** 3: A variable arguments function using the same text encoding.
85131: ** 4: A function with the exact number of arguments requested that
85132: **    prefers UTF-8 when a UTF-16 encoding is requested, or vice versa.
85133: ** 5: A function with the exact number of arguments requested that
85134: **    prefers UTF-16LE when UTF-16BE is requested, or vice versa.
85135: ** 6: An exact match.
85136: **
85137: */
85138: static int matchQuality(FuncDef *p, int nArg, u8 enc){
85139:   int match = 0;
85140:   if( p->nArg==-1 || p->nArg==nArg 
85141:    || (nArg==-1 && (p->xFunc!=0 || p->xStep!=0))
85142:   ){
85143:     match = 1;
85144:     if( p->nArg==nArg || nArg==-1 ){
85145:       match = 4;
85146:     }
85147:     if( enc==p->iPrefEnc ){
85148:       match += 2;
85149:     }
85150:     else if( (enc==SQLITE_UTF16LE && p->iPrefEnc==SQLITE_UTF16BE) ||
85151:              (enc==SQLITE_UTF16BE && p->iPrefEnc==SQLITE_UTF16LE) ){
85152:       match += 1;
85153:     }
85154:   }
85155:   return match;
85156: }
85157: 
85158: /*
85159: ** Search a FuncDefHash for a function with the given name.  Return
85160: ** a pointer to the matching FuncDef if found, or 0 if there is no match.
85161: */
85162: static FuncDef *functionSearch(
85163:   FuncDefHash *pHash,  /* Hash table to search */
85164:   int h,               /* Hash of the name */
85165:   const char *zFunc,   /* Name of function */
85166:   int nFunc            /* Number of bytes in zFunc */
85167: ){
85168:   FuncDef *p;
85169:   for(p=pHash->a[h]; p; p=p->pHash){
85170:     if( sqlite3StrNICmp(p->zName, zFunc, nFunc)==0 && p->zName[nFunc]==0 ){
85171:       return p;
85172:     }
85173:   }
85174:   return 0;
85175: }
85176: 
85177: /*
85178: ** Insert a new FuncDef into a FuncDefHash hash table.
85179: */
85180: SQLITE_PRIVATE void sqlite3FuncDefInsert(
85181:   FuncDefHash *pHash,  /* The hash table into which to insert */
85182:   FuncDef *pDef        /* The function definition to insert */
85183: ){
85184:   FuncDef *pOther;
85185:   int nName = sqlite3Strlen30(pDef->zName);
85186:   u8 c1 = (u8)pDef->zName[0];
85187:   int h = (sqlite3UpperToLower[c1] + nName) % ArraySize(pHash->a);
85188:   pOther = functionSearch(pHash, h, pDef->zName, nName);
85189:   if( pOther ){
85190:     assert( pOther!=pDef && pOther->pNext!=pDef );
85191:     pDef->pNext = pOther->pNext;
85192:     pOther->pNext = pDef;
85193:   }else{
85194:     pDef->pNext = 0;
85195:     pDef->pHash = pHash->a[h];
85196:     pHash->a[h] = pDef;
85197:   }
85198: }
85199:   
85200:   
85201: 
85202: /*
85203: ** Locate a user function given a name, a number of arguments and a flag
85204: ** indicating whether the function prefers UTF-16 over UTF-8.  Return a
85205: ** pointer to the FuncDef structure that defines that function, or return
85206: ** NULL if the function does not exist.
85207: **
85208: ** If the createFlag argument is true, then a new (blank) FuncDef
85209: ** structure is created and liked into the "db" structure if a
85210: ** no matching function previously existed.  When createFlag is true
85211: ** and the nArg parameter is -1, then only a function that accepts
85212: ** any number of arguments will be returned.
85213: **
85214: ** If createFlag is false and nArg is -1, then the first valid
85215: ** function found is returned.  A function is valid if either xFunc
85216: ** or xStep is non-zero.
85217: **
85218: ** If createFlag is false, then a function with the required name and
85219: ** number of arguments may be returned even if the eTextRep flag does not
85220: ** match that requested.
85221: */
85222: SQLITE_PRIVATE FuncDef *sqlite3FindFunction(
85223:   sqlite3 *db,       /* An open database */
85224:   const char *zName, /* Name of the function.  Not null-terminated */
85225:   int nName,         /* Number of characters in the name */
85226:   int nArg,          /* Number of arguments.  -1 means any number */
85227:   u8 enc,            /* Preferred text encoding */
85228:   int createFlag     /* Create new entry if true and does not otherwise exist */
85229: ){
85230:   FuncDef *p;         /* Iterator variable */
85231:   FuncDef *pBest = 0; /* Best match found so far */
85232:   int bestScore = 0;  /* Score of best match */
85233:   int h;              /* Hash value */
85234: 
85235: 
85236:   assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
85237:   h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % ArraySize(db->aFunc.a);
85238: 
85239:   /* First search for a match amongst the application-defined functions.
85240:   */
85241:   p = functionSearch(&db->aFunc, h, zName, nName);
85242:   while( p ){
85243:     int score = matchQuality(p, nArg, enc);
85244:     if( score>bestScore ){
85245:       pBest = p;
85246:       bestScore = score;
85247:     }
85248:     p = p->pNext;
85249:   }
85250: 
85251:   /* If no match is found, search the built-in functions.
85252:   **
85253:   ** If the SQLITE_PreferBuiltin flag is set, then search the built-in
85254:   ** functions even if a prior app-defined function was found.  And give
85255:   ** priority to built-in functions.
85256:   **
85257:   ** Except, if createFlag is true, that means that we are trying to
85258:   ** install a new function.  Whatever FuncDef structure is returned it will
85259:   ** have fields overwritten with new information appropriate for the
85260:   ** new function.  But the FuncDefs for built-in functions are read-only.
85261:   ** So we must not search for built-ins when creating a new function.
85262:   */ 
85263:   if( !createFlag && (pBest==0 || (db->flags & SQLITE_PreferBuiltin)!=0) ){
85264:     FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
85265:     bestScore = 0;
85266:     p = functionSearch(pHash, h, zName, nName);
85267:     while( p ){
85268:       int score = matchQuality(p, nArg, enc);
85269:       if( score>bestScore ){
85270:         pBest = p;
85271:         bestScore = score;
85272:       }
85273:       p = p->pNext;
85274:     }
85275:   }
85276: 
85277:   /* If the createFlag parameter is true and the search did not reveal an
85278:   ** exact match for the name, number of arguments and encoding, then add a
85279:   ** new entry to the hash table and return it.
85280:   */
85281:   if( createFlag && (bestScore<6 || pBest->nArg!=nArg) && 
85282:       (pBest = sqlite3DbMallocZero(db, sizeof(*pBest)+nName+1))!=0 ){
85283:     pBest->zName = (char *)&pBest[1];
85284:     pBest->nArg = (u16)nArg;
85285:     pBest->iPrefEnc = enc;
85286:     memcpy(pBest->zName, zName, nName);
85287:     pBest->zName[nName] = 0;
85288:     sqlite3FuncDefInsert(&db->aFunc, pBest);
85289:   }
85290: 
85291:   if( pBest && (pBest->xStep || pBest->xFunc || createFlag) ){
85292:     return pBest;
85293:   }
85294:   return 0;
85295: }
85296: 
85297: /*
85298: ** Free all resources held by the schema structure. The void* argument points
85299: ** at a Schema struct. This function does not call sqlite3DbFree(db, ) on the 
85300: ** pointer itself, it just cleans up subsidiary resources (i.e. the contents
85301: ** of the schema hash tables).
85302: **
85303: ** The Schema.cache_size variable is not cleared.
85304: */
85305: SQLITE_PRIVATE void sqlite3SchemaClear(void *p){
85306:   Hash temp1;
85307:   Hash temp2;
85308:   HashElem *pElem;
85309:   Schema *pSchema = (Schema *)p;
85310: 
85311:   temp1 = pSchema->tblHash;
85312:   temp2 = pSchema->trigHash;
85313:   sqlite3HashInit(&pSchema->trigHash);
85314:   sqlite3HashClear(&pSchema->idxHash);
85315:   for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){
85316:     sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem));
85317:   }
85318:   sqlite3HashClear(&temp2);
85319:   sqlite3HashInit(&pSchema->tblHash);
85320:   for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){
85321:     Table *pTab = sqliteHashData(pElem);
85322:     sqlite3DeleteTable(0, pTab);
85323:   }
85324:   sqlite3HashClear(&temp1);
85325:   sqlite3HashClear(&pSchema->fkeyHash);
85326:   pSchema->pSeqTab = 0;
85327:   if( pSchema->flags & DB_SchemaLoaded ){
85328:     pSchema->iGeneration++;
85329:     pSchema->flags &= ~DB_SchemaLoaded;
85330:   }
85331: }
85332: 
85333: /*
85334: ** Find and return the schema associated with a BTree.  Create
85335: ** a new one if necessary.
85336: */
85337: SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){
85338:   Schema * p;
85339:   if( pBt ){
85340:     p = (Schema *)sqlite3BtreeSchema(pBt, sizeof(Schema), sqlite3SchemaClear);
85341:   }else{
85342:     p = (Schema *)sqlite3DbMallocZero(0, sizeof(Schema));
85343:   }
85344:   if( !p ){
85345:     db->mallocFailed = 1;
85346:   }else if ( 0==p->file_format ){
85347:     sqlite3HashInit(&p->tblHash);
85348:     sqlite3HashInit(&p->idxHash);
85349:     sqlite3HashInit(&p->trigHash);
85350:     sqlite3HashInit(&p->fkeyHash);
85351:     p->enc = SQLITE_UTF8;
85352:   }
85353:   return p;
85354: }
85355: 
85356: /************** End of callback.c ********************************************/
85357: /************** Begin file delete.c ******************************************/
85358: /*
85359: ** 2001 September 15
85360: **
85361: ** The author disclaims copyright to this source code.  In place of
85362: ** a legal notice, here is a blessing:
85363: **
85364: **    May you do good and not evil.
85365: **    May you find forgiveness for yourself and forgive others.
85366: **    May you share freely, never taking more than you give.
85367: **
85368: *************************************************************************
85369: ** This file contains C code routines that are called by the parser
85370: ** in order to generate code for DELETE FROM statements.
85371: */
85372: 
85373: /*
85374: ** While a SrcList can in general represent multiple tables and subqueries
85375: ** (as in the FROM clause of a SELECT statement) in this case it contains
85376: ** the name of a single table, as one might find in an INSERT, DELETE,
85377: ** or UPDATE statement.  Look up that table in the symbol table and
85378: ** return a pointer.  Set an error message and return NULL if the table 
85379: ** name is not found or if any other error occurs.
85380: **
85381: ** The following fields are initialized appropriate in pSrc:
85382: **
85383: **    pSrc->a[0].pTab       Pointer to the Table object
85384: **    pSrc->a[0].pIndex     Pointer to the INDEXED BY index, if there is one
85385: **
85386: */
85387: SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){
85388:   struct SrcList_item *pItem = pSrc->a;
85389:   Table *pTab;
85390:   assert( pItem && pSrc->nSrc==1 );
85391:   pTab = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase);
85392:   sqlite3DeleteTable(pParse->db, pItem->pTab);
85393:   pItem->pTab = pTab;
85394:   if( pTab ){
85395:     pTab->nRef++;
85396:   }
85397:   if( sqlite3IndexedByLookup(pParse, pItem) ){
85398:     pTab = 0;
85399:   }
85400:   return pTab;
85401: }
85402: 
85403: /*
85404: ** Check to make sure the given table is writable.  If it is not
85405: ** writable, generate an error message and return 1.  If it is
85406: ** writable return 0;
85407: */
85408: SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){
85409:   /* A table is not writable under the following circumstances:
85410:   **
85411:   **   1) It is a virtual table and no implementation of the xUpdate method
85412:   **      has been provided, or
85413:   **   2) It is a system table (i.e. sqlite_master), this call is not
85414:   **      part of a nested parse and writable_schema pragma has not 
85415:   **      been specified.
85416:   **
85417:   ** In either case leave an error message in pParse and return non-zero.
85418:   */
85419:   if( ( IsVirtual(pTab) 
85420:      && sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 )
85421:    || ( (pTab->tabFlags & TF_Readonly)!=0
85422:      && (pParse->db->flags & SQLITE_WriteSchema)==0
85423:      && pParse->nested==0 )
85424:   ){
85425:     sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName);
85426:     return 1;
85427:   }
85428: 
85429: #ifndef SQLITE_OMIT_VIEW
85430:   if( !viewOk && pTab->pSelect ){
85431:     sqlite3ErrorMsg(pParse,"cannot modify %s because it is a view",pTab->zName);
85432:     return 1;
85433:   }
85434: #endif
85435:   return 0;
85436: }
85437: 
85438: 
85439: #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
85440: /*
85441: ** Evaluate a view and store its result in an ephemeral table.  The
85442: ** pWhere argument is an optional WHERE clause that restricts the
85443: ** set of rows in the view that are to be added to the ephemeral table.
85444: */
85445: SQLITE_PRIVATE void sqlite3MaterializeView(
85446:   Parse *pParse,       /* Parsing context */
85447:   Table *pView,        /* View definition */
85448:   Expr *pWhere,        /* Optional WHERE clause to be added */
85449:   int iCur             /* Cursor number for ephemerial table */
85450: ){
85451:   SelectDest dest;
85452:   Select *pDup;
85453:   sqlite3 *db = pParse->db;
85454: 
85455:   pDup = sqlite3SelectDup(db, pView->pSelect, 0);
85456:   if( pWhere ){
85457:     SrcList *pFrom;
85458:     
85459:     pWhere = sqlite3ExprDup(db, pWhere, 0);
85460:     pFrom = sqlite3SrcListAppend(db, 0, 0, 0);
85461:     if( pFrom ){
85462:       assert( pFrom->nSrc==1 );
85463:       pFrom->a[0].zAlias = sqlite3DbStrDup(db, pView->zName);
85464:       pFrom->a[0].pSelect = pDup;
85465:       assert( pFrom->a[0].pOn==0 );
85466:       assert( pFrom->a[0].pUsing==0 );
85467:     }else{
85468:       sqlite3SelectDelete(db, pDup);
85469:     }
85470:     pDup = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0, 0, 0, 0);
85471:   }
85472:   sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur);
85473:   sqlite3Select(pParse, pDup, &dest);
85474:   sqlite3SelectDelete(db, pDup);
85475: }
85476: #endif /* !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) */
85477: 
85478: #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
85479: /*
85480: ** Generate an expression tree to implement the WHERE, ORDER BY,
85481: ** and LIMIT/OFFSET portion of DELETE and UPDATE statements.
85482: **
85483: **     DELETE FROM table_wxyz WHERE a<5 ORDER BY a LIMIT 1;
85484: **                            \__________________________/
85485: **                               pLimitWhere (pInClause)
85486: */
85487: SQLITE_PRIVATE Expr *sqlite3LimitWhere(
85488:   Parse *pParse,               /* The parser context */
85489:   SrcList *pSrc,               /* the FROM clause -- which tables to scan */
85490:   Expr *pWhere,                /* The WHERE clause.  May be null */
85491:   ExprList *pOrderBy,          /* The ORDER BY clause.  May be null */
85492:   Expr *pLimit,                /* The LIMIT clause.  May be null */
85493:   Expr *pOffset,               /* The OFFSET clause.  May be null */
85494:   char *zStmtType              /* Either DELETE or UPDATE.  For error messages. */
85495: ){
85496:   Expr *pWhereRowid = NULL;    /* WHERE rowid .. */
85497:   Expr *pInClause = NULL;      /* WHERE rowid IN ( select ) */
85498:   Expr *pSelectRowid = NULL;   /* SELECT rowid ... */
85499:   ExprList *pEList = NULL;     /* Expression list contaning only pSelectRowid */
85500:   SrcList *pSelectSrc = NULL;  /* SELECT rowid FROM x ... (dup of pSrc) */
85501:   Select *pSelect = NULL;      /* Complete SELECT tree */
85502: 
85503:   /* Check that there isn't an ORDER BY without a LIMIT clause.
85504:   */
85505:   if( pOrderBy && (pLimit == 0) ) {
85506:     sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on %s", zStmtType);
85507:     goto limit_where_cleanup_2;
85508:   }
85509: 
85510:   /* We only need to generate a select expression if there
85511:   ** is a limit/offset term to enforce.
85512:   */
85513:   if( pLimit == 0 ) {
85514:     /* if pLimit is null, pOffset will always be null as well. */
85515:     assert( pOffset == 0 );
85516:     return pWhere;
85517:   }
85518: 
85519:   /* Generate a select expression tree to enforce the limit/offset 
85520:   ** term for the DELETE or UPDATE statement.  For example:
85521:   **   DELETE FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1
85522:   ** becomes:
85523:   **   DELETE FROM table_a WHERE rowid IN ( 
85524:   **     SELECT rowid FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1
85525:   **   );
85526:   */
85527: 
85528:   pSelectRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0);
85529:   if( pSelectRowid == 0 ) goto limit_where_cleanup_2;
85530:   pEList = sqlite3ExprListAppend(pParse, 0, pSelectRowid);
85531:   if( pEList == 0 ) goto limit_where_cleanup_2;
85532: 
85533:   /* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree
85534:   ** and the SELECT subtree. */
85535:   pSelectSrc = sqlite3SrcListDup(pParse->db, pSrc, 0);
85536:   if( pSelectSrc == 0 ) {
85537:     sqlite3ExprListDelete(pParse->db, pEList);
85538:     goto limit_where_cleanup_2;
85539:   }
85540: 
85541:   /* generate the SELECT expression tree. */
85542:   pSelect = sqlite3SelectNew(pParse,pEList,pSelectSrc,pWhere,0,0,
85543:                              pOrderBy,0,pLimit,pOffset);
85544:   if( pSelect == 0 ) return 0;
85545: 
85546:   /* now generate the new WHERE rowid IN clause for the DELETE/UDPATE */
85547:   pWhereRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0);
85548:   if( pWhereRowid == 0 ) goto limit_where_cleanup_1;
85549:   pInClause = sqlite3PExpr(pParse, TK_IN, pWhereRowid, 0, 0);
85550:   if( pInClause == 0 ) goto limit_where_cleanup_1;
85551: 
85552:   pInClause->x.pSelect = pSelect;
85553:   pInClause->flags |= EP_xIsSelect;
85554:   sqlite3ExprSetHeight(pParse, pInClause);
85555:   return pInClause;
85556: 
85557:   /* something went wrong. clean up anything allocated. */
85558: limit_where_cleanup_1:
85559:   sqlite3SelectDelete(pParse->db, pSelect);
85560:   return 0;
85561: 
85562: limit_where_cleanup_2:
85563:   sqlite3ExprDelete(pParse->db, pWhere);
85564:   sqlite3ExprListDelete(pParse->db, pOrderBy);
85565:   sqlite3ExprDelete(pParse->db, pLimit);
85566:   sqlite3ExprDelete(pParse->db, pOffset);
85567:   return 0;
85568: }
85569: #endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */
85570: 
85571: /*
85572: ** Generate code for a DELETE FROM statement.
85573: **
85574: **     DELETE FROM table_wxyz WHERE a<5 AND b NOT NULL;
85575: **                 \________/       \________________/
85576: **                  pTabList              pWhere
85577: */
85578: SQLITE_PRIVATE void sqlite3DeleteFrom(
85579:   Parse *pParse,         /* The parser context */
85580:   SrcList *pTabList,     /* The table from which we should delete things */
85581:   Expr *pWhere           /* The WHERE clause.  May be null */
85582: ){
85583:   Vdbe *v;               /* The virtual database engine */
85584:   Table *pTab;           /* The table from which records will be deleted */
85585:   const char *zDb;       /* Name of database holding pTab */
85586:   int end, addr = 0;     /* A couple addresses of generated code */
85587:   int i;                 /* Loop counter */
85588:   WhereInfo *pWInfo;     /* Information about the WHERE clause */
85589:   Index *pIdx;           /* For looping over indices of the table */
85590:   int iCur;              /* VDBE Cursor number for pTab */
85591:   sqlite3 *db;           /* Main database structure */
85592:   AuthContext sContext;  /* Authorization context */
85593:   NameContext sNC;       /* Name context to resolve expressions in */
85594:   int iDb;               /* Database number */
85595:   int memCnt = -1;       /* Memory cell used for change counting */
85596:   int rcauth;            /* Value returned by authorization callback */
85597: 
85598: #ifndef SQLITE_OMIT_TRIGGER
85599:   int isView;                  /* True if attempting to delete from a view */
85600:   Trigger *pTrigger;           /* List of table triggers, if required */
85601: #endif
85602: 
85603:   memset(&sContext, 0, sizeof(sContext));
85604:   db = pParse->db;
85605:   if( pParse->nErr || db->mallocFailed ){
85606:     goto delete_from_cleanup;
85607:   }
85608:   assert( pTabList->nSrc==1 );
85609: 
85610:   /* Locate the table which we want to delete.  This table has to be
85611:   ** put in an SrcList structure because some of the subroutines we
85612:   ** will be calling are designed to work with multiple tables and expect
85613:   ** an SrcList* parameter instead of just a Table* parameter.
85614:   */
85615:   pTab = sqlite3SrcListLookup(pParse, pTabList);
85616:   if( pTab==0 )  goto delete_from_cleanup;
85617: 
85618:   /* Figure out if we have any triggers and if the table being
85619:   ** deleted from is a view
85620:   */
85621: #ifndef SQLITE_OMIT_TRIGGER
85622:   pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
85623:   isView = pTab->pSelect!=0;
85624: #else
85625: # define pTrigger 0
85626: # define isView 0
85627: #endif
85628: #ifdef SQLITE_OMIT_VIEW
85629: # undef isView
85630: # define isView 0
85631: #endif
85632: 
85633:   /* If pTab is really a view, make sure it has been initialized.
85634:   */
85635:   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
85636:     goto delete_from_cleanup;
85637:   }
85638: 
85639:   if( sqlite3IsReadOnly(pParse, pTab, (pTrigger?1:0)) ){
85640:     goto delete_from_cleanup;
85641:   }
85642:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
85643:   assert( iDb<db->nDb );
85644:   zDb = db->aDb[iDb].zName;
85645:   rcauth = sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb);
85646:   assert( rcauth==SQLITE_OK || rcauth==SQLITE_DENY || rcauth==SQLITE_IGNORE );
85647:   if( rcauth==SQLITE_DENY ){
85648:     goto delete_from_cleanup;
85649:   }
85650:   assert(!isView || pTrigger);
85651: 
85652:   /* Assign  cursor number to the table and all its indices.
85653:   */
85654:   assert( pTabList->nSrc==1 );
85655:   iCur = pTabList->a[0].iCursor = pParse->nTab++;
85656:   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
85657:     pParse->nTab++;
85658:   }
85659: 
85660:   /* Start the view context
85661:   */
85662:   if( isView ){
85663:     sqlite3AuthContextPush(pParse, &sContext, pTab->zName);
85664:   }
85665: 
85666:   /* Begin generating code.
85667:   */
85668:   v = sqlite3GetVdbe(pParse);
85669:   if( v==0 ){
85670:     goto delete_from_cleanup;
85671:   }
85672:   if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
85673:   sqlite3BeginWriteOperation(pParse, 1, iDb);
85674: 
85675:   /* If we are trying to delete from a view, realize that view into
85676:   ** a ephemeral table.
85677:   */
85678: #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
85679:   if( isView ){
85680:     sqlite3MaterializeView(pParse, pTab, pWhere, iCur);
85681:   }
85682: #endif
85683: 
85684:   /* Resolve the column names in the WHERE clause.
85685:   */
85686:   memset(&sNC, 0, sizeof(sNC));
85687:   sNC.pParse = pParse;
85688:   sNC.pSrcList = pTabList;
85689:   if( sqlite3ResolveExprNames(&sNC, pWhere) ){
85690:     goto delete_from_cleanup;
85691:   }
85692: 
85693:   /* Initialize the counter of the number of rows deleted, if
85694:   ** we are counting rows.
85695:   */
85696:   if( db->flags & SQLITE_CountRows ){
85697:     memCnt = ++pParse->nMem;
85698:     sqlite3VdbeAddOp2(v, OP_Integer, 0, memCnt);
85699:   }
85700: 
85701: #ifndef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
85702:   /* Special case: A DELETE without a WHERE clause deletes everything.
85703:   ** It is easier just to erase the whole table. Prior to version 3.6.5,
85704:   ** this optimization caused the row change count (the value returned by 
85705:   ** API function sqlite3_count_changes) to be set incorrectly.  */
85706:   if( rcauth==SQLITE_OK && pWhere==0 && !pTrigger && !IsVirtual(pTab) 
85707:    && 0==sqlite3FkRequired(pParse, pTab, 0, 0)
85708:   ){
85709:     assert( !isView );
85710:     sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt,
85711:                       pTab->zName, P4_STATIC);
85712:     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
85713:       assert( pIdx->pSchema==pTab->pSchema );
85714:       sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb);
85715:     }
85716:   }else
85717: #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */
85718:   /* The usual case: There is a WHERE clause so we have to scan through
85719:   ** the table and pick which records to delete.
85720:   */
85721:   {
85722:     int iRowSet = ++pParse->nMem;   /* Register for rowset of rows to delete */
85723:     int iRowid = ++pParse->nMem;    /* Used for storing rowid values. */
85724:     int regRowid;                   /* Actual register containing rowids */
85725: 
85726:     /* Collect rowids of every row to be deleted.
85727:     */
85728:     sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet);
85729:     pWInfo = sqlite3WhereBegin(
85730:         pParse, pTabList, pWhere, 0, 0, WHERE_DUPLICATES_OK
85731:     );
85732:     if( pWInfo==0 ) goto delete_from_cleanup;
85733:     regRowid = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iCur, iRowid);
85734:     sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, regRowid);
85735:     if( db->flags & SQLITE_CountRows ){
85736:       sqlite3VdbeAddOp2(v, OP_AddImm, memCnt, 1);
85737:     }
85738:     sqlite3WhereEnd(pWInfo);
85739: 
85740:     /* Delete every item whose key was written to the list during the
85741:     ** database scan.  We have to delete items after the scan is complete
85742:     ** because deleting an item can change the scan order.  */
85743:     end = sqlite3VdbeMakeLabel(v);
85744: 
85745:     /* Unless this is a view, open cursors for the table we are 
85746:     ** deleting from and all its indices. If this is a view, then the
85747:     ** only effect this statement has is to fire the INSTEAD OF 
85748:     ** triggers.  */
85749:     if( !isView ){
85750:       sqlite3OpenTableAndIndices(pParse, pTab, iCur, OP_OpenWrite);
85751:     }
85752: 
85753:     addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, end, iRowid);
85754: 
85755:     /* Delete the row */
85756: #ifndef SQLITE_OMIT_VIRTUALTABLE
85757:     if( IsVirtual(pTab) ){
85758:       const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
85759:       sqlite3VtabMakeWritable(pParse, pTab);
85760:       sqlite3VdbeAddOp4(v, OP_VUpdate, 0, 1, iRowid, pVTab, P4_VTAB);
85761:       sqlite3VdbeChangeP5(v, OE_Abort);
85762:       sqlite3MayAbort(pParse);
85763:     }else
85764: #endif
85765:     {
85766:       int count = (pParse->nested==0);    /* True to count changes */
85767:       sqlite3GenerateRowDelete(pParse, pTab, iCur, iRowid, count, pTrigger, OE_Default);
85768:     }
85769: 
85770:     /* End of the delete loop */
85771:     sqlite3VdbeAddOp2(v, OP_Goto, 0, addr);
85772:     sqlite3VdbeResolveLabel(v, end);
85773: 
85774:     /* Close the cursors open on the table and its indexes. */
85775:     if( !isView && !IsVirtual(pTab) ){
85776:       for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
85777:         sqlite3VdbeAddOp2(v, OP_Close, iCur + i, pIdx->tnum);
85778:       }
85779:       sqlite3VdbeAddOp1(v, OP_Close, iCur);
85780:     }
85781:   }
85782: 
85783:   /* Update the sqlite_sequence table by storing the content of the
85784:   ** maximum rowid counter values recorded while inserting into
85785:   ** autoincrement tables.
85786:   */
85787:   if( pParse->nested==0 && pParse->pTriggerTab==0 ){
85788:     sqlite3AutoincrementEnd(pParse);
85789:   }
85790: 
85791:   /* Return the number of rows that were deleted. If this routine is 
85792:   ** generating code because of a call to sqlite3NestedParse(), do not
85793:   ** invoke the callback function.
85794:   */
85795:   if( (db->flags&SQLITE_CountRows) && !pParse->nested && !pParse->pTriggerTab ){
85796:     sqlite3VdbeAddOp2(v, OP_ResultRow, memCnt, 1);
85797:     sqlite3VdbeSetNumCols(v, 1);
85798:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows deleted", SQLITE_STATIC);
85799:   }
85800: 
85801: delete_from_cleanup:
85802:   sqlite3AuthContextPop(&sContext);
85803:   sqlite3SrcListDelete(db, pTabList);
85804:   sqlite3ExprDelete(db, pWhere);
85805:   return;
85806: }
85807: /* Make sure "isView" and other macros defined above are undefined. Otherwise
85808: ** thely may interfere with compilation of other functions in this file
85809: ** (or in another file, if this file becomes part of the amalgamation).  */
85810: #ifdef isView
85811:  #undef isView
85812: #endif
85813: #ifdef pTrigger
85814:  #undef pTrigger
85815: #endif
85816: 
85817: /*
85818: ** This routine generates VDBE code that causes a single row of a
85819: ** single table to be deleted.
85820: **
85821: ** The VDBE must be in a particular state when this routine is called.
85822: ** These are the requirements:
85823: **
85824: **   1.  A read/write cursor pointing to pTab, the table containing the row
85825: **       to be deleted, must be opened as cursor number $iCur.
85826: **
85827: **   2.  Read/write cursors for all indices of pTab must be open as
85828: **       cursor number base+i for the i-th index.
85829: **
85830: **   3.  The record number of the row to be deleted must be stored in
85831: **       memory cell iRowid.
85832: **
85833: ** This routine generates code to remove both the table record and all 
85834: ** index entries that point to that record.
85835: */
85836: SQLITE_PRIVATE void sqlite3GenerateRowDelete(
85837:   Parse *pParse,     /* Parsing context */
85838:   Table *pTab,       /* Table containing the row to be deleted */
85839:   int iCur,          /* Cursor number for the table */
85840:   int iRowid,        /* Memory cell that contains the rowid to delete */
85841:   int count,         /* If non-zero, increment the row change counter */
85842:   Trigger *pTrigger, /* List of triggers to (potentially) fire */
85843:   int onconf         /* Default ON CONFLICT policy for triggers */
85844: ){
85845:   Vdbe *v = pParse->pVdbe;        /* Vdbe */
85846:   int iOld = 0;                   /* First register in OLD.* array */
85847:   int iLabel;                     /* Label resolved to end of generated code */
85848: 
85849:   /* Vdbe is guaranteed to have been allocated by this stage. */
85850:   assert( v );
85851: 
85852:   /* Seek cursor iCur to the row to delete. If this row no longer exists 
85853:   ** (this can happen if a trigger program has already deleted it), do
85854:   ** not attempt to delete it or fire any DELETE triggers.  */
85855:   iLabel = sqlite3VdbeMakeLabel(v);
85856:   sqlite3VdbeAddOp3(v, OP_NotExists, iCur, iLabel, iRowid);
85857:  
85858:   /* If there are any triggers to fire, allocate a range of registers to
85859:   ** use for the old.* references in the triggers.  */
85860:   if( sqlite3FkRequired(pParse, pTab, 0, 0) || pTrigger ){
85861:     u32 mask;                     /* Mask of OLD.* columns in use */
85862:     int iCol;                     /* Iterator used while populating OLD.* */
85863: 
85864:     /* TODO: Could use temporary registers here. Also could attempt to
85865:     ** avoid copying the contents of the rowid register.  */
85866:     mask = sqlite3TriggerColmask(
85867:         pParse, pTrigger, 0, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onconf
85868:     );
85869:     mask |= sqlite3FkOldmask(pParse, pTab);
85870:     iOld = pParse->nMem+1;
85871:     pParse->nMem += (1 + pTab->nCol);
85872: 
85873:     /* Populate the OLD.* pseudo-table register array. These values will be 
85874:     ** used by any BEFORE and AFTER triggers that exist.  */
85875:     sqlite3VdbeAddOp2(v, OP_Copy, iRowid, iOld);
85876:     for(iCol=0; iCol<pTab->nCol; iCol++){
85877:       if( mask==0xffffffff || mask&(1<<iCol) ){
85878:         sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, iCol, iOld+iCol+1);
85879:       }
85880:     }
85881: 
85882:     /* Invoke BEFORE DELETE trigger programs. */
85883:     sqlite3CodeRowTrigger(pParse, pTrigger, 
85884:         TK_DELETE, 0, TRIGGER_BEFORE, pTab, iOld, onconf, iLabel
85885:     );
85886: 
85887:     /* Seek the cursor to the row to be deleted again. It may be that
85888:     ** the BEFORE triggers coded above have already removed the row
85889:     ** being deleted. Do not attempt to delete the row a second time, and 
85890:     ** do not fire AFTER triggers.  */
85891:     sqlite3VdbeAddOp3(v, OP_NotExists, iCur, iLabel, iRowid);
85892: 
85893:     /* Do FK processing. This call checks that any FK constraints that
85894:     ** refer to this table (i.e. constraints attached to other tables) 
85895:     ** are not violated by deleting this row.  */
85896:     sqlite3FkCheck(pParse, pTab, iOld, 0);
85897:   }
85898: 
85899:   /* Delete the index and table entries. Skip this step if pTab is really
85900:   ** a view (in which case the only effect of the DELETE statement is to
85901:   ** fire the INSTEAD OF triggers).  */ 
85902:   if( pTab->pSelect==0 ){
85903:     sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, 0);
85904:     sqlite3VdbeAddOp2(v, OP_Delete, iCur, (count?OPFLAG_NCHANGE:0));
85905:     if( count ){
85906:       sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT);
85907:     }
85908:   }
85909: 
85910:   /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to
85911:   ** handle rows (possibly in other tables) that refer via a foreign key
85912:   ** to the row just deleted. */ 
85913:   sqlite3FkActions(pParse, pTab, 0, iOld);
85914: 
85915:   /* Invoke AFTER DELETE trigger programs. */
85916:   sqlite3CodeRowTrigger(pParse, pTrigger, 
85917:       TK_DELETE, 0, TRIGGER_AFTER, pTab, iOld, onconf, iLabel
85918:   );
85919: 
85920:   /* Jump here if the row had already been deleted before any BEFORE
85921:   ** trigger programs were invoked. Or if a trigger program throws a 
85922:   ** RAISE(IGNORE) exception.  */
85923:   sqlite3VdbeResolveLabel(v, iLabel);
85924: }
85925: 
85926: /*
85927: ** This routine generates VDBE code that causes the deletion of all
85928: ** index entries associated with a single row of a single table.
85929: **
85930: ** The VDBE must be in a particular state when this routine is called.
85931: ** These are the requirements:
85932: **
85933: **   1.  A read/write cursor pointing to pTab, the table containing the row
85934: **       to be deleted, must be opened as cursor number "iCur".
85935: **
85936: **   2.  Read/write cursors for all indices of pTab must be open as
85937: **       cursor number iCur+i for the i-th index.
85938: **
85939: **   3.  The "iCur" cursor must be pointing to the row that is to be
85940: **       deleted.
85941: */
85942: SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(
85943:   Parse *pParse,     /* Parsing and code generating context */
85944:   Table *pTab,       /* Table containing the row to be deleted */
85945:   int iCur,          /* Cursor number for the table */
85946:   int *aRegIdx       /* Only delete if aRegIdx!=0 && aRegIdx[i]>0 */
85947: ){
85948:   int i;
85949:   Index *pIdx;
85950:   int r1;
85951: 
85952:   for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
85953:     if( aRegIdx!=0 && aRegIdx[i-1]==0 ) continue;
85954:     r1 = sqlite3GenerateIndexKey(pParse, pIdx, iCur, 0, 0);
85955:     sqlite3VdbeAddOp3(pParse->pVdbe, OP_IdxDelete, iCur+i, r1,pIdx->nColumn+1);
85956:   }
85957: }
85958: 
85959: /*
85960: ** Generate code that will assemble an index key and put it in register
85961: ** regOut.  The key with be for index pIdx which is an index on pTab.
85962: ** iCur is the index of a cursor open on the pTab table and pointing to
85963: ** the entry that needs indexing.
85964: **
85965: ** Return a register number which is the first in a block of
85966: ** registers that holds the elements of the index key.  The
85967: ** block of registers has already been deallocated by the time
85968: ** this routine returns.
85969: */
85970: SQLITE_PRIVATE int sqlite3GenerateIndexKey(
85971:   Parse *pParse,     /* Parsing context */
85972:   Index *pIdx,       /* The index for which to generate a key */
85973:   int iCur,          /* Cursor number for the pIdx->pTable table */
85974:   int regOut,        /* Write the new index key to this register */
85975:   int doMakeRec      /* Run the OP_MakeRecord instruction if true */
85976: ){
85977:   Vdbe *v = pParse->pVdbe;
85978:   int j;
85979:   Table *pTab = pIdx->pTable;
85980:   int regBase;
85981:   int nCol;
85982: 
85983:   nCol = pIdx->nColumn;
85984:   regBase = sqlite3GetTempRange(pParse, nCol+1);
85985:   sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regBase+nCol);
85986:   for(j=0; j<nCol; j++){
85987:     int idx = pIdx->aiColumn[j];
85988:     if( idx==pTab->iPKey ){
85989:       sqlite3VdbeAddOp2(v, OP_SCopy, regBase+nCol, regBase+j);
85990:     }else{
85991:       sqlite3VdbeAddOp3(v, OP_Column, iCur, idx, regBase+j);
85992:       sqlite3ColumnDefault(v, pTab, idx, -1);
85993:     }
85994:   }
85995:   if( doMakeRec ){
85996:     const char *zAff;
85997:     if( pTab->pSelect || (pParse->db->flags & SQLITE_IdxRealAsInt)!=0 ){
85998:       zAff = 0;
85999:     }else{
86000:       zAff = sqlite3IndexAffinityStr(v, pIdx);
86001:     }
86002:     sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol+1, regOut);
86003:     sqlite3VdbeChangeP4(v, -1, zAff, P4_TRANSIENT);
86004:   }
86005:   sqlite3ReleaseTempRange(pParse, regBase, nCol+1);
86006:   return regBase;
86007: }
86008: 
86009: /************** End of delete.c **********************************************/
86010: /************** Begin file func.c ********************************************/
86011: /*
86012: ** 2002 February 23
86013: **
86014: ** The author disclaims copyright to this source code.  In place of
86015: ** a legal notice, here is a blessing:
86016: **
86017: **    May you do good and not evil.
86018: **    May you find forgiveness for yourself and forgive others.
86019: **    May you share freely, never taking more than you give.
86020: **
86021: *************************************************************************
86022: ** This file contains the C functions that implement various SQL
86023: ** functions of SQLite.  
86024: **
86025: ** There is only one exported symbol in this file - the function
86026: ** sqliteRegisterBuildinFunctions() found at the bottom of the file.
86027: ** All other code has file scope.
86028: */
86029: /* #include <stdlib.h> */
86030: /* #include <assert.h> */
86031: 
86032: /*
86033: ** Return the collating function associated with a function.
86034: */
86035: static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
86036:   return context->pColl;
86037: }
86038: 
86039: /*
86040: ** Implementation of the non-aggregate min() and max() functions
86041: */
86042: static void minmaxFunc(
86043:   sqlite3_context *context,
86044:   int argc,
86045:   sqlite3_value **argv
86046: ){
86047:   int i;
86048:   int mask;    /* 0 for min() or 0xffffffff for max() */
86049:   int iBest;
86050:   CollSeq *pColl;
86051: 
86052:   assert( argc>1 );
86053:   mask = sqlite3_user_data(context)==0 ? 0 : -1;
86054:   pColl = sqlite3GetFuncCollSeq(context);
86055:   assert( pColl );
86056:   assert( mask==-1 || mask==0 );
86057:   iBest = 0;
86058:   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
86059:   for(i=1; i<argc; i++){
86060:     if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
86061:     if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
86062:       testcase( mask==0 );
86063:       iBest = i;
86064:     }
86065:   }
86066:   sqlite3_result_value(context, argv[iBest]);
86067: }
86068: 
86069: /*
86070: ** Return the type of the argument.
86071: */
86072: static void typeofFunc(
86073:   sqlite3_context *context,
86074:   int NotUsed,
86075:   sqlite3_value **argv
86076: ){
86077:   const char *z = 0;
86078:   UNUSED_PARAMETER(NotUsed);
86079:   switch( sqlite3_value_type(argv[0]) ){
86080:     case SQLITE_INTEGER: z = "integer"; break;
86081:     case SQLITE_TEXT:    z = "text";    break;
86082:     case SQLITE_FLOAT:   z = "real";    break;
86083:     case SQLITE_BLOB:    z = "blob";    break;
86084:     default:             z = "null";    break;
86085:   }
86086:   sqlite3_result_text(context, z, -1, SQLITE_STATIC);
86087: }
86088: 
86089: 
86090: /*
86091: ** Implementation of the length() function
86092: */
86093: static void lengthFunc(
86094:   sqlite3_context *context,
86095:   int argc,
86096:   sqlite3_value **argv
86097: ){
86098:   int len;
86099: 
86100:   assert( argc==1 );
86101:   UNUSED_PARAMETER(argc);
86102:   switch( sqlite3_value_type(argv[0]) ){
86103:     case SQLITE_BLOB:
86104:     case SQLITE_INTEGER:
86105:     case SQLITE_FLOAT: {
86106:       sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
86107:       break;
86108:     }
86109:     case SQLITE_TEXT: {
86110:       const unsigned char *z = sqlite3_value_text(argv[0]);
86111:       if( z==0 ) return;
86112:       len = 0;
86113:       while( *z ){
86114:         len++;
86115:         SQLITE_SKIP_UTF8(z);
86116:       }
86117:       sqlite3_result_int(context, len);
86118:       break;
86119:     }
86120:     default: {
86121:       sqlite3_result_null(context);
86122:       break;
86123:     }
86124:   }
86125: }
86126: 
86127: /*
86128: ** Implementation of the abs() function.
86129: **
86130: ** IMP: R-23979-26855 The abs(X) function returns the absolute value of
86131: ** the numeric argument X. 
86132: */
86133: static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
86134:   assert( argc==1 );
86135:   UNUSED_PARAMETER(argc);
86136:   switch( sqlite3_value_type(argv[0]) ){
86137:     case SQLITE_INTEGER: {
86138:       i64 iVal = sqlite3_value_int64(argv[0]);
86139:       if( iVal<0 ){
86140:         if( (iVal<<1)==0 ){
86141:           /* IMP: R-35460-15084 If X is the integer -9223372036854775807 then
86142:           ** abs(X) throws an integer overflow error since there is no
86143:           ** equivalent positive 64-bit two complement value. */
86144:           sqlite3_result_error(context, "integer overflow", -1);
86145:           return;
86146:         }
86147:         iVal = -iVal;
86148:       } 
86149:       sqlite3_result_int64(context, iVal);
86150:       break;
86151:     }
86152:     case SQLITE_NULL: {
86153:       /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
86154:       sqlite3_result_null(context);
86155:       break;
86156:     }
86157:     default: {
86158:       /* Because sqlite3_value_double() returns 0.0 if the argument is not
86159:       ** something that can be converted into a number, we have:
86160:       ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that
86161:       ** cannot be converted to a numeric value. 
86162:       */
86163:       double rVal = sqlite3_value_double(argv[0]);
86164:       if( rVal<0 ) rVal = -rVal;
86165:       sqlite3_result_double(context, rVal);
86166:       break;
86167:     }
86168:   }
86169: }
86170: 
86171: /*
86172: ** Implementation of the substr() function.
86173: **
86174: ** substr(x,p1,p2)  returns p2 characters of x[] beginning with p1.
86175: ** p1 is 1-indexed.  So substr(x,1,1) returns the first character
86176: ** of x.  If x is text, then we actually count UTF-8 characters.
86177: ** If x is a blob, then we count bytes.
86178: **
86179: ** If p1 is negative, then we begin abs(p1) from the end of x[].
86180: **
86181: ** If p2 is negative, return the p2 characters preceeding p1.
86182: */
86183: static void substrFunc(
86184:   sqlite3_context *context,
86185:   int argc,
86186:   sqlite3_value **argv
86187: ){
86188:   const unsigned char *z;
86189:   const unsigned char *z2;
86190:   int len;
86191:   int p0type;
86192:   i64 p1, p2;
86193:   int negP2 = 0;
86194: 
86195:   assert( argc==3 || argc==2 );
86196:   if( sqlite3_value_type(argv[1])==SQLITE_NULL
86197:    || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
86198:   ){
86199:     return;
86200:   }
86201:   p0type = sqlite3_value_type(argv[0]);
86202:   p1 = sqlite3_value_int(argv[1]);
86203:   if( p0type==SQLITE_BLOB ){
86204:     len = sqlite3_value_bytes(argv[0]);
86205:     z = sqlite3_value_blob(argv[0]);
86206:     if( z==0 ) return;
86207:     assert( len==sqlite3_value_bytes(argv[0]) );
86208:   }else{
86209:     z = sqlite3_value_text(argv[0]);
86210:     if( z==0 ) return;
86211:     len = 0;
86212:     if( p1<0 ){
86213:       for(z2=z; *z2; len++){
86214:         SQLITE_SKIP_UTF8(z2);
86215:       }
86216:     }
86217:   }
86218:   if( argc==3 ){
86219:     p2 = sqlite3_value_int(argv[2]);
86220:     if( p2<0 ){
86221:       p2 = -p2;
86222:       negP2 = 1;
86223:     }
86224:   }else{
86225:     p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
86226:   }
86227:   if( p1<0 ){
86228:     p1 += len;
86229:     if( p1<0 ){
86230:       p2 += p1;
86231:       if( p2<0 ) p2 = 0;
86232:       p1 = 0;
86233:     }
86234:   }else if( p1>0 ){
86235:     p1--;
86236:   }else if( p2>0 ){
86237:     p2--;
86238:   }
86239:   if( negP2 ){
86240:     p1 -= p2;
86241:     if( p1<0 ){
86242:       p2 += p1;
86243:       p1 = 0;
86244:     }
86245:   }
86246:   assert( p1>=0 && p2>=0 );
86247:   if( p0type!=SQLITE_BLOB ){
86248:     while( *z && p1 ){
86249:       SQLITE_SKIP_UTF8(z);
86250:       p1--;
86251:     }
86252:     for(z2=z; *z2 && p2; p2--){
86253:       SQLITE_SKIP_UTF8(z2);
86254:     }
86255:     sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
86256:   }else{
86257:     if( p1+p2>len ){
86258:       p2 = len-p1;
86259:       if( p2<0 ) p2 = 0;
86260:     }
86261:     sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
86262:   }
86263: }
86264: 
86265: /*
86266: ** Implementation of the round() function
86267: */
86268: #ifndef SQLITE_OMIT_FLOATING_POINT
86269: static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
86270:   int n = 0;
86271:   double r;
86272:   char *zBuf;
86273:   assert( argc==1 || argc==2 );
86274:   if( argc==2 ){
86275:     if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
86276:     n = sqlite3_value_int(argv[1]);
86277:     if( n>30 ) n = 30;
86278:     if( n<0 ) n = 0;
86279:   }
86280:   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
86281:   r = sqlite3_value_double(argv[0]);
86282:   /* If Y==0 and X will fit in a 64-bit int,
86283:   ** handle the rounding directly,
86284:   ** otherwise use printf.
86285:   */
86286:   if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
86287:     r = (double)((sqlite_int64)(r+0.5));
86288:   }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
86289:     r = -(double)((sqlite_int64)((-r)+0.5));
86290:   }else{
86291:     zBuf = sqlite3_mprintf("%.*f",n,r);
86292:     if( zBuf==0 ){
86293:       sqlite3_result_error_nomem(context);
86294:       return;
86295:     }
86296:     sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
86297:     sqlite3_free(zBuf);
86298:   }
86299:   sqlite3_result_double(context, r);
86300: }
86301: #endif
86302: 
86303: /*
86304: ** Allocate nByte bytes of space using sqlite3_malloc(). If the
86305: ** allocation fails, call sqlite3_result_error_nomem() to notify
86306: ** the database handle that malloc() has failed and return NULL.
86307: ** If nByte is larger than the maximum string or blob length, then
86308: ** raise an SQLITE_TOOBIG exception and return NULL.
86309: */
86310: static void *contextMalloc(sqlite3_context *context, i64 nByte){
86311:   char *z;
86312:   sqlite3 *db = sqlite3_context_db_handle(context);
86313:   assert( nByte>0 );
86314:   testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
86315:   testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
86316:   if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
86317:     sqlite3_result_error_toobig(context);
86318:     z = 0;
86319:   }else{
86320:     z = sqlite3Malloc((int)nByte);
86321:     if( !z ){
86322:       sqlite3_result_error_nomem(context);
86323:     }
86324:   }
86325:   return z;
86326: }
86327: 
86328: /*
86329: ** Implementation of the upper() and lower() SQL functions.
86330: */
86331: static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
86332:   char *z1;
86333:   const char *z2;
86334:   int i, n;
86335:   UNUSED_PARAMETER(argc);
86336:   z2 = (char*)sqlite3_value_text(argv[0]);
86337:   n = sqlite3_value_bytes(argv[0]);
86338:   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
86339:   assert( z2==(char*)sqlite3_value_text(argv[0]) );
86340:   if( z2 ){
86341:     z1 = contextMalloc(context, ((i64)n)+1);
86342:     if( z1 ){
86343:       for(i=0; i<n; i++){
86344:         z1[i] = (char)sqlite3Toupper(z2[i]);
86345:       }
86346:       sqlite3_result_text(context, z1, n, sqlite3_free);
86347:     }
86348:   }
86349: }
86350: static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
86351:   char *z1;
86352:   const char *z2;
86353:   int i, n;
86354:   UNUSED_PARAMETER(argc);
86355:   z2 = (char*)sqlite3_value_text(argv[0]);
86356:   n = sqlite3_value_bytes(argv[0]);
86357:   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
86358:   assert( z2==(char*)sqlite3_value_text(argv[0]) );
86359:   if( z2 ){
86360:     z1 = contextMalloc(context, ((i64)n)+1);
86361:     if( z1 ){
86362:       for(i=0; i<n; i++){
86363:         z1[i] = sqlite3Tolower(z2[i]);
86364:       }
86365:       sqlite3_result_text(context, z1, n, sqlite3_free);
86366:     }
86367:   }
86368: }
86369: 
86370: 
86371: #if 0  /* This function is never used. */
86372: /*
86373: ** The COALESCE() and IFNULL() functions used to be implemented as shown
86374: ** here.  But now they are implemented as VDBE code so that unused arguments
86375: ** do not have to be computed.  This legacy implementation is retained as
86376: ** comment.
86377: */
86378: /*
86379: ** Implementation of the IFNULL(), NVL(), and COALESCE() functions.  
86380: ** All three do the same thing.  They return the first non-NULL
86381: ** argument.
86382: */
86383: static void ifnullFunc(
86384:   sqlite3_context *context,
86385:   int argc,
86386:   sqlite3_value **argv
86387: ){
86388:   int i;
86389:   for(i=0; i<argc; i++){
86390:     if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
86391:       sqlite3_result_value(context, argv[i]);
86392:       break;
86393:     }
86394:   }
86395: }
86396: #endif /* NOT USED */
86397: #define ifnullFunc versionFunc   /* Substitute function - never called */
86398: 
86399: /*
86400: ** Implementation of random().  Return a random integer.  
86401: */
86402: static void randomFunc(
86403:   sqlite3_context *context,
86404:   int NotUsed,
86405:   sqlite3_value **NotUsed2
86406: ){
86407:   sqlite_int64 r;
86408:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
86409:   sqlite3_randomness(sizeof(r), &r);
86410:   if( r<0 ){
86411:     /* We need to prevent a random number of 0x8000000000000000 
86412:     ** (or -9223372036854775808) since when you do abs() of that
86413:     ** number of you get the same value back again.  To do this
86414:     ** in a way that is testable, mask the sign bit off of negative
86415:     ** values, resulting in a positive value.  Then take the 
86416:     ** 2s complement of that positive value.  The end result can
86417:     ** therefore be no less than -9223372036854775807.
86418:     */
86419:     r = -(r ^ (((sqlite3_int64)1)<<63));
86420:   }
86421:   sqlite3_result_int64(context, r);
86422: }
86423: 
86424: /*
86425: ** Implementation of randomblob(N).  Return a random blob
86426: ** that is N bytes long.
86427: */
86428: static void randomBlob(
86429:   sqlite3_context *context,
86430:   int argc,
86431:   sqlite3_value **argv
86432: ){
86433:   int n;
86434:   unsigned char *p;
86435:   assert( argc==1 );
86436:   UNUSED_PARAMETER(argc);
86437:   n = sqlite3_value_int(argv[0]);
86438:   if( n<1 ){
86439:     n = 1;
86440:   }
86441:   p = contextMalloc(context, n);
86442:   if( p ){
86443:     sqlite3_randomness(n, p);
86444:     sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
86445:   }
86446: }
86447: 
86448: /*
86449: ** Implementation of the last_insert_rowid() SQL function.  The return
86450: ** value is the same as the sqlite3_last_insert_rowid() API function.
86451: */
86452: static void last_insert_rowid(
86453:   sqlite3_context *context, 
86454:   int NotUsed, 
86455:   sqlite3_value **NotUsed2
86456: ){
86457:   sqlite3 *db = sqlite3_context_db_handle(context);
86458:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
86459:   /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
86460:   ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
86461:   ** function. */
86462:   sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
86463: }
86464: 
86465: /*
86466: ** Implementation of the changes() SQL function.
86467: **
86468: ** IMP: R-62073-11209 The changes() SQL function is a wrapper
86469: ** around the sqlite3_changes() C/C++ function and hence follows the same
86470: ** rules for counting changes.
86471: */
86472: static void changes(
86473:   sqlite3_context *context,
86474:   int NotUsed,
86475:   sqlite3_value **NotUsed2
86476: ){
86477:   sqlite3 *db = sqlite3_context_db_handle(context);
86478:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
86479:   sqlite3_result_int(context, sqlite3_changes(db));
86480: }
86481: 
86482: /*
86483: ** Implementation of the total_changes() SQL function.  The return value is
86484: ** the same as the sqlite3_total_changes() API function.
86485: */
86486: static void total_changes(
86487:   sqlite3_context *context,
86488:   int NotUsed,
86489:   sqlite3_value **NotUsed2
86490: ){
86491:   sqlite3 *db = sqlite3_context_db_handle(context);
86492:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
86493:   /* IMP: R-52756-41993 This function is a wrapper around the
86494:   ** sqlite3_total_changes() C/C++ interface. */
86495:   sqlite3_result_int(context, sqlite3_total_changes(db));
86496: }
86497: 
86498: /*
86499: ** A structure defining how to do GLOB-style comparisons.
86500: */
86501: struct compareInfo {
86502:   u8 matchAll;
86503:   u8 matchOne;
86504:   u8 matchSet;
86505:   u8 noCase;
86506: };
86507: 
86508: /*
86509: ** For LIKE and GLOB matching on EBCDIC machines, assume that every
86510: ** character is exactly one byte in size.  Also, all characters are
86511: ** able to participate in upper-case-to-lower-case mappings in EBCDIC
86512: ** whereas only characters less than 0x80 do in ASCII.
86513: */
86514: #if defined(SQLITE_EBCDIC)
86515: # define sqlite3Utf8Read(A,C)  (*(A++))
86516: # define GlogUpperToLower(A)   A = sqlite3UpperToLower[A]
86517: #else
86518: # define GlogUpperToLower(A)   if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; }
86519: #endif
86520: 
86521: static const struct compareInfo globInfo = { '*', '?', '[', 0 };
86522: /* The correct SQL-92 behavior is for the LIKE operator to ignore
86523: ** case.  Thus  'a' LIKE 'A' would be true. */
86524: static const struct compareInfo likeInfoNorm = { '%', '_',   0, 1 };
86525: /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
86526: ** is case sensitive causing 'a' LIKE 'A' to be false */
86527: static const struct compareInfo likeInfoAlt = { '%', '_',   0, 0 };
86528: 
86529: /*
86530: ** Compare two UTF-8 strings for equality where the first string can
86531: ** potentially be a "glob" expression.  Return true (1) if they
86532: ** are the same and false (0) if they are different.
86533: **
86534: ** Globbing rules:
86535: **
86536: **      '*'       Matches any sequence of zero or more characters.
86537: **
86538: **      '?'       Matches exactly one character.
86539: **
86540: **     [...]      Matches one character from the enclosed list of
86541: **                characters.
86542: **
86543: **     [^...]     Matches one character not in the enclosed list.
86544: **
86545: ** With the [...] and [^...] matching, a ']' character can be included
86546: ** in the list by making it the first character after '[' or '^'.  A
86547: ** range of characters can be specified using '-'.  Example:
86548: ** "[a-z]" matches any single lower-case letter.  To match a '-', make
86549: ** it the last character in the list.
86550: **
86551: ** This routine is usually quick, but can be N**2 in the worst case.
86552: **
86553: ** Hints: to match '*' or '?', put them in "[]".  Like this:
86554: **
86555: **         abc[*]xyz        Matches "abc*xyz" only
86556: */
86557: static int patternCompare(
86558:   const u8 *zPattern,              /* The glob pattern */
86559:   const u8 *zString,               /* The string to compare against the glob */
86560:   const struct compareInfo *pInfo, /* Information about how to do the compare */
86561:   u32 esc                          /* The escape character */
86562: ){
86563:   u32 c, c2;
86564:   int invert;
86565:   int seen;
86566:   u8 matchOne = pInfo->matchOne;
86567:   u8 matchAll = pInfo->matchAll;
86568:   u8 matchSet = pInfo->matchSet;
86569:   u8 noCase = pInfo->noCase; 
86570:   int prevEscape = 0;     /* True if the previous character was 'escape' */
86571: 
86572:   while( (c = sqlite3Utf8Read(zPattern,&zPattern))!=0 ){
86573:     if( !prevEscape && c==matchAll ){
86574:       while( (c=sqlite3Utf8Read(zPattern,&zPattern)) == matchAll
86575:                || c == matchOne ){
86576:         if( c==matchOne && sqlite3Utf8Read(zString, &zString)==0 ){
86577:           return 0;
86578:         }
86579:       }
86580:       if( c==0 ){
86581:         return 1;
86582:       }else if( c==esc ){
86583:         c = sqlite3Utf8Read(zPattern, &zPattern);
86584:         if( c==0 ){
86585:           return 0;
86586:         }
86587:       }else if( c==matchSet ){
86588:         assert( esc==0 );         /* This is GLOB, not LIKE */
86589:         assert( matchSet<0x80 );  /* '[' is a single-byte character */
86590:         while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
86591:           SQLITE_SKIP_UTF8(zString);
86592:         }
86593:         return *zString!=0;
86594:       }
86595:       while( (c2 = sqlite3Utf8Read(zString,&zString))!=0 ){
86596:         if( noCase ){
86597:           GlogUpperToLower(c2);
86598:           GlogUpperToLower(c);
86599:           while( c2 != 0 && c2 != c ){
86600:             c2 = sqlite3Utf8Read(zString, &zString);
86601:             GlogUpperToLower(c2);
86602:           }
86603:         }else{
86604:           while( c2 != 0 && c2 != c ){
86605:             c2 = sqlite3Utf8Read(zString, &zString);
86606:           }
86607:         }
86608:         if( c2==0 ) return 0;
86609:         if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
86610:       }
86611:       return 0;
86612:     }else if( !prevEscape && c==matchOne ){
86613:       if( sqlite3Utf8Read(zString, &zString)==0 ){
86614:         return 0;
86615:       }
86616:     }else if( c==matchSet ){
86617:       u32 prior_c = 0;
86618:       assert( esc==0 );    /* This only occurs for GLOB, not LIKE */
86619:       seen = 0;
86620:       invert = 0;
86621:       c = sqlite3Utf8Read(zString, &zString);
86622:       if( c==0 ) return 0;
86623:       c2 = sqlite3Utf8Read(zPattern, &zPattern);
86624:       if( c2=='^' ){
86625:         invert = 1;
86626:         c2 = sqlite3Utf8Read(zPattern, &zPattern);
86627:       }
86628:       if( c2==']' ){
86629:         if( c==']' ) seen = 1;
86630:         c2 = sqlite3Utf8Read(zPattern, &zPattern);
86631:       }
86632:       while( c2 && c2!=']' ){
86633:         if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
86634:           c2 = sqlite3Utf8Read(zPattern, &zPattern);
86635:           if( c>=prior_c && c<=c2 ) seen = 1;
86636:           prior_c = 0;
86637:         }else{
86638:           if( c==c2 ){
86639:             seen = 1;
86640:           }
86641:           prior_c = c2;
86642:         }
86643:         c2 = sqlite3Utf8Read(zPattern, &zPattern);
86644:       }
86645:       if( c2==0 || (seen ^ invert)==0 ){
86646:         return 0;
86647:       }
86648:     }else if( esc==c && !prevEscape ){
86649:       prevEscape = 1;
86650:     }else{
86651:       c2 = sqlite3Utf8Read(zString, &zString);
86652:       if( noCase ){
86653:         GlogUpperToLower(c);
86654:         GlogUpperToLower(c2);
86655:       }
86656:       if( c!=c2 ){
86657:         return 0;
86658:       }
86659:       prevEscape = 0;
86660:     }
86661:   }
86662:   return *zString==0;
86663: }
86664: 
86665: /*
86666: ** Count the number of times that the LIKE operator (or GLOB which is
86667: ** just a variation of LIKE) gets called.  This is used for testing
86668: ** only.
86669: */
86670: #ifdef SQLITE_TEST
86671: SQLITE_API int sqlite3_like_count = 0;
86672: #endif
86673: 
86674: 
86675: /*
86676: ** Implementation of the like() SQL function.  This function implements
86677: ** the build-in LIKE operator.  The first argument to the function is the
86678: ** pattern and the second argument is the string.  So, the SQL statements:
86679: **
86680: **       A LIKE B
86681: **
86682: ** is implemented as like(B,A).
86683: **
86684: ** This same function (with a different compareInfo structure) computes
86685: ** the GLOB operator.
86686: */
86687: static void likeFunc(
86688:   sqlite3_context *context, 
86689:   int argc, 
86690:   sqlite3_value **argv
86691: ){
86692:   const unsigned char *zA, *zB;
86693:   u32 escape = 0;
86694:   int nPat;
86695:   sqlite3 *db = sqlite3_context_db_handle(context);
86696: 
86697:   zB = sqlite3_value_text(argv[0]);
86698:   zA = sqlite3_value_text(argv[1]);
86699: 
86700:   /* Limit the length of the LIKE or GLOB pattern to avoid problems
86701:   ** of deep recursion and N*N behavior in patternCompare().
86702:   */
86703:   nPat = sqlite3_value_bytes(argv[0]);
86704:   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
86705:   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
86706:   if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
86707:     sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
86708:     return;
86709:   }
86710:   assert( zB==sqlite3_value_text(argv[0]) );  /* Encoding did not change */
86711: 
86712:   if( argc==3 ){
86713:     /* The escape character string must consist of a single UTF-8 character.
86714:     ** Otherwise, return an error.
86715:     */
86716:     const unsigned char *zEsc = sqlite3_value_text(argv[2]);
86717:     if( zEsc==0 ) return;
86718:     if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
86719:       sqlite3_result_error(context, 
86720:           "ESCAPE expression must be a single character", -1);
86721:       return;
86722:     }
86723:     escape = sqlite3Utf8Read(zEsc, &zEsc);
86724:   }
86725:   if( zA && zB ){
86726:     struct compareInfo *pInfo = sqlite3_user_data(context);
86727: #ifdef SQLITE_TEST
86728:     sqlite3_like_count++;
86729: #endif
86730:     
86731:     sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
86732:   }
86733: }
86734: 
86735: /*
86736: ** Implementation of the NULLIF(x,y) function.  The result is the first
86737: ** argument if the arguments are different.  The result is NULL if the
86738: ** arguments are equal to each other.
86739: */
86740: static void nullifFunc(
86741:   sqlite3_context *context,
86742:   int NotUsed,
86743:   sqlite3_value **argv
86744: ){
86745:   CollSeq *pColl = sqlite3GetFuncCollSeq(context);
86746:   UNUSED_PARAMETER(NotUsed);
86747:   if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
86748:     sqlite3_result_value(context, argv[0]);
86749:   }
86750: }
86751: 
86752: /*
86753: ** Implementation of the sqlite_version() function.  The result is the version
86754: ** of the SQLite library that is running.
86755: */
86756: static void versionFunc(
86757:   sqlite3_context *context,
86758:   int NotUsed,
86759:   sqlite3_value **NotUsed2
86760: ){
86761:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
86762:   /* IMP: R-48699-48617 This function is an SQL wrapper around the
86763:   ** sqlite3_libversion() C-interface. */
86764:   sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
86765: }
86766: 
86767: /*
86768: ** Implementation of the sqlite_source_id() function. The result is a string
86769: ** that identifies the particular version of the source code used to build
86770: ** SQLite.
86771: */
86772: static void sourceidFunc(
86773:   sqlite3_context *context,
86774:   int NotUsed,
86775:   sqlite3_value **NotUsed2
86776: ){
86777:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
86778:   /* IMP: R-24470-31136 This function is an SQL wrapper around the
86779:   ** sqlite3_sourceid() C interface. */
86780:   sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
86781: }
86782: 
86783: /*
86784: ** Implementation of the sqlite_log() function.  This is a wrapper around
86785: ** sqlite3_log().  The return value is NULL.  The function exists purely for
86786: ** its side-effects.
86787: */
86788: static void errlogFunc(
86789:   sqlite3_context *context,
86790:   int argc,
86791:   sqlite3_value **argv
86792: ){
86793:   UNUSED_PARAMETER(argc);
86794:   UNUSED_PARAMETER(context);
86795:   sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
86796: }
86797: 
86798: /*
86799: ** Implementation of the sqlite_compileoption_used() function.
86800: ** The result is an integer that identifies if the compiler option
86801: ** was used to build SQLite.
86802: */
86803: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
86804: static void compileoptionusedFunc(
86805:   sqlite3_context *context,
86806:   int argc,
86807:   sqlite3_value **argv
86808: ){
86809:   const char *zOptName;
86810:   assert( argc==1 );
86811:   UNUSED_PARAMETER(argc);
86812:   /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
86813:   ** function is a wrapper around the sqlite3_compileoption_used() C/C++
86814:   ** function.
86815:   */
86816:   if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
86817:     sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
86818:   }
86819: }
86820: #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
86821: 
86822: /*
86823: ** Implementation of the sqlite_compileoption_get() function. 
86824: ** The result is a string that identifies the compiler options 
86825: ** used to build SQLite.
86826: */
86827: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
86828: static void compileoptiongetFunc(
86829:   sqlite3_context *context,
86830:   int argc,
86831:   sqlite3_value **argv
86832: ){
86833:   int n;
86834:   assert( argc==1 );
86835:   UNUSED_PARAMETER(argc);
86836:   /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
86837:   ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
86838:   */
86839:   n = sqlite3_value_int(argv[0]);
86840:   sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
86841: }
86842: #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
86843: 
86844: /* Array for converting from half-bytes (nybbles) into ASCII hex
86845: ** digits. */
86846: static const char hexdigits[] = {
86847:   '0', '1', '2', '3', '4', '5', '6', '7',
86848:   '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 
86849: };
86850: 
86851: /*
86852: ** EXPERIMENTAL - This is not an official function.  The interface may
86853: ** change.  This function may disappear.  Do not write code that depends
86854: ** on this function.
86855: **
86856: ** Implementation of the QUOTE() function.  This function takes a single
86857: ** argument.  If the argument is numeric, the return value is the same as
86858: ** the argument.  If the argument is NULL, the return value is the string
86859: ** "NULL".  Otherwise, the argument is enclosed in single quotes with
86860: ** single-quote escapes.
86861: */
86862: static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
86863:   assert( argc==1 );
86864:   UNUSED_PARAMETER(argc);
86865:   switch( sqlite3_value_type(argv[0]) ){
86866:     case SQLITE_INTEGER:
86867:     case SQLITE_FLOAT: {
86868:       sqlite3_result_value(context, argv[0]);
86869:       break;
86870:     }
86871:     case SQLITE_BLOB: {
86872:       char *zText = 0;
86873:       char const *zBlob = sqlite3_value_blob(argv[0]);
86874:       int nBlob = sqlite3_value_bytes(argv[0]);
86875:       assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
86876:       zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4); 
86877:       if( zText ){
86878:         int i;
86879:         for(i=0; i<nBlob; i++){
86880:           zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
86881:           zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
86882:         }
86883:         zText[(nBlob*2)+2] = '\'';
86884:         zText[(nBlob*2)+3] = '\0';
86885:         zText[0] = 'X';
86886:         zText[1] = '\'';
86887:         sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
86888:         sqlite3_free(zText);
86889:       }
86890:       break;
86891:     }
86892:     case SQLITE_TEXT: {
86893:       int i,j;
86894:       u64 n;
86895:       const unsigned char *zArg = sqlite3_value_text(argv[0]);
86896:       char *z;
86897: 
86898:       if( zArg==0 ) return;
86899:       for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
86900:       z = contextMalloc(context, ((i64)i)+((i64)n)+3);
86901:       if( z ){
86902:         z[0] = '\'';
86903:         for(i=0, j=1; zArg[i]; i++){
86904:           z[j++] = zArg[i];
86905:           if( zArg[i]=='\'' ){
86906:             z[j++] = '\'';
86907:           }
86908:         }
86909:         z[j++] = '\'';
86910:         z[j] = 0;
86911:         sqlite3_result_text(context, z, j, sqlite3_free);
86912:       }
86913:       break;
86914:     }
86915:     default: {
86916:       assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
86917:       sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
86918:       break;
86919:     }
86920:   }
86921: }
86922: 
86923: /*
86924: ** The hex() function.  Interpret the argument as a blob.  Return
86925: ** a hexadecimal rendering as text.
86926: */
86927: static void hexFunc(
86928:   sqlite3_context *context,
86929:   int argc,
86930:   sqlite3_value **argv
86931: ){
86932:   int i, n;
86933:   const unsigned char *pBlob;
86934:   char *zHex, *z;
86935:   assert( argc==1 );
86936:   UNUSED_PARAMETER(argc);
86937:   pBlob = sqlite3_value_blob(argv[0]);
86938:   n = sqlite3_value_bytes(argv[0]);
86939:   assert( pBlob==sqlite3_value_blob(argv[0]) );  /* No encoding change */
86940:   z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
86941:   if( zHex ){
86942:     for(i=0; i<n; i++, pBlob++){
86943:       unsigned char c = *pBlob;
86944:       *(z++) = hexdigits[(c>>4)&0xf];
86945:       *(z++) = hexdigits[c&0xf];
86946:     }
86947:     *z = 0;
86948:     sqlite3_result_text(context, zHex, n*2, sqlite3_free);
86949:   }
86950: }
86951: 
86952: /*
86953: ** The zeroblob(N) function returns a zero-filled blob of size N bytes.
86954: */
86955: static void zeroblobFunc(
86956:   sqlite3_context *context,
86957:   int argc,
86958:   sqlite3_value **argv
86959: ){
86960:   i64 n;
86961:   sqlite3 *db = sqlite3_context_db_handle(context);
86962:   assert( argc==1 );
86963:   UNUSED_PARAMETER(argc);
86964:   n = sqlite3_value_int64(argv[0]);
86965:   testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
86966:   testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
86967:   if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
86968:     sqlite3_result_error_toobig(context);
86969:   }else{
86970:     sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
86971:   }
86972: }
86973: 
86974: /*
86975: ** The replace() function.  Three arguments are all strings: call
86976: ** them A, B, and C. The result is also a string which is derived
86977: ** from A by replacing every occurance of B with C.  The match
86978: ** must be exact.  Collating sequences are not used.
86979: */
86980: static void replaceFunc(
86981:   sqlite3_context *context,
86982:   int argc,
86983:   sqlite3_value **argv
86984: ){
86985:   const unsigned char *zStr;        /* The input string A */
86986:   const unsigned char *zPattern;    /* The pattern string B */
86987:   const unsigned char *zRep;        /* The replacement string C */
86988:   unsigned char *zOut;              /* The output */
86989:   int nStr;                /* Size of zStr */
86990:   int nPattern;            /* Size of zPattern */
86991:   int nRep;                /* Size of zRep */
86992:   i64 nOut;                /* Maximum size of zOut */
86993:   int loopLimit;           /* Last zStr[] that might match zPattern[] */
86994:   int i, j;                /* Loop counters */
86995: 
86996:   assert( argc==3 );
86997:   UNUSED_PARAMETER(argc);
86998:   zStr = sqlite3_value_text(argv[0]);
86999:   if( zStr==0 ) return;
87000:   nStr = sqlite3_value_bytes(argv[0]);
87001:   assert( zStr==sqlite3_value_text(argv[0]) );  /* No encoding change */
87002:   zPattern = sqlite3_value_text(argv[1]);
87003:   if( zPattern==0 ){
87004:     assert( sqlite3_value_type(argv[1])==SQLITE_NULL
87005:             || sqlite3_context_db_handle(context)->mallocFailed );
87006:     return;
87007:   }
87008:   if( zPattern[0]==0 ){
87009:     assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
87010:     sqlite3_result_value(context, argv[0]);
87011:     return;
87012:   }
87013:   nPattern = sqlite3_value_bytes(argv[1]);
87014:   assert( zPattern==sqlite3_value_text(argv[1]) );  /* No encoding change */
87015:   zRep = sqlite3_value_text(argv[2]);
87016:   if( zRep==0 ) return;
87017:   nRep = sqlite3_value_bytes(argv[2]);
87018:   assert( zRep==sqlite3_value_text(argv[2]) );
87019:   nOut = nStr + 1;
87020:   assert( nOut<SQLITE_MAX_LENGTH );
87021:   zOut = contextMalloc(context, (i64)nOut);
87022:   if( zOut==0 ){
87023:     return;
87024:   }
87025:   loopLimit = nStr - nPattern;  
87026:   for(i=j=0; i<=loopLimit; i++){
87027:     if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
87028:       zOut[j++] = zStr[i];
87029:     }else{
87030:       u8 *zOld;
87031:       sqlite3 *db = sqlite3_context_db_handle(context);
87032:       nOut += nRep - nPattern;
87033:       testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
87034:       testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
87035:       if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
87036:         sqlite3_result_error_toobig(context);
87037:         sqlite3_free(zOut);
87038:         return;
87039:       }
87040:       zOld = zOut;
87041:       zOut = sqlite3_realloc(zOut, (int)nOut);
87042:       if( zOut==0 ){
87043:         sqlite3_result_error_nomem(context);
87044:         sqlite3_free(zOld);
87045:         return;
87046:       }
87047:       memcpy(&zOut[j], zRep, nRep);
87048:       j += nRep;
87049:       i += nPattern-1;
87050:     }
87051:   }
87052:   assert( j+nStr-i+1==nOut );
87053:   memcpy(&zOut[j], &zStr[i], nStr-i);
87054:   j += nStr - i;
87055:   assert( j<=nOut );
87056:   zOut[j] = 0;
87057:   sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
87058: }
87059: 
87060: /*
87061: ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
87062: ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
87063: */
87064: static void trimFunc(
87065:   sqlite3_context *context,
87066:   int argc,
87067:   sqlite3_value **argv
87068: ){
87069:   const unsigned char *zIn;         /* Input string */
87070:   const unsigned char *zCharSet;    /* Set of characters to trim */
87071:   int nIn;                          /* Number of bytes in input */
87072:   int flags;                        /* 1: trimleft  2: trimright  3: trim */
87073:   int i;                            /* Loop counter */
87074:   unsigned char *aLen = 0;          /* Length of each character in zCharSet */
87075:   unsigned char **azChar = 0;       /* Individual characters in zCharSet */
87076:   int nChar;                        /* Number of characters in zCharSet */
87077: 
87078:   if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
87079:     return;
87080:   }
87081:   zIn = sqlite3_value_text(argv[0]);
87082:   if( zIn==0 ) return;
87083:   nIn = sqlite3_value_bytes(argv[0]);
87084:   assert( zIn==sqlite3_value_text(argv[0]) );
87085:   if( argc==1 ){
87086:     static const unsigned char lenOne[] = { 1 };
87087:     static unsigned char * const azOne[] = { (u8*)" " };
87088:     nChar = 1;
87089:     aLen = (u8*)lenOne;
87090:     azChar = (unsigned char **)azOne;
87091:     zCharSet = 0;
87092:   }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
87093:     return;
87094:   }else{
87095:     const unsigned char *z;
87096:     for(z=zCharSet, nChar=0; *z; nChar++){
87097:       SQLITE_SKIP_UTF8(z);
87098:     }
87099:     if( nChar>0 ){
87100:       azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
87101:       if( azChar==0 ){
87102:         return;
87103:       }
87104:       aLen = (unsigned char*)&azChar[nChar];
87105:       for(z=zCharSet, nChar=0; *z; nChar++){
87106:         azChar[nChar] = (unsigned char *)z;
87107:         SQLITE_SKIP_UTF8(z);
87108:         aLen[nChar] = (u8)(z - azChar[nChar]);
87109:       }
87110:     }
87111:   }
87112:   if( nChar>0 ){
87113:     flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
87114:     if( flags & 1 ){
87115:       while( nIn>0 ){
87116:         int len = 0;
87117:         for(i=0; i<nChar; i++){
87118:           len = aLen[i];
87119:           if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
87120:         }
87121:         if( i>=nChar ) break;
87122:         zIn += len;
87123:         nIn -= len;
87124:       }
87125:     }
87126:     if( flags & 2 ){
87127:       while( nIn>0 ){
87128:         int len = 0;
87129:         for(i=0; i<nChar; i++){
87130:           len = aLen[i];
87131:           if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
87132:         }
87133:         if( i>=nChar ) break;
87134:         nIn -= len;
87135:       }
87136:     }
87137:     if( zCharSet ){
87138:       sqlite3_free(azChar);
87139:     }
87140:   }
87141:   sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
87142: }
87143: 
87144: 
87145: /* IMP: R-25361-16150 This function is omitted from SQLite by default. It
87146: ** is only available if the SQLITE_SOUNDEX compile-time option is used
87147: ** when SQLite is built.
87148: */
87149: #ifdef SQLITE_SOUNDEX
87150: /*
87151: ** Compute the soundex encoding of a word.
87152: **
87153: ** IMP: R-59782-00072 The soundex(X) function returns a string that is the
87154: ** soundex encoding of the string X. 
87155: */
87156: static void soundexFunc(
87157:   sqlite3_context *context,
87158:   int argc,
87159:   sqlite3_value **argv
87160: ){
87161:   char zResult[8];
87162:   const u8 *zIn;
87163:   int i, j;
87164:   static const unsigned char iCode[] = {
87165:     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87166:     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87167:     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87168:     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87169:     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
87170:     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
87171:     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
87172:     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
87173:   };
87174:   assert( argc==1 );
87175:   zIn = (u8*)sqlite3_value_text(argv[0]);
87176:   if( zIn==0 ) zIn = (u8*)"";
87177:   for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
87178:   if( zIn[i] ){
87179:     u8 prevcode = iCode[zIn[i]&0x7f];
87180:     zResult[0] = sqlite3Toupper(zIn[i]);
87181:     for(j=1; j<4 && zIn[i]; i++){
87182:       int code = iCode[zIn[i]&0x7f];
87183:       if( code>0 ){
87184:         if( code!=prevcode ){
87185:           prevcode = code;
87186:           zResult[j++] = code + '0';
87187:         }
87188:       }else{
87189:         prevcode = 0;
87190:       }
87191:     }
87192:     while( j<4 ){
87193:       zResult[j++] = '0';
87194:     }
87195:     zResult[j] = 0;
87196:     sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
87197:   }else{
87198:     /* IMP: R-64894-50321 The string "?000" is returned if the argument
87199:     ** is NULL or contains no ASCII alphabetic characters. */
87200:     sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
87201:   }
87202: }
87203: #endif /* SQLITE_SOUNDEX */
87204: 
87205: #ifndef SQLITE_OMIT_LOAD_EXTENSION
87206: /*
87207: ** A function that loads a shared-library extension then returns NULL.
87208: */
87209: static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
87210:   const char *zFile = (const char *)sqlite3_value_text(argv[0]);
87211:   const char *zProc;
87212:   sqlite3 *db = sqlite3_context_db_handle(context);
87213:   char *zErrMsg = 0;
87214: 
87215:   if( argc==2 ){
87216:     zProc = (const char *)sqlite3_value_text(argv[1]);
87217:   }else{
87218:     zProc = 0;
87219:   }
87220:   if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
87221:     sqlite3_result_error(context, zErrMsg, -1);
87222:     sqlite3_free(zErrMsg);
87223:   }
87224: }
87225: #endif
87226: 
87227: 
87228: /*
87229: ** An instance of the following structure holds the context of a
87230: ** sum() or avg() aggregate computation.
87231: */
87232: typedef struct SumCtx SumCtx;
87233: struct SumCtx {
87234:   double rSum;      /* Floating point sum */
87235:   i64 iSum;         /* Integer sum */   
87236:   i64 cnt;          /* Number of elements summed */
87237:   u8 overflow;      /* True if integer overflow seen */
87238:   u8 approx;        /* True if non-integer value was input to the sum */
87239: };
87240: 
87241: /*
87242: ** Routines used to compute the sum, average, and total.
87243: **
87244: ** The SUM() function follows the (broken) SQL standard which means
87245: ** that it returns NULL if it sums over no inputs.  TOTAL returns
87246: ** 0.0 in that case.  In addition, TOTAL always returns a float where
87247: ** SUM might return an integer if it never encounters a floating point
87248: ** value.  TOTAL never fails, but SUM might through an exception if
87249: ** it overflows an integer.
87250: */
87251: static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
87252:   SumCtx *p;
87253:   int type;
87254:   assert( argc==1 );
87255:   UNUSED_PARAMETER(argc);
87256:   p = sqlite3_aggregate_context(context, sizeof(*p));
87257:   type = sqlite3_value_numeric_type(argv[0]);
87258:   if( p && type!=SQLITE_NULL ){
87259:     p->cnt++;
87260:     if( type==SQLITE_INTEGER ){
87261:       i64 v = sqlite3_value_int64(argv[0]);
87262:       p->rSum += v;
87263:       if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
87264:         p->overflow = 1;
87265:       }
87266:     }else{
87267:       p->rSum += sqlite3_value_double(argv[0]);
87268:       p->approx = 1;
87269:     }
87270:   }
87271: }
87272: static void sumFinalize(sqlite3_context *context){
87273:   SumCtx *p;
87274:   p = sqlite3_aggregate_context(context, 0);
87275:   if( p && p->cnt>0 ){
87276:     if( p->overflow ){
87277:       sqlite3_result_error(context,"integer overflow",-1);
87278:     }else if( p->approx ){
87279:       sqlite3_result_double(context, p->rSum);
87280:     }else{
87281:       sqlite3_result_int64(context, p->iSum);
87282:     }
87283:   }
87284: }
87285: static void avgFinalize(sqlite3_context *context){
87286:   SumCtx *p;
87287:   p = sqlite3_aggregate_context(context, 0);
87288:   if( p && p->cnt>0 ){
87289:     sqlite3_result_double(context, p->rSum/(double)p->cnt);
87290:   }
87291: }
87292: static void totalFinalize(sqlite3_context *context){
87293:   SumCtx *p;
87294:   p = sqlite3_aggregate_context(context, 0);
87295:   /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
87296:   sqlite3_result_double(context, p ? p->rSum : (double)0);
87297: }
87298: 
87299: /*
87300: ** The following structure keeps track of state information for the
87301: ** count() aggregate function.
87302: */
87303: typedef struct CountCtx CountCtx;
87304: struct CountCtx {
87305:   i64 n;
87306: };
87307: 
87308: /*
87309: ** Routines to implement the count() aggregate function.
87310: */
87311: static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
87312:   CountCtx *p;
87313:   p = sqlite3_aggregate_context(context, sizeof(*p));
87314:   if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
87315:     p->n++;
87316:   }
87317: 
87318: #ifndef SQLITE_OMIT_DEPRECATED
87319:   /* The sqlite3_aggregate_count() function is deprecated.  But just to make
87320:   ** sure it still operates correctly, verify that its count agrees with our 
87321:   ** internal count when using count(*) and when the total count can be
87322:   ** expressed as a 32-bit integer. */
87323:   assert( argc==1 || p==0 || p->n>0x7fffffff
87324:           || p->n==sqlite3_aggregate_count(context) );
87325: #endif
87326: }   
87327: static void countFinalize(sqlite3_context *context){
87328:   CountCtx *p;
87329:   p = sqlite3_aggregate_context(context, 0);
87330:   sqlite3_result_int64(context, p ? p->n : 0);
87331: }
87332: 
87333: /*
87334: ** Routines to implement min() and max() aggregate functions.
87335: */
87336: static void minmaxStep(
87337:   sqlite3_context *context, 
87338:   int NotUsed, 
87339:   sqlite3_value **argv
87340: ){
87341:   Mem *pArg  = (Mem *)argv[0];
87342:   Mem *pBest;
87343:   UNUSED_PARAMETER(NotUsed);
87344: 
87345:   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
87346:   pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
87347:   if( !pBest ) return;
87348: 
87349:   if( pBest->flags ){
87350:     int max;
87351:     int cmp;
87352:     CollSeq *pColl = sqlite3GetFuncCollSeq(context);
87353:     /* This step function is used for both the min() and max() aggregates,
87354:     ** the only difference between the two being that the sense of the
87355:     ** comparison is inverted. For the max() aggregate, the
87356:     ** sqlite3_user_data() function returns (void *)-1. For min() it
87357:     ** returns (void *)db, where db is the sqlite3* database pointer.
87358:     ** Therefore the next statement sets variable 'max' to 1 for the max()
87359:     ** aggregate, or 0 for min().
87360:     */
87361:     max = sqlite3_user_data(context)!=0;
87362:     cmp = sqlite3MemCompare(pBest, pArg, pColl);
87363:     if( (max && cmp<0) || (!max && cmp>0) ){
87364:       sqlite3VdbeMemCopy(pBest, pArg);
87365:     }
87366:   }else{
87367:     sqlite3VdbeMemCopy(pBest, pArg);
87368:   }
87369: }
87370: static void minMaxFinalize(sqlite3_context *context){
87371:   sqlite3_value *pRes;
87372:   pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
87373:   if( pRes ){
87374:     if( ALWAYS(pRes->flags) ){
87375:       sqlite3_result_value(context, pRes);
87376:     }
87377:     sqlite3VdbeMemRelease(pRes);
87378:   }
87379: }
87380: 
87381: /*
87382: ** group_concat(EXPR, ?SEPARATOR?)
87383: */
87384: static void groupConcatStep(
87385:   sqlite3_context *context,
87386:   int argc,
87387:   sqlite3_value **argv
87388: ){
87389:   const char *zVal;
87390:   StrAccum *pAccum;
87391:   const char *zSep;
87392:   int nVal, nSep;
87393:   assert( argc==1 || argc==2 );
87394:   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
87395:   pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
87396: 
87397:   if( pAccum ){
87398:     sqlite3 *db = sqlite3_context_db_handle(context);
87399:     int firstTerm = pAccum->useMalloc==0;
87400:     pAccum->useMalloc = 2;
87401:     pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
87402:     if( !firstTerm ){
87403:       if( argc==2 ){
87404:         zSep = (char*)sqlite3_value_text(argv[1]);
87405:         nSep = sqlite3_value_bytes(argv[1]);
87406:       }else{
87407:         zSep = ",";
87408:         nSep = 1;
87409:       }
87410:       sqlite3StrAccumAppend(pAccum, zSep, nSep);
87411:     }
87412:     zVal = (char*)sqlite3_value_text(argv[0]);
87413:     nVal = sqlite3_value_bytes(argv[0]);
87414:     sqlite3StrAccumAppend(pAccum, zVal, nVal);
87415:   }
87416: }
87417: static void groupConcatFinalize(sqlite3_context *context){
87418:   StrAccum *pAccum;
87419:   pAccum = sqlite3_aggregate_context(context, 0);
87420:   if( pAccum ){
87421:     if( pAccum->tooBig ){
87422:       sqlite3_result_error_toobig(context);
87423:     }else if( pAccum->mallocFailed ){
87424:       sqlite3_result_error_nomem(context);
87425:     }else{    
87426:       sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1, 
87427:                           sqlite3_free);
87428:     }
87429:   }
87430: }
87431: 
87432: /*
87433: ** This routine does per-connection function registration.  Most
87434: ** of the built-in functions above are part of the global function set.
87435: ** This routine only deals with those that are not global.
87436: */
87437: SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
87438:   int rc = sqlite3_overload_function(db, "MATCH", 2);
87439:   assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
87440:   if( rc==SQLITE_NOMEM ){
87441:     db->mallocFailed = 1;
87442:   }
87443: }
87444: 
87445: /*
87446: ** Set the LIKEOPT flag on the 2-argument function with the given name.
87447: */
87448: static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
87449:   FuncDef *pDef;
87450:   pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
87451:                              2, SQLITE_UTF8, 0);
87452:   if( ALWAYS(pDef) ){
87453:     pDef->flags = flagVal;
87454:   }
87455: }
87456: 
87457: /*
87458: ** Register the built-in LIKE and GLOB functions.  The caseSensitive
87459: ** parameter determines whether or not the LIKE operator is case
87460: ** sensitive.  GLOB is always case sensitive.
87461: */
87462: SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
87463:   struct compareInfo *pInfo;
87464:   if( caseSensitive ){
87465:     pInfo = (struct compareInfo*)&likeInfoAlt;
87466:   }else{
87467:     pInfo = (struct compareInfo*)&likeInfoNorm;
87468:   }
87469:   sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
87470:   sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
87471:   sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8, 
87472:       (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
87473:   setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
87474:   setLikeOptFlag(db, "like", 
87475:       caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
87476: }
87477: 
87478: /*
87479: ** pExpr points to an expression which implements a function.  If
87480: ** it is appropriate to apply the LIKE optimization to that function
87481: ** then set aWc[0] through aWc[2] to the wildcard characters and
87482: ** return TRUE.  If the function is not a LIKE-style function then
87483: ** return FALSE.
87484: */
87485: SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
87486:   FuncDef *pDef;
87487:   if( pExpr->op!=TK_FUNCTION 
87488:    || !pExpr->x.pList 
87489:    || pExpr->x.pList->nExpr!=2
87490:   ){
87491:     return 0;
87492:   }
87493:   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
87494:   pDef = sqlite3FindFunction(db, pExpr->u.zToken, 
87495:                              sqlite3Strlen30(pExpr->u.zToken),
87496:                              2, SQLITE_UTF8, 0);
87497:   if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
87498:     return 0;
87499:   }
87500: 
87501:   /* The memcpy() statement assumes that the wildcard characters are
87502:   ** the first three statements in the compareInfo structure.  The
87503:   ** asserts() that follow verify that assumption
87504:   */
87505:   memcpy(aWc, pDef->pUserData, 3);
87506:   assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
87507:   assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
87508:   assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
87509:   *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
87510:   return 1;
87511: }
87512: 
87513: /*
87514: ** All all of the FuncDef structures in the aBuiltinFunc[] array above
87515: ** to the global function hash table.  This occurs at start-time (as
87516: ** a consequence of calling sqlite3_initialize()).
87517: **
87518: ** After this routine runs
87519: */
87520: SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){
87521:   /*
87522:   ** The following array holds FuncDef structures for all of the functions
87523:   ** defined in this file.
87524:   **
87525:   ** The array cannot be constant since changes are made to the
87526:   ** FuncDef.pHash elements at start-time.  The elements of this array
87527:   ** are read-only after initialization is complete.
87528:   */
87529:   static SQLITE_WSD FuncDef aBuiltinFunc[] = {
87530:     FUNCTION(ltrim,              1, 1, 0, trimFunc         ),
87531:     FUNCTION(ltrim,              2, 1, 0, trimFunc         ),
87532:     FUNCTION(rtrim,              1, 2, 0, trimFunc         ),
87533:     FUNCTION(rtrim,              2, 2, 0, trimFunc         ),
87534:     FUNCTION(trim,               1, 3, 0, trimFunc         ),
87535:     FUNCTION(trim,               2, 3, 0, trimFunc         ),
87536:     FUNCTION(min,               -1, 0, 1, minmaxFunc       ),
87537:     FUNCTION(min,                0, 0, 1, 0                ),
87538:     AGGREGATE(min,               1, 0, 1, minmaxStep,      minMaxFinalize ),
87539:     FUNCTION(max,               -1, 1, 1, minmaxFunc       ),
87540:     FUNCTION(max,                0, 1, 1, 0                ),
87541:     AGGREGATE(max,               1, 1, 1, minmaxStep,      minMaxFinalize ),
87542:     FUNCTION(typeof,             1, 0, 0, typeofFunc       ),
87543:     FUNCTION(length,             1, 0, 0, lengthFunc       ),
87544:     FUNCTION(substr,             2, 0, 0, substrFunc       ),
87545:     FUNCTION(substr,             3, 0, 0, substrFunc       ),
87546:     FUNCTION(abs,                1, 0, 0, absFunc          ),
87547: #ifndef SQLITE_OMIT_FLOATING_POINT
87548:     FUNCTION(round,              1, 0, 0, roundFunc        ),
87549:     FUNCTION(round,              2, 0, 0, roundFunc        ),
87550: #endif
87551:     FUNCTION(upper,              1, 0, 0, upperFunc        ),
87552:     FUNCTION(lower,              1, 0, 0, lowerFunc        ),
87553:     FUNCTION(coalesce,           1, 0, 0, 0                ),
87554:     FUNCTION(coalesce,           0, 0, 0, 0                ),
87555: /*  FUNCTION(coalesce,          -1, 0, 0, ifnullFunc       ), */
87556:     {-1,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"coalesce",0,0},
87557:     FUNCTION(hex,                1, 0, 0, hexFunc          ),
87558: /*  FUNCTION(ifnull,             2, 0, 0, ifnullFunc       ), */
87559:     {2,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"ifnull",0,0},
87560:     FUNCTION(random,             0, 0, 0, randomFunc       ),
87561:     FUNCTION(randomblob,         1, 0, 0, randomBlob       ),
87562:     FUNCTION(nullif,             2, 0, 1, nullifFunc       ),
87563:     FUNCTION(sqlite_version,     0, 0, 0, versionFunc      ),
87564:     FUNCTION(sqlite_source_id,   0, 0, 0, sourceidFunc     ),
87565:     FUNCTION(sqlite_log,         2, 0, 0, errlogFunc       ),
87566: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
87567:     FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc  ),
87568:     FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc  ),
87569: #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
87570:     FUNCTION(quote,              1, 0, 0, quoteFunc        ),
87571:     FUNCTION(last_insert_rowid,  0, 0, 0, last_insert_rowid),
87572:     FUNCTION(changes,            0, 0, 0, changes          ),
87573:     FUNCTION(total_changes,      0, 0, 0, total_changes    ),
87574:     FUNCTION(replace,            3, 0, 0, replaceFunc      ),
87575:     FUNCTION(zeroblob,           1, 0, 0, zeroblobFunc     ),
87576:   #ifdef SQLITE_SOUNDEX
87577:     FUNCTION(soundex,            1, 0, 0, soundexFunc      ),
87578:   #endif
87579:   #ifndef SQLITE_OMIT_LOAD_EXTENSION
87580:     FUNCTION(load_extension,     1, 0, 0, loadExt          ),
87581:     FUNCTION(load_extension,     2, 0, 0, loadExt          ),
87582:   #endif
87583:     AGGREGATE(sum,               1, 0, 0, sumStep,         sumFinalize    ),
87584:     AGGREGATE(total,             1, 0, 0, sumStep,         totalFinalize    ),
87585:     AGGREGATE(avg,               1, 0, 0, sumStep,         avgFinalize    ),
87586:  /* AGGREGATE(count,             0, 0, 0, countStep,       countFinalize  ), */
87587:     {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
87588:     AGGREGATE(count,             1, 0, 0, countStep,       countFinalize  ),
87589:     AGGREGATE(group_concat,      1, 0, 0, groupConcatStep, groupConcatFinalize),
87590:     AGGREGATE(group_concat,      2, 0, 0, groupConcatStep, groupConcatFinalize),
87591:   
87592:     LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
87593:   #ifdef SQLITE_CASE_SENSITIVE_LIKE
87594:     LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
87595:     LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
87596:   #else
87597:     LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
87598:     LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
87599:   #endif
87600:   };
87601: 
87602:   int i;
87603:   FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
87604:   FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
87605: 
87606:   for(i=0; i<ArraySize(aBuiltinFunc); i++){
87607:     sqlite3FuncDefInsert(pHash, &aFunc[i]);
87608:   }
87609:   sqlite3RegisterDateTimeFunctions();
87610: #ifndef SQLITE_OMIT_ALTERTABLE
87611:   sqlite3AlterFunctions();
87612: #endif
87613: }
87614: 
87615: /************** End of func.c ************************************************/
87616: /************** Begin file fkey.c ********************************************/
87617: /*
87618: **
87619: ** The author disclaims copyright to this source code.  In place of
87620: ** a legal notice, here is a blessing:
87621: **
87622: **    May you do good and not evil.
87623: **    May you find forgiveness for yourself and forgive others.
87624: **    May you share freely, never taking more than you give.
87625: **
87626: *************************************************************************
87627: ** This file contains code used by the compiler to add foreign key
87628: ** support to compiled SQL statements.
87629: */
87630: 
87631: #ifndef SQLITE_OMIT_FOREIGN_KEY
87632: #ifndef SQLITE_OMIT_TRIGGER
87633: 
87634: /*
87635: ** Deferred and Immediate FKs
87636: ** --------------------------
87637: **
87638: ** Foreign keys in SQLite come in two flavours: deferred and immediate.
87639: ** If an immediate foreign key constraint is violated, SQLITE_CONSTRAINT
87640: ** is returned and the current statement transaction rolled back. If a 
87641: ** deferred foreign key constraint is violated, no action is taken 
87642: ** immediately. However if the application attempts to commit the 
87643: ** transaction before fixing the constraint violation, the attempt fails.
87644: **
87645: ** Deferred constraints are implemented using a simple counter associated
87646: ** with the database handle. The counter is set to zero each time a 
87647: ** database transaction is opened. Each time a statement is executed 
87648: ** that causes a foreign key violation, the counter is incremented. Each
87649: ** time a statement is executed that removes an existing violation from
87650: ** the database, the counter is decremented. When the transaction is
87651: ** committed, the commit fails if the current value of the counter is
87652: ** greater than zero. This scheme has two big drawbacks:
87653: **
87654: **   * When a commit fails due to a deferred foreign key constraint, 
87655: **     there is no way to tell which foreign constraint is not satisfied,
87656: **     or which row it is not satisfied for.
87657: **
87658: **   * If the database contains foreign key violations when the 
87659: **     transaction is opened, this may cause the mechanism to malfunction.
87660: **
87661: ** Despite these problems, this approach is adopted as it seems simpler
87662: ** than the alternatives.
87663: **
87664: ** INSERT operations:
87665: **
87666: **   I.1) For each FK for which the table is the child table, search
87667: **        the parent table for a match. If none is found increment the
87668: **        constraint counter.
87669: **
87670: **   I.2) For each FK for which the table is the parent table, 
87671: **        search the child table for rows that correspond to the new
87672: **        row in the parent table. Decrement the counter for each row
87673: **        found (as the constraint is now satisfied).
87674: **
87675: ** DELETE operations:
87676: **
87677: **   D.1) For each FK for which the table is the child table, 
87678: **        search the parent table for a row that corresponds to the 
87679: **        deleted row in the child table. If such a row is not found, 
87680: **        decrement the counter.
87681: **
87682: **   D.2) For each FK for which the table is the parent table, search 
87683: **        the child table for rows that correspond to the deleted row 
87684: **        in the parent table. For each found increment the counter.
87685: **
87686: ** UPDATE operations:
87687: **
87688: **   An UPDATE command requires that all 4 steps above are taken, but only
87689: **   for FK constraints for which the affected columns are actually 
87690: **   modified (values must be compared at runtime).
87691: **
87692: ** Note that I.1 and D.1 are very similar operations, as are I.2 and D.2.
87693: ** This simplifies the implementation a bit.
87694: **
87695: ** For the purposes of immediate FK constraints, the OR REPLACE conflict
87696: ** resolution is considered to delete rows before the new row is inserted.
87697: ** If a delete caused by OR REPLACE violates an FK constraint, an exception
87698: ** is thrown, even if the FK constraint would be satisfied after the new 
87699: ** row is inserted.
87700: **
87701: ** Immediate constraints are usually handled similarly. The only difference 
87702: ** is that the counter used is stored as part of each individual statement
87703: ** object (struct Vdbe). If, after the statement has run, its immediate
87704: ** constraint counter is greater than zero, it returns SQLITE_CONSTRAINT
87705: ** and the statement transaction is rolled back. An exception is an INSERT
87706: ** statement that inserts a single row only (no triggers). In this case,
87707: ** instead of using a counter, an exception is thrown immediately if the
87708: ** INSERT violates a foreign key constraint. This is necessary as such
87709: ** an INSERT does not open a statement transaction.
87710: **
87711: ** TODO: How should dropping a table be handled? How should renaming a 
87712: ** table be handled?
87713: **
87714: **
87715: ** Query API Notes
87716: ** ---------------
87717: **
87718: ** Before coding an UPDATE or DELETE row operation, the code-generator
87719: ** for those two operations needs to know whether or not the operation
87720: ** requires any FK processing and, if so, which columns of the original
87721: ** row are required by the FK processing VDBE code (i.e. if FKs were
87722: ** implemented using triggers, which of the old.* columns would be 
87723: ** accessed). No information is required by the code-generator before
87724: ** coding an INSERT operation. The functions used by the UPDATE/DELETE
87725: ** generation code to query for this information are:
87726: **
87727: **   sqlite3FkRequired() - Test to see if FK processing is required.
87728: **   sqlite3FkOldmask()  - Query for the set of required old.* columns.
87729: **
87730: **
87731: ** Externally accessible module functions
87732: ** --------------------------------------
87733: **
87734: **   sqlite3FkCheck()    - Check for foreign key violations.
87735: **   sqlite3FkActions()  - Code triggers for ON UPDATE/ON DELETE actions.
87736: **   sqlite3FkDelete()   - Delete an FKey structure.
87737: */
87738: 
87739: /*
87740: ** VDBE Calling Convention
87741: ** -----------------------
87742: **
87743: ** Example:
87744: **
87745: **   For the following INSERT statement:
87746: **
87747: **     CREATE TABLE t1(a, b INTEGER PRIMARY KEY, c);
87748: **     INSERT INTO t1 VALUES(1, 2, 3.1);
87749: **
87750: **   Register (x):        2    (type integer)
87751: **   Register (x+1):      1    (type integer)
87752: **   Register (x+2):      NULL (type NULL)
87753: **   Register (x+3):      3.1  (type real)
87754: */
87755: 
87756: /*
87757: ** A foreign key constraint requires that the key columns in the parent
87758: ** table are collectively subject to a UNIQUE or PRIMARY KEY constraint.
87759: ** Given that pParent is the parent table for foreign key constraint pFKey, 
87760: ** search the schema a unique index on the parent key columns. 
87761: **
87762: ** If successful, zero is returned. If the parent key is an INTEGER PRIMARY 
87763: ** KEY column, then output variable *ppIdx is set to NULL. Otherwise, *ppIdx 
87764: ** is set to point to the unique index. 
87765: ** 
87766: ** If the parent key consists of a single column (the foreign key constraint
87767: ** is not a composite foreign key), output variable *paiCol is set to NULL.
87768: ** Otherwise, it is set to point to an allocated array of size N, where
87769: ** N is the number of columns in the parent key. The first element of the
87770: ** array is the index of the child table column that is mapped by the FK
87771: ** constraint to the parent table column stored in the left-most column
87772: ** of index *ppIdx. The second element of the array is the index of the
87773: ** child table column that corresponds to the second left-most column of
87774: ** *ppIdx, and so on.
87775: **
87776: ** If the required index cannot be found, either because:
87777: **
87778: **   1) The named parent key columns do not exist, or
87779: **
87780: **   2) The named parent key columns do exist, but are not subject to a
87781: **      UNIQUE or PRIMARY KEY constraint, or
87782: **
87783: **   3) No parent key columns were provided explicitly as part of the
87784: **      foreign key definition, and the parent table does not have a
87785: **      PRIMARY KEY, or
87786: **
87787: **   4) No parent key columns were provided explicitly as part of the
87788: **      foreign key definition, and the PRIMARY KEY of the parent table 
87789: **      consists of a a different number of columns to the child key in 
87790: **      the child table.
87791: **
87792: ** then non-zero is returned, and a "foreign key mismatch" error loaded
87793: ** into pParse. If an OOM error occurs, non-zero is returned and the
87794: ** pParse->db->mallocFailed flag is set.
87795: */
87796: static int locateFkeyIndex(
87797:   Parse *pParse,                  /* Parse context to store any error in */
87798:   Table *pParent,                 /* Parent table of FK constraint pFKey */
87799:   FKey *pFKey,                    /* Foreign key to find index for */
87800:   Index **ppIdx,                  /* OUT: Unique index on parent table */
87801:   int **paiCol                    /* OUT: Map of index columns in pFKey */
87802: ){
87803:   Index *pIdx = 0;                    /* Value to return via *ppIdx */
87804:   int *aiCol = 0;                     /* Value to return via *paiCol */
87805:   int nCol = pFKey->nCol;             /* Number of columns in parent key */
87806:   char *zKey = pFKey->aCol[0].zCol;   /* Name of left-most parent key column */
87807: 
87808:   /* The caller is responsible for zeroing output parameters. */
87809:   assert( ppIdx && *ppIdx==0 );
87810:   assert( !paiCol || *paiCol==0 );
87811:   assert( pParse );
87812: 
87813:   /* If this is a non-composite (single column) foreign key, check if it 
87814:   ** maps to the INTEGER PRIMARY KEY of table pParent. If so, leave *ppIdx 
87815:   ** and *paiCol set to zero and return early. 
87816:   **
87817:   ** Otherwise, for a composite foreign key (more than one column), allocate
87818:   ** space for the aiCol array (returned via output parameter *paiCol).
87819:   ** Non-composite foreign keys do not require the aiCol array.
87820:   */
87821:   if( nCol==1 ){
87822:     /* The FK maps to the IPK if any of the following are true:
87823:     **
87824:     **   1) There is an INTEGER PRIMARY KEY column and the FK is implicitly 
87825:     **      mapped to the primary key of table pParent, or
87826:     **   2) The FK is explicitly mapped to a column declared as INTEGER
87827:     **      PRIMARY KEY.
87828:     */
87829:     if( pParent->iPKey>=0 ){
87830:       if( !zKey ) return 0;
87831:       if( !sqlite3StrICmp(pParent->aCol[pParent->iPKey].zName, zKey) ) return 0;
87832:     }
87833:   }else if( paiCol ){
87834:     assert( nCol>1 );
87835:     aiCol = (int *)sqlite3DbMallocRaw(pParse->db, nCol*sizeof(int));
87836:     if( !aiCol ) return 1;
87837:     *paiCol = aiCol;
87838:   }
87839: 
87840:   for(pIdx=pParent->pIndex; pIdx; pIdx=pIdx->pNext){
87841:     if( pIdx->nColumn==nCol && pIdx->onError!=OE_None ){ 
87842:       /* pIdx is a UNIQUE index (or a PRIMARY KEY) and has the right number
87843:       ** of columns. If each indexed column corresponds to a foreign key
87844:       ** column of pFKey, then this index is a winner.  */
87845: 
87846:       if( zKey==0 ){
87847:         /* If zKey is NULL, then this foreign key is implicitly mapped to 
87848:         ** the PRIMARY KEY of table pParent. The PRIMARY KEY index may be 
87849:         ** identified by the test (Index.autoIndex==2).  */
87850:         if( pIdx->autoIndex==2 ){
87851:           if( aiCol ){
87852:             int i;
87853:             for(i=0; i<nCol; i++) aiCol[i] = pFKey->aCol[i].iFrom;
87854:           }
87855:           break;
87856:         }
87857:       }else{
87858:         /* If zKey is non-NULL, then this foreign key was declared to
87859:         ** map to an explicit list of columns in table pParent. Check if this
87860:         ** index matches those columns. Also, check that the index uses
87861:         ** the default collation sequences for each column. */
87862:         int i, j;
87863:         for(i=0; i<nCol; i++){
87864:           int iCol = pIdx->aiColumn[i];     /* Index of column in parent tbl */
87865:           char *zDfltColl;                  /* Def. collation for column */
87866:           char *zIdxCol;                    /* Name of indexed column */
87867: 
87868:           /* If the index uses a collation sequence that is different from
87869:           ** the default collation sequence for the column, this index is
87870:           ** unusable. Bail out early in this case.  */
87871:           zDfltColl = pParent->aCol[iCol].zColl;
87872:           if( !zDfltColl ){
87873:             zDfltColl = "BINARY";
87874:           }
87875:           if( sqlite3StrICmp(pIdx->azColl[i], zDfltColl) ) break;
87876: 
87877:           zIdxCol = pParent->aCol[iCol].zName;
87878:           for(j=0; j<nCol; j++){
87879:             if( sqlite3StrICmp(pFKey->aCol[j].zCol, zIdxCol)==0 ){
87880:               if( aiCol ) aiCol[i] = pFKey->aCol[j].iFrom;
87881:               break;
87882:             }
87883:           }
87884:           if( j==nCol ) break;
87885:         }
87886:         if( i==nCol ) break;      /* pIdx is usable */
87887:       }
87888:     }
87889:   }
87890: 
87891:   if( !pIdx ){
87892:     if( !pParse->disableTriggers ){
87893:       sqlite3ErrorMsg(pParse, "foreign key mismatch");
87894:     }
87895:     sqlite3DbFree(pParse->db, aiCol);
87896:     return 1;
87897:   }
87898: 
87899:   *ppIdx = pIdx;
87900:   return 0;
87901: }
87902: 
87903: /*
87904: ** This function is called when a row is inserted into or deleted from the 
87905: ** child table of foreign key constraint pFKey. If an SQL UPDATE is executed 
87906: ** on the child table of pFKey, this function is invoked twice for each row
87907: ** affected - once to "delete" the old row, and then again to "insert" the
87908: ** new row.
87909: **
87910: ** Each time it is called, this function generates VDBE code to locate the
87911: ** row in the parent table that corresponds to the row being inserted into 
87912: ** or deleted from the child table. If the parent row can be found, no 
87913: ** special action is taken. Otherwise, if the parent row can *not* be
87914: ** found in the parent table:
87915: **
87916: **   Operation | FK type   | Action taken
87917: **   --------------------------------------------------------------------------
87918: **   INSERT      immediate   Increment the "immediate constraint counter".
87919: **
87920: **   DELETE      immediate   Decrement the "immediate constraint counter".
87921: **
87922: **   INSERT      deferred    Increment the "deferred constraint counter".
87923: **
87924: **   DELETE      deferred    Decrement the "deferred constraint counter".
87925: **
87926: ** These operations are identified in the comment at the top of this file 
87927: ** (fkey.c) as "I.1" and "D.1".
87928: */
87929: static void fkLookupParent(
87930:   Parse *pParse,        /* Parse context */
87931:   int iDb,              /* Index of database housing pTab */
87932:   Table *pTab,          /* Parent table of FK pFKey */
87933:   Index *pIdx,          /* Unique index on parent key columns in pTab */
87934:   FKey *pFKey,          /* Foreign key constraint */
87935:   int *aiCol,           /* Map from parent key columns to child table columns */
87936:   int regData,          /* Address of array containing child table row */
87937:   int nIncr,            /* Increment constraint counter by this */
87938:   int isIgnore          /* If true, pretend pTab contains all NULL values */
87939: ){
87940:   int i;                                    /* Iterator variable */
87941:   Vdbe *v = sqlite3GetVdbe(pParse);         /* Vdbe to add code to */
87942:   int iCur = pParse->nTab - 1;              /* Cursor number to use */
87943:   int iOk = sqlite3VdbeMakeLabel(v);        /* jump here if parent key found */
87944: 
87945:   /* If nIncr is less than zero, then check at runtime if there are any
87946:   ** outstanding constraints to resolve. If there are not, there is no need
87947:   ** to check if deleting this row resolves any outstanding violations.
87948:   **
87949:   ** Check if any of the key columns in the child table row are NULL. If 
87950:   ** any are, then the constraint is considered satisfied. No need to 
87951:   ** search for a matching row in the parent table.  */
87952:   if( nIncr<0 ){
87953:     sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, iOk);
87954:   }
87955:   for(i=0; i<pFKey->nCol; i++){
87956:     int iReg = aiCol[i] + regData + 1;
87957:     sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iOk);
87958:   }
87959: 
87960:   if( isIgnore==0 ){
87961:     if( pIdx==0 ){
87962:       /* If pIdx is NULL, then the parent key is the INTEGER PRIMARY KEY
87963:       ** column of the parent table (table pTab).  */
87964:       int iMustBeInt;               /* Address of MustBeInt instruction */
87965:       int regTemp = sqlite3GetTempReg(pParse);
87966:   
87967:       /* Invoke MustBeInt to coerce the child key value to an integer (i.e. 
87968:       ** apply the affinity of the parent key). If this fails, then there
87969:       ** is no matching parent key. Before using MustBeInt, make a copy of
87970:       ** the value. Otherwise, the value inserted into the child key column
87971:       ** will have INTEGER affinity applied to it, which may not be correct.  */
87972:       sqlite3VdbeAddOp2(v, OP_SCopy, aiCol[0]+1+regData, regTemp);
87973:       iMustBeInt = sqlite3VdbeAddOp2(v, OP_MustBeInt, regTemp, 0);
87974:   
87975:       /* If the parent table is the same as the child table, and we are about
87976:       ** to increment the constraint-counter (i.e. this is an INSERT operation),
87977:       ** then check if the row being inserted matches itself. If so, do not
87978:       ** increment the constraint-counter.  */
87979:       if( pTab==pFKey->pFrom && nIncr==1 ){
87980:         sqlite3VdbeAddOp3(v, OP_Eq, regData, iOk, regTemp);
87981:       }
87982:   
87983:       sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenRead);
87984:       sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regTemp);
87985:       sqlite3VdbeAddOp2(v, OP_Goto, 0, iOk);
87986:       sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2);
87987:       sqlite3VdbeJumpHere(v, iMustBeInt);
87988:       sqlite3ReleaseTempReg(pParse, regTemp);
87989:     }else{
87990:       int nCol = pFKey->nCol;
87991:       int regTemp = sqlite3GetTempRange(pParse, nCol);
87992:       int regRec = sqlite3GetTempReg(pParse);
87993:       KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
87994:   
87995:       sqlite3VdbeAddOp3(v, OP_OpenRead, iCur, pIdx->tnum, iDb);
87996:       sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF);
87997:       for(i=0; i<nCol; i++){
87998:         sqlite3VdbeAddOp2(v, OP_Copy, aiCol[i]+1+regData, regTemp+i);
87999:       }
88000:   
88001:       /* If the parent table is the same as the child table, and we are about
88002:       ** to increment the constraint-counter (i.e. this is an INSERT operation),
88003:       ** then check if the row being inserted matches itself. If so, do not
88004:       ** increment the constraint-counter. 
88005:       **
88006:       ** If any of the parent-key values are NULL, then the row cannot match 
88007:       ** itself. So set JUMPIFNULL to make sure we do the OP_Found if any
88008:       ** of the parent-key values are NULL (at this point it is known that
88009:       ** none of the child key values are).
88010:       */
88011:       if( pTab==pFKey->pFrom && nIncr==1 ){
88012:         int iJump = sqlite3VdbeCurrentAddr(v) + nCol + 1;
88013:         for(i=0; i<nCol; i++){
88014:           int iChild = aiCol[i]+1+regData;
88015:           int iParent = pIdx->aiColumn[i]+1+regData;
88016:           assert( aiCol[i]!=pTab->iPKey );
88017:           if( pIdx->aiColumn[i]==pTab->iPKey ){
88018:             /* The parent key is a composite key that includes the IPK column */
88019:             iParent = regData;
88020:           }
88021:           sqlite3VdbeAddOp3(v, OP_Ne, iChild, iJump, iParent);
88022:           sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
88023:         }
88024:         sqlite3VdbeAddOp2(v, OP_Goto, 0, iOk);
88025:       }
88026:   
88027:       sqlite3VdbeAddOp3(v, OP_MakeRecord, regTemp, nCol, regRec);
88028:       sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v,pIdx), P4_TRANSIENT);
88029:       sqlite3VdbeAddOp4Int(v, OP_Found, iCur, iOk, regRec, 0);
88030:   
88031:       sqlite3ReleaseTempReg(pParse, regRec);
88032:       sqlite3ReleaseTempRange(pParse, regTemp, nCol);
88033:     }
88034:   }
88035: 
88036:   if( !pFKey->isDeferred && !pParse->pToplevel && !pParse->isMultiWrite ){
88037:     /* Special case: If this is an INSERT statement that will insert exactly
88038:     ** one row into the table, raise a constraint immediately instead of
88039:     ** incrementing a counter. This is necessary as the VM code is being
88040:     ** generated for will not open a statement transaction.  */
88041:     assert( nIncr==1 );
88042:     sqlite3HaltConstraint(
88043:         pParse, OE_Abort, "foreign key constraint failed", P4_STATIC
88044:     );
88045:   }else{
88046:     if( nIncr>0 && pFKey->isDeferred==0 ){
88047:       sqlite3ParseToplevel(pParse)->mayAbort = 1;
88048:     }
88049:     sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
88050:   }
88051: 
88052:   sqlite3VdbeResolveLabel(v, iOk);
88053:   sqlite3VdbeAddOp1(v, OP_Close, iCur);
88054: }
88055: 
88056: /*
88057: ** This function is called to generate code executed when a row is deleted
88058: ** from the parent table of foreign key constraint pFKey and, if pFKey is 
88059: ** deferred, when a row is inserted into the same table. When generating
88060: ** code for an SQL UPDATE operation, this function may be called twice -
88061: ** once to "delete" the old row and once to "insert" the new row.
88062: **
88063: ** The code generated by this function scans through the rows in the child
88064: ** table that correspond to the parent table row being deleted or inserted.
88065: ** For each child row found, one of the following actions is taken:
88066: **
88067: **   Operation | FK type   | Action taken
88068: **   --------------------------------------------------------------------------
88069: **   DELETE      immediate   Increment the "immediate constraint counter".
88070: **                           Or, if the ON (UPDATE|DELETE) action is RESTRICT,
88071: **                           throw a "foreign key constraint failed" exception.
88072: **
88073: **   INSERT      immediate   Decrement the "immediate constraint counter".
88074: **
88075: **   DELETE      deferred    Increment the "deferred constraint counter".
88076: **                           Or, if the ON (UPDATE|DELETE) action is RESTRICT,
88077: **                           throw a "foreign key constraint failed" exception.
88078: **
88079: **   INSERT      deferred    Decrement the "deferred constraint counter".
88080: **
88081: ** These operations are identified in the comment at the top of this file 
88082: ** (fkey.c) as "I.2" and "D.2".
88083: */
88084: static void fkScanChildren(
88085:   Parse *pParse,                  /* Parse context */
88086:   SrcList *pSrc,                  /* SrcList containing the table to scan */
88087:   Table *pTab,
88088:   Index *pIdx,                    /* Foreign key index */
88089:   FKey *pFKey,                    /* Foreign key relationship */
88090:   int *aiCol,                     /* Map from pIdx cols to child table cols */
88091:   int regData,                    /* Referenced table data starts here */
88092:   int nIncr                       /* Amount to increment deferred counter by */
88093: ){
88094:   sqlite3 *db = pParse->db;       /* Database handle */
88095:   int i;                          /* Iterator variable */
88096:   Expr *pWhere = 0;               /* WHERE clause to scan with */
88097:   NameContext sNameContext;       /* Context used to resolve WHERE clause */
88098:   WhereInfo *pWInfo;              /* Context used by sqlite3WhereXXX() */
88099:   int iFkIfZero = 0;              /* Address of OP_FkIfZero */
88100:   Vdbe *v = sqlite3GetVdbe(pParse);
88101: 
88102:   assert( !pIdx || pIdx->pTable==pTab );
88103: 
88104:   if( nIncr<0 ){
88105:     iFkIfZero = sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, 0);
88106:   }
88107: 
88108:   /* Create an Expr object representing an SQL expression like:
88109:   **
88110:   **   <parent-key1> = <child-key1> AND <parent-key2> = <child-key2> ...
88111:   **
88112:   ** The collation sequence used for the comparison should be that of
88113:   ** the parent key columns. The affinity of the parent key column should
88114:   ** be applied to each child key value before the comparison takes place.
88115:   */
88116:   for(i=0; i<pFKey->nCol; i++){
88117:     Expr *pLeft;                  /* Value from parent table row */
88118:     Expr *pRight;                 /* Column ref to child table */
88119:     Expr *pEq;                    /* Expression (pLeft = pRight) */
88120:     int iCol;                     /* Index of column in child table */ 
88121:     const char *zCol;             /* Name of column in child table */
88122: 
88123:     pLeft = sqlite3Expr(db, TK_REGISTER, 0);
88124:     if( pLeft ){
88125:       /* Set the collation sequence and affinity of the LHS of each TK_EQ
88126:       ** expression to the parent key column defaults.  */
88127:       if( pIdx ){
88128:         Column *pCol;
88129:         iCol = pIdx->aiColumn[i];
88130:         pCol = &pTab->aCol[iCol];
88131:         if( pTab->iPKey==iCol ) iCol = -1;
88132:         pLeft->iTable = regData+iCol+1;
88133:         pLeft->affinity = pCol->affinity;
88134:         pLeft->pColl = sqlite3LocateCollSeq(pParse, pCol->zColl);
88135:       }else{
88136:         pLeft->iTable = regData;
88137:         pLeft->affinity = SQLITE_AFF_INTEGER;
88138:       }
88139:     }
88140:     iCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom;
88141:     assert( iCol>=0 );
88142:     zCol = pFKey->pFrom->aCol[iCol].zName;
88143:     pRight = sqlite3Expr(db, TK_ID, zCol);
88144:     pEq = sqlite3PExpr(pParse, TK_EQ, pLeft, pRight, 0);
88145:     pWhere = sqlite3ExprAnd(db, pWhere, pEq);
88146:   }
88147: 
88148:   /* If the child table is the same as the parent table, and this scan
88149:   ** is taking place as part of a DELETE operation (operation D.2), omit the
88150:   ** row being deleted from the scan by adding ($rowid != rowid) to the WHERE 
88151:   ** clause, where $rowid is the rowid of the row being deleted.  */
88152:   if( pTab==pFKey->pFrom && nIncr>0 ){
88153:     Expr *pEq;                    /* Expression (pLeft = pRight) */
88154:     Expr *pLeft;                  /* Value from parent table row */
88155:     Expr *pRight;                 /* Column ref to child table */
88156:     pLeft = sqlite3Expr(db, TK_REGISTER, 0);
88157:     pRight = sqlite3Expr(db, TK_COLUMN, 0);
88158:     if( pLeft && pRight ){
88159:       pLeft->iTable = regData;
88160:       pLeft->affinity = SQLITE_AFF_INTEGER;
88161:       pRight->iTable = pSrc->a[0].iCursor;
88162:       pRight->iColumn = -1;
88163:     }
88164:     pEq = sqlite3PExpr(pParse, TK_NE, pLeft, pRight, 0);
88165:     pWhere = sqlite3ExprAnd(db, pWhere, pEq);
88166:   }
88167: 
88168:   /* Resolve the references in the WHERE clause. */
88169:   memset(&sNameContext, 0, sizeof(NameContext));
88170:   sNameContext.pSrcList = pSrc;
88171:   sNameContext.pParse = pParse;
88172:   sqlite3ResolveExprNames(&sNameContext, pWhere);
88173: 
88174:   /* Create VDBE to loop through the entries in pSrc that match the WHERE
88175:   ** clause. If the constraint is not deferred, throw an exception for
88176:   ** each row found. Otherwise, for deferred constraints, increment the
88177:   ** deferred constraint counter by nIncr for each row selected.  */
88178:   pWInfo = sqlite3WhereBegin(pParse, pSrc, pWhere, 0, 0, 0);
88179:   if( nIncr>0 && pFKey->isDeferred==0 ){
88180:     sqlite3ParseToplevel(pParse)->mayAbort = 1;
88181:   }
88182:   sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
88183:   if( pWInfo ){
88184:     sqlite3WhereEnd(pWInfo);
88185:   }
88186: 
88187:   /* Clean up the WHERE clause constructed above. */
88188:   sqlite3ExprDelete(db, pWhere);
88189:   if( iFkIfZero ){
88190:     sqlite3VdbeJumpHere(v, iFkIfZero);
88191:   }
88192: }
88193: 
88194: /*
88195: ** This function returns a pointer to the head of a linked list of FK
88196: ** constraints for which table pTab is the parent table. For example,
88197: ** given the following schema:
88198: **
88199: **   CREATE TABLE t1(a PRIMARY KEY);
88200: **   CREATE TABLE t2(b REFERENCES t1(a);
88201: **
88202: ** Calling this function with table "t1" as an argument returns a pointer
88203: ** to the FKey structure representing the foreign key constraint on table
88204: ** "t2". Calling this function with "t2" as the argument would return a
88205: ** NULL pointer (as there are no FK constraints for which t2 is the parent
88206: ** table).
88207: */
88208: SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *pTab){
88209:   int nName = sqlite3Strlen30(pTab->zName);
88210:   return (FKey *)sqlite3HashFind(&pTab->pSchema->fkeyHash, pTab->zName, nName);
88211: }
88212: 
88213: /*
88214: ** The second argument is a Trigger structure allocated by the 
88215: ** fkActionTrigger() routine. This function deletes the Trigger structure
88216: ** and all of its sub-components.
88217: **
88218: ** The Trigger structure or any of its sub-components may be allocated from
88219: ** the lookaside buffer belonging to database handle dbMem.
88220: */
88221: static void fkTriggerDelete(sqlite3 *dbMem, Trigger *p){
88222:   if( p ){
88223:     TriggerStep *pStep = p->step_list;
88224:     sqlite3ExprDelete(dbMem, pStep->pWhere);
88225:     sqlite3ExprListDelete(dbMem, pStep->pExprList);
88226:     sqlite3SelectDelete(dbMem, pStep->pSelect);
88227:     sqlite3ExprDelete(dbMem, p->pWhen);
88228:     sqlite3DbFree(dbMem, p);
88229:   }
88230: }
88231: 
88232: /*
88233: ** This function is called to generate code that runs when table pTab is
88234: ** being dropped from the database. The SrcList passed as the second argument
88235: ** to this function contains a single entry guaranteed to resolve to
88236: ** table pTab.
88237: **
88238: ** Normally, no code is required. However, if either
88239: **
88240: **   (a) The table is the parent table of a FK constraint, or
88241: **   (b) The table is the child table of a deferred FK constraint and it is
88242: **       determined at runtime that there are outstanding deferred FK 
88243: **       constraint violations in the database,
88244: **
88245: ** then the equivalent of "DELETE FROM <tbl>" is executed before dropping
88246: ** the table from the database. Triggers are disabled while running this
88247: ** DELETE, but foreign key actions are not.
88248: */
88249: SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTab){
88250:   sqlite3 *db = pParse->db;
88251:   if( (db->flags&SQLITE_ForeignKeys) && !IsVirtual(pTab) && !pTab->pSelect ){
88252:     int iSkip = 0;
88253:     Vdbe *v = sqlite3GetVdbe(pParse);
88254: 
88255:     assert( v );                  /* VDBE has already been allocated */
88256:     if( sqlite3FkReferences(pTab)==0 ){
88257:       /* Search for a deferred foreign key constraint for which this table
88258:       ** is the child table. If one cannot be found, return without 
88259:       ** generating any VDBE code. If one can be found, then jump over
88260:       ** the entire DELETE if there are no outstanding deferred constraints
88261:       ** when this statement is run.  */
88262:       FKey *p;
88263:       for(p=pTab->pFKey; p; p=p->pNextFrom){
88264:         if( p->isDeferred ) break;
88265:       }
88266:       if( !p ) return;
88267:       iSkip = sqlite3VdbeMakeLabel(v);
88268:       sqlite3VdbeAddOp2(v, OP_FkIfZero, 1, iSkip);
88269:     }
88270: 
88271:     pParse->disableTriggers = 1;
88272:     sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0);
88273:     pParse->disableTriggers = 0;
88274: 
88275:     /* If the DELETE has generated immediate foreign key constraint 
88276:     ** violations, halt the VDBE and return an error at this point, before
88277:     ** any modifications to the schema are made. This is because statement
88278:     ** transactions are not able to rollback schema changes.  */
88279:     sqlite3VdbeAddOp2(v, OP_FkIfZero, 0, sqlite3VdbeCurrentAddr(v)+2);
88280:     sqlite3HaltConstraint(
88281:         pParse, OE_Abort, "foreign key constraint failed", P4_STATIC
88282:     );
88283: 
88284:     if( iSkip ){
88285:       sqlite3VdbeResolveLabel(v, iSkip);
88286:     }
88287:   }
88288: }
88289: 
88290: /*
88291: ** This function is called when inserting, deleting or updating a row of
88292: ** table pTab to generate VDBE code to perform foreign key constraint 
88293: ** processing for the operation.
88294: **
88295: ** For a DELETE operation, parameter regOld is passed the index of the
88296: ** first register in an array of (pTab->nCol+1) registers containing the
88297: ** rowid of the row being deleted, followed by each of the column values
88298: ** of the row being deleted, from left to right. Parameter regNew is passed
88299: ** zero in this case.
88300: **
88301: ** For an INSERT operation, regOld is passed zero and regNew is passed the
88302: ** first register of an array of (pTab->nCol+1) registers containing the new
88303: ** row data.
88304: **
88305: ** For an UPDATE operation, this function is called twice. Once before
88306: ** the original record is deleted from the table using the calling convention
88307: ** described for DELETE. Then again after the original record is deleted
88308: ** but before the new record is inserted using the INSERT convention. 
88309: */
88310: SQLITE_PRIVATE void sqlite3FkCheck(
88311:   Parse *pParse,                  /* Parse context */
88312:   Table *pTab,                    /* Row is being deleted from this table */ 
88313:   int regOld,                     /* Previous row data is stored here */
88314:   int regNew                      /* New row data is stored here */
88315: ){
88316:   sqlite3 *db = pParse->db;       /* Database handle */
88317:   FKey *pFKey;                    /* Used to iterate through FKs */
88318:   int iDb;                        /* Index of database containing pTab */
88319:   const char *zDb;                /* Name of database containing pTab */
88320:   int isIgnoreErrors = pParse->disableTriggers;
88321: 
88322:   /* Exactly one of regOld and regNew should be non-zero. */
88323:   assert( (regOld==0)!=(regNew==0) );
88324: 
88325:   /* If foreign-keys are disabled, this function is a no-op. */
88326:   if( (db->flags&SQLITE_ForeignKeys)==0 ) return;
88327: 
88328:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
88329:   zDb = db->aDb[iDb].zName;
88330: 
88331:   /* Loop through all the foreign key constraints for which pTab is the
88332:   ** child table (the table that the foreign key definition is part of).  */
88333:   for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){
88334:     Table *pTo;                   /* Parent table of foreign key pFKey */
88335:     Index *pIdx = 0;              /* Index on key columns in pTo */
88336:     int *aiFree = 0;
88337:     int *aiCol;
88338:     int iCol;
88339:     int i;
88340:     int isIgnore = 0;
88341: 
88342:     /* Find the parent table of this foreign key. Also find a unique index 
88343:     ** on the parent key columns in the parent table. If either of these 
88344:     ** schema items cannot be located, set an error in pParse and return 
88345:     ** early.  */
88346:     if( pParse->disableTriggers ){
88347:       pTo = sqlite3FindTable(db, pFKey->zTo, zDb);
88348:     }else{
88349:       pTo = sqlite3LocateTable(pParse, 0, pFKey->zTo, zDb);
88350:     }
88351:     if( !pTo || locateFkeyIndex(pParse, pTo, pFKey, &pIdx, &aiFree) ){
88352:       assert( isIgnoreErrors==0 || (regOld!=0 && regNew==0) );
88353:       if( !isIgnoreErrors || db->mallocFailed ) return;
88354:       if( pTo==0 ){
88355:         /* If isIgnoreErrors is true, then a table is being dropped. In this
88356:         ** case SQLite runs a "DELETE FROM xxx" on the table being dropped
88357:         ** before actually dropping it in order to check FK constraints.
88358:         ** If the parent table of an FK constraint on the current table is
88359:         ** missing, behave as if it is empty. i.e. decrement the relevant
88360:         ** FK counter for each row of the current table with non-NULL keys.
88361:         */
88362:         Vdbe *v = sqlite3GetVdbe(pParse);
88363:         int iJump = sqlite3VdbeCurrentAddr(v) + pFKey->nCol + 1;
88364:         for(i=0; i<pFKey->nCol; i++){
88365:           int iReg = pFKey->aCol[i].iFrom + regOld + 1;
88366:           sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iJump);
88367:         }
88368:         sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, -1);
88369:       }
88370:       continue;
88371:     }
88372:     assert( pFKey->nCol==1 || (aiFree && pIdx) );
88373: 
88374:     if( aiFree ){
88375:       aiCol = aiFree;
88376:     }else{
88377:       iCol = pFKey->aCol[0].iFrom;
88378:       aiCol = &iCol;
88379:     }
88380:     for(i=0; i<pFKey->nCol; i++){
88381:       if( aiCol[i]==pTab->iPKey ){
88382:         aiCol[i] = -1;
88383:       }
88384: #ifndef SQLITE_OMIT_AUTHORIZATION
88385:       /* Request permission to read the parent key columns. If the 
88386:       ** authorization callback returns SQLITE_IGNORE, behave as if any
88387:       ** values read from the parent table are NULL. */
88388:       if( db->xAuth ){
88389:         int rcauth;
88390:         char *zCol = pTo->aCol[pIdx ? pIdx->aiColumn[i] : pTo->iPKey].zName;
88391:         rcauth = sqlite3AuthReadCol(pParse, pTo->zName, zCol, iDb);
88392:         isIgnore = (rcauth==SQLITE_IGNORE);
88393:       }
88394: #endif
88395:     }
88396: 
88397:     /* Take a shared-cache advisory read-lock on the parent table. Allocate 
88398:     ** a cursor to use to search the unique index on the parent key columns 
88399:     ** in the parent table.  */
88400:     sqlite3TableLock(pParse, iDb, pTo->tnum, 0, pTo->zName);
88401:     pParse->nTab++;
88402: 
88403:     if( regOld!=0 ){
88404:       /* A row is being removed from the child table. Search for the parent.
88405:       ** If the parent does not exist, removing the child row resolves an 
88406:       ** outstanding foreign key constraint violation. */
88407:       fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regOld, -1,isIgnore);
88408:     }
88409:     if( regNew!=0 ){
88410:       /* A row is being added to the child table. If a parent row cannot
88411:       ** be found, adding the child row has violated the FK constraint. */ 
88412:       fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regNew, +1,isIgnore);
88413:     }
88414: 
88415:     sqlite3DbFree(db, aiFree);
88416:   }
88417: 
88418:   /* Loop through all the foreign key constraints that refer to this table */
88419:   for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){
88420:     Index *pIdx = 0;              /* Foreign key index for pFKey */
88421:     SrcList *pSrc;
88422:     int *aiCol = 0;
88423: 
88424:     if( !pFKey->isDeferred && !pParse->pToplevel && !pParse->isMultiWrite ){
88425:       assert( regOld==0 && regNew!=0 );
88426:       /* Inserting a single row into a parent table cannot cause an immediate
88427:       ** foreign key violation. So do nothing in this case.  */
88428:       continue;
88429:     }
88430: 
88431:     if( locateFkeyIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ){
88432:       if( !isIgnoreErrors || db->mallocFailed ) return;
88433:       continue;
88434:     }
88435:     assert( aiCol || pFKey->nCol==1 );
88436: 
88437:     /* Create a SrcList structure containing a single table (the table 
88438:     ** the foreign key that refers to this table is attached to). This
88439:     ** is required for the sqlite3WhereXXX() interface.  */
88440:     pSrc = sqlite3SrcListAppend(db, 0, 0, 0);
88441:     if( pSrc ){
88442:       struct SrcList_item *pItem = pSrc->a;
88443:       pItem->pTab = pFKey->pFrom;
88444:       pItem->zName = pFKey->pFrom->zName;
88445:       pItem->pTab->nRef++;
88446:       pItem->iCursor = pParse->nTab++;
88447:   
88448:       if( regNew!=0 ){
88449:         fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regNew, -1);
88450:       }
88451:       if( regOld!=0 ){
88452:         /* If there is a RESTRICT action configured for the current operation
88453:         ** on the parent table of this FK, then throw an exception 
88454:         ** immediately if the FK constraint is violated, even if this is a
88455:         ** deferred trigger. That's what RESTRICT means. To defer checking
88456:         ** the constraint, the FK should specify NO ACTION (represented
88457:         ** using OE_None). NO ACTION is the default.  */
88458:         fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regOld, 1);
88459:       }
88460:       pItem->zName = 0;
88461:       sqlite3SrcListDelete(db, pSrc);
88462:     }
88463:     sqlite3DbFree(db, aiCol);
88464:   }
88465: }
88466: 
88467: #define COLUMN_MASK(x) (((x)>31) ? 0xffffffff : ((u32)1<<(x)))
88468: 
88469: /*
88470: ** This function is called before generating code to update or delete a 
88471: ** row contained in table pTab.
88472: */
88473: SQLITE_PRIVATE u32 sqlite3FkOldmask(
88474:   Parse *pParse,                  /* Parse context */
88475:   Table *pTab                     /* Table being modified */
88476: ){
88477:   u32 mask = 0;
88478:   if( pParse->db->flags&SQLITE_ForeignKeys ){
88479:     FKey *p;
88480:     int i;
88481:     for(p=pTab->pFKey; p; p=p->pNextFrom){
88482:       for(i=0; i<p->nCol; i++) mask |= COLUMN_MASK(p->aCol[i].iFrom);
88483:     }
88484:     for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
88485:       Index *pIdx = 0;
88486:       locateFkeyIndex(pParse, pTab, p, &pIdx, 0);
88487:       if( pIdx ){
88488:         for(i=0; i<pIdx->nColumn; i++) mask |= COLUMN_MASK(pIdx->aiColumn[i]);
88489:       }
88490:     }
88491:   }
88492:   return mask;
88493: }
88494: 
88495: /*
88496: ** This function is called before generating code to update or delete a 
88497: ** row contained in table pTab. If the operation is a DELETE, then
88498: ** parameter aChange is passed a NULL value. For an UPDATE, aChange points
88499: ** to an array of size N, where N is the number of columns in table pTab.
88500: ** If the i'th column is not modified by the UPDATE, then the corresponding 
88501: ** entry in the aChange[] array is set to -1. If the column is modified,
88502: ** the value is 0 or greater. Parameter chngRowid is set to true if the
88503: ** UPDATE statement modifies the rowid fields of the table.
88504: **
88505: ** If any foreign key processing will be required, this function returns
88506: ** true. If there is no foreign key related processing, this function 
88507: ** returns false.
88508: */
88509: SQLITE_PRIVATE int sqlite3FkRequired(
88510:   Parse *pParse,                  /* Parse context */
88511:   Table *pTab,                    /* Table being modified */
88512:   int *aChange,                   /* Non-NULL for UPDATE operations */
88513:   int chngRowid                   /* True for UPDATE that affects rowid */
88514: ){
88515:   if( pParse->db->flags&SQLITE_ForeignKeys ){
88516:     if( !aChange ){
88517:       /* A DELETE operation. Foreign key processing is required if the 
88518:       ** table in question is either the child or parent table for any 
88519:       ** foreign key constraint.  */
88520:       return (sqlite3FkReferences(pTab) || pTab->pFKey);
88521:     }else{
88522:       /* This is an UPDATE. Foreign key processing is only required if the
88523:       ** operation modifies one or more child or parent key columns. */
88524:       int i;
88525:       FKey *p;
88526: 
88527:       /* Check if any child key columns are being modified. */
88528:       for(p=pTab->pFKey; p; p=p->pNextFrom){
88529:         for(i=0; i<p->nCol; i++){
88530:           int iChildKey = p->aCol[i].iFrom;
88531:           if( aChange[iChildKey]>=0 ) return 1;
88532:           if( iChildKey==pTab->iPKey && chngRowid ) return 1;
88533:         }
88534:       }
88535: 
88536:       /* Check if any parent key columns are being modified. */
88537:       for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
88538:         for(i=0; i<p->nCol; i++){
88539:           char *zKey = p->aCol[i].zCol;
88540:           int iKey;
88541:           for(iKey=0; iKey<pTab->nCol; iKey++){
88542:             Column *pCol = &pTab->aCol[iKey];
88543:             if( (zKey ? !sqlite3StrICmp(pCol->zName, zKey) : pCol->isPrimKey) ){
88544:               if( aChange[iKey]>=0 ) return 1;
88545:               if( iKey==pTab->iPKey && chngRowid ) return 1;
88546:             }
88547:           }
88548:         }
88549:       }
88550:     }
88551:   }
88552:   return 0;
88553: }
88554: 
88555: /*
88556: ** This function is called when an UPDATE or DELETE operation is being 
88557: ** compiled on table pTab, which is the parent table of foreign-key pFKey.
88558: ** If the current operation is an UPDATE, then the pChanges parameter is
88559: ** passed a pointer to the list of columns being modified. If it is a
88560: ** DELETE, pChanges is passed a NULL pointer.
88561: **
88562: ** It returns a pointer to a Trigger structure containing a trigger
88563: ** equivalent to the ON UPDATE or ON DELETE action specified by pFKey.
88564: ** If the action is "NO ACTION" or "RESTRICT", then a NULL pointer is
88565: ** returned (these actions require no special handling by the triggers
88566: ** sub-system, code for them is created by fkScanChildren()).
88567: **
88568: ** For example, if pFKey is the foreign key and pTab is table "p" in 
88569: ** the following schema:
88570: **
88571: **   CREATE TABLE p(pk PRIMARY KEY);
88572: **   CREATE TABLE c(ck REFERENCES p ON DELETE CASCADE);
88573: **
88574: ** then the returned trigger structure is equivalent to:
88575: **
88576: **   CREATE TRIGGER ... DELETE ON p BEGIN
88577: **     DELETE FROM c WHERE ck = old.pk;
88578: **   END;
88579: **
88580: ** The returned pointer is cached as part of the foreign key object. It
88581: ** is eventually freed along with the rest of the foreign key object by 
88582: ** sqlite3FkDelete().
88583: */
88584: static Trigger *fkActionTrigger(
88585:   Parse *pParse,                  /* Parse context */
88586:   Table *pTab,                    /* Table being updated or deleted from */
88587:   FKey *pFKey,                    /* Foreign key to get action for */
88588:   ExprList *pChanges              /* Change-list for UPDATE, NULL for DELETE */
88589: ){
88590:   sqlite3 *db = pParse->db;       /* Database handle */
88591:   int action;                     /* One of OE_None, OE_Cascade etc. */
88592:   Trigger *pTrigger;              /* Trigger definition to return */
88593:   int iAction = (pChanges!=0);    /* 1 for UPDATE, 0 for DELETE */
88594: 
88595:   action = pFKey->aAction[iAction];
88596:   pTrigger = pFKey->apTrigger[iAction];
88597: 
88598:   if( action!=OE_None && !pTrigger ){
88599:     u8 enableLookaside;           /* Copy of db->lookaside.bEnabled */
88600:     char const *zFrom;            /* Name of child table */
88601:     int nFrom;                    /* Length in bytes of zFrom */
88602:     Index *pIdx = 0;              /* Parent key index for this FK */
88603:     int *aiCol = 0;               /* child table cols -> parent key cols */
88604:     TriggerStep *pStep = 0;        /* First (only) step of trigger program */
88605:     Expr *pWhere = 0;             /* WHERE clause of trigger step */
88606:     ExprList *pList = 0;          /* Changes list if ON UPDATE CASCADE */
88607:     Select *pSelect = 0;          /* If RESTRICT, "SELECT RAISE(...)" */
88608:     int i;                        /* Iterator variable */
88609:     Expr *pWhen = 0;              /* WHEN clause for the trigger */
88610: 
88611:     if( locateFkeyIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ) return 0;
88612:     assert( aiCol || pFKey->nCol==1 );
88613: 
88614:     for(i=0; i<pFKey->nCol; i++){
88615:       Token tOld = { "old", 3 };  /* Literal "old" token */
88616:       Token tNew = { "new", 3 };  /* Literal "new" token */
88617:       Token tFromCol;             /* Name of column in child table */
88618:       Token tToCol;               /* Name of column in parent table */
88619:       int iFromCol;               /* Idx of column in child table */
88620:       Expr *pEq;                  /* tFromCol = OLD.tToCol */
88621: 
88622:       iFromCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom;
88623:       assert( iFromCol>=0 );
88624:       tToCol.z = pIdx ? pTab->aCol[pIdx->aiColumn[i]].zName : "oid";
88625:       tFromCol.z = pFKey->pFrom->aCol[iFromCol].zName;
88626: 
88627:       tToCol.n = sqlite3Strlen30(tToCol.z);
88628:       tFromCol.n = sqlite3Strlen30(tFromCol.z);
88629: 
88630:       /* Create the expression "OLD.zToCol = zFromCol". It is important
88631:       ** that the "OLD.zToCol" term is on the LHS of the = operator, so
88632:       ** that the affinity and collation sequence associated with the
88633:       ** parent table are used for the comparison. */
88634:       pEq = sqlite3PExpr(pParse, TK_EQ,
88635:           sqlite3PExpr(pParse, TK_DOT, 
88636:             sqlite3PExpr(pParse, TK_ID, 0, 0, &tOld),
88637:             sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol)
88638:           , 0),
88639:           sqlite3PExpr(pParse, TK_ID, 0, 0, &tFromCol)
88640:       , 0);
88641:       pWhere = sqlite3ExprAnd(db, pWhere, pEq);
88642: 
88643:       /* For ON UPDATE, construct the next term of the WHEN clause.
88644:       ** The final WHEN clause will be like this:
88645:       **
88646:       **    WHEN NOT(old.col1 IS new.col1 AND ... AND old.colN IS new.colN)
88647:       */
88648:       if( pChanges ){
88649:         pEq = sqlite3PExpr(pParse, TK_IS,
88650:             sqlite3PExpr(pParse, TK_DOT, 
88651:               sqlite3PExpr(pParse, TK_ID, 0, 0, &tOld),
88652:               sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol),
88653:               0),
88654:             sqlite3PExpr(pParse, TK_DOT, 
88655:               sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew),
88656:               sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol),
88657:               0),
88658:             0);
88659:         pWhen = sqlite3ExprAnd(db, pWhen, pEq);
88660:       }
88661:   
88662:       if( action!=OE_Restrict && (action!=OE_Cascade || pChanges) ){
88663:         Expr *pNew;
88664:         if( action==OE_Cascade ){
88665:           pNew = sqlite3PExpr(pParse, TK_DOT, 
88666:             sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew),
88667:             sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol)
88668:           , 0);
88669:         }else if( action==OE_SetDflt ){
88670:           Expr *pDflt = pFKey->pFrom->aCol[iFromCol].pDflt;
88671:           if( pDflt ){
88672:             pNew = sqlite3ExprDup(db, pDflt, 0);
88673:           }else{
88674:             pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0);
88675:           }
88676:         }else{
88677:           pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0);
88678:         }
88679:         pList = sqlite3ExprListAppend(pParse, pList, pNew);
88680:         sqlite3ExprListSetName(pParse, pList, &tFromCol, 0);
88681:       }
88682:     }
88683:     sqlite3DbFree(db, aiCol);
88684: 
88685:     zFrom = pFKey->pFrom->zName;
88686:     nFrom = sqlite3Strlen30(zFrom);
88687: 
88688:     if( action==OE_Restrict ){
88689:       Token tFrom;
88690:       Expr *pRaise; 
88691: 
88692:       tFrom.z = zFrom;
88693:       tFrom.n = nFrom;
88694:       pRaise = sqlite3Expr(db, TK_RAISE, "foreign key constraint failed");
88695:       if( pRaise ){
88696:         pRaise->affinity = OE_Abort;
88697:       }
88698:       pSelect = sqlite3SelectNew(pParse, 
88699:           sqlite3ExprListAppend(pParse, 0, pRaise),
88700:           sqlite3SrcListAppend(db, 0, &tFrom, 0),
88701:           pWhere,
88702:           0, 0, 0, 0, 0, 0
88703:       );
88704:       pWhere = 0;
88705:     }
88706: 
88707:     /* Disable lookaside memory allocation */
88708:     enableLookaside = db->lookaside.bEnabled;
88709:     db->lookaside.bEnabled = 0;
88710: 
88711:     pTrigger = (Trigger *)sqlite3DbMallocZero(db, 
88712:         sizeof(Trigger) +         /* struct Trigger */
88713:         sizeof(TriggerStep) +     /* Single step in trigger program */
88714:         nFrom + 1                 /* Space for pStep->target.z */
88715:     );
88716:     if( pTrigger ){
88717:       pStep = pTrigger->step_list = (TriggerStep *)&pTrigger[1];
88718:       pStep->target.z = (char *)&pStep[1];
88719:       pStep->target.n = nFrom;
88720:       memcpy((char *)pStep->target.z, zFrom, nFrom);
88721:   
88722:       pStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
88723:       pStep->pExprList = sqlite3ExprListDup(db, pList, EXPRDUP_REDUCE);
88724:       pStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
88725:       if( pWhen ){
88726:         pWhen = sqlite3PExpr(pParse, TK_NOT, pWhen, 0, 0);
88727:         pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE);
88728:       }
88729:     }
88730: 
88731:     /* Re-enable the lookaside buffer, if it was disabled earlier. */
88732:     db->lookaside.bEnabled = enableLookaside;
88733: 
88734:     sqlite3ExprDelete(db, pWhere);
88735:     sqlite3ExprDelete(db, pWhen);
88736:     sqlite3ExprListDelete(db, pList);
88737:     sqlite3SelectDelete(db, pSelect);
88738:     if( db->mallocFailed==1 ){
88739:       fkTriggerDelete(db, pTrigger);
88740:       return 0;
88741:     }
88742:     assert( pStep!=0 );
88743: 
88744:     switch( action ){
88745:       case OE_Restrict:
88746:         pStep->op = TK_SELECT; 
88747:         break;
88748:       case OE_Cascade: 
88749:         if( !pChanges ){ 
88750:           pStep->op = TK_DELETE; 
88751:           break; 
88752:         }
88753:       default:
88754:         pStep->op = TK_UPDATE;
88755:     }
88756:     pStep->pTrig = pTrigger;
88757:     pTrigger->pSchema = pTab->pSchema;
88758:     pTrigger->pTabSchema = pTab->pSchema;
88759:     pFKey->apTrigger[iAction] = pTrigger;
88760:     pTrigger->op = (pChanges ? TK_UPDATE : TK_DELETE);
88761:   }
88762: 
88763:   return pTrigger;
88764: }
88765: 
88766: /*
88767: ** This function is called when deleting or updating a row to implement
88768: ** any required CASCADE, SET NULL or SET DEFAULT actions.
88769: */
88770: SQLITE_PRIVATE void sqlite3FkActions(
88771:   Parse *pParse,                  /* Parse context */
88772:   Table *pTab,                    /* Table being updated or deleted from */
88773:   ExprList *pChanges,             /* Change-list for UPDATE, NULL for DELETE */
88774:   int regOld                      /* Address of array containing old row */
88775: ){
88776:   /* If foreign-key support is enabled, iterate through all FKs that 
88777:   ** refer to table pTab. If there is an action associated with the FK 
88778:   ** for this operation (either update or delete), invoke the associated 
88779:   ** trigger sub-program.  */
88780:   if( pParse->db->flags&SQLITE_ForeignKeys ){
88781:     FKey *pFKey;                  /* Iterator variable */
88782:     for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){
88783:       Trigger *pAction = fkActionTrigger(pParse, pTab, pFKey, pChanges);
88784:       if( pAction ){
88785:         sqlite3CodeRowTriggerDirect(pParse, pAction, pTab, regOld, OE_Abort, 0);
88786:       }
88787:     }
88788:   }
88789: }
88790: 
88791: #endif /* ifndef SQLITE_OMIT_TRIGGER */
88792: 
88793: /*
88794: ** Free all memory associated with foreign key definitions attached to
88795: ** table pTab. Remove the deleted foreign keys from the Schema.fkeyHash
88796: ** hash table.
88797: */
88798: SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){
88799:   FKey *pFKey;                    /* Iterator variable */
88800:   FKey *pNext;                    /* Copy of pFKey->pNextFrom */
88801: 
88802:   assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) );
88803:   for(pFKey=pTab->pFKey; pFKey; pFKey=pNext){
88804: 
88805:     /* Remove the FK from the fkeyHash hash table. */
88806:     if( !db || db->pnBytesFreed==0 ){
88807:       if( pFKey->pPrevTo ){
88808:         pFKey->pPrevTo->pNextTo = pFKey->pNextTo;
88809:       }else{
88810:         void *p = (void *)pFKey->pNextTo;
88811:         const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo);
88812:         sqlite3HashInsert(&pTab->pSchema->fkeyHash, z, sqlite3Strlen30(z), p);
88813:       }
88814:       if( pFKey->pNextTo ){
88815:         pFKey->pNextTo->pPrevTo = pFKey->pPrevTo;
88816:       }
88817:     }
88818: 
88819:     /* EV: R-30323-21917 Each foreign key constraint in SQLite is
88820:     ** classified as either immediate or deferred.
88821:     */
88822:     assert( pFKey->isDeferred==0 || pFKey->isDeferred==1 );
88823: 
88824:     /* Delete any triggers created to implement actions for this FK. */
88825: #ifndef SQLITE_OMIT_TRIGGER
88826:     fkTriggerDelete(db, pFKey->apTrigger[0]);
88827:     fkTriggerDelete(db, pFKey->apTrigger[1]);
88828: #endif
88829: 
88830:     pNext = pFKey->pNextFrom;
88831:     sqlite3DbFree(db, pFKey);
88832:   }
88833: }
88834: #endif /* ifndef SQLITE_OMIT_FOREIGN_KEY */
88835: 
88836: /************** End of fkey.c ************************************************/
88837: /************** Begin file insert.c ******************************************/
88838: /*
88839: ** 2001 September 15
88840: **
88841: ** The author disclaims copyright to this source code.  In place of
88842: ** a legal notice, here is a blessing:
88843: **
88844: **    May you do good and not evil.
88845: **    May you find forgiveness for yourself and forgive others.
88846: **    May you share freely, never taking more than you give.
88847: **
88848: *************************************************************************
88849: ** This file contains C code routines that are called by the parser
88850: ** to handle INSERT statements in SQLite.
88851: */
88852: 
88853: /*
88854: ** Generate code that will open a table for reading.
88855: */
88856: SQLITE_PRIVATE void sqlite3OpenTable(
88857:   Parse *p,       /* Generate code into this VDBE */
88858:   int iCur,       /* The cursor number of the table */
88859:   int iDb,        /* The database index in sqlite3.aDb[] */
88860:   Table *pTab,    /* The table to be opened */
88861:   int opcode      /* OP_OpenRead or OP_OpenWrite */
88862: ){
88863:   Vdbe *v;
88864:   if( IsVirtual(pTab) ) return;
88865:   v = sqlite3GetVdbe(p);
88866:   assert( opcode==OP_OpenWrite || opcode==OP_OpenRead );
88867:   sqlite3TableLock(p, iDb, pTab->tnum, (opcode==OP_OpenWrite)?1:0, pTab->zName);
88868:   sqlite3VdbeAddOp3(v, opcode, iCur, pTab->tnum, iDb);
88869:   sqlite3VdbeChangeP4(v, -1, SQLITE_INT_TO_PTR(pTab->nCol), P4_INT32);
88870:   VdbeComment((v, "%s", pTab->zName));
88871: }
88872: 
88873: /*
88874: ** Return a pointer to the column affinity string associated with index
88875: ** pIdx. A column affinity string has one character for each column in 
88876: ** the table, according to the affinity of the column:
88877: **
88878: **  Character      Column affinity
88879: **  ------------------------------
88880: **  'a'            TEXT
88881: **  'b'            NONE
88882: **  'c'            NUMERIC
88883: **  'd'            INTEGER
88884: **  'e'            REAL
88885: **
88886: ** An extra 'd' is appended to the end of the string to cover the
88887: ** rowid that appears as the last column in every index.
88888: **
88889: ** Memory for the buffer containing the column index affinity string
88890: ** is managed along with the rest of the Index structure. It will be
88891: ** released when sqlite3DeleteIndex() is called.
88892: */
88893: SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){
88894:   if( !pIdx->zColAff ){
88895:     /* The first time a column affinity string for a particular index is
88896:     ** required, it is allocated and populated here. It is then stored as
88897:     ** a member of the Index structure for subsequent use.
88898:     **
88899:     ** The column affinity string will eventually be deleted by
88900:     ** sqliteDeleteIndex() when the Index structure itself is cleaned
88901:     ** up.
88902:     */
88903:     int n;
88904:     Table *pTab = pIdx->pTable;
88905:     sqlite3 *db = sqlite3VdbeDb(v);
88906:     pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+2);
88907:     if( !pIdx->zColAff ){
88908:       db->mallocFailed = 1;
88909:       return 0;
88910:     }
88911:     for(n=0; n<pIdx->nColumn; n++){
88912:       pIdx->zColAff[n] = pTab->aCol[pIdx->aiColumn[n]].affinity;
88913:     }
88914:     pIdx->zColAff[n++] = SQLITE_AFF_INTEGER;
88915:     pIdx->zColAff[n] = 0;
88916:   }
88917:  
88918:   return pIdx->zColAff;
88919: }
88920: 
88921: /*
88922: ** Set P4 of the most recently inserted opcode to a column affinity
88923: ** string for table pTab. A column affinity string has one character
88924: ** for each column indexed by the index, according to the affinity of the
88925: ** column:
88926: **
88927: **  Character      Column affinity
88928: **  ------------------------------
88929: **  'a'            TEXT
88930: **  'b'            NONE
88931: **  'c'            NUMERIC
88932: **  'd'            INTEGER
88933: **  'e'            REAL
88934: */
88935: SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *v, Table *pTab){
88936:   /* The first time a column affinity string for a particular table
88937:   ** is required, it is allocated and populated here. It is then 
88938:   ** stored as a member of the Table structure for subsequent use.
88939:   **
88940:   ** The column affinity string will eventually be deleted by
88941:   ** sqlite3DeleteTable() when the Table structure itself is cleaned up.
88942:   */
88943:   if( !pTab->zColAff ){
88944:     char *zColAff;
88945:     int i;
88946:     sqlite3 *db = sqlite3VdbeDb(v);
88947: 
88948:     zColAff = (char *)sqlite3DbMallocRaw(0, pTab->nCol+1);
88949:     if( !zColAff ){
88950:       db->mallocFailed = 1;
88951:       return;
88952:     }
88953: 
88954:     for(i=0; i<pTab->nCol; i++){
88955:       zColAff[i] = pTab->aCol[i].affinity;
88956:     }
88957:     zColAff[pTab->nCol] = '\0';
88958: 
88959:     pTab->zColAff = zColAff;
88960:   }
88961: 
88962:   sqlite3VdbeChangeP4(v, -1, pTab->zColAff, P4_TRANSIENT);
88963: }
88964: 
88965: /*
88966: ** Return non-zero if the table pTab in database iDb or any of its indices
88967: ** have been opened at any point in the VDBE program beginning at location
88968: ** iStartAddr throught the end of the program.  This is used to see if 
88969: ** a statement of the form  "INSERT INTO <iDb, pTab> SELECT ..." can 
88970: ** run without using temporary table for the results of the SELECT. 
88971: */
88972: static int readsTable(Parse *p, int iStartAddr, int iDb, Table *pTab){
88973:   Vdbe *v = sqlite3GetVdbe(p);
88974:   int i;
88975:   int iEnd = sqlite3VdbeCurrentAddr(v);
88976: #ifndef SQLITE_OMIT_VIRTUALTABLE
88977:   VTable *pVTab = IsVirtual(pTab) ? sqlite3GetVTable(p->db, pTab) : 0;
88978: #endif
88979: 
88980:   for(i=iStartAddr; i<iEnd; i++){
88981:     VdbeOp *pOp = sqlite3VdbeGetOp(v, i);
88982:     assert( pOp!=0 );
88983:     if( pOp->opcode==OP_OpenRead && pOp->p3==iDb ){
88984:       Index *pIndex;
88985:       int tnum = pOp->p2;
88986:       if( tnum==pTab->tnum ){
88987:         return 1;
88988:       }
88989:       for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
88990:         if( tnum==pIndex->tnum ){
88991:           return 1;
88992:         }
88993:       }
88994:     }
88995: #ifndef SQLITE_OMIT_VIRTUALTABLE
88996:     if( pOp->opcode==OP_VOpen && pOp->p4.pVtab==pVTab ){
88997:       assert( pOp->p4.pVtab!=0 );
88998:       assert( pOp->p4type==P4_VTAB );
88999:       return 1;
89000:     }
89001: #endif
89002:   }
89003:   return 0;
89004: }
89005: 
89006: #ifndef SQLITE_OMIT_AUTOINCREMENT
89007: /*
89008: ** Locate or create an AutoincInfo structure associated with table pTab
89009: ** which is in database iDb.  Return the register number for the register
89010: ** that holds the maximum rowid.
89011: **
89012: ** There is at most one AutoincInfo structure per table even if the
89013: ** same table is autoincremented multiple times due to inserts within
89014: ** triggers.  A new AutoincInfo structure is created if this is the
89015: ** first use of table pTab.  On 2nd and subsequent uses, the original
89016: ** AutoincInfo structure is used.
89017: **
89018: ** Three memory locations are allocated:
89019: **
89020: **   (1)  Register to hold the name of the pTab table.
89021: **   (2)  Register to hold the maximum ROWID of pTab.
89022: **   (3)  Register to hold the rowid in sqlite_sequence of pTab
89023: **
89024: ** The 2nd register is the one that is returned.  That is all the
89025: ** insert routine needs to know about.
89026: */
89027: static int autoIncBegin(
89028:   Parse *pParse,      /* Parsing context */
89029:   int iDb,            /* Index of the database holding pTab */
89030:   Table *pTab         /* The table we are writing to */
89031: ){
89032:   int memId = 0;      /* Register holding maximum rowid */
89033:   if( pTab->tabFlags & TF_Autoincrement ){
89034:     Parse *pToplevel = sqlite3ParseToplevel(pParse);
89035:     AutoincInfo *pInfo;
89036: 
89037:     pInfo = pToplevel->pAinc;
89038:     while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; }
89039:     if( pInfo==0 ){
89040:       pInfo = sqlite3DbMallocRaw(pParse->db, sizeof(*pInfo));
89041:       if( pInfo==0 ) return 0;
89042:       pInfo->pNext = pToplevel->pAinc;
89043:       pToplevel->pAinc = pInfo;
89044:       pInfo->pTab = pTab;
89045:       pInfo->iDb = iDb;
89046:       pToplevel->nMem++;                  /* Register to hold name of table */
89047:       pInfo->regCtr = ++pToplevel->nMem;  /* Max rowid register */
89048:       pToplevel->nMem++;                  /* Rowid in sqlite_sequence */
89049:     }
89050:     memId = pInfo->regCtr;
89051:   }
89052:   return memId;
89053: }
89054: 
89055: /*
89056: ** This routine generates code that will initialize all of the
89057: ** register used by the autoincrement tracker.  
89058: */
89059: SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){
89060:   AutoincInfo *p;            /* Information about an AUTOINCREMENT */
89061:   sqlite3 *db = pParse->db;  /* The database connection */
89062:   Db *pDb;                   /* Database only autoinc table */
89063:   int memId;                 /* Register holding max rowid */
89064:   int addr;                  /* A VDBE address */
89065:   Vdbe *v = pParse->pVdbe;   /* VDBE under construction */
89066: 
89067:   /* This routine is never called during trigger-generation.  It is
89068:   ** only called from the top-level */
89069:   assert( pParse->pTriggerTab==0 );
89070:   assert( pParse==sqlite3ParseToplevel(pParse) );
89071: 
89072:   assert( v );   /* We failed long ago if this is not so */
89073:   for(p = pParse->pAinc; p; p = p->pNext){
89074:     pDb = &db->aDb[p->iDb];
89075:     memId = p->regCtr;
89076:     assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) );
89077:     sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenRead);
89078:     sqlite3VdbeAddOp3(v, OP_Null, 0, memId, memId+1);
89079:     addr = sqlite3VdbeCurrentAddr(v);
89080:     sqlite3VdbeAddOp4(v, OP_String8, 0, memId-1, 0, p->pTab->zName, 0);
89081:     sqlite3VdbeAddOp2(v, OP_Rewind, 0, addr+9);
89082:     sqlite3VdbeAddOp3(v, OP_Column, 0, 0, memId);
89083:     sqlite3VdbeAddOp3(v, OP_Ne, memId-1, addr+7, memId);
89084:     sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
89085:     sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1);
89086:     sqlite3VdbeAddOp3(v, OP_Column, 0, 1, memId);
89087:     sqlite3VdbeAddOp2(v, OP_Goto, 0, addr+9);
89088:     sqlite3VdbeAddOp2(v, OP_Next, 0, addr+2);
89089:     sqlite3VdbeAddOp2(v, OP_Integer, 0, memId);
89090:     sqlite3VdbeAddOp0(v, OP_Close);
89091:   }
89092: }
89093: 
89094: /*
89095: ** Update the maximum rowid for an autoincrement calculation.
89096: **
89097: ** This routine should be called when the top of the stack holds a
89098: ** new rowid that is about to be inserted.  If that new rowid is
89099: ** larger than the maximum rowid in the memId memory cell, then the
89100: ** memory cell is updated.  The stack is unchanged.
89101: */
89102: static void autoIncStep(Parse *pParse, int memId, int regRowid){
89103:   if( memId>0 ){
89104:     sqlite3VdbeAddOp2(pParse->pVdbe, OP_MemMax, memId, regRowid);
89105:   }
89106: }
89107: 
89108: /*
89109: ** This routine generates the code needed to write autoincrement
89110: ** maximum rowid values back into the sqlite_sequence register.
89111: ** Every statement that might do an INSERT into an autoincrement
89112: ** table (either directly or through triggers) needs to call this
89113: ** routine just before the "exit" code.
89114: */
89115: SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){
89116:   AutoincInfo *p;
89117:   Vdbe *v = pParse->pVdbe;
89118:   sqlite3 *db = pParse->db;
89119: 
89120:   assert( v );
89121:   for(p = pParse->pAinc; p; p = p->pNext){
89122:     Db *pDb = &db->aDb[p->iDb];
89123:     int j1, j2, j3, j4, j5;
89124:     int iRec;
89125:     int memId = p->regCtr;
89126: 
89127:     iRec = sqlite3GetTempReg(pParse);
89128:     assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) );
89129:     sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenWrite);
89130:     j1 = sqlite3VdbeAddOp1(v, OP_NotNull, memId+1);
89131:     j2 = sqlite3VdbeAddOp0(v, OP_Rewind);
89132:     j3 = sqlite3VdbeAddOp3(v, OP_Column, 0, 0, iRec);
89133:     j4 = sqlite3VdbeAddOp3(v, OP_Eq, memId-1, 0, iRec);
89134:     sqlite3VdbeAddOp2(v, OP_Next, 0, j3);
89135:     sqlite3VdbeJumpHere(v, j2);
89136:     sqlite3VdbeAddOp2(v, OP_NewRowid, 0, memId+1);
89137:     j5 = sqlite3VdbeAddOp0(v, OP_Goto);
89138:     sqlite3VdbeJumpHere(v, j4);
89139:     sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1);
89140:     sqlite3VdbeJumpHere(v, j1);
89141:     sqlite3VdbeJumpHere(v, j5);
89142:     sqlite3VdbeAddOp3(v, OP_MakeRecord, memId-1, 2, iRec);
89143:     sqlite3VdbeAddOp3(v, OP_Insert, 0, iRec, memId+1);
89144:     sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
89145:     sqlite3VdbeAddOp0(v, OP_Close);
89146:     sqlite3ReleaseTempReg(pParse, iRec);
89147:   }
89148: }
89149: #else
89150: /*
89151: ** If SQLITE_OMIT_AUTOINCREMENT is defined, then the three routines
89152: ** above are all no-ops
89153: */
89154: # define autoIncBegin(A,B,C) (0)
89155: # define autoIncStep(A,B,C)
89156: #endif /* SQLITE_OMIT_AUTOINCREMENT */
89157: 
89158: 
89159: /* Forward declaration */
89160: static int xferOptimization(
89161:   Parse *pParse,        /* Parser context */
89162:   Table *pDest,         /* The table we are inserting into */
89163:   Select *pSelect,      /* A SELECT statement to use as the data source */
89164:   int onError,          /* How to handle constraint errors */
89165:   int iDbDest           /* The database of pDest */
89166: );
89167: 
89168: /*
89169: ** This routine is call to handle SQL of the following forms:
89170: **
89171: **    insert into TABLE (IDLIST) values(EXPRLIST)
89172: **    insert into TABLE (IDLIST) select
89173: **
89174: ** The IDLIST following the table name is always optional.  If omitted,
89175: ** then a list of all columns for the table is substituted.  The IDLIST
89176: ** appears in the pColumn parameter.  pColumn is NULL if IDLIST is omitted.
89177: **
89178: ** The pList parameter holds EXPRLIST in the first form of the INSERT
89179: ** statement above, and pSelect is NULL.  For the second form, pList is
89180: ** NULL and pSelect is a pointer to the select statement used to generate
89181: ** data for the insert.
89182: **
89183: ** The code generated follows one of four templates.  For a simple
89184: ** select with data coming from a VALUES clause, the code executes
89185: ** once straight down through.  Pseudo-code follows (we call this
89186: ** the "1st template"):
89187: **
89188: **         open write cursor to <table> and its indices
89189: **         puts VALUES clause expressions onto the stack
89190: **         write the resulting record into <table>
89191: **         cleanup
89192: **
89193: ** The three remaining templates assume the statement is of the form
89194: **
89195: **   INSERT INTO <table> SELECT ...
89196: **
89197: ** If the SELECT clause is of the restricted form "SELECT * FROM <table2>" -
89198: ** in other words if the SELECT pulls all columns from a single table
89199: ** and there is no WHERE or LIMIT or GROUP BY or ORDER BY clauses, and
89200: ** if <table2> and <table1> are distinct tables but have identical
89201: ** schemas, including all the same indices, then a special optimization
89202: ** is invoked that copies raw records from <table2> over to <table1>.
89203: ** See the xferOptimization() function for the implementation of this
89204: ** template.  This is the 2nd template.
89205: **
89206: **         open a write cursor to <table>
89207: **         open read cursor on <table2>
89208: **         transfer all records in <table2> over to <table>
89209: **         close cursors
89210: **         foreach index on <table>
89211: **           open a write cursor on the <table> index
89212: **           open a read cursor on the corresponding <table2> index
89213: **           transfer all records from the read to the write cursors
89214: **           close cursors
89215: **         end foreach
89216: **
89217: ** The 3rd template is for when the second template does not apply
89218: ** and the SELECT clause does not read from <table> at any time.
89219: ** The generated code follows this template:
89220: **
89221: **         EOF <- 0
89222: **         X <- A
89223: **         goto B
89224: **      A: setup for the SELECT
89225: **         loop over the rows in the SELECT
89226: **           load values into registers R..R+n
89227: **           yield X
89228: **         end loop
89229: **         cleanup after the SELECT
89230: **         EOF <- 1
89231: **         yield X
89232: **         goto A
89233: **      B: open write cursor to <table> and its indices
89234: **      C: yield X
89235: **         if EOF goto D
89236: **         insert the select result into <table> from R..R+n
89237: **         goto C
89238: **      D: cleanup
89239: **
89240: ** The 4th template is used if the insert statement takes its
89241: ** values from a SELECT but the data is being inserted into a table
89242: ** that is also read as part of the SELECT.  In the third form,
89243: ** we have to use a intermediate table to store the results of
89244: ** the select.  The template is like this:
89245: **
89246: **         EOF <- 0
89247: **         X <- A
89248: **         goto B
89249: **      A: setup for the SELECT
89250: **         loop over the tables in the SELECT
89251: **           load value into register R..R+n
89252: **           yield X
89253: **         end loop
89254: **         cleanup after the SELECT
89255: **         EOF <- 1
89256: **         yield X
89257: **         halt-error
89258: **      B: open temp table
89259: **      L: yield X
89260: **         if EOF goto M
89261: **         insert row from R..R+n into temp table
89262: **         goto L
89263: **      M: open write cursor to <table> and its indices
89264: **         rewind temp table
89265: **      C: loop over rows of intermediate table
89266: **           transfer values form intermediate table into <table>
89267: **         end loop
89268: **      D: cleanup
89269: */
89270: SQLITE_PRIVATE void sqlite3Insert(
89271:   Parse *pParse,        /* Parser context */
89272:   SrcList *pTabList,    /* Name of table into which we are inserting */
89273:   ExprList *pList,      /* List of values to be inserted */
89274:   Select *pSelect,      /* A SELECT statement to use as the data source */
89275:   IdList *pColumn,      /* Column names corresponding to IDLIST. */
89276:   int onError           /* How to handle constraint errors */
89277: ){
89278:   sqlite3 *db;          /* The main database structure */
89279:   Table *pTab;          /* The table to insert into.  aka TABLE */
89280:   char *zTab;           /* Name of the table into which we are inserting */
89281:   const char *zDb;      /* Name of the database holding this table */
89282:   int i, j, idx;        /* Loop counters */
89283:   Vdbe *v;              /* Generate code into this virtual machine */
89284:   Index *pIdx;          /* For looping over indices of the table */
89285:   int nColumn;          /* Number of columns in the data */
89286:   int nHidden = 0;      /* Number of hidden columns if TABLE is virtual */
89287:   int baseCur = 0;      /* VDBE Cursor number for pTab */
89288:   int keyColumn = -1;   /* Column that is the INTEGER PRIMARY KEY */
89289:   int endOfLoop;        /* Label for the end of the insertion loop */
89290:   int useTempTable = 0; /* Store SELECT results in intermediate table */
89291:   int srcTab = 0;       /* Data comes from this temporary cursor if >=0 */
89292:   int addrInsTop = 0;   /* Jump to label "D" */
89293:   int addrCont = 0;     /* Top of insert loop. Label "C" in templates 3 and 4 */
89294:   int addrSelect = 0;   /* Address of coroutine that implements the SELECT */
89295:   SelectDest dest;      /* Destination for SELECT on rhs of INSERT */
89296:   int iDb;              /* Index of database holding TABLE */
89297:   Db *pDb;              /* The database containing table being inserted into */
89298:   int appendFlag = 0;   /* True if the insert is likely to be an append */
89299: 
89300:   /* Register allocations */
89301:   int regFromSelect = 0;/* Base register for data coming from SELECT */
89302:   int regAutoinc = 0;   /* Register holding the AUTOINCREMENT counter */
89303:   int regRowCount = 0;  /* Memory cell used for the row counter */
89304:   int regIns;           /* Block of regs holding rowid+data being inserted */
89305:   int regRowid;         /* registers holding insert rowid */
89306:   int regData;          /* register holding first column to insert */
89307:   int regEof = 0;       /* Register recording end of SELECT data */
89308:   int *aRegIdx = 0;     /* One register allocated to each index */
89309: 
89310: #ifndef SQLITE_OMIT_TRIGGER
89311:   int isView;                 /* True if attempting to insert into a view */
89312:   Trigger *pTrigger;          /* List of triggers on pTab, if required */
89313:   int tmask;                  /* Mask of trigger times */
89314: #endif
89315: 
89316:   db = pParse->db;
89317:   memset(&dest, 0, sizeof(dest));
89318:   if( pParse->nErr || db->mallocFailed ){
89319:     goto insert_cleanup;
89320:   }
89321: 
89322:   /* Locate the table into which we will be inserting new information.
89323:   */
89324:   assert( pTabList->nSrc==1 );
89325:   zTab = pTabList->a[0].zName;
89326:   if( NEVER(zTab==0) ) goto insert_cleanup;
89327:   pTab = sqlite3SrcListLookup(pParse, pTabList);
89328:   if( pTab==0 ){
89329:     goto insert_cleanup;
89330:   }
89331:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
89332:   assert( iDb<db->nDb );
89333:   pDb = &db->aDb[iDb];
89334:   zDb = pDb->zName;
89335:   if( sqlite3AuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, zDb) ){
89336:     goto insert_cleanup;
89337:   }
89338: 
89339:   /* Figure out if we have any triggers and if the table being
89340:   ** inserted into is a view
89341:   */
89342: #ifndef SQLITE_OMIT_TRIGGER
89343:   pTrigger = sqlite3TriggersExist(pParse, pTab, TK_INSERT, 0, &tmask);
89344:   isView = pTab->pSelect!=0;
89345: #else
89346: # define pTrigger 0
89347: # define tmask 0
89348: # define isView 0
89349: #endif
89350: #ifdef SQLITE_OMIT_VIEW
89351: # undef isView
89352: # define isView 0
89353: #endif
89354:   assert( (pTrigger && tmask) || (pTrigger==0 && tmask==0) );
89355: 
89356:   /* If pTab is really a view, make sure it has been initialized.
89357:   ** ViewGetColumnNames() is a no-op if pTab is not a view (or virtual 
89358:   ** module table).
89359:   */
89360:   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
89361:     goto insert_cleanup;
89362:   }
89363: 
89364:   /* Ensure that:
89365:   *  (a) the table is not read-only, 
89366:   *  (b) that if it is a view then ON INSERT triggers exist
89367:   */
89368:   if( sqlite3IsReadOnly(pParse, pTab, tmask) ){
89369:     goto insert_cleanup;
89370:   }
89371: 
89372:   /* Allocate a VDBE
89373:   */
89374:   v = sqlite3GetVdbe(pParse);
89375:   if( v==0 ) goto insert_cleanup;
89376:   if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
89377:   sqlite3BeginWriteOperation(pParse, pSelect || pTrigger, iDb);
89378: 
89379: #ifndef SQLITE_OMIT_XFER_OPT
89380:   /* If the statement is of the form
89381:   **
89382:   **       INSERT INTO <table1> SELECT * FROM <table2>;
89383:   **
89384:   ** Then special optimizations can be applied that make the transfer
89385:   ** very fast and which reduce fragmentation of indices.
89386:   **
89387:   ** This is the 2nd template.
89388:   */
89389:   if( pColumn==0 && xferOptimization(pParse, pTab, pSelect, onError, iDb) ){
89390:     assert( !pTrigger );
89391:     assert( pList==0 );
89392:     goto insert_end;
89393:   }
89394: #endif /* SQLITE_OMIT_XFER_OPT */
89395: 
89396:   /* If this is an AUTOINCREMENT table, look up the sequence number in the
89397:   ** sqlite_sequence table and store it in memory cell regAutoinc.
89398:   */
89399:   regAutoinc = autoIncBegin(pParse, iDb, pTab);
89400: 
89401:   /* Figure out how many columns of data are supplied.  If the data
89402:   ** is coming from a SELECT statement, then generate a co-routine that
89403:   ** produces a single row of the SELECT on each invocation.  The
89404:   ** co-routine is the common header to the 3rd and 4th templates.
89405:   */
89406:   if( pSelect ){
89407:     /* Data is coming from a SELECT.  Generate code to implement that SELECT
89408:     ** as a co-routine.  The code is common to both the 3rd and 4th
89409:     ** templates:
89410:     **
89411:     **         EOF <- 0
89412:     **         X <- A
89413:     **         goto B
89414:     **      A: setup for the SELECT
89415:     **         loop over the tables in the SELECT
89416:     **           load value into register R..R+n
89417:     **           yield X
89418:     **         end loop
89419:     **         cleanup after the SELECT
89420:     **         EOF <- 1
89421:     **         yield X
89422:     **         halt-error
89423:     **
89424:     ** On each invocation of the co-routine, it puts a single row of the
89425:     ** SELECT result into registers dest.iMem...dest.iMem+dest.nMem-1.
89426:     ** (These output registers are allocated by sqlite3Select().)  When
89427:     ** the SELECT completes, it sets the EOF flag stored in regEof.
89428:     */
89429:     int rc, j1;
89430: 
89431:     regEof = ++pParse->nMem;
89432:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regEof);      /* EOF <- 0 */
89433:     VdbeComment((v, "SELECT eof flag"));
89434:     sqlite3SelectDestInit(&dest, SRT_Coroutine, ++pParse->nMem);
89435:     addrSelect = sqlite3VdbeCurrentAddr(v)+2;
89436:     sqlite3VdbeAddOp2(v, OP_Integer, addrSelect-1, dest.iParm);
89437:     j1 = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0);
89438:     VdbeComment((v, "Jump over SELECT coroutine"));
89439: 
89440:     /* Resolve the expressions in the SELECT statement and execute it. */
89441:     rc = sqlite3Select(pParse, pSelect, &dest);
89442:     assert( pParse->nErr==0 || rc );
89443:     if( rc || NEVER(pParse->nErr) || db->mallocFailed ){
89444:       goto insert_cleanup;
89445:     }
89446:     sqlite3VdbeAddOp2(v, OP_Integer, 1, regEof);         /* EOF <- 1 */
89447:     sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);   /* yield X */
89448:     sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_INTERNAL, OE_Abort);
89449:     VdbeComment((v, "End of SELECT coroutine"));
89450:     sqlite3VdbeJumpHere(v, j1);                          /* label B: */
89451: 
89452:     regFromSelect = dest.iMem;
89453:     assert( pSelect->pEList );
89454:     nColumn = pSelect->pEList->nExpr;
89455:     assert( dest.nMem==nColumn );
89456: 
89457:     /* Set useTempTable to TRUE if the result of the SELECT statement
89458:     ** should be written into a temporary table (template 4).  Set to
89459:     ** FALSE if each* row of the SELECT can be written directly into
89460:     ** the destination table (template 3).
89461:     **
89462:     ** A temp table must be used if the table being updated is also one
89463:     ** of the tables being read by the SELECT statement.  Also use a 
89464:     ** temp table in the case of row triggers.
89465:     */
89466:     if( pTrigger || readsTable(pParse, addrSelect, iDb, pTab) ){
89467:       useTempTable = 1;
89468:     }
89469: 
89470:     if( useTempTable ){
89471:       /* Invoke the coroutine to extract information from the SELECT
89472:       ** and add it to a transient table srcTab.  The code generated
89473:       ** here is from the 4th template:
89474:       **
89475:       **      B: open temp table
89476:       **      L: yield X
89477:       **         if EOF goto M
89478:       **         insert row from R..R+n into temp table
89479:       **         goto L
89480:       **      M: ...
89481:       */
89482:       int regRec;          /* Register to hold packed record */
89483:       int regTempRowid;    /* Register to hold temp table ROWID */
89484:       int addrTop;         /* Label "L" */
89485:       int addrIf;          /* Address of jump to M */
89486: 
89487:       srcTab = pParse->nTab++;
89488:       regRec = sqlite3GetTempReg(pParse);
89489:       regTempRowid = sqlite3GetTempReg(pParse);
89490:       sqlite3VdbeAddOp2(v, OP_OpenEphemeral, srcTab, nColumn);
89491:       addrTop = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);
89492:       addrIf = sqlite3VdbeAddOp1(v, OP_If, regEof);
89493:       sqlite3VdbeAddOp3(v, OP_MakeRecord, regFromSelect, nColumn, regRec);
89494:       sqlite3VdbeAddOp2(v, OP_NewRowid, srcTab, regTempRowid);
89495:       sqlite3VdbeAddOp3(v, OP_Insert, srcTab, regRec, regTempRowid);
89496:       sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop);
89497:       sqlite3VdbeJumpHere(v, addrIf);
89498:       sqlite3ReleaseTempReg(pParse, regRec);
89499:       sqlite3ReleaseTempReg(pParse, regTempRowid);
89500:     }
89501:   }else{
89502:     /* This is the case if the data for the INSERT is coming from a VALUES
89503:     ** clause
89504:     */
89505:     NameContext sNC;
89506:     memset(&sNC, 0, sizeof(sNC));
89507:     sNC.pParse = pParse;
89508:     srcTab = -1;
89509:     assert( useTempTable==0 );
89510:     nColumn = pList ? pList->nExpr : 0;
89511:     for(i=0; i<nColumn; i++){
89512:       if( sqlite3ResolveExprNames(&sNC, pList->a[i].pExpr) ){
89513:         goto insert_cleanup;
89514:       }
89515:     }
89516:   }
89517: 
89518:   /* Make sure the number of columns in the source data matches the number
89519:   ** of columns to be inserted into the table.
89520:   */
89521:   if( IsVirtual(pTab) ){
89522:     for(i=0; i<pTab->nCol; i++){
89523:       nHidden += (IsHiddenColumn(&pTab->aCol[i]) ? 1 : 0);
89524:     }
89525:   }
89526:   if( pColumn==0 && nColumn && nColumn!=(pTab->nCol-nHidden) ){
89527:     sqlite3ErrorMsg(pParse, 
89528:        "table %S has %d columns but %d values were supplied",
89529:        pTabList, 0, pTab->nCol-nHidden, nColumn);
89530:     goto insert_cleanup;
89531:   }
89532:   if( pColumn!=0 && nColumn!=pColumn->nId ){
89533:     sqlite3ErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId);
89534:     goto insert_cleanup;
89535:   }
89536: 
89537:   /* If the INSERT statement included an IDLIST term, then make sure
89538:   ** all elements of the IDLIST really are columns of the table and 
89539:   ** remember the column indices.
89540:   **
89541:   ** If the table has an INTEGER PRIMARY KEY column and that column
89542:   ** is named in the IDLIST, then record in the keyColumn variable
89543:   ** the index into IDLIST of the primary key column.  keyColumn is
89544:   ** the index of the primary key as it appears in IDLIST, not as
89545:   ** is appears in the original table.  (The index of the primary
89546:   ** key in the original table is pTab->iPKey.)
89547:   */
89548:   if( pColumn ){
89549:     for(i=0; i<pColumn->nId; i++){
89550:       pColumn->a[i].idx = -1;
89551:     }
89552:     for(i=0; i<pColumn->nId; i++){
89553:       for(j=0; j<pTab->nCol; j++){
89554:         if( sqlite3StrICmp(pColumn->a[i].zName, pTab->aCol[j].zName)==0 ){
89555:           pColumn->a[i].idx = j;
89556:           if( j==pTab->iPKey ){
89557:             keyColumn = i;
89558:           }
89559:           break;
89560:         }
89561:       }
89562:       if( j>=pTab->nCol ){
89563:         if( sqlite3IsRowid(pColumn->a[i].zName) ){
89564:           keyColumn = i;
89565:         }else{
89566:           sqlite3ErrorMsg(pParse, "table %S has no column named %s",
89567:               pTabList, 0, pColumn->a[i].zName);
89568:           pParse->checkSchema = 1;
89569:           goto insert_cleanup;
89570:         }
89571:       }
89572:     }
89573:   }
89574: 
89575:   /* If there is no IDLIST term but the table has an integer primary
89576:   ** key, the set the keyColumn variable to the primary key column index
89577:   ** in the original table definition.
89578:   */
89579:   if( pColumn==0 && nColumn>0 ){
89580:     keyColumn = pTab->iPKey;
89581:   }
89582:     
89583:   /* Initialize the count of rows to be inserted
89584:   */
89585:   if( db->flags & SQLITE_CountRows ){
89586:     regRowCount = ++pParse->nMem;
89587:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);
89588:   }
89589: 
89590:   /* If this is not a view, open the table and and all indices */
89591:   if( !isView ){
89592:     int nIdx;
89593: 
89594:     baseCur = pParse->nTab;
89595:     nIdx = sqlite3OpenTableAndIndices(pParse, pTab, baseCur, OP_OpenWrite);
89596:     aRegIdx = sqlite3DbMallocRaw(db, sizeof(int)*(nIdx+1));
89597:     if( aRegIdx==0 ){
89598:       goto insert_cleanup;
89599:     }
89600:     for(i=0; i<nIdx; i++){
89601:       aRegIdx[i] = ++pParse->nMem;
89602:     }
89603:   }
89604: 
89605:   /* This is the top of the main insertion loop */
89606:   if( useTempTable ){
89607:     /* This block codes the top of loop only.  The complete loop is the
89608:     ** following pseudocode (template 4):
89609:     **
89610:     **         rewind temp table
89611:     **      C: loop over rows of intermediate table
89612:     **           transfer values form intermediate table into <table>
89613:     **         end loop
89614:     **      D: ...
89615:     */
89616:     addrInsTop = sqlite3VdbeAddOp1(v, OP_Rewind, srcTab);
89617:     addrCont = sqlite3VdbeCurrentAddr(v);
89618:   }else if( pSelect ){
89619:     /* This block codes the top of loop only.  The complete loop is the
89620:     ** following pseudocode (template 3):
89621:     **
89622:     **      C: yield X
89623:     **         if EOF goto D
89624:     **         insert the select result into <table> from R..R+n
89625:     **         goto C
89626:     **      D: ...
89627:     */
89628:     addrCont = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);
89629:     addrInsTop = sqlite3VdbeAddOp1(v, OP_If, regEof);
89630:   }
89631: 
89632:   /* Allocate registers for holding the rowid of the new row,
89633:   ** the content of the new row, and the assemblied row record.
89634:   */
89635:   regRowid = regIns = pParse->nMem+1;
89636:   pParse->nMem += pTab->nCol + 1;
89637:   if( IsVirtual(pTab) ){
89638:     regRowid++;
89639:     pParse->nMem++;
89640:   }
89641:   regData = regRowid+1;
89642: 
89643:   /* Run the BEFORE and INSTEAD OF triggers, if there are any
89644:   */
89645:   endOfLoop = sqlite3VdbeMakeLabel(v);
89646:   if( tmask & TRIGGER_BEFORE ){
89647:     int regCols = sqlite3GetTempRange(pParse, pTab->nCol+1);
89648: 
89649:     /* build the NEW.* reference row.  Note that if there is an INTEGER
89650:     ** PRIMARY KEY into which a NULL is being inserted, that NULL will be
89651:     ** translated into a unique ID for the row.  But on a BEFORE trigger,
89652:     ** we do not know what the unique ID will be (because the insert has
89653:     ** not happened yet) so we substitute a rowid of -1
89654:     */
89655:     if( keyColumn<0 ){
89656:       sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols);
89657:     }else{
89658:       int j1;
89659:       if( useTempTable ){
89660:         sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regCols);
89661:       }else{
89662:         assert( pSelect==0 );  /* Otherwise useTempTable is true */
89663:         sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regCols);
89664:       }
89665:       j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regCols);
89666:       sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols);
89667:       sqlite3VdbeJumpHere(v, j1);
89668:       sqlite3VdbeAddOp1(v, OP_MustBeInt, regCols);
89669:     }
89670: 
89671:     /* Cannot have triggers on a virtual table. If it were possible,
89672:     ** this block would have to account for hidden column.
89673:     */
89674:     assert( !IsVirtual(pTab) );
89675: 
89676:     /* Create the new column data
89677:     */
89678:     for(i=0; i<pTab->nCol; i++){
89679:       if( pColumn==0 ){
89680:         j = i;
89681:       }else{
89682:         for(j=0; j<pColumn->nId; j++){
89683:           if( pColumn->a[j].idx==i ) break;
89684:         }
89685:       }
89686:       if( (!useTempTable && !pList) || (pColumn && j>=pColumn->nId) ){
89687:         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regCols+i+1);
89688:       }else if( useTempTable ){
89689:         sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, regCols+i+1); 
89690:       }else{
89691:         assert( pSelect==0 ); /* Otherwise useTempTable is true */
89692:         sqlite3ExprCodeAndCache(pParse, pList->a[j].pExpr, regCols+i+1);
89693:       }
89694:     }
89695: 
89696:     /* If this is an INSERT on a view with an INSTEAD OF INSERT trigger,
89697:     ** do not attempt any conversions before assembling the record.
89698:     ** If this is a real table, attempt conversions as required by the
89699:     ** table column affinities.
89700:     */
89701:     if( !isView ){
89702:       sqlite3VdbeAddOp2(v, OP_Affinity, regCols+1, pTab->nCol);
89703:       sqlite3TableAffinityStr(v, pTab);
89704:     }
89705: 
89706:     /* Fire BEFORE or INSTEAD OF triggers */
89707:     sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_BEFORE, 
89708:         pTab, regCols-pTab->nCol-1, onError, endOfLoop);
89709: 
89710:     sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol+1);
89711:   }
89712: 
89713:   /* Push the record number for the new entry onto the stack.  The
89714:   ** record number is a randomly generate integer created by NewRowid
89715:   ** except when the table has an INTEGER PRIMARY KEY column, in which
89716:   ** case the record number is the same as that column. 
89717:   */
89718:   if( !isView ){
89719:     if( IsVirtual(pTab) ){
89720:       /* The row that the VUpdate opcode will delete: none */
89721:       sqlite3VdbeAddOp2(v, OP_Null, 0, regIns);
89722:     }
89723:     if( keyColumn>=0 ){
89724:       if( useTempTable ){
89725:         sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regRowid);
89726:       }else if( pSelect ){
89727:         sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+keyColumn, regRowid);
89728:       }else{
89729:         VdbeOp *pOp;
89730:         sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regRowid);
89731:         pOp = sqlite3VdbeGetOp(v, -1);
89732:         if( ALWAYS(pOp) && pOp->opcode==OP_Null && !IsVirtual(pTab) ){
89733:           appendFlag = 1;
89734:           pOp->opcode = OP_NewRowid;
89735:           pOp->p1 = baseCur;
89736:           pOp->p2 = regRowid;
89737:           pOp->p3 = regAutoinc;
89738:         }
89739:       }
89740:       /* If the PRIMARY KEY expression is NULL, then use OP_NewRowid
89741:       ** to generate a unique primary key value.
89742:       */
89743:       if( !appendFlag ){
89744:         int j1;
89745:         if( !IsVirtual(pTab) ){
89746:           j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regRowid);
89747:           sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc);
89748:           sqlite3VdbeJumpHere(v, j1);
89749:         }else{
89750:           j1 = sqlite3VdbeCurrentAddr(v);
89751:           sqlite3VdbeAddOp2(v, OP_IsNull, regRowid, j1+2);
89752:         }
89753:         sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid);
89754:       }
89755:     }else if( IsVirtual(pTab) ){
89756:       sqlite3VdbeAddOp2(v, OP_Null, 0, regRowid);
89757:     }else{
89758:       sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc);
89759:       appendFlag = 1;
89760:     }
89761:     autoIncStep(pParse, regAutoinc, regRowid);
89762: 
89763:     /* Push onto the stack, data for all columns of the new entry, beginning
89764:     ** with the first column.
89765:     */
89766:     nHidden = 0;
89767:     for(i=0; i<pTab->nCol; i++){
89768:       int iRegStore = regRowid+1+i;
89769:       if( i==pTab->iPKey ){
89770:         /* The value of the INTEGER PRIMARY KEY column is always a NULL.
89771:         ** Whenever this column is read, the record number will be substituted
89772:         ** in its place.  So will fill this column with a NULL to avoid
89773:         ** taking up data space with information that will never be used. */
89774:         sqlite3VdbeAddOp2(v, OP_Null, 0, iRegStore);
89775:         continue;
89776:       }
89777:       if( pColumn==0 ){
89778:         if( IsHiddenColumn(&pTab->aCol[i]) ){
89779:           assert( IsVirtual(pTab) );
89780:           j = -1;
89781:           nHidden++;
89782:         }else{
89783:           j = i - nHidden;
89784:         }
89785:       }else{
89786:         for(j=0; j<pColumn->nId; j++){
89787:           if( pColumn->a[j].idx==i ) break;
89788:         }
89789:       }
89790:       if( j<0 || nColumn==0 || (pColumn && j>=pColumn->nId) ){
89791:         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, iRegStore);
89792:       }else if( useTempTable ){
89793:         sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, iRegStore); 
89794:       }else if( pSelect ){
89795:         sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+j, iRegStore);
89796:       }else{
89797:         sqlite3ExprCode(pParse, pList->a[j].pExpr, iRegStore);
89798:       }
89799:     }
89800: 
89801:     /* Generate code to check constraints and generate index keys and
89802:     ** do the insertion.
89803:     */
89804: #ifndef SQLITE_OMIT_VIRTUALTABLE
89805:     if( IsVirtual(pTab) ){
89806:       const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
89807:       sqlite3VtabMakeWritable(pParse, pTab);
89808:       sqlite3VdbeAddOp4(v, OP_VUpdate, 1, pTab->nCol+2, regIns, pVTab, P4_VTAB);
89809:       sqlite3VdbeChangeP5(v, onError==OE_Default ? OE_Abort : onError);
89810:       sqlite3MayAbort(pParse);
89811:     }else
89812: #endif
89813:     {
89814:       int isReplace;    /* Set to true if constraints may cause a replace */
89815:       sqlite3GenerateConstraintChecks(pParse, pTab, baseCur, regIns, aRegIdx,
89816:           keyColumn>=0, 0, onError, endOfLoop, &isReplace
89817:       );
89818:       sqlite3FkCheck(pParse, pTab, 0, regIns);
89819:       sqlite3CompleteInsertion(
89820:           pParse, pTab, baseCur, regIns, aRegIdx, 0, appendFlag, isReplace==0
89821:       );
89822:     }
89823:   }
89824: 
89825:   /* Update the count of rows that are inserted
89826:   */
89827:   if( (db->flags & SQLITE_CountRows)!=0 ){
89828:     sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1);
89829:   }
89830: 
89831:   if( pTrigger ){
89832:     /* Code AFTER triggers */
89833:     sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_AFTER, 
89834:         pTab, regData-2-pTab->nCol, onError, endOfLoop);
89835:   }
89836: 
89837:   /* The bottom of the main insertion loop, if the data source
89838:   ** is a SELECT statement.
89839:   */
89840:   sqlite3VdbeResolveLabel(v, endOfLoop);
89841:   if( useTempTable ){
89842:     sqlite3VdbeAddOp2(v, OP_Next, srcTab, addrCont);
89843:     sqlite3VdbeJumpHere(v, addrInsTop);
89844:     sqlite3VdbeAddOp1(v, OP_Close, srcTab);
89845:   }else if( pSelect ){
89846:     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrCont);
89847:     sqlite3VdbeJumpHere(v, addrInsTop);
89848:   }
89849: 
89850:   if( !IsVirtual(pTab) && !isView ){
89851:     /* Close all tables opened */
89852:     sqlite3VdbeAddOp1(v, OP_Close, baseCur);
89853:     for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){
89854:       sqlite3VdbeAddOp1(v, OP_Close, idx+baseCur);
89855:     }
89856:   }
89857: 
89858: insert_end:
89859:   /* Update the sqlite_sequence table by storing the content of the
89860:   ** maximum rowid counter values recorded while inserting into
89861:   ** autoincrement tables.
89862:   */
89863:   if( pParse->nested==0 && pParse->pTriggerTab==0 ){
89864:     sqlite3AutoincrementEnd(pParse);
89865:   }
89866: 
89867:   /*
89868:   ** Return the number of rows inserted. If this routine is 
89869:   ** generating code because of a call to sqlite3NestedParse(), do not
89870:   ** invoke the callback function.
89871:   */
89872:   if( (db->flags&SQLITE_CountRows) && !pParse->nested && !pParse->pTriggerTab ){
89873:     sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
89874:     sqlite3VdbeSetNumCols(v, 1);
89875:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows inserted", SQLITE_STATIC);
89876:   }
89877: 
89878: insert_cleanup:
89879:   sqlite3SrcListDelete(db, pTabList);
89880:   sqlite3ExprListDelete(db, pList);
89881:   sqlite3SelectDelete(db, pSelect);
89882:   sqlite3IdListDelete(db, pColumn);
89883:   sqlite3DbFree(db, aRegIdx);
89884: }
89885: 
89886: /* Make sure "isView" and other macros defined above are undefined. Otherwise
89887: ** thely may interfere with compilation of other functions in this file
89888: ** (or in another file, if this file becomes part of the amalgamation).  */
89889: #ifdef isView
89890:  #undef isView
89891: #endif
89892: #ifdef pTrigger
89893:  #undef pTrigger
89894: #endif
89895: #ifdef tmask
89896:  #undef tmask
89897: #endif
89898: 
89899: 
89900: /*
89901: ** Generate code to do constraint checks prior to an INSERT or an UPDATE.
89902: **
89903: ** The input is a range of consecutive registers as follows:
89904: **
89905: **    1.  The rowid of the row after the update.
89906: **
89907: **    2.  The data in the first column of the entry after the update.
89908: **
89909: **    i.  Data from middle columns...
89910: **
89911: **    N.  The data in the last column of the entry after the update.
89912: **
89913: ** The regRowid parameter is the index of the register containing (1).
89914: **
89915: ** If isUpdate is true and rowidChng is non-zero, then rowidChng contains
89916: ** the address of a register containing the rowid before the update takes
89917: ** place. isUpdate is true for UPDATEs and false for INSERTs. If isUpdate
89918: ** is false, indicating an INSERT statement, then a non-zero rowidChng 
89919: ** indicates that the rowid was explicitly specified as part of the
89920: ** INSERT statement. If rowidChng is false, it means that  the rowid is
89921: ** computed automatically in an insert or that the rowid value is not 
89922: ** modified by an update.
89923: **
89924: ** The code generated by this routine store new index entries into
89925: ** registers identified by aRegIdx[].  No index entry is created for
89926: ** indices where aRegIdx[i]==0.  The order of indices in aRegIdx[] is
89927: ** the same as the order of indices on the linked list of indices
89928: ** attached to the table.
89929: **
89930: ** This routine also generates code to check constraints.  NOT NULL,
89931: ** CHECK, and UNIQUE constraints are all checked.  If a constraint fails,
89932: ** then the appropriate action is performed.  There are five possible
89933: ** actions: ROLLBACK, ABORT, FAIL, REPLACE, and IGNORE.
89934: **
89935: **  Constraint type  Action       What Happens
89936: **  ---------------  ----------   ----------------------------------------
89937: **  any              ROLLBACK     The current transaction is rolled back and
89938: **                                sqlite3_exec() returns immediately with a
89939: **                                return code of SQLITE_CONSTRAINT.
89940: **
89941: **  any              ABORT        Back out changes from the current command
89942: **                                only (do not do a complete rollback) then
89943: **                                cause sqlite3_exec() to return immediately
89944: **                                with SQLITE_CONSTRAINT.
89945: **
89946: **  any              FAIL         Sqlite3_exec() returns immediately with a
89947: **                                return code of SQLITE_CONSTRAINT.  The
89948: **                                transaction is not rolled back and any
89949: **                                prior changes are retained.
89950: **
89951: **  any              IGNORE       The record number and data is popped from
89952: **                                the stack and there is an immediate jump
89953: **                                to label ignoreDest.
89954: **
89955: **  NOT NULL         REPLACE      The NULL value is replace by the default
89956: **                                value for that column.  If the default value
89957: **                                is NULL, the action is the same as ABORT.
89958: **
89959: **  UNIQUE           REPLACE      The other row that conflicts with the row
89960: **                                being inserted is removed.
89961: **
89962: **  CHECK            REPLACE      Illegal.  The results in an exception.
89963: **
89964: ** Which action to take is determined by the overrideError parameter.
89965: ** Or if overrideError==OE_Default, then the pParse->onError parameter
89966: ** is used.  Or if pParse->onError==OE_Default then the onError value
89967: ** for the constraint is used.
89968: **
89969: ** The calling routine must open a read/write cursor for pTab with
89970: ** cursor number "baseCur".  All indices of pTab must also have open
89971: ** read/write cursors with cursor number baseCur+i for the i-th cursor.
89972: ** Except, if there is no possibility of a REPLACE action then
89973: ** cursors do not need to be open for indices where aRegIdx[i]==0.
89974: */
89975: SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
89976:   Parse *pParse,      /* The parser context */
89977:   Table *pTab,        /* the table into which we are inserting */
89978:   int baseCur,        /* Index of a read/write cursor pointing at pTab */
89979:   int regRowid,       /* Index of the range of input registers */
89980:   int *aRegIdx,       /* Register used by each index.  0 for unused indices */
89981:   int rowidChng,      /* True if the rowid might collide with existing entry */
89982:   int isUpdate,       /* True for UPDATE, False for INSERT */
89983:   int overrideError,  /* Override onError to this if not OE_Default */
89984:   int ignoreDest,     /* Jump to this label on an OE_Ignore resolution */
89985:   int *pbMayReplace   /* OUT: Set to true if constraint may cause a replace */
89986: ){
89987:   int i;              /* loop counter */
89988:   Vdbe *v;            /* VDBE under constrution */
89989:   int nCol;           /* Number of columns */
89990:   int onError;        /* Conflict resolution strategy */
89991:   int j1;             /* Addresss of jump instruction */
89992:   int j2 = 0, j3;     /* Addresses of jump instructions */
89993:   int regData;        /* Register containing first data column */
89994:   int iCur;           /* Table cursor number */
89995:   Index *pIdx;         /* Pointer to one of the indices */
89996:   int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */
89997:   int regOldRowid = (rowidChng && isUpdate) ? rowidChng : regRowid;
89998: 
89999:   v = sqlite3GetVdbe(pParse);
90000:   assert( v!=0 );
90001:   assert( pTab->pSelect==0 );  /* This table is not a VIEW */
90002:   nCol = pTab->nCol;
90003:   regData = regRowid + 1;
90004: 
90005:   /* Test all NOT NULL constraints.
90006:   */
90007:   for(i=0; i<nCol; i++){
90008:     if( i==pTab->iPKey ){
90009:       continue;
90010:     }
90011:     onError = pTab->aCol[i].notNull;
90012:     if( onError==OE_None ) continue;
90013:     if( overrideError!=OE_Default ){
90014:       onError = overrideError;
90015:     }else if( onError==OE_Default ){
90016:       onError = OE_Abort;
90017:     }
90018:     if( onError==OE_Replace && pTab->aCol[i].pDflt==0 ){
90019:       onError = OE_Abort;
90020:     }
90021:     assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail
90022:         || onError==OE_Ignore || onError==OE_Replace );
90023:     switch( onError ){
90024:       case OE_Abort:
90025:         sqlite3MayAbort(pParse);
90026:       case OE_Rollback:
90027:       case OE_Fail: {
90028:         char *zMsg;
90029:         sqlite3VdbeAddOp3(v, OP_HaltIfNull,
90030:                                   SQLITE_CONSTRAINT, onError, regData+i);
90031:         zMsg = sqlite3MPrintf(pParse->db, "%s.%s may not be NULL",
90032:                               pTab->zName, pTab->aCol[i].zName);
90033:         sqlite3VdbeChangeP4(v, -1, zMsg, P4_DYNAMIC);
90034:         break;
90035:       }
90036:       case OE_Ignore: {
90037:         sqlite3VdbeAddOp2(v, OP_IsNull, regData+i, ignoreDest);
90038:         break;
90039:       }
90040:       default: {
90041:         assert( onError==OE_Replace );
90042:         j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regData+i);
90043:         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regData+i);
90044:         sqlite3VdbeJumpHere(v, j1);
90045:         break;
90046:       }
90047:     }
90048:   }
90049: 
90050:   /* Test all CHECK constraints
90051:   */
90052: #ifndef SQLITE_OMIT_CHECK
90053:   if( pTab->pCheck && (pParse->db->flags & SQLITE_IgnoreChecks)==0 ){
90054:     int allOk = sqlite3VdbeMakeLabel(v);
90055:     pParse->ckBase = regData;
90056:     sqlite3ExprIfTrue(pParse, pTab->pCheck, allOk, SQLITE_JUMPIFNULL);
90057:     onError = overrideError!=OE_Default ? overrideError : OE_Abort;
90058:     if( onError==OE_Ignore ){
90059:       sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
90060:     }else{
90061:       if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-15569-63625 */
90062:       sqlite3HaltConstraint(pParse, onError, 0, 0);
90063:     }
90064:     sqlite3VdbeResolveLabel(v, allOk);
90065:   }
90066: #endif /* !defined(SQLITE_OMIT_CHECK) */
90067: 
90068:   /* If we have an INTEGER PRIMARY KEY, make sure the primary key
90069:   ** of the new record does not previously exist.  Except, if this
90070:   ** is an UPDATE and the primary key is not changing, that is OK.
90071:   */
90072:   if( rowidChng ){
90073:     onError = pTab->keyConf;
90074:     if( overrideError!=OE_Default ){
90075:       onError = overrideError;
90076:     }else if( onError==OE_Default ){
90077:       onError = OE_Abort;
90078:     }
90079:     
90080:     if( isUpdate ){
90081:       j2 = sqlite3VdbeAddOp3(v, OP_Eq, regRowid, 0, rowidChng);
90082:     }
90083:     j3 = sqlite3VdbeAddOp3(v, OP_NotExists, baseCur, 0, regRowid);
90084:     switch( onError ){
90085:       default: {
90086:         onError = OE_Abort;
90087:         /* Fall thru into the next case */
90088:       }
90089:       case OE_Rollback:
90090:       case OE_Abort:
90091:       case OE_Fail: {
90092:         sqlite3HaltConstraint(
90093:           pParse, onError, "PRIMARY KEY must be unique", P4_STATIC);
90094:         break;
90095:       }
90096:       case OE_Replace: {
90097:         /* If there are DELETE triggers on this table and the
90098:         ** recursive-triggers flag is set, call GenerateRowDelete() to
90099:         ** remove the conflicting row from the the table. This will fire
90100:         ** the triggers and remove both the table and index b-tree entries.
90101:         **
90102:         ** Otherwise, if there are no triggers or the recursive-triggers
90103:         ** flag is not set, but the table has one or more indexes, call 
90104:         ** GenerateRowIndexDelete(). This removes the index b-tree entries 
90105:         ** only. The table b-tree entry will be replaced by the new entry 
90106:         ** when it is inserted.  
90107:         **
90108:         ** If either GenerateRowDelete() or GenerateRowIndexDelete() is called,
90109:         ** also invoke MultiWrite() to indicate that this VDBE may require
90110:         ** statement rollback (if the statement is aborted after the delete
90111:         ** takes place). Earlier versions called sqlite3MultiWrite() regardless,
90112:         ** but being more selective here allows statements like:
90113:         **
90114:         **   REPLACE INTO t(rowid) VALUES($newrowid)
90115:         **
90116:         ** to run without a statement journal if there are no indexes on the
90117:         ** table.
90118:         */
90119:         Trigger *pTrigger = 0;
90120:         if( pParse->db->flags&SQLITE_RecTriggers ){
90121:           pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
90122:         }
90123:         if( pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0) ){
90124:           sqlite3MultiWrite(pParse);
90125:           sqlite3GenerateRowDelete(
90126:               pParse, pTab, baseCur, regRowid, 0, pTrigger, OE_Replace
90127:           );
90128:         }else if( pTab->pIndex ){
90129:           sqlite3MultiWrite(pParse);
90130:           sqlite3GenerateRowIndexDelete(pParse, pTab, baseCur, 0);
90131:         }
90132:         seenReplace = 1;
90133:         break;
90134:       }
90135:       case OE_Ignore: {
90136:         assert( seenReplace==0 );
90137:         sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
90138:         break;
90139:       }
90140:     }
90141:     sqlite3VdbeJumpHere(v, j3);
90142:     if( isUpdate ){
90143:       sqlite3VdbeJumpHere(v, j2);
90144:     }
90145:   }
90146: 
90147:   /* Test all UNIQUE constraints by creating entries for each UNIQUE
90148:   ** index and making sure that duplicate entries do not already exist.
90149:   ** Add the new records to the indices as we go.
90150:   */
90151:   for(iCur=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, iCur++){
90152:     int regIdx;
90153:     int regR;
90154: 
90155:     if( aRegIdx[iCur]==0 ) continue;  /* Skip unused indices */
90156: 
90157:     /* Create a key for accessing the index entry */
90158:     regIdx = sqlite3GetTempRange(pParse, pIdx->nColumn+1);
90159:     for(i=0; i<pIdx->nColumn; i++){
90160:       int idx = pIdx->aiColumn[i];
90161:       if( idx==pTab->iPKey ){
90162:         sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i);
90163:       }else{
90164:         sqlite3VdbeAddOp2(v, OP_SCopy, regData+idx, regIdx+i);
90165:       }
90166:     }
90167:     sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i);
90168:     sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn+1, aRegIdx[iCur]);
90169:     sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v, pIdx), P4_TRANSIENT);
90170:     sqlite3ExprCacheAffinityChange(pParse, regIdx, pIdx->nColumn+1);
90171: 
90172:     /* Find out what action to take in case there is an indexing conflict */
90173:     onError = pIdx->onError;
90174:     if( onError==OE_None ){ 
90175:       sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1);
90176:       continue;  /* pIdx is not a UNIQUE index */
90177:     }
90178:     if( overrideError!=OE_Default ){
90179:       onError = overrideError;
90180:     }else if( onError==OE_Default ){
90181:       onError = OE_Abort;
90182:     }
90183:     if( seenReplace ){
90184:       if( onError==OE_Ignore ) onError = OE_Replace;
90185:       else if( onError==OE_Fail ) onError = OE_Abort;
90186:     }
90187:     
90188:     /* Check to see if the new index entry will be unique */
90189:     regR = sqlite3GetTempReg(pParse);
90190:     sqlite3VdbeAddOp2(v, OP_SCopy, regOldRowid, regR);
90191:     j3 = sqlite3VdbeAddOp4(v, OP_IsUnique, baseCur+iCur+1, 0,
90192:                            regR, SQLITE_INT_TO_PTR(regIdx),
90193:                            P4_INT32);
90194:     sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1);
90195: 
90196:     /* Generate code that executes if the new index entry is not unique */
90197:     assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail
90198:         || onError==OE_Ignore || onError==OE_Replace );
90199:     switch( onError ){
90200:       case OE_Rollback:
90201:       case OE_Abort:
90202:       case OE_Fail: {
90203:         int j;
90204:         StrAccum errMsg;
90205:         const char *zSep;
90206:         char *zErr;
90207: 
90208:         sqlite3StrAccumInit(&errMsg, 0, 0, 200);
90209:         errMsg.db = pParse->db;
90210:         zSep = pIdx->nColumn>1 ? "columns " : "column ";
90211:         for(j=0; j<pIdx->nColumn; j++){
90212:           char *zCol = pTab->aCol[pIdx->aiColumn[j]].zName;
90213:           sqlite3StrAccumAppend(&errMsg, zSep, -1);
90214:           zSep = ", ";
90215:           sqlite3StrAccumAppend(&errMsg, zCol, -1);
90216:         }
90217:         sqlite3StrAccumAppend(&errMsg,
90218:             pIdx->nColumn>1 ? " are not unique" : " is not unique", -1);
90219:         zErr = sqlite3StrAccumFinish(&errMsg);
90220:         sqlite3HaltConstraint(pParse, onError, zErr, 0);
90221:         sqlite3DbFree(errMsg.db, zErr);
90222:         break;
90223:       }
90224:       case OE_Ignore: {
90225:         assert( seenReplace==0 );
90226:         sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
90227:         break;
90228:       }
90229:       default: {
90230:         Trigger *pTrigger = 0;
90231:         assert( onError==OE_Replace );
90232:         sqlite3MultiWrite(pParse);
90233:         if( pParse->db->flags&SQLITE_RecTriggers ){
90234:           pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
90235:         }
90236:         sqlite3GenerateRowDelete(
90237:             pParse, pTab, baseCur, regR, 0, pTrigger, OE_Replace
90238:         );
90239:         seenReplace = 1;
90240:         break;
90241:       }
90242:     }
90243:     sqlite3VdbeJumpHere(v, j3);
90244:     sqlite3ReleaseTempReg(pParse, regR);
90245:   }
90246:   
90247:   if( pbMayReplace ){
90248:     *pbMayReplace = seenReplace;
90249:   }
90250: }
90251: 
90252: /*
90253: ** This routine generates code to finish the INSERT or UPDATE operation
90254: ** that was started by a prior call to sqlite3GenerateConstraintChecks.
90255: ** A consecutive range of registers starting at regRowid contains the
90256: ** rowid and the content to be inserted.
90257: **
90258: ** The arguments to this routine should be the same as the first six
90259: ** arguments to sqlite3GenerateConstraintChecks.
90260: */
90261: SQLITE_PRIVATE void sqlite3CompleteInsertion(
90262:   Parse *pParse,      /* The parser context */
90263:   Table *pTab,        /* the table into which we are inserting */
90264:   int baseCur,        /* Index of a read/write cursor pointing at pTab */
90265:   int regRowid,       /* Range of content */
90266:   int *aRegIdx,       /* Register used by each index.  0 for unused indices */
90267:   int isUpdate,       /* True for UPDATE, False for INSERT */
90268:   int appendBias,     /* True if this is likely to be an append */
90269:   int useSeekResult   /* True to set the USESEEKRESULT flag on OP_[Idx]Insert */
90270: ){
90271:   int i;
90272:   Vdbe *v;
90273:   int nIdx;
90274:   Index *pIdx;
90275:   u8 pik_flags;
90276:   int regData;
90277:   int regRec;
90278: 
90279:   v = sqlite3GetVdbe(pParse);
90280:   assert( v!=0 );
90281:   assert( pTab->pSelect==0 );  /* This table is not a VIEW */
90282:   for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){}
90283:   for(i=nIdx-1; i>=0; i--){
90284:     if( aRegIdx[i]==0 ) continue;
90285:     sqlite3VdbeAddOp2(v, OP_IdxInsert, baseCur+i+1, aRegIdx[i]);
90286:     if( useSeekResult ){
90287:       sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
90288:     }
90289:   }
90290:   regData = regRowid + 1;
90291:   regRec = sqlite3GetTempReg(pParse);
90292:   sqlite3VdbeAddOp3(v, OP_MakeRecord, regData, pTab->nCol, regRec);
90293:   sqlite3TableAffinityStr(v, pTab);
90294:   sqlite3ExprCacheAffinityChange(pParse, regData, pTab->nCol);
90295:   if( pParse->nested ){
90296:     pik_flags = 0;
90297:   }else{
90298:     pik_flags = OPFLAG_NCHANGE;
90299:     pik_flags |= (isUpdate?OPFLAG_ISUPDATE:OPFLAG_LASTROWID);
90300:   }
90301:   if( appendBias ){
90302:     pik_flags |= OPFLAG_APPEND;
90303:   }
90304:   if( useSeekResult ){
90305:     pik_flags |= OPFLAG_USESEEKRESULT;
90306:   }
90307:   sqlite3VdbeAddOp3(v, OP_Insert, baseCur, regRec, regRowid);
90308:   if( !pParse->nested ){
90309:     sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT);
90310:   }
90311:   sqlite3VdbeChangeP5(v, pik_flags);
90312: }
90313: 
90314: /*
90315: ** Generate code that will open cursors for a table and for all
90316: ** indices of that table.  The "baseCur" parameter is the cursor number used
90317: ** for the table.  Indices are opened on subsequent cursors.
90318: **
90319: ** Return the number of indices on the table.
90320: */
90321: SQLITE_PRIVATE int sqlite3OpenTableAndIndices(
90322:   Parse *pParse,   /* Parsing context */
90323:   Table *pTab,     /* Table to be opened */
90324:   int baseCur,     /* Cursor number assigned to the table */
90325:   int op           /* OP_OpenRead or OP_OpenWrite */
90326: ){
90327:   int i;
90328:   int iDb;
90329:   Index *pIdx;
90330:   Vdbe *v;
90331: 
90332:   if( IsVirtual(pTab) ) return 0;
90333:   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
90334:   v = sqlite3GetVdbe(pParse);
90335:   assert( v!=0 );
90336:   sqlite3OpenTable(pParse, baseCur, iDb, pTab, op);
90337:   for(i=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
90338:     KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
90339:     assert( pIdx->pSchema==pTab->pSchema );
90340:     sqlite3VdbeAddOp4(v, op, i+baseCur, pIdx->tnum, iDb,
90341:                       (char*)pKey, P4_KEYINFO_HANDOFF);
90342:     VdbeComment((v, "%s", pIdx->zName));
90343:   }
90344:   if( pParse->nTab<baseCur+i ){
90345:     pParse->nTab = baseCur+i;
90346:   }
90347:   return i-1;
90348: }
90349: 
90350: 
90351: #ifdef SQLITE_TEST
90352: /*
90353: ** The following global variable is incremented whenever the
90354: ** transfer optimization is used.  This is used for testing
90355: ** purposes only - to make sure the transfer optimization really
90356: ** is happening when it is suppose to.
90357: */
90358: SQLITE_API int sqlite3_xferopt_count;
90359: #endif /* SQLITE_TEST */
90360: 
90361: 
90362: #ifndef SQLITE_OMIT_XFER_OPT
90363: /*
90364: ** Check to collation names to see if they are compatible.
90365: */
90366: static int xferCompatibleCollation(const char *z1, const char *z2){
90367:   if( z1==0 ){
90368:     return z2==0;
90369:   }
90370:   if( z2==0 ){
90371:     return 0;
90372:   }
90373:   return sqlite3StrICmp(z1, z2)==0;
90374: }
90375: 
90376: 
90377: /*
90378: ** Check to see if index pSrc is compatible as a source of data
90379: ** for index pDest in an insert transfer optimization.  The rules
90380: ** for a compatible index:
90381: **
90382: **    *   The index is over the same set of columns
90383: **    *   The same DESC and ASC markings occurs on all columns
90384: **    *   The same onError processing (OE_Abort, OE_Ignore, etc)
90385: **    *   The same collating sequence on each column
90386: */
90387: static int xferCompatibleIndex(Index *pDest, Index *pSrc){
90388:   int i;
90389:   assert( pDest && pSrc );
90390:   assert( pDest->pTable!=pSrc->pTable );
90391:   if( pDest->nColumn!=pSrc->nColumn ){
90392:     return 0;   /* Different number of columns */
90393:   }
90394:   if( pDest->onError!=pSrc->onError ){
90395:     return 0;   /* Different conflict resolution strategies */
90396:   }
90397:   for(i=0; i<pSrc->nColumn; i++){
90398:     if( pSrc->aiColumn[i]!=pDest->aiColumn[i] ){
90399:       return 0;   /* Different columns indexed */
90400:     }
90401:     if( pSrc->aSortOrder[i]!=pDest->aSortOrder[i] ){
90402:       return 0;   /* Different sort orders */
90403:     }
90404:     if( !xferCompatibleCollation(pSrc->azColl[i],pDest->azColl[i]) ){
90405:       return 0;   /* Different collating sequences */
90406:     }
90407:   }
90408: 
90409:   /* If no test above fails then the indices must be compatible */
90410:   return 1;
90411: }
90412: 
90413: /*
90414: ** Attempt the transfer optimization on INSERTs of the form
90415: **
90416: **     INSERT INTO tab1 SELECT * FROM tab2;
90417: **
90418: ** The xfer optimization transfers raw records from tab2 over to tab1.  
90419: ** Columns are not decoded and reassemblied, which greatly improves
90420: ** performance.  Raw index records are transferred in the same way.
90421: **
90422: ** The xfer optimization is only attempted if tab1 and tab2 are compatible.
90423: ** There are lots of rules for determining compatibility - see comments
90424: ** embedded in the code for details.
90425: **
90426: ** This routine returns TRUE if the optimization is guaranteed to be used.
90427: ** Sometimes the xfer optimization will only work if the destination table
90428: ** is empty - a factor that can only be determined at run-time.  In that
90429: ** case, this routine generates code for the xfer optimization but also
90430: ** does a test to see if the destination table is empty and jumps over the
90431: ** xfer optimization code if the test fails.  In that case, this routine
90432: ** returns FALSE so that the caller will know to go ahead and generate
90433: ** an unoptimized transfer.  This routine also returns FALSE if there
90434: ** is no chance that the xfer optimization can be applied.
90435: **
90436: ** This optimization is particularly useful at making VACUUM run faster.
90437: */
90438: static int xferOptimization(
90439:   Parse *pParse,        /* Parser context */
90440:   Table *pDest,         /* The table we are inserting into */
90441:   Select *pSelect,      /* A SELECT statement to use as the data source */
90442:   int onError,          /* How to handle constraint errors */
90443:   int iDbDest           /* The database of pDest */
90444: ){
90445:   ExprList *pEList;                /* The result set of the SELECT */
90446:   Table *pSrc;                     /* The table in the FROM clause of SELECT */
90447:   Index *pSrcIdx, *pDestIdx;       /* Source and destination indices */
90448:   struct SrcList_item *pItem;      /* An element of pSelect->pSrc */
90449:   int i;                           /* Loop counter */
90450:   int iDbSrc;                      /* The database of pSrc */
90451:   int iSrc, iDest;                 /* Cursors from source and destination */
90452:   int addr1, addr2;                /* Loop addresses */
90453:   int emptyDestTest;               /* Address of test for empty pDest */
90454:   int emptySrcTest;                /* Address of test for empty pSrc */
90455:   Vdbe *v;                         /* The VDBE we are building */
90456:   KeyInfo *pKey;                   /* Key information for an index */
90457:   int regAutoinc;                  /* Memory register used by AUTOINC */
90458:   int destHasUniqueIdx = 0;        /* True if pDest has a UNIQUE index */
90459:   int regData, regRowid;           /* Registers holding data and rowid */
90460: 
90461:   if( pSelect==0 ){
90462:     return 0;   /* Must be of the form  INSERT INTO ... SELECT ... */
90463:   }
90464:   if( sqlite3TriggerList(pParse, pDest) ){
90465:     return 0;   /* tab1 must not have triggers */
90466:   }
90467: #ifndef SQLITE_OMIT_VIRTUALTABLE
90468:   if( pDest->tabFlags & TF_Virtual ){
90469:     return 0;   /* tab1 must not be a virtual table */
90470:   }
90471: #endif
90472:   if( onError==OE_Default ){
90473:     if( pDest->iPKey>=0 ) onError = pDest->keyConf;
90474:     if( onError==OE_Default ) onError = OE_Abort;
90475:   }
90476:   assert(pSelect->pSrc);   /* allocated even if there is no FROM clause */
90477:   if( pSelect->pSrc->nSrc!=1 ){
90478:     return 0;   /* FROM clause must have exactly one term */
90479:   }
90480:   if( pSelect->pSrc->a[0].pSelect ){
90481:     return 0;   /* FROM clause cannot contain a subquery */
90482:   }
90483:   if( pSelect->pWhere ){
90484:     return 0;   /* SELECT may not have a WHERE clause */
90485:   }
90486:   if( pSelect->pOrderBy ){
90487:     return 0;   /* SELECT may not have an ORDER BY clause */
90488:   }
90489:   /* Do not need to test for a HAVING clause.  If HAVING is present but
90490:   ** there is no ORDER BY, we will get an error. */
90491:   if( pSelect->pGroupBy ){
90492:     return 0;   /* SELECT may not have a GROUP BY clause */
90493:   }
90494:   if( pSelect->pLimit ){
90495:     return 0;   /* SELECT may not have a LIMIT clause */
90496:   }
90497:   assert( pSelect->pOffset==0 );  /* Must be so if pLimit==0 */
90498:   if( pSelect->pPrior ){
90499:     return 0;   /* SELECT may not be a compound query */
90500:   }
90501:   if( pSelect->selFlags & SF_Distinct ){
90502:     return 0;   /* SELECT may not be DISTINCT */
90503:   }
90504:   pEList = pSelect->pEList;
90505:   assert( pEList!=0 );
90506:   if( pEList->nExpr!=1 ){
90507:     return 0;   /* The result set must have exactly one column */
90508:   }
90509:   assert( pEList->a[0].pExpr );
90510:   if( pEList->a[0].pExpr->op!=TK_ALL ){
90511:     return 0;   /* The result set must be the special operator "*" */
90512:   }
90513: 
90514:   /* At this point we have established that the statement is of the
90515:   ** correct syntactic form to participate in this optimization.  Now
90516:   ** we have to check the semantics.
90517:   */
90518:   pItem = pSelect->pSrc->a;
90519:   pSrc = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase);
90520:   if( pSrc==0 ){
90521:     return 0;   /* FROM clause does not contain a real table */
90522:   }
90523:   if( pSrc==pDest ){
90524:     return 0;   /* tab1 and tab2 may not be the same table */
90525:   }
90526: #ifndef SQLITE_OMIT_VIRTUALTABLE
90527:   if( pSrc->tabFlags & TF_Virtual ){
90528:     return 0;   /* tab2 must not be a virtual table */
90529:   }
90530: #endif
90531:   if( pSrc->pSelect ){
90532:     return 0;   /* tab2 may not be a view */
90533:   }
90534:   if( pDest->nCol!=pSrc->nCol ){
90535:     return 0;   /* Number of columns must be the same in tab1 and tab2 */
90536:   }
90537:   if( pDest->iPKey!=pSrc->iPKey ){
90538:     return 0;   /* Both tables must have the same INTEGER PRIMARY KEY */
90539:   }
90540:   for(i=0; i<pDest->nCol; i++){
90541:     if( pDest->aCol[i].affinity!=pSrc->aCol[i].affinity ){
90542:       return 0;    /* Affinity must be the same on all columns */
90543:     }
90544:     if( !xferCompatibleCollation(pDest->aCol[i].zColl, pSrc->aCol[i].zColl) ){
90545:       return 0;    /* Collating sequence must be the same on all columns */
90546:     }
90547:     if( pDest->aCol[i].notNull && !pSrc->aCol[i].notNull ){
90548:       return 0;    /* tab2 must be NOT NULL if tab1 is */
90549:     }
90550:   }
90551:   for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
90552:     if( pDestIdx->onError!=OE_None ){
90553:       destHasUniqueIdx = 1;
90554:     }
90555:     for(pSrcIdx=pSrc->pIndex; pSrcIdx; pSrcIdx=pSrcIdx->pNext){
90556:       if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
90557:     }
90558:     if( pSrcIdx==0 ){
90559:       return 0;    /* pDestIdx has no corresponding index in pSrc */
90560:     }
90561:   }
90562: #ifndef SQLITE_OMIT_CHECK
90563:   if( pDest->pCheck && sqlite3ExprCompare(pSrc->pCheck, pDest->pCheck) ){
90564:     return 0;   /* Tables have different CHECK constraints.  Ticket #2252 */
90565:   }
90566: #endif
90567: #ifndef SQLITE_OMIT_FOREIGN_KEY
90568:   /* Disallow the transfer optimization if the destination table constains
90569:   ** any foreign key constraints.  This is more restrictive than necessary.
90570:   ** But the main beneficiary of the transfer optimization is the VACUUM 
90571:   ** command, and the VACUUM command disables foreign key constraints.  So
90572:   ** the extra complication to make this rule less restrictive is probably
90573:   ** not worth the effort.  Ticket [6284df89debdfa61db8073e062908af0c9b6118e]
90574:   */
90575:   if( (pParse->db->flags & SQLITE_ForeignKeys)!=0 && pDest->pFKey!=0 ){
90576:     return 0;
90577:   }
90578: #endif
90579:   if( (pParse->db->flags & SQLITE_CountRows)!=0 ){
90580:     return 0;  /* xfer opt does not play well with PRAGMA count_changes */
90581:   }
90582: 
90583:   /* If we get this far, it means that the xfer optimization is at
90584:   ** least a possibility, though it might only work if the destination
90585:   ** table (tab1) is initially empty.
90586:   */
90587: #ifdef SQLITE_TEST
90588:   sqlite3_xferopt_count++;
90589: #endif
90590:   iDbSrc = sqlite3SchemaToIndex(pParse->db, pSrc->pSchema);
90591:   v = sqlite3GetVdbe(pParse);
90592:   sqlite3CodeVerifySchema(pParse, iDbSrc);
90593:   iSrc = pParse->nTab++;
90594:   iDest = pParse->nTab++;
90595:   regAutoinc = autoIncBegin(pParse, iDbDest, pDest);
90596:   sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite);
90597:   if( (pDest->iPKey<0 && pDest->pIndex!=0)          /* (1) */
90598:    || destHasUniqueIdx                              /* (2) */
90599:    || (onError!=OE_Abort && onError!=OE_Rollback)   /* (3) */
90600:   ){
90601:     /* In some circumstances, we are able to run the xfer optimization
90602:     ** only if the destination table is initially empty.  This code makes
90603:     ** that determination.  Conditions under which the destination must
90604:     ** be empty:
90605:     **
90606:     ** (1) There is no INTEGER PRIMARY KEY but there are indices.
90607:     **     (If the destination is not initially empty, the rowid fields
90608:     **     of index entries might need to change.)
90609:     **
90610:     ** (2) The destination has a unique index.  (The xfer optimization 
90611:     **     is unable to test uniqueness.)
90612:     **
90613:     ** (3) onError is something other than OE_Abort and OE_Rollback.
90614:     */
90615:     addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iDest, 0);
90616:     emptyDestTest = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0);
90617:     sqlite3VdbeJumpHere(v, addr1);
90618:   }else{
90619:     emptyDestTest = 0;
90620:   }
90621:   sqlite3OpenTable(pParse, iSrc, iDbSrc, pSrc, OP_OpenRead);
90622:   emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0);
90623:   regData = sqlite3GetTempReg(pParse);
90624:   regRowid = sqlite3GetTempReg(pParse);
90625:   if( pDest->iPKey>=0 ){
90626:     addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
90627:     addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid);
90628:     sqlite3HaltConstraint(
90629:         pParse, onError, "PRIMARY KEY must be unique", P4_STATIC);
90630:     sqlite3VdbeJumpHere(v, addr2);
90631:     autoIncStep(pParse, regAutoinc, regRowid);
90632:   }else if( pDest->pIndex==0 ){
90633:     addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid);
90634:   }else{
90635:     addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
90636:     assert( (pDest->tabFlags & TF_Autoincrement)==0 );
90637:   }
90638:   sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData);
90639:   sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid);
90640:   sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND);
90641:   sqlite3VdbeChangeP4(v, -1, pDest->zName, 0);
90642:   sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1);
90643:   for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
90644:     for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){
90645:       if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
90646:     }
90647:     assert( pSrcIdx );
90648:     sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
90649:     sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
90650:     pKey = sqlite3IndexKeyinfo(pParse, pSrcIdx);
90651:     sqlite3VdbeAddOp4(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc,
90652:                       (char*)pKey, P4_KEYINFO_HANDOFF);
90653:     VdbeComment((v, "%s", pSrcIdx->zName));
90654:     pKey = sqlite3IndexKeyinfo(pParse, pDestIdx);
90655:     sqlite3VdbeAddOp4(v, OP_OpenWrite, iDest, pDestIdx->tnum, iDbDest,
90656:                       (char*)pKey, P4_KEYINFO_HANDOFF);
90657:     VdbeComment((v, "%s", pDestIdx->zName));
90658:     addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0);
90659:     sqlite3VdbeAddOp2(v, OP_RowKey, iSrc, regData);
90660:     sqlite3VdbeAddOp3(v, OP_IdxInsert, iDest, regData, 1);
90661:     sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1);
90662:     sqlite3VdbeJumpHere(v, addr1);
90663:   }
90664:   sqlite3VdbeJumpHere(v, emptySrcTest);
90665:   sqlite3ReleaseTempReg(pParse, regRowid);
90666:   sqlite3ReleaseTempReg(pParse, regData);
90667:   sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
90668:   sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
90669:   if( emptyDestTest ){
90670:     sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_OK, 0);
90671:     sqlite3VdbeJumpHere(v, emptyDestTest);
90672:     sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
90673:     return 0;
90674:   }else{
90675:     return 1;
90676:   }
90677: }
90678: #endif /* SQLITE_OMIT_XFER_OPT */
90679: 
90680: /************** End of insert.c **********************************************/
90681: /************** Begin file legacy.c ******************************************/
90682: /*
90683: ** 2001 September 15
90684: **
90685: ** The author disclaims copyright to this source code.  In place of
90686: ** a legal notice, here is a blessing:
90687: **
90688: **    May you do good and not evil.
90689: **    May you find forgiveness for yourself and forgive others.
90690: **    May you share freely, never taking more than you give.
90691: **
90692: *************************************************************************
90693: ** Main file for the SQLite library.  The routines in this file
90694: ** implement the programmer interface to the library.  Routines in
90695: ** other files are for internal use by SQLite and should not be
90696: ** accessed by users of the library.
90697: */
90698: 
90699: 
90700: /*
90701: ** Execute SQL code.  Return one of the SQLITE_ success/failure
90702: ** codes.  Also write an error message into memory obtained from
90703: ** malloc() and make *pzErrMsg point to that message.
90704: **
90705: ** If the SQL is a query, then for each row in the query result
90706: ** the xCallback() function is called.  pArg becomes the first
90707: ** argument to xCallback().  If xCallback=NULL then no callback
90708: ** is invoked, even for queries.
90709: */
90710: SQLITE_API int sqlite3_exec(
90711:   sqlite3 *db,                /* The database on which the SQL executes */
90712:   const char *zSql,           /* The SQL to be executed */
90713:   sqlite3_callback xCallback, /* Invoke this callback routine */
90714:   void *pArg,                 /* First argument to xCallback() */
90715:   char **pzErrMsg             /* Write error messages here */
90716: ){
90717:   int rc = SQLITE_OK;         /* Return code */
90718:   const char *zLeftover;      /* Tail of unprocessed SQL */
90719:   sqlite3_stmt *pStmt = 0;    /* The current SQL statement */
90720:   char **azCols = 0;          /* Names of result columns */
90721:   int nRetry = 0;             /* Number of retry attempts */
90722:   int callbackIsInit;         /* True if callback data is initialized */
90723: 
90724:   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
90725:   if( zSql==0 ) zSql = "";
90726: 
90727:   sqlite3_mutex_enter(db->mutex);
90728:   sqlite3Error(db, SQLITE_OK, 0);
90729:   while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){
90730:     int nCol;
90731:     char **azVals = 0;
90732: 
90733:     pStmt = 0;
90734:     rc = sqlite3_prepare(db, zSql, -1, &pStmt, &zLeftover);
90735:     assert( rc==SQLITE_OK || pStmt==0 );
90736:     if( rc!=SQLITE_OK ){
90737:       continue;
90738:     }
90739:     if( !pStmt ){
90740:       /* this happens for a comment or white-space */
90741:       zSql = zLeftover;
90742:       continue;
90743:     }
90744: 
90745:     callbackIsInit = 0;
90746:     nCol = sqlite3_column_count(pStmt);
90747: 
90748:     while( 1 ){
90749:       int i;
90750:       rc = sqlite3_step(pStmt);
90751: 
90752:       /* Invoke the callback function if required */
90753:       if( xCallback && (SQLITE_ROW==rc || 
90754:           (SQLITE_DONE==rc && !callbackIsInit
90755:                            && db->flags&SQLITE_NullCallback)) ){
90756:         if( !callbackIsInit ){
90757:           azCols = sqlite3DbMallocZero(db, 2*nCol*sizeof(const char*) + 1);
90758:           if( azCols==0 ){
90759:             goto exec_out;
90760:           }
90761:           for(i=0; i<nCol; i++){
90762:             azCols[i] = (char *)sqlite3_column_name(pStmt, i);
90763:             /* sqlite3VdbeSetColName() installs column names as UTF8
90764:             ** strings so there is no way for sqlite3_column_name() to fail. */
90765:             assert( azCols[i]!=0 );
90766:           }
90767:           callbackIsInit = 1;
90768:         }
90769:         if( rc==SQLITE_ROW ){
90770:           azVals = &azCols[nCol];
90771:           for(i=0; i<nCol; i++){
90772:             azVals[i] = (char *)sqlite3_column_text(pStmt, i);
90773:             if( !azVals[i] && sqlite3_column_type(pStmt, i)!=SQLITE_NULL ){
90774:               db->mallocFailed = 1;
90775:               goto exec_out;
90776:             }
90777:           }
90778:         }
90779:         if( xCallback(pArg, nCol, azVals, azCols) ){
90780:           rc = SQLITE_ABORT;
90781:           sqlite3VdbeFinalize((Vdbe *)pStmt);
90782:           pStmt = 0;
90783:           sqlite3Error(db, SQLITE_ABORT, 0);
90784:           goto exec_out;
90785:         }
90786:       }
90787: 
90788:       if( rc!=SQLITE_ROW ){
90789:         rc = sqlite3VdbeFinalize((Vdbe *)pStmt);
90790:         pStmt = 0;
90791:         if( rc!=SQLITE_SCHEMA ){
90792:           nRetry = 0;
90793:           zSql = zLeftover;
90794:           while( sqlite3Isspace(zSql[0]) ) zSql++;
90795:         }
90796:         break;
90797:       }
90798:     }
90799: 
90800:     sqlite3DbFree(db, azCols);
90801:     azCols = 0;
90802:   }
90803: 
90804: exec_out:
90805:   if( pStmt ) sqlite3VdbeFinalize((Vdbe *)pStmt);
90806:   sqlite3DbFree(db, azCols);
90807: 
90808:   rc = sqlite3ApiExit(db, rc);
90809:   if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){
90810:     int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db));
90811:     *pzErrMsg = sqlite3Malloc(nErrMsg);
90812:     if( *pzErrMsg ){
90813:       memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg);
90814:     }else{
90815:       rc = SQLITE_NOMEM;
90816:       sqlite3Error(db, SQLITE_NOMEM, 0);
90817:     }
90818:   }else if( pzErrMsg ){
90819:     *pzErrMsg = 0;
90820:   }
90821: 
90822:   assert( (rc&db->errMask)==rc );
90823:   sqlite3_mutex_leave(db->mutex);
90824:   return rc;
90825: }
90826: 
90827: /************** End of legacy.c **********************************************/
90828: /************** Begin file loadext.c *****************************************/
90829: /*
90830: ** 2006 June 7
90831: **
90832: ** The author disclaims copyright to this source code.  In place of
90833: ** a legal notice, here is a blessing:
90834: **
90835: **    May you do good and not evil.
90836: **    May you find forgiveness for yourself and forgive others.
90837: **    May you share freely, never taking more than you give.
90838: **
90839: *************************************************************************
90840: ** This file contains code used to dynamically load extensions into
90841: ** the SQLite library.
90842: */
90843: 
90844: #ifndef SQLITE_CORE
90845:   #define SQLITE_CORE 1  /* Disable the API redefinition in sqlite3ext.h */
90846: #endif
90847: /************** Include sqlite3ext.h in the middle of loadext.c **************/
90848: /************** Begin file sqlite3ext.h **************************************/
90849: /*
90850: ** 2006 June 7
90851: **
90852: ** The author disclaims copyright to this source code.  In place of
90853: ** a legal notice, here is a blessing:
90854: **
90855: **    May you do good and not evil.
90856: **    May you find forgiveness for yourself and forgive others.
90857: **    May you share freely, never taking more than you give.
90858: **
90859: *************************************************************************
90860: ** This header file defines the SQLite interface for use by
90861: ** shared libraries that want to be imported as extensions into
90862: ** an SQLite instance.  Shared libraries that intend to be loaded
90863: ** as extensions by SQLite should #include this file instead of 
90864: ** sqlite3.h.
90865: */
90866: #ifndef _SQLITE3EXT_H_
90867: #define _SQLITE3EXT_H_
90868: 
90869: typedef struct sqlite3_api_routines sqlite3_api_routines;
90870: 
90871: /*
90872: ** The following structure holds pointers to all of the SQLite API
90873: ** routines.
90874: **
90875: ** WARNING:  In order to maintain backwards compatibility, add new
90876: ** interfaces to the end of this structure only.  If you insert new
90877: ** interfaces in the middle of this structure, then older different
90878: ** versions of SQLite will not be able to load each others' shared
90879: ** libraries!
90880: */
90881: struct sqlite3_api_routines {
90882:   void * (*aggregate_context)(sqlite3_context*,int nBytes);
90883:   int  (*aggregate_count)(sqlite3_context*);
90884:   int  (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*));
90885:   int  (*bind_double)(sqlite3_stmt*,int,double);
90886:   int  (*bind_int)(sqlite3_stmt*,int,int);
90887:   int  (*bind_int64)(sqlite3_stmt*,int,sqlite_int64);
90888:   int  (*bind_null)(sqlite3_stmt*,int);
90889:   int  (*bind_parameter_count)(sqlite3_stmt*);
90890:   int  (*bind_parameter_index)(sqlite3_stmt*,const char*zName);
90891:   const char * (*bind_parameter_name)(sqlite3_stmt*,int);
90892:   int  (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*));
90893:   int  (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*));
90894:   int  (*bind_value)(sqlite3_stmt*,int,const sqlite3_value*);
90895:   int  (*busy_handler)(sqlite3*,int(*)(void*,int),void*);
90896:   int  (*busy_timeout)(sqlite3*,int ms);
90897:   int  (*changes)(sqlite3*);
90898:   int  (*close)(sqlite3*);
90899:   int  (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,
90900:                            int eTextRep,const char*));
90901:   int  (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,
90902:                              int eTextRep,const void*));
90903:   const void * (*column_blob)(sqlite3_stmt*,int iCol);
90904:   int  (*column_bytes)(sqlite3_stmt*,int iCol);
90905:   int  (*column_bytes16)(sqlite3_stmt*,int iCol);
90906:   int  (*column_count)(sqlite3_stmt*pStmt);
90907:   const char * (*column_database_name)(sqlite3_stmt*,int);
90908:   const void * (*column_database_name16)(sqlite3_stmt*,int);
90909:   const char * (*column_decltype)(sqlite3_stmt*,int i);
90910:   const void * (*column_decltype16)(sqlite3_stmt*,int);
90911:   double  (*column_double)(sqlite3_stmt*,int iCol);
90912:   int  (*column_int)(sqlite3_stmt*,int iCol);
90913:   sqlite_int64  (*column_int64)(sqlite3_stmt*,int iCol);
90914:   const char * (*column_name)(sqlite3_stmt*,int);
90915:   const void * (*column_name16)(sqlite3_stmt*,int);
90916:   const char * (*column_origin_name)(sqlite3_stmt*,int);
90917:   const void * (*column_origin_name16)(sqlite3_stmt*,int);
90918:   const char * (*column_table_name)(sqlite3_stmt*,int);
90919:   const void * (*column_table_name16)(sqlite3_stmt*,int);
90920:   const unsigned char * (*column_text)(sqlite3_stmt*,int iCol);
90921:   const void * (*column_text16)(sqlite3_stmt*,int iCol);
90922:   int  (*column_type)(sqlite3_stmt*,int iCol);
90923:   sqlite3_value* (*column_value)(sqlite3_stmt*,int iCol);
90924:   void * (*commit_hook)(sqlite3*,int(*)(void*),void*);
90925:   int  (*complete)(const char*sql);
90926:   int  (*complete16)(const void*sql);
90927:   int  (*create_collation)(sqlite3*,const char*,int,void*,
90928:                            int(*)(void*,int,const void*,int,const void*));
90929:   int  (*create_collation16)(sqlite3*,const void*,int,void*,
90930:                              int(*)(void*,int,const void*,int,const void*));
90931:   int  (*create_function)(sqlite3*,const char*,int,int,void*,
90932:                           void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
90933:                           void (*xStep)(sqlite3_context*,int,sqlite3_value**),
90934:                           void (*xFinal)(sqlite3_context*));
90935:   int  (*create_function16)(sqlite3*,const void*,int,int,void*,
90936:                             void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
90937:                             void (*xStep)(sqlite3_context*,int,sqlite3_value**),
90938:                             void (*xFinal)(sqlite3_context*));
90939:   int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*);
90940:   int  (*data_count)(sqlite3_stmt*pStmt);
90941:   sqlite3 * (*db_handle)(sqlite3_stmt*);
90942:   int (*declare_vtab)(sqlite3*,const char*);
90943:   int  (*enable_shared_cache)(int);
90944:   int  (*errcode)(sqlite3*db);
90945:   const char * (*errmsg)(sqlite3*);
90946:   const void * (*errmsg16)(sqlite3*);
90947:   int  (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**);
90948:   int  (*expired)(sqlite3_stmt*);
90949:   int  (*finalize)(sqlite3_stmt*pStmt);
90950:   void  (*free)(void*);
90951:   void  (*free_table)(char**result);
90952:   int  (*get_autocommit)(sqlite3*);
90953:   void * (*get_auxdata)(sqlite3_context*,int);
90954:   int  (*get_table)(sqlite3*,const char*,char***,int*,int*,char**);
90955:   int  (*global_recover)(void);
90956:   void  (*interruptx)(sqlite3*);
90957:   sqlite_int64  (*last_insert_rowid)(sqlite3*);
90958:   const char * (*libversion)(void);
90959:   int  (*libversion_number)(void);
90960:   void *(*malloc)(int);
90961:   char * (*mprintf)(const char*,...);
90962:   int  (*open)(const char*,sqlite3**);
90963:   int  (*open16)(const void*,sqlite3**);
90964:   int  (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
90965:   int  (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
90966:   void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*);
90967:   void  (*progress_handler)(sqlite3*,int,int(*)(void*),void*);
90968:   void *(*realloc)(void*,int);
90969:   int  (*reset)(sqlite3_stmt*pStmt);
90970:   void  (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*));
90971:   void  (*result_double)(sqlite3_context*,double);
90972:   void  (*result_error)(sqlite3_context*,const char*,int);
90973:   void  (*result_error16)(sqlite3_context*,const void*,int);
90974:   void  (*result_int)(sqlite3_context*,int);
90975:   void  (*result_int64)(sqlite3_context*,sqlite_int64);
90976:   void  (*result_null)(sqlite3_context*);
90977:   void  (*result_text)(sqlite3_context*,const char*,int,void(*)(void*));
90978:   void  (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*));
90979:   void  (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*));
90980:   void  (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*));
90981:   void  (*result_value)(sqlite3_context*,sqlite3_value*);
90982:   void * (*rollback_hook)(sqlite3*,void(*)(void*),void*);
90983:   int  (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,
90984:                          const char*,const char*),void*);
90985:   void  (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
90986:   char * (*snprintf)(int,char*,const char*,...);
90987:   int  (*step)(sqlite3_stmt*);
90988:   int  (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,
90989:                                 char const**,char const**,int*,int*,int*);
90990:   void  (*thread_cleanup)(void);
90991:   int  (*total_changes)(sqlite3*);
90992:   void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*);
90993:   int  (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*);
90994:   void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,
90995:                                          sqlite_int64),void*);
90996:   void * (*user_data)(sqlite3_context*);
90997:   const void * (*value_blob)(sqlite3_value*);
90998:   int  (*value_bytes)(sqlite3_value*);
90999:   int  (*value_bytes16)(sqlite3_value*);
91000:   double  (*value_double)(sqlite3_value*);
91001:   int  (*value_int)(sqlite3_value*);
91002:   sqlite_int64  (*value_int64)(sqlite3_value*);
91003:   int  (*value_numeric_type)(sqlite3_value*);
91004:   const unsigned char * (*value_text)(sqlite3_value*);
91005:   const void * (*value_text16)(sqlite3_value*);
91006:   const void * (*value_text16be)(sqlite3_value*);
91007:   const void * (*value_text16le)(sqlite3_value*);
91008:   int  (*value_type)(sqlite3_value*);
91009:   char *(*vmprintf)(const char*,va_list);
91010:   /* Added ??? */
91011:   int (*overload_function)(sqlite3*, const char *zFuncName, int nArg);
91012:   /* Added by 3.3.13 */
91013:   int (*prepare_v2)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
91014:   int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
91015:   int (*clear_bindings)(sqlite3_stmt*);
91016:   /* Added by 3.4.1 */
91017:   int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,
91018:                           void (*xDestroy)(void *));
91019:   /* Added by 3.5.0 */
91020:   int (*bind_zeroblob)(sqlite3_stmt*,int,int);
91021:   int (*blob_bytes)(sqlite3_blob*);
91022:   int (*blob_close)(sqlite3_blob*);
91023:   int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,
91024:                    int,sqlite3_blob**);
91025:   int (*blob_read)(sqlite3_blob*,void*,int,int);
91026:   int (*blob_write)(sqlite3_blob*,const void*,int,int);
91027:   int (*create_collation_v2)(sqlite3*,const char*,int,void*,
91028:                              int(*)(void*,int,const void*,int,const void*),
91029:                              void(*)(void*));
91030:   int (*file_control)(sqlite3*,const char*,int,void*);
91031:   sqlite3_int64 (*memory_highwater)(int);
91032:   sqlite3_int64 (*memory_used)(void);
91033:   sqlite3_mutex *(*mutex_alloc)(int);
91034:   void (*mutex_enter)(sqlite3_mutex*);
91035:   void (*mutex_free)(sqlite3_mutex*);
91036:   void (*mutex_leave)(sqlite3_mutex*);
91037:   int (*mutex_try)(sqlite3_mutex*);
91038:   int (*open_v2)(const char*,sqlite3**,int,const char*);
91039:   int (*release_memory)(int);
91040:   void (*result_error_nomem)(sqlite3_context*);
91041:   void (*result_error_toobig)(sqlite3_context*);
91042:   int (*sleep)(int);
91043:   void (*soft_heap_limit)(int);
91044:   sqlite3_vfs *(*vfs_find)(const char*);
91045:   int (*vfs_register)(sqlite3_vfs*,int);
91046:   int (*vfs_unregister)(sqlite3_vfs*);
91047:   int (*xthreadsafe)(void);
91048:   void (*result_zeroblob)(sqlite3_context*,int);
91049:   void (*result_error_code)(sqlite3_context*,int);
91050:   int (*test_control)(int, ...);
91051:   void (*randomness)(int,void*);
91052:   sqlite3 *(*context_db_handle)(sqlite3_context*);
91053:   int (*extended_result_codes)(sqlite3*,int);
91054:   int (*limit)(sqlite3*,int,int);
91055:   sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*);
91056:   const char *(*sql)(sqlite3_stmt*);
91057:   int (*status)(int,int*,int*,int);
91058:   int (*backup_finish)(sqlite3_backup*);
91059:   sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*);
91060:   int (*backup_pagecount)(sqlite3_backup*);
91061:   int (*backup_remaining)(sqlite3_backup*);
91062:   int (*backup_step)(sqlite3_backup*,int);
91063:   const char *(*compileoption_get)(int);
91064:   int (*compileoption_used)(const char*);
91065:   int (*create_function_v2)(sqlite3*,const char*,int,int,void*,
91066:                             void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
91067:                             void (*xStep)(sqlite3_context*,int,sqlite3_value**),
91068:                             void (*xFinal)(sqlite3_context*),
91069:                             void(*xDestroy)(void*));
91070:   int (*db_config)(sqlite3*,int,...);
91071:   sqlite3_mutex *(*db_mutex)(sqlite3*);
91072:   int (*db_status)(sqlite3*,int,int*,int*,int);
91073:   int (*extended_errcode)(sqlite3*);
91074:   void (*log)(int,const char*,...);
91075:   sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64);
91076:   const char *(*sourceid)(void);
91077:   int (*stmt_status)(sqlite3_stmt*,int,int);
91078:   int (*strnicmp)(const char*,const char*,int);
91079:   int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*);
91080:   int (*wal_autocheckpoint)(sqlite3*,int);
91081:   int (*wal_checkpoint)(sqlite3*,const char*);
91082:   void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*);
91083:   int (*blob_reopen)(sqlite3_blob*,sqlite3_int64);
91084:   int (*vtab_config)(sqlite3*,int op,...);
91085:   int (*vtab_on_conflict)(sqlite3*);
91086: };
91087: 
91088: /*
91089: ** The following macros redefine the API routines so that they are
91090: ** redirected throught the global sqlite3_api structure.
91091: **
91092: ** This header file is also used by the loadext.c source file
91093: ** (part of the main SQLite library - not an extension) so that
91094: ** it can get access to the sqlite3_api_routines structure
91095: ** definition.  But the main library does not want to redefine
91096: ** the API.  So the redefinition macros are only valid if the
91097: ** SQLITE_CORE macros is undefined.
91098: */
91099: #ifndef SQLITE_CORE
91100: #define sqlite3_aggregate_context      sqlite3_api->aggregate_context
91101: #ifndef SQLITE_OMIT_DEPRECATED
91102: #define sqlite3_aggregate_count        sqlite3_api->aggregate_count
91103: #endif
91104: #define sqlite3_bind_blob              sqlite3_api->bind_blob
91105: #define sqlite3_bind_double            sqlite3_api->bind_double
91106: #define sqlite3_bind_int               sqlite3_api->bind_int
91107: #define sqlite3_bind_int64             sqlite3_api->bind_int64
91108: #define sqlite3_bind_null              sqlite3_api->bind_null
91109: #define sqlite3_bind_parameter_count   sqlite3_api->bind_parameter_count
91110: #define sqlite3_bind_parameter_index   sqlite3_api->bind_parameter_index
91111: #define sqlite3_bind_parameter_name    sqlite3_api->bind_parameter_name
91112: #define sqlite3_bind_text              sqlite3_api->bind_text
91113: #define sqlite3_bind_text16            sqlite3_api->bind_text16
91114: #define sqlite3_bind_value             sqlite3_api->bind_value
91115: #define sqlite3_busy_handler           sqlite3_api->busy_handler
91116: #define sqlite3_busy_timeout           sqlite3_api->busy_timeout
91117: #define sqlite3_changes                sqlite3_api->changes
91118: #define sqlite3_close                  sqlite3_api->close
91119: #define sqlite3_collation_needed       sqlite3_api->collation_needed
91120: #define sqlite3_collation_needed16     sqlite3_api->collation_needed16
91121: #define sqlite3_column_blob            sqlite3_api->column_blob
91122: #define sqlite3_column_bytes           sqlite3_api->column_bytes
91123: #define sqlite3_column_bytes16         sqlite3_api->column_bytes16
91124: #define sqlite3_column_count           sqlite3_api->column_count
91125: #define sqlite3_column_database_name   sqlite3_api->column_database_name
91126: #define sqlite3_column_database_name16 sqlite3_api->column_database_name16
91127: #define sqlite3_column_decltype        sqlite3_api->column_decltype
91128: #define sqlite3_column_decltype16      sqlite3_api->column_decltype16
91129: #define sqlite3_column_double          sqlite3_api->column_double
91130: #define sqlite3_column_int             sqlite3_api->column_int
91131: #define sqlite3_column_int64           sqlite3_api->column_int64
91132: #define sqlite3_column_name            sqlite3_api->column_name
91133: #define sqlite3_column_name16          sqlite3_api->column_name16
91134: #define sqlite3_column_origin_name     sqlite3_api->column_origin_name
91135: #define sqlite3_column_origin_name16   sqlite3_api->column_origin_name16
91136: #define sqlite3_column_table_name      sqlite3_api->column_table_name
91137: #define sqlite3_column_table_name16    sqlite3_api->column_table_name16
91138: #define sqlite3_column_text            sqlite3_api->column_text
91139: #define sqlite3_column_text16          sqlite3_api->column_text16
91140: #define sqlite3_column_type            sqlite3_api->column_type
91141: #define sqlite3_column_value           sqlite3_api->column_value
91142: #define sqlite3_commit_hook            sqlite3_api->commit_hook
91143: #define sqlite3_complete               sqlite3_api->complete
91144: #define sqlite3_complete16             sqlite3_api->complete16
91145: #define sqlite3_create_collation       sqlite3_api->create_collation
91146: #define sqlite3_create_collation16     sqlite3_api->create_collation16
91147: #define sqlite3_create_function        sqlite3_api->create_function
91148: #define sqlite3_create_function16      sqlite3_api->create_function16
91149: #define sqlite3_create_module          sqlite3_api->create_module
91150: #define sqlite3_create_module_v2       sqlite3_api->create_module_v2
91151: #define sqlite3_data_count             sqlite3_api->data_count
91152: #define sqlite3_db_handle              sqlite3_api->db_handle
91153: #define sqlite3_declare_vtab           sqlite3_api->declare_vtab
91154: #define sqlite3_enable_shared_cache    sqlite3_api->enable_shared_cache
91155: #define sqlite3_errcode                sqlite3_api->errcode
91156: #define sqlite3_errmsg                 sqlite3_api->errmsg
91157: #define sqlite3_errmsg16               sqlite3_api->errmsg16
91158: #define sqlite3_exec                   sqlite3_api->exec
91159: #ifndef SQLITE_OMIT_DEPRECATED
91160: #define sqlite3_expired                sqlite3_api->expired
91161: #endif
91162: #define sqlite3_finalize               sqlite3_api->finalize
91163: #define sqlite3_free                   sqlite3_api->free
91164: #define sqlite3_free_table             sqlite3_api->free_table
91165: #define sqlite3_get_autocommit         sqlite3_api->get_autocommit
91166: #define sqlite3_get_auxdata            sqlite3_api->get_auxdata
91167: #define sqlite3_get_table              sqlite3_api->get_table
91168: #ifndef SQLITE_OMIT_DEPRECATED
91169: #define sqlite3_global_recover         sqlite3_api->global_recover
91170: #endif
91171: #define sqlite3_interrupt              sqlite3_api->interruptx
91172: #define sqlite3_last_insert_rowid      sqlite3_api->last_insert_rowid
91173: #define sqlite3_libversion             sqlite3_api->libversion
91174: #define sqlite3_libversion_number      sqlite3_api->libversion_number
91175: #define sqlite3_malloc                 sqlite3_api->malloc
91176: #define sqlite3_mprintf                sqlite3_api->mprintf
91177: #define sqlite3_open                   sqlite3_api->open
91178: #define sqlite3_open16                 sqlite3_api->open16
91179: #define sqlite3_prepare                sqlite3_api->prepare
91180: #define sqlite3_prepare16              sqlite3_api->prepare16
91181: #define sqlite3_prepare_v2             sqlite3_api->prepare_v2
91182: #define sqlite3_prepare16_v2           sqlite3_api->prepare16_v2
91183: #define sqlite3_profile                sqlite3_api->profile
91184: #define sqlite3_progress_handler       sqlite3_api->progress_handler
91185: #define sqlite3_realloc                sqlite3_api->realloc
91186: #define sqlite3_reset                  sqlite3_api->reset
91187: #define sqlite3_result_blob            sqlite3_api->result_blob
91188: #define sqlite3_result_double          sqlite3_api->result_double
91189: #define sqlite3_result_error           sqlite3_api->result_error
91190: #define sqlite3_result_error16         sqlite3_api->result_error16
91191: #define sqlite3_result_int             sqlite3_api->result_int
91192: #define sqlite3_result_int64           sqlite3_api->result_int64
91193: #define sqlite3_result_null            sqlite3_api->result_null
91194: #define sqlite3_result_text            sqlite3_api->result_text
91195: #define sqlite3_result_text16          sqlite3_api->result_text16
91196: #define sqlite3_result_text16be        sqlite3_api->result_text16be
91197: #define sqlite3_result_text16le        sqlite3_api->result_text16le
91198: #define sqlite3_result_value           sqlite3_api->result_value
91199: #define sqlite3_rollback_hook          sqlite3_api->rollback_hook
91200: #define sqlite3_set_authorizer         sqlite3_api->set_authorizer
91201: #define sqlite3_set_auxdata            sqlite3_api->set_auxdata
91202: #define sqlite3_snprintf               sqlite3_api->snprintf
91203: #define sqlite3_step                   sqlite3_api->step
91204: #define sqlite3_table_column_metadata  sqlite3_api->table_column_metadata
91205: #define sqlite3_thread_cleanup         sqlite3_api->thread_cleanup
91206: #define sqlite3_total_changes          sqlite3_api->total_changes
91207: #define sqlite3_trace                  sqlite3_api->trace
91208: #ifndef SQLITE_OMIT_DEPRECATED
91209: #define sqlite3_transfer_bindings      sqlite3_api->transfer_bindings
91210: #endif
91211: #define sqlite3_update_hook            sqlite3_api->update_hook
91212: #define sqlite3_user_data              sqlite3_api->user_data
91213: #define sqlite3_value_blob             sqlite3_api->value_blob
91214: #define sqlite3_value_bytes            sqlite3_api->value_bytes
91215: #define sqlite3_value_bytes16          sqlite3_api->value_bytes16
91216: #define sqlite3_value_double           sqlite3_api->value_double
91217: #define sqlite3_value_int              sqlite3_api->value_int
91218: #define sqlite3_value_int64            sqlite3_api->value_int64
91219: #define sqlite3_value_numeric_type     sqlite3_api->value_numeric_type
91220: #define sqlite3_value_text             sqlite3_api->value_text
91221: #define sqlite3_value_text16           sqlite3_api->value_text16
91222: #define sqlite3_value_text16be         sqlite3_api->value_text16be
91223: #define sqlite3_value_text16le         sqlite3_api->value_text16le
91224: #define sqlite3_value_type             sqlite3_api->value_type
91225: #define sqlite3_vmprintf               sqlite3_api->vmprintf
91226: #define sqlite3_overload_function      sqlite3_api->overload_function
91227: #define sqlite3_prepare_v2             sqlite3_api->prepare_v2
91228: #define sqlite3_prepare16_v2           sqlite3_api->prepare16_v2
91229: #define sqlite3_clear_bindings         sqlite3_api->clear_bindings
91230: #define sqlite3_bind_zeroblob          sqlite3_api->bind_zeroblob
91231: #define sqlite3_blob_bytes             sqlite3_api->blob_bytes
91232: #define sqlite3_blob_close             sqlite3_api->blob_close
91233: #define sqlite3_blob_open              sqlite3_api->blob_open
91234: #define sqlite3_blob_read              sqlite3_api->blob_read
91235: #define sqlite3_blob_write             sqlite3_api->blob_write
91236: #define sqlite3_create_collation_v2    sqlite3_api->create_collation_v2
91237: #define sqlite3_file_control           sqlite3_api->file_control
91238: #define sqlite3_memory_highwater       sqlite3_api->memory_highwater
91239: #define sqlite3_memory_used            sqlite3_api->memory_used
91240: #define sqlite3_mutex_alloc            sqlite3_api->mutex_alloc
91241: #define sqlite3_mutex_enter            sqlite3_api->mutex_enter
91242: #define sqlite3_mutex_free             sqlite3_api->mutex_free
91243: #define sqlite3_mutex_leave            sqlite3_api->mutex_leave
91244: #define sqlite3_mutex_try              sqlite3_api->mutex_try
91245: #define sqlite3_open_v2                sqlite3_api->open_v2
91246: #define sqlite3_release_memory         sqlite3_api->release_memory
91247: #define sqlite3_result_error_nomem     sqlite3_api->result_error_nomem
91248: #define sqlite3_result_error_toobig    sqlite3_api->result_error_toobig
91249: #define sqlite3_sleep                  sqlite3_api->sleep
91250: #define sqlite3_soft_heap_limit        sqlite3_api->soft_heap_limit
91251: #define sqlite3_vfs_find               sqlite3_api->vfs_find
91252: #define sqlite3_vfs_register           sqlite3_api->vfs_register
91253: #define sqlite3_vfs_unregister         sqlite3_api->vfs_unregister
91254: #define sqlite3_threadsafe             sqlite3_api->xthreadsafe
91255: #define sqlite3_result_zeroblob        sqlite3_api->result_zeroblob
91256: #define sqlite3_result_error_code      sqlite3_api->result_error_code
91257: #define sqlite3_test_control           sqlite3_api->test_control
91258: #define sqlite3_randomness             sqlite3_api->randomness
91259: #define sqlite3_context_db_handle      sqlite3_api->context_db_handle
91260: #define sqlite3_extended_result_codes  sqlite3_api->extended_result_codes
91261: #define sqlite3_limit                  sqlite3_api->limit
91262: #define sqlite3_next_stmt              sqlite3_api->next_stmt
91263: #define sqlite3_sql                    sqlite3_api->sql
91264: #define sqlite3_status                 sqlite3_api->status
91265: #define sqlite3_backup_finish          sqlite3_api->backup_finish
91266: #define sqlite3_backup_init            sqlite3_api->backup_init
91267: #define sqlite3_backup_pagecount       sqlite3_api->backup_pagecount
91268: #define sqlite3_backup_remaining       sqlite3_api->backup_remaining
91269: #define sqlite3_backup_step            sqlite3_api->backup_step
91270: #define sqlite3_compileoption_get      sqlite3_api->compileoption_get
91271: #define sqlite3_compileoption_used     sqlite3_api->compileoption_used
91272: #define sqlite3_create_function_v2     sqlite3_api->create_function_v2
91273: #define sqlite3_db_config              sqlite3_api->db_config
91274: #define sqlite3_db_mutex               sqlite3_api->db_mutex
91275: #define sqlite3_db_status              sqlite3_api->db_status
91276: #define sqlite3_extended_errcode       sqlite3_api->extended_errcode
91277: #define sqlite3_log                    sqlite3_api->log
91278: #define sqlite3_soft_heap_limit64      sqlite3_api->soft_heap_limit64
91279: #define sqlite3_sourceid               sqlite3_api->sourceid
91280: #define sqlite3_stmt_status            sqlite3_api->stmt_status
91281: #define sqlite3_strnicmp               sqlite3_api->strnicmp
91282: #define sqlite3_unlock_notify          sqlite3_api->unlock_notify
91283: #define sqlite3_wal_autocheckpoint     sqlite3_api->wal_autocheckpoint
91284: #define sqlite3_wal_checkpoint         sqlite3_api->wal_checkpoint
91285: #define sqlite3_wal_hook               sqlite3_api->wal_hook
91286: #define sqlite3_blob_reopen            sqlite3_api->blob_reopen
91287: #define sqlite3_vtab_config            sqlite3_api->vtab_config
91288: #define sqlite3_vtab_on_conflict       sqlite3_api->vtab_on_conflict
91289: #endif /* SQLITE_CORE */
91290: 
91291: #define SQLITE_EXTENSION_INIT1     const sqlite3_api_routines *sqlite3_api = 0;
91292: #define SQLITE_EXTENSION_INIT2(v)  sqlite3_api = v;
91293: 
91294: #endif /* _SQLITE3EXT_H_ */
91295: 
91296: /************** End of sqlite3ext.h ******************************************/
91297: /************** Continuing where we left off in loadext.c ********************/
91298: /* #include <string.h> */
91299: 
91300: #ifndef SQLITE_OMIT_LOAD_EXTENSION
91301: 
91302: /*
91303: ** Some API routines are omitted when various features are
91304: ** excluded from a build of SQLite.  Substitute a NULL pointer
91305: ** for any missing APIs.
91306: */
91307: #ifndef SQLITE_ENABLE_COLUMN_METADATA
91308: # define sqlite3_column_database_name   0
91309: # define sqlite3_column_database_name16 0
91310: # define sqlite3_column_table_name      0
91311: # define sqlite3_column_table_name16    0
91312: # define sqlite3_column_origin_name     0
91313: # define sqlite3_column_origin_name16   0
91314: # define sqlite3_table_column_metadata  0
91315: #endif
91316: 
91317: #ifdef SQLITE_OMIT_AUTHORIZATION
91318: # define sqlite3_set_authorizer         0
91319: #endif
91320: 
91321: #ifdef SQLITE_OMIT_UTF16
91322: # define sqlite3_bind_text16            0
91323: # define sqlite3_collation_needed16     0
91324: # define sqlite3_column_decltype16      0
91325: # define sqlite3_column_name16          0
91326: # define sqlite3_column_text16          0
91327: # define sqlite3_complete16             0
91328: # define sqlite3_create_collation16     0
91329: # define sqlite3_create_function16      0
91330: # define sqlite3_errmsg16               0
91331: # define sqlite3_open16                 0
91332: # define sqlite3_prepare16              0
91333: # define sqlite3_prepare16_v2           0
91334: # define sqlite3_result_error16         0
91335: # define sqlite3_result_text16          0
91336: # define sqlite3_result_text16be        0
91337: # define sqlite3_result_text16le        0
91338: # define sqlite3_value_text16           0
91339: # define sqlite3_value_text16be         0
91340: # define sqlite3_value_text16le         0
91341: # define sqlite3_column_database_name16 0
91342: # define sqlite3_column_table_name16    0
91343: # define sqlite3_column_origin_name16   0
91344: #endif
91345: 
91346: #ifdef SQLITE_OMIT_COMPLETE
91347: # define sqlite3_complete 0
91348: # define sqlite3_complete16 0
91349: #endif
91350: 
91351: #ifdef SQLITE_OMIT_DECLTYPE
91352: # define sqlite3_column_decltype16      0
91353: # define sqlite3_column_decltype        0
91354: #endif
91355: 
91356: #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
91357: # define sqlite3_progress_handler 0
91358: #endif
91359: 
91360: #ifdef SQLITE_OMIT_VIRTUALTABLE
91361: # define sqlite3_create_module 0
91362: # define sqlite3_create_module_v2 0
91363: # define sqlite3_declare_vtab 0
91364: # define sqlite3_vtab_config 0
91365: # define sqlite3_vtab_on_conflict 0
91366: #endif
91367: 
91368: #ifdef SQLITE_OMIT_SHARED_CACHE
91369: # define sqlite3_enable_shared_cache 0
91370: #endif
91371: 
91372: #ifdef SQLITE_OMIT_TRACE
91373: # define sqlite3_profile       0
91374: # define sqlite3_trace         0
91375: #endif
91376: 
91377: #ifdef SQLITE_OMIT_GET_TABLE
91378: # define sqlite3_free_table    0
91379: # define sqlite3_get_table     0
91380: #endif
91381: 
91382: #ifdef SQLITE_OMIT_INCRBLOB
91383: #define sqlite3_bind_zeroblob  0
91384: #define sqlite3_blob_bytes     0
91385: #define sqlite3_blob_close     0
91386: #define sqlite3_blob_open      0
91387: #define sqlite3_blob_read      0
91388: #define sqlite3_blob_write     0
91389: #define sqlite3_blob_reopen    0
91390: #endif
91391: 
91392: /*
91393: ** The following structure contains pointers to all SQLite API routines.
91394: ** A pointer to this structure is passed into extensions when they are
91395: ** loaded so that the extension can make calls back into the SQLite
91396: ** library.
91397: **
91398: ** When adding new APIs, add them to the bottom of this structure
91399: ** in order to preserve backwards compatibility.
91400: **
91401: ** Extensions that use newer APIs should first call the
91402: ** sqlite3_libversion_number() to make sure that the API they
91403: ** intend to use is supported by the library.  Extensions should
91404: ** also check to make sure that the pointer to the function is
91405: ** not NULL before calling it.
91406: */
91407: static const sqlite3_api_routines sqlite3Apis = {
91408:   sqlite3_aggregate_context,
91409: #ifndef SQLITE_OMIT_DEPRECATED
91410:   sqlite3_aggregate_count,
91411: #else
91412:   0,
91413: #endif
91414:   sqlite3_bind_blob,
91415:   sqlite3_bind_double,
91416:   sqlite3_bind_int,
91417:   sqlite3_bind_int64,
91418:   sqlite3_bind_null,
91419:   sqlite3_bind_parameter_count,
91420:   sqlite3_bind_parameter_index,
91421:   sqlite3_bind_parameter_name,
91422:   sqlite3_bind_text,
91423:   sqlite3_bind_text16,
91424:   sqlite3_bind_value,
91425:   sqlite3_busy_handler,
91426:   sqlite3_busy_timeout,
91427:   sqlite3_changes,
91428:   sqlite3_close,
91429:   sqlite3_collation_needed,
91430:   sqlite3_collation_needed16,
91431:   sqlite3_column_blob,
91432:   sqlite3_column_bytes,
91433:   sqlite3_column_bytes16,
91434:   sqlite3_column_count,
91435:   sqlite3_column_database_name,
91436:   sqlite3_column_database_name16,
91437:   sqlite3_column_decltype,
91438:   sqlite3_column_decltype16,
91439:   sqlite3_column_double,
91440:   sqlite3_column_int,
91441:   sqlite3_column_int64,
91442:   sqlite3_column_name,
91443:   sqlite3_column_name16,
91444:   sqlite3_column_origin_name,
91445:   sqlite3_column_origin_name16,
91446:   sqlite3_column_table_name,
91447:   sqlite3_column_table_name16,
91448:   sqlite3_column_text,
91449:   sqlite3_column_text16,
91450:   sqlite3_column_type,
91451:   sqlite3_column_value,
91452:   sqlite3_commit_hook,
91453:   sqlite3_complete,
91454:   sqlite3_complete16,
91455:   sqlite3_create_collation,
91456:   sqlite3_create_collation16,
91457:   sqlite3_create_function,
91458:   sqlite3_create_function16,
91459:   sqlite3_create_module,
91460:   sqlite3_data_count,
91461:   sqlite3_db_handle,
91462:   sqlite3_declare_vtab,
91463:   sqlite3_enable_shared_cache,
91464:   sqlite3_errcode,
91465:   sqlite3_errmsg,
91466:   sqlite3_errmsg16,
91467:   sqlite3_exec,
91468: #ifndef SQLITE_OMIT_DEPRECATED
91469:   sqlite3_expired,
91470: #else
91471:   0,
91472: #endif
91473:   sqlite3_finalize,
91474:   sqlite3_free,
91475:   sqlite3_free_table,
91476:   sqlite3_get_autocommit,
91477:   sqlite3_get_auxdata,
91478:   sqlite3_get_table,
91479:   0,     /* Was sqlite3_global_recover(), but that function is deprecated */
91480:   sqlite3_interrupt,
91481:   sqlite3_last_insert_rowid,
91482:   sqlite3_libversion,
91483:   sqlite3_libversion_number,
91484:   sqlite3_malloc,
91485:   sqlite3_mprintf,
91486:   sqlite3_open,
91487:   sqlite3_open16,
91488:   sqlite3_prepare,
91489:   sqlite3_prepare16,
91490:   sqlite3_profile,
91491:   sqlite3_progress_handler,
91492:   sqlite3_realloc,
91493:   sqlite3_reset,
91494:   sqlite3_result_blob,
91495:   sqlite3_result_double,
91496:   sqlite3_result_error,
91497:   sqlite3_result_error16,
91498:   sqlite3_result_int,
91499:   sqlite3_result_int64,
91500:   sqlite3_result_null,
91501:   sqlite3_result_text,
91502:   sqlite3_result_text16,
91503:   sqlite3_result_text16be,
91504:   sqlite3_result_text16le,
91505:   sqlite3_result_value,
91506:   sqlite3_rollback_hook,
91507:   sqlite3_set_authorizer,
91508:   sqlite3_set_auxdata,
91509:   sqlite3_snprintf,
91510:   sqlite3_step,
91511:   sqlite3_table_column_metadata,
91512: #ifndef SQLITE_OMIT_DEPRECATED
91513:   sqlite3_thread_cleanup,
91514: #else
91515:   0,
91516: #endif
91517:   sqlite3_total_changes,
91518:   sqlite3_trace,
91519: #ifndef SQLITE_OMIT_DEPRECATED
91520:   sqlite3_transfer_bindings,
91521: #else
91522:   0,
91523: #endif
91524:   sqlite3_update_hook,
91525:   sqlite3_user_data,
91526:   sqlite3_value_blob,
91527:   sqlite3_value_bytes,
91528:   sqlite3_value_bytes16,
91529:   sqlite3_value_double,
91530:   sqlite3_value_int,
91531:   sqlite3_value_int64,
91532:   sqlite3_value_numeric_type,
91533:   sqlite3_value_text,
91534:   sqlite3_value_text16,
91535:   sqlite3_value_text16be,
91536:   sqlite3_value_text16le,
91537:   sqlite3_value_type,
91538:   sqlite3_vmprintf,
91539:   /*
91540:   ** The original API set ends here.  All extensions can call any
91541:   ** of the APIs above provided that the pointer is not NULL.  But
91542:   ** before calling APIs that follow, extension should check the
91543:   ** sqlite3_libversion_number() to make sure they are dealing with
91544:   ** a library that is new enough to support that API.
91545:   *************************************************************************
91546:   */
91547:   sqlite3_overload_function,
91548: 
91549:   /*
91550:   ** Added after 3.3.13
91551:   */
91552:   sqlite3_prepare_v2,
91553:   sqlite3_prepare16_v2,
91554:   sqlite3_clear_bindings,
91555: 
91556:   /*
91557:   ** Added for 3.4.1
91558:   */
91559:   sqlite3_create_module_v2,
91560: 
91561:   /*
91562:   ** Added for 3.5.0
91563:   */
91564:   sqlite3_bind_zeroblob,
91565:   sqlite3_blob_bytes,
91566:   sqlite3_blob_close,
91567:   sqlite3_blob_open,
91568:   sqlite3_blob_read,
91569:   sqlite3_blob_write,
91570:   sqlite3_create_collation_v2,
91571:   sqlite3_file_control,
91572:   sqlite3_memory_highwater,
91573:   sqlite3_memory_used,
91574: #ifdef SQLITE_MUTEX_OMIT
91575:   0, 
91576:   0, 
91577:   0,
91578:   0,
91579:   0,
91580: #else
91581:   sqlite3_mutex_alloc,
91582:   sqlite3_mutex_enter,
91583:   sqlite3_mutex_free,
91584:   sqlite3_mutex_leave,
91585:   sqlite3_mutex_try,
91586: #endif
91587:   sqlite3_open_v2,
91588:   sqlite3_release_memory,
91589:   sqlite3_result_error_nomem,
91590:   sqlite3_result_error_toobig,
91591:   sqlite3_sleep,
91592:   sqlite3_soft_heap_limit,
91593:   sqlite3_vfs_find,
91594:   sqlite3_vfs_register,
91595:   sqlite3_vfs_unregister,
91596: 
91597:   /*
91598:   ** Added for 3.5.8
91599:   */
91600:   sqlite3_threadsafe,
91601:   sqlite3_result_zeroblob,
91602:   sqlite3_result_error_code,
91603:   sqlite3_test_control,
91604:   sqlite3_randomness,
91605:   sqlite3_context_db_handle,
91606: 
91607:   /*
91608:   ** Added for 3.6.0
91609:   */
91610:   sqlite3_extended_result_codes,
91611:   sqlite3_limit,
91612:   sqlite3_next_stmt,
91613:   sqlite3_sql,
91614:   sqlite3_status,
91615: 
91616:   /*
91617:   ** Added for 3.7.4
91618:   */
91619:   sqlite3_backup_finish,
91620:   sqlite3_backup_init,
91621:   sqlite3_backup_pagecount,
91622:   sqlite3_backup_remaining,
91623:   sqlite3_backup_step,
91624: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
91625:   sqlite3_compileoption_get,
91626:   sqlite3_compileoption_used,
91627: #else
91628:   0,
91629:   0,
91630: #endif
91631:   sqlite3_create_function_v2,
91632:   sqlite3_db_config,
91633:   sqlite3_db_mutex,
91634:   sqlite3_db_status,
91635:   sqlite3_extended_errcode,
91636:   sqlite3_log,
91637:   sqlite3_soft_heap_limit64,
91638:   sqlite3_sourceid,
91639:   sqlite3_stmt_status,
91640:   sqlite3_strnicmp,
91641: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
91642:   sqlite3_unlock_notify,
91643: #else
91644:   0,
91645: #endif
91646: #ifndef SQLITE_OMIT_WAL
91647:   sqlite3_wal_autocheckpoint,
91648:   sqlite3_wal_checkpoint,
91649:   sqlite3_wal_hook,
91650: #else
91651:   0,
91652:   0,
91653:   0,
91654: #endif
91655:   sqlite3_blob_reopen,
91656:   sqlite3_vtab_config,
91657:   sqlite3_vtab_on_conflict,
91658: };
91659: 
91660: /*
91661: ** Attempt to load an SQLite extension library contained in the file
91662: ** zFile.  The entry point is zProc.  zProc may be 0 in which case a
91663: ** default entry point name (sqlite3_extension_init) is used.  Use
91664: ** of the default name is recommended.
91665: **
91666: ** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong.
91667: **
91668: ** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with 
91669: ** error message text.  The calling function should free this memory
91670: ** by calling sqlite3DbFree(db, ).
91671: */
91672: static int sqlite3LoadExtension(
91673:   sqlite3 *db,          /* Load the extension into this database connection */
91674:   const char *zFile,    /* Name of the shared library containing extension */
91675:   const char *zProc,    /* Entry point.  Use "sqlite3_extension_init" if 0 */
91676:   char **pzErrMsg       /* Put error message here if not 0 */
91677: ){
91678:   sqlite3_vfs *pVfs = db->pVfs;
91679:   void *handle;
91680:   int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
91681:   char *zErrmsg = 0;
91682:   void **aHandle;
91683:   int nMsg = 300 + sqlite3Strlen30(zFile);
91684: 
91685:   if( pzErrMsg ) *pzErrMsg = 0;
91686: 
91687:   /* Ticket #1863.  To avoid a creating security problems for older
91688:   ** applications that relink against newer versions of SQLite, the
91689:   ** ability to run load_extension is turned off by default.  One
91690:   ** must call sqlite3_enable_load_extension() to turn on extension
91691:   ** loading.  Otherwise you get the following error.
91692:   */
91693:   if( (db->flags & SQLITE_LoadExtension)==0 ){
91694:     if( pzErrMsg ){
91695:       *pzErrMsg = sqlite3_mprintf("not authorized");
91696:     }
91697:     return SQLITE_ERROR;
91698:   }
91699: 
91700:   if( zProc==0 ){
91701:     zProc = "sqlite3_extension_init";
91702:   }
91703: 
91704:   handle = sqlite3OsDlOpen(pVfs, zFile);
91705:   if( handle==0 ){
91706:     if( pzErrMsg ){
91707:       *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg);
91708:       if( zErrmsg ){
91709:         sqlite3_snprintf(nMsg, zErrmsg, 
91710:             "unable to open shared library [%s]", zFile);
91711:         sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);
91712:       }
91713:     }
91714:     return SQLITE_ERROR;
91715:   }
91716:   xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
91717:                    sqlite3OsDlSym(pVfs, handle, zProc);
91718:   if( xInit==0 ){
91719:     if( pzErrMsg ){
91720:       nMsg += sqlite3Strlen30(zProc);
91721:       *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg);
91722:       if( zErrmsg ){
91723:         sqlite3_snprintf(nMsg, zErrmsg,
91724:             "no entry point [%s] in shared library [%s]", zProc,zFile);
91725:         sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);
91726:       }
91727:       sqlite3OsDlClose(pVfs, handle);
91728:     }
91729:     return SQLITE_ERROR;
91730:   }else if( xInit(db, &zErrmsg, &sqlite3Apis) ){
91731:     if( pzErrMsg ){
91732:       *pzErrMsg = sqlite3_mprintf("error during initialization: %s", zErrmsg);
91733:     }
91734:     sqlite3_free(zErrmsg);
91735:     sqlite3OsDlClose(pVfs, handle);
91736:     return SQLITE_ERROR;
91737:   }
91738: 
91739:   /* Append the new shared library handle to the db->aExtension array. */
91740:   aHandle = sqlite3DbMallocZero(db, sizeof(handle)*(db->nExtension+1));
91741:   if( aHandle==0 ){
91742:     return SQLITE_NOMEM;
91743:   }
91744:   if( db->nExtension>0 ){
91745:     memcpy(aHandle, db->aExtension, sizeof(handle)*db->nExtension);
91746:   }
91747:   sqlite3DbFree(db, db->aExtension);
91748:   db->aExtension = aHandle;
91749: 
91750:   db->aExtension[db->nExtension++] = handle;
91751:   return SQLITE_OK;
91752: }
91753: SQLITE_API int sqlite3_load_extension(
91754:   sqlite3 *db,          /* Load the extension into this database connection */
91755:   const char *zFile,    /* Name of the shared library containing extension */
91756:   const char *zProc,    /* Entry point.  Use "sqlite3_extension_init" if 0 */
91757:   char **pzErrMsg       /* Put error message here if not 0 */
91758: ){
91759:   int rc;
91760:   sqlite3_mutex_enter(db->mutex);
91761:   rc = sqlite3LoadExtension(db, zFile, zProc, pzErrMsg);
91762:   rc = sqlite3ApiExit(db, rc);
91763:   sqlite3_mutex_leave(db->mutex);
91764:   return rc;
91765: }
91766: 
91767: /*
91768: ** Call this routine when the database connection is closing in order
91769: ** to clean up loaded extensions
91770: */
91771: SQLITE_PRIVATE void sqlite3CloseExtensions(sqlite3 *db){
91772:   int i;
91773:   assert( sqlite3_mutex_held(db->mutex) );
91774:   for(i=0; i<db->nExtension; i++){
91775:     sqlite3OsDlClose(db->pVfs, db->aExtension[i]);
91776:   }
91777:   sqlite3DbFree(db, db->aExtension);
91778: }
91779: 
91780: /*
91781: ** Enable or disable extension loading.  Extension loading is disabled by
91782: ** default so as not to open security holes in older applications.
91783: */
91784: SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff){
91785:   sqlite3_mutex_enter(db->mutex);
91786:   if( onoff ){
91787:     db->flags |= SQLITE_LoadExtension;
91788:   }else{
91789:     db->flags &= ~SQLITE_LoadExtension;
91790:   }
91791:   sqlite3_mutex_leave(db->mutex);
91792:   return SQLITE_OK;
91793: }
91794: 
91795: #endif /* SQLITE_OMIT_LOAD_EXTENSION */
91796: 
91797: /*
91798: ** The auto-extension code added regardless of whether or not extension
91799: ** loading is supported.  We need a dummy sqlite3Apis pointer for that
91800: ** code if regular extension loading is not available.  This is that
91801: ** dummy pointer.
91802: */
91803: #ifdef SQLITE_OMIT_LOAD_EXTENSION
91804: static const sqlite3_api_routines sqlite3Apis = { 0 };
91805: #endif
91806: 
91807: 
91808: /*
91809: ** The following object holds the list of automatically loaded
91810: ** extensions.
91811: **
91812: ** This list is shared across threads.  The SQLITE_MUTEX_STATIC_MASTER
91813: ** mutex must be held while accessing this list.
91814: */
91815: typedef struct sqlite3AutoExtList sqlite3AutoExtList;
91816: static SQLITE_WSD struct sqlite3AutoExtList {
91817:   int nExt;              /* Number of entries in aExt[] */          
91818:   void (**aExt)(void);   /* Pointers to the extension init functions */
91819: } sqlite3Autoext = { 0, 0 };
91820: 
91821: /* The "wsdAutoext" macro will resolve to the autoextension
91822: ** state vector.  If writable static data is unsupported on the target,
91823: ** we have to locate the state vector at run-time.  In the more common
91824: ** case where writable static data is supported, wsdStat can refer directly
91825: ** to the "sqlite3Autoext" state vector declared above.
91826: */
91827: #ifdef SQLITE_OMIT_WSD
91828: # define wsdAutoextInit \
91829:   sqlite3AutoExtList *x = &GLOBAL(sqlite3AutoExtList,sqlite3Autoext)
91830: # define wsdAutoext x[0]
91831: #else
91832: # define wsdAutoextInit
91833: # define wsdAutoext sqlite3Autoext
91834: #endif
91835: 
91836: 
91837: /*
91838: ** Register a statically linked extension that is automatically
91839: ** loaded by every new database connection.
91840: */
91841: SQLITE_API int sqlite3_auto_extension(void (*xInit)(void)){
91842:   int rc = SQLITE_OK;
91843: #ifndef SQLITE_OMIT_AUTOINIT
91844:   rc = sqlite3_initialize();
91845:   if( rc ){
91846:     return rc;
91847:   }else
91848: #endif
91849:   {
91850:     int i;
91851: #if SQLITE_THREADSAFE
91852:     sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
91853: #endif
91854:     wsdAutoextInit;
91855:     sqlite3_mutex_enter(mutex);
91856:     for(i=0; i<wsdAutoext.nExt; i++){
91857:       if( wsdAutoext.aExt[i]==xInit ) break;
91858:     }
91859:     if( i==wsdAutoext.nExt ){
91860:       int nByte = (wsdAutoext.nExt+1)*sizeof(wsdAutoext.aExt[0]);
91861:       void (**aNew)(void);
91862:       aNew = sqlite3_realloc(wsdAutoext.aExt, nByte);
91863:       if( aNew==0 ){
91864:         rc = SQLITE_NOMEM;
91865:       }else{
91866:         wsdAutoext.aExt = aNew;
91867:         wsdAutoext.aExt[wsdAutoext.nExt] = xInit;
91868:         wsdAutoext.nExt++;
91869:       }
91870:     }
91871:     sqlite3_mutex_leave(mutex);
91872:     assert( (rc&0xff)==rc );
91873:     return rc;
91874:   }
91875: }
91876: 
91877: /*
91878: ** Reset the automatic extension loading mechanism.
91879: */
91880: SQLITE_API void sqlite3_reset_auto_extension(void){
91881: #ifndef SQLITE_OMIT_AUTOINIT
91882:   if( sqlite3_initialize()==SQLITE_OK )
91883: #endif
91884:   {
91885: #if SQLITE_THREADSAFE
91886:     sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
91887: #endif
91888:     wsdAutoextInit;
91889:     sqlite3_mutex_enter(mutex);
91890:     sqlite3_free(wsdAutoext.aExt);
91891:     wsdAutoext.aExt = 0;
91892:     wsdAutoext.nExt = 0;
91893:     sqlite3_mutex_leave(mutex);
91894:   }
91895: }
91896: 
91897: /*
91898: ** Load all automatic extensions.
91899: **
91900: ** If anything goes wrong, set an error in the database connection.
91901: */
91902: SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){
91903:   int i;
91904:   int go = 1;
91905:   int rc;
91906:   int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
91907: 
91908:   wsdAutoextInit;
91909:   if( wsdAutoext.nExt==0 ){
91910:     /* Common case: early out without every having to acquire a mutex */
91911:     return;
91912:   }
91913:   for(i=0; go; i++){
91914:     char *zErrmsg;
91915: #if SQLITE_THREADSAFE
91916:     sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
91917: #endif
91918:     sqlite3_mutex_enter(mutex);
91919:     if( i>=wsdAutoext.nExt ){
91920:       xInit = 0;
91921:       go = 0;
91922:     }else{
91923:       xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
91924:               wsdAutoext.aExt[i];
91925:     }
91926:     sqlite3_mutex_leave(mutex);
91927:     zErrmsg = 0;
91928:     if( xInit && (rc = xInit(db, &zErrmsg, &sqlite3Apis))!=0 ){
91929:       sqlite3Error(db, rc,
91930:             "automatic extension loading failed: %s", zErrmsg);
91931:       go = 0;
91932:     }
91933:     sqlite3_free(zErrmsg);
91934:   }
91935: }
91936: 
91937: /************** End of loadext.c *********************************************/
91938: /************** Begin file pragma.c ******************************************/
91939: /*
91940: ** 2003 April 6
91941: **
91942: ** The author disclaims copyright to this source code.  In place of
91943: ** a legal notice, here is a blessing:
91944: **
91945: **    May you do good and not evil.
91946: **    May you find forgiveness for yourself and forgive others.
91947: **    May you share freely, never taking more than you give.
91948: **
91949: *************************************************************************
91950: ** This file contains code used to implement the PRAGMA command.
91951: */
91952: 
91953: /*
91954: ** Interpret the given string as a safety level.  Return 0 for OFF,
91955: ** 1 for ON or NORMAL and 2 for FULL.  Return 1 for an empty or 
91956: ** unrecognized string argument.
91957: **
91958: ** Note that the values returned are one less that the values that
91959: ** should be passed into sqlite3BtreeSetSafetyLevel().  The is done
91960: ** to support legacy SQL code.  The safety level used to be boolean
91961: ** and older scripts may have used numbers 0 for OFF and 1 for ON.
91962: */
91963: static u8 getSafetyLevel(const char *z){
91964:                              /* 123456789 123456789 */
91965:   static const char zText[] = "onoffalseyestruefull";
91966:   static const u8 iOffset[] = {0, 1, 2, 4, 9, 12, 16};
91967:   static const u8 iLength[] = {2, 2, 3, 5, 3, 4, 4};
91968:   static const u8 iValue[] =  {1, 0, 0, 0, 1, 1, 2};
91969:   int i, n;
91970:   if( sqlite3Isdigit(*z) ){
91971:     return (u8)sqlite3Atoi(z);
91972:   }
91973:   n = sqlite3Strlen30(z);
91974:   for(i=0; i<ArraySize(iLength); i++){
91975:     if( iLength[i]==n && sqlite3StrNICmp(&zText[iOffset[i]],z,n)==0 ){
91976:       return iValue[i];
91977:     }
91978:   }
91979:   return 1;
91980: }
91981: 
91982: /*
91983: ** Interpret the given string as a boolean value.
91984: */
91985: SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z){
91986:   return getSafetyLevel(z)&1;
91987: }
91988: 
91989: /* The sqlite3GetBoolean() function is used by other modules but the
91990: ** remainder of this file is specific to PRAGMA processing.  So omit
91991: ** the rest of the file if PRAGMAs are omitted from the build.
91992: */
91993: #if !defined(SQLITE_OMIT_PRAGMA)
91994: 
91995: /*
91996: ** Interpret the given string as a locking mode value.
91997: */
91998: static int getLockingMode(const char *z){
91999:   if( z ){
92000:     if( 0==sqlite3StrICmp(z, "exclusive") ) return PAGER_LOCKINGMODE_EXCLUSIVE;
92001:     if( 0==sqlite3StrICmp(z, "normal") ) return PAGER_LOCKINGMODE_NORMAL;
92002:   }
92003:   return PAGER_LOCKINGMODE_QUERY;
92004: }
92005: 
92006: #ifndef SQLITE_OMIT_AUTOVACUUM
92007: /*
92008: ** Interpret the given string as an auto-vacuum mode value.
92009: **
92010: ** The following strings, "none", "full" and "incremental" are 
92011: ** acceptable, as are their numeric equivalents: 0, 1 and 2 respectively.
92012: */
92013: static int getAutoVacuum(const char *z){
92014:   int i;
92015:   if( 0==sqlite3StrICmp(z, "none") ) return BTREE_AUTOVACUUM_NONE;
92016:   if( 0==sqlite3StrICmp(z, "full") ) return BTREE_AUTOVACUUM_FULL;
92017:   if( 0==sqlite3StrICmp(z, "incremental") ) return BTREE_AUTOVACUUM_INCR;
92018:   i = sqlite3Atoi(z);
92019:   return (u8)((i>=0&&i<=2)?i:0);
92020: }
92021: #endif /* ifndef SQLITE_OMIT_AUTOVACUUM */
92022: 
92023: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
92024: /*
92025: ** Interpret the given string as a temp db location. Return 1 for file
92026: ** backed temporary databases, 2 for the Red-Black tree in memory database
92027: ** and 0 to use the compile-time default.
92028: */
92029: static int getTempStore(const char *z){
92030:   if( z[0]>='0' && z[0]<='2' ){
92031:     return z[0] - '0';
92032:   }else if( sqlite3StrICmp(z, "file")==0 ){
92033:     return 1;
92034:   }else if( sqlite3StrICmp(z, "memory")==0 ){
92035:     return 2;
92036:   }else{
92037:     return 0;
92038:   }
92039: }
92040: #endif /* SQLITE_PAGER_PRAGMAS */
92041: 
92042: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
92043: /*
92044: ** Invalidate temp storage, either when the temp storage is changed
92045: ** from default, or when 'file' and the temp_store_directory has changed
92046: */
92047: static int invalidateTempStorage(Parse *pParse){
92048:   sqlite3 *db = pParse->db;
92049:   if( db->aDb[1].pBt!=0 ){
92050:     if( !db->autoCommit || sqlite3BtreeIsInReadTrans(db->aDb[1].pBt) ){
92051:       sqlite3ErrorMsg(pParse, "temporary storage cannot be changed "
92052:         "from within a transaction");
92053:       return SQLITE_ERROR;
92054:     }
92055:     sqlite3BtreeClose(db->aDb[1].pBt);
92056:     db->aDb[1].pBt = 0;
92057:     sqlite3ResetInternalSchema(db, -1);
92058:   }
92059:   return SQLITE_OK;
92060: }
92061: #endif /* SQLITE_PAGER_PRAGMAS */
92062: 
92063: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
92064: /*
92065: ** If the TEMP database is open, close it and mark the database schema
92066: ** as needing reloading.  This must be done when using the SQLITE_TEMP_STORE
92067: ** or DEFAULT_TEMP_STORE pragmas.
92068: */
92069: static int changeTempStorage(Parse *pParse, const char *zStorageType){
92070:   int ts = getTempStore(zStorageType);
92071:   sqlite3 *db = pParse->db;
92072:   if( db->temp_store==ts ) return SQLITE_OK;
92073:   if( invalidateTempStorage( pParse ) != SQLITE_OK ){
92074:     return SQLITE_ERROR;
92075:   }
92076:   db->temp_store = (u8)ts;
92077:   return SQLITE_OK;
92078: }
92079: #endif /* SQLITE_PAGER_PRAGMAS */
92080: 
92081: /*
92082: ** Generate code to return a single integer value.
92083: */
92084: static void returnSingleInt(Parse *pParse, const char *zLabel, i64 value){
92085:   Vdbe *v = sqlite3GetVdbe(pParse);
92086:   int mem = ++pParse->nMem;
92087:   i64 *pI64 = sqlite3DbMallocRaw(pParse->db, sizeof(value));
92088:   if( pI64 ){
92089:     memcpy(pI64, &value, sizeof(value));
92090:   }
92091:   sqlite3VdbeAddOp4(v, OP_Int64, 0, mem, 0, (char*)pI64, P4_INT64);
92092:   sqlite3VdbeSetNumCols(v, 1);
92093:   sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLabel, SQLITE_STATIC);
92094:   sqlite3VdbeAddOp2(v, OP_ResultRow, mem, 1);
92095: }
92096: 
92097: #ifndef SQLITE_OMIT_FLAG_PRAGMAS
92098: /*
92099: ** Check to see if zRight and zLeft refer to a pragma that queries
92100: ** or changes one of the flags in db->flags.  Return 1 if so and 0 if not.
92101: ** Also, implement the pragma.
92102: */
92103: static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){
92104:   static const struct sPragmaType {
92105:     const char *zName;  /* Name of the pragma */
92106:     int mask;           /* Mask for the db->flags value */
92107:   } aPragma[] = {
92108:     { "full_column_names",        SQLITE_FullColNames  },
92109:     { "short_column_names",       SQLITE_ShortColNames },
92110:     { "count_changes",            SQLITE_CountRows     },
92111:     { "empty_result_callbacks",   SQLITE_NullCallback  },
92112:     { "legacy_file_format",       SQLITE_LegacyFileFmt },
92113:     { "fullfsync",                SQLITE_FullFSync     },
92114:     { "checkpoint_fullfsync",     SQLITE_CkptFullFSync },
92115:     { "reverse_unordered_selects", SQLITE_ReverseOrder  },
92116: #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
92117:     { "automatic_index",          SQLITE_AutoIndex     },
92118: #endif
92119: #ifdef SQLITE_DEBUG
92120:     { "sql_trace",                SQLITE_SqlTrace      },
92121:     { "vdbe_listing",             SQLITE_VdbeListing   },
92122:     { "vdbe_trace",               SQLITE_VdbeTrace     },
92123: #endif
92124: #ifndef SQLITE_OMIT_CHECK
92125:     { "ignore_check_constraints", SQLITE_IgnoreChecks  },
92126: #endif
92127:     /* The following is VERY experimental */
92128:     { "writable_schema",          SQLITE_WriteSchema|SQLITE_RecoveryMode },
92129:     { "omit_readlock",            SQLITE_NoReadlock    },
92130: 
92131:     /* TODO: Maybe it shouldn't be possible to change the ReadUncommitted
92132:     ** flag if there are any active statements. */
92133:     { "read_uncommitted",         SQLITE_ReadUncommitted },
92134:     { "recursive_triggers",       SQLITE_RecTriggers },
92135: 
92136:     /* This flag may only be set if both foreign-key and trigger support
92137:     ** are present in the build.  */
92138: #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
92139:     { "foreign_keys",             SQLITE_ForeignKeys },
92140: #endif
92141:   };
92142:   int i;
92143:   const struct sPragmaType *p;
92144:   for(i=0, p=aPragma; i<ArraySize(aPragma); i++, p++){
92145:     if( sqlite3StrICmp(zLeft, p->zName)==0 ){
92146:       sqlite3 *db = pParse->db;
92147:       Vdbe *v;
92148:       v = sqlite3GetVdbe(pParse);
92149:       assert( v!=0 );  /* Already allocated by sqlite3Pragma() */
92150:       if( ALWAYS(v) ){
92151:         if( zRight==0 ){
92152:           returnSingleInt(pParse, p->zName, (db->flags & p->mask)!=0 );
92153:         }else{
92154:           int mask = p->mask;          /* Mask of bits to set or clear. */
92155:           if( db->autoCommit==0 ){
92156:             /* Foreign key support may not be enabled or disabled while not
92157:             ** in auto-commit mode.  */
92158:             mask &= ~(SQLITE_ForeignKeys);
92159:           }
92160: 
92161:           if( sqlite3GetBoolean(zRight) ){
92162:             db->flags |= mask;
92163:           }else{
92164:             db->flags &= ~mask;
92165:           }
92166: 
92167:           /* Many of the flag-pragmas modify the code generated by the SQL 
92168:           ** compiler (eg. count_changes). So add an opcode to expire all
92169:           ** compiled SQL statements after modifying a pragma value.
92170:           */
92171:           sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
92172:         }
92173:       }
92174: 
92175:       return 1;
92176:     }
92177:   }
92178:   return 0;
92179: }
92180: #endif /* SQLITE_OMIT_FLAG_PRAGMAS */
92181: 
92182: /*
92183: ** Return a human-readable name for a constraint resolution action.
92184: */
92185: #ifndef SQLITE_OMIT_FOREIGN_KEY
92186: static const char *actionName(u8 action){
92187:   const char *zName;
92188:   switch( action ){
92189:     case OE_SetNull:  zName = "SET NULL";        break;
92190:     case OE_SetDflt:  zName = "SET DEFAULT";     break;
92191:     case OE_Cascade:  zName = "CASCADE";         break;
92192:     case OE_Restrict: zName = "RESTRICT";        break;
92193:     default:          zName = "NO ACTION";  
92194:                       assert( action==OE_None ); break;
92195:   }
92196:   return zName;
92197: }
92198: #endif
92199: 
92200: 
92201: /*
92202: ** Parameter eMode must be one of the PAGER_JOURNALMODE_XXX constants
92203: ** defined in pager.h. This function returns the associated lowercase
92204: ** journal-mode name.
92205: */
92206: SQLITE_PRIVATE const char *sqlite3JournalModename(int eMode){
92207:   static char * const azModeName[] = {
92208:     "delete", "persist", "off", "truncate", "memory"
92209: #ifndef SQLITE_OMIT_WAL
92210:      , "wal"
92211: #endif
92212:   };
92213:   assert( PAGER_JOURNALMODE_DELETE==0 );
92214:   assert( PAGER_JOURNALMODE_PERSIST==1 );
92215:   assert( PAGER_JOURNALMODE_OFF==2 );
92216:   assert( PAGER_JOURNALMODE_TRUNCATE==3 );
92217:   assert( PAGER_JOURNALMODE_MEMORY==4 );
92218:   assert( PAGER_JOURNALMODE_WAL==5 );
92219:   assert( eMode>=0 && eMode<=ArraySize(azModeName) );
92220: 
92221:   if( eMode==ArraySize(azModeName) ) return 0;
92222:   return azModeName[eMode];
92223: }
92224: 
92225: /*
92226: ** Process a pragma statement.  
92227: **
92228: ** Pragmas are of this form:
92229: **
92230: **      PRAGMA [database.]id [= value]
92231: **
92232: ** The identifier might also be a string.  The value is a string, and
92233: ** identifier, or a number.  If minusFlag is true, then the value is
92234: ** a number that was preceded by a minus sign.
92235: **
92236: ** If the left side is "database.id" then pId1 is the database name
92237: ** and pId2 is the id.  If the left side is just "id" then pId1 is the
92238: ** id and pId2 is any empty string.
92239: */
92240: SQLITE_PRIVATE void sqlite3Pragma(
92241:   Parse *pParse, 
92242:   Token *pId1,        /* First part of [database.]id field */
92243:   Token *pId2,        /* Second part of [database.]id field, or NULL */
92244:   Token *pValue,      /* Token for <value>, or NULL */
92245:   int minusFlag       /* True if a '-' sign preceded <value> */
92246: ){
92247:   char *zLeft = 0;       /* Nul-terminated UTF-8 string <id> */
92248:   char *zRight = 0;      /* Nul-terminated UTF-8 string <value>, or NULL */
92249:   const char *zDb = 0;   /* The database name */
92250:   Token *pId;            /* Pointer to <id> token */
92251:   int iDb;               /* Database index for <database> */
92252:   sqlite3 *db = pParse->db;
92253:   Db *pDb;
92254:   Vdbe *v = pParse->pVdbe = sqlite3VdbeCreate(db);
92255:   if( v==0 ) return;
92256:   sqlite3VdbeRunOnlyOnce(v);
92257:   pParse->nMem = 2;
92258: 
92259:   /* Interpret the [database.] part of the pragma statement. iDb is the
92260:   ** index of the database this pragma is being applied to in db.aDb[]. */
92261:   iDb = sqlite3TwoPartName(pParse, pId1, pId2, &pId);
92262:   if( iDb<0 ) return;
92263:   pDb = &db->aDb[iDb];
92264: 
92265:   /* If the temp database has been explicitly named as part of the 
92266:   ** pragma, make sure it is open. 
92267:   */
92268:   if( iDb==1 && sqlite3OpenTempDatabase(pParse) ){
92269:     return;
92270:   }
92271: 
92272:   zLeft = sqlite3NameFromToken(db, pId);
92273:   if( !zLeft ) return;
92274:   if( minusFlag ){
92275:     zRight = sqlite3MPrintf(db, "-%T", pValue);
92276:   }else{
92277:     zRight = sqlite3NameFromToken(db, pValue);
92278:   }
92279: 
92280:   assert( pId2 );
92281:   zDb = pId2->n>0 ? pDb->zName : 0;
92282:   if( sqlite3AuthCheck(pParse, SQLITE_PRAGMA, zLeft, zRight, zDb) ){
92283:     goto pragma_out;
92284:   }
92285:  
92286: #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
92287:   /*
92288:   **  PRAGMA [database.]default_cache_size
92289:   **  PRAGMA [database.]default_cache_size=N
92290:   **
92291:   ** The first form reports the current persistent setting for the
92292:   ** page cache size.  The value returned is the maximum number of
92293:   ** pages in the page cache.  The second form sets both the current
92294:   ** page cache size value and the persistent page cache size value
92295:   ** stored in the database file.
92296:   **
92297:   ** Older versions of SQLite would set the default cache size to a
92298:   ** negative number to indicate synchronous=OFF.  These days, synchronous
92299:   ** is always on by default regardless of the sign of the default cache
92300:   ** size.  But continue to take the absolute value of the default cache
92301:   ** size of historical compatibility.
92302:   */
92303:   if( sqlite3StrICmp(zLeft,"default_cache_size")==0 ){
92304:     static const VdbeOpList getCacheSize[] = {
92305:       { OP_Transaction, 0, 0,        0},                         /* 0 */
92306:       { OP_ReadCookie,  0, 1,        BTREE_DEFAULT_CACHE_SIZE},  /* 1 */
92307:       { OP_IfPos,       1, 7,        0},
92308:       { OP_Integer,     0, 2,        0},
92309:       { OP_Subtract,    1, 2,        1},
92310:       { OP_IfPos,       1, 7,        0},
92311:       { OP_Integer,     0, 1,        0},                         /* 6 */
92312:       { OP_ResultRow,   1, 1,        0},
92313:     };
92314:     int addr;
92315:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92316:     sqlite3VdbeUsesBtree(v, iDb);
92317:     if( !zRight ){
92318:       sqlite3VdbeSetNumCols(v, 1);
92319:       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cache_size", SQLITE_STATIC);
92320:       pParse->nMem += 2;
92321:       addr = sqlite3VdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize);
92322:       sqlite3VdbeChangeP1(v, addr, iDb);
92323:       sqlite3VdbeChangeP1(v, addr+1, iDb);
92324:       sqlite3VdbeChangeP1(v, addr+6, SQLITE_DEFAULT_CACHE_SIZE);
92325:     }else{
92326:       int size = sqlite3AbsInt32(sqlite3Atoi(zRight));
92327:       sqlite3BeginWriteOperation(pParse, 0, iDb);
92328:       sqlite3VdbeAddOp2(v, OP_Integer, size, 1);
92329:       sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_DEFAULT_CACHE_SIZE, 1);
92330:       assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
92331:       pDb->pSchema->cache_size = size;
92332:       sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
92333:     }
92334:   }else
92335: #endif /* !SQLITE_OMIT_PAGER_PRAGMAS && !SQLITE_OMIT_DEPRECATED */
92336: 
92337: #if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
92338:   /*
92339:   **  PRAGMA [database.]page_size
92340:   **  PRAGMA [database.]page_size=N
92341:   **
92342:   ** The first form reports the current setting for the
92343:   ** database page size in bytes.  The second form sets the
92344:   ** database page size value.  The value can only be set if
92345:   ** the database has not yet been created.
92346:   */
92347:   if( sqlite3StrICmp(zLeft,"page_size")==0 ){
92348:     Btree *pBt = pDb->pBt;
92349:     assert( pBt!=0 );
92350:     if( !zRight ){
92351:       int size = ALWAYS(pBt) ? sqlite3BtreeGetPageSize(pBt) : 0;
92352:       returnSingleInt(pParse, "page_size", size);
92353:     }else{
92354:       /* Malloc may fail when setting the page-size, as there is an internal
92355:       ** buffer that the pager module resizes using sqlite3_realloc().
92356:       */
92357:       db->nextPagesize = sqlite3Atoi(zRight);
92358:       if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize,-1,0) ){
92359:         db->mallocFailed = 1;
92360:       }
92361:     }
92362:   }else
92363: 
92364:   /*
92365:   **  PRAGMA [database.]secure_delete
92366:   **  PRAGMA [database.]secure_delete=ON/OFF
92367:   **
92368:   ** The first form reports the current setting for the
92369:   ** secure_delete flag.  The second form changes the secure_delete
92370:   ** flag setting and reports thenew value.
92371:   */
92372:   if( sqlite3StrICmp(zLeft,"secure_delete")==0 ){
92373:     Btree *pBt = pDb->pBt;
92374:     int b = -1;
92375:     assert( pBt!=0 );
92376:     if( zRight ){
92377:       b = sqlite3GetBoolean(zRight);
92378:     }
92379:     if( pId2->n==0 && b>=0 ){
92380:       int ii;
92381:       for(ii=0; ii<db->nDb; ii++){
92382:         sqlite3BtreeSecureDelete(db->aDb[ii].pBt, b);
92383:       }
92384:     }
92385:     b = sqlite3BtreeSecureDelete(pBt, b);
92386:     returnSingleInt(pParse, "secure_delete", b);
92387:   }else
92388: 
92389:   /*
92390:   **  PRAGMA [database.]max_page_count
92391:   **  PRAGMA [database.]max_page_count=N
92392:   **
92393:   ** The first form reports the current setting for the
92394:   ** maximum number of pages in the database file.  The 
92395:   ** second form attempts to change this setting.  Both
92396:   ** forms return the current setting.
92397:   **
92398:   ** The absolute value of N is used.  This is undocumented and might
92399:   ** change.  The only purpose is to provide an easy way to test
92400:   ** the sqlite3AbsInt32() function.
92401:   **
92402:   **  PRAGMA [database.]page_count
92403:   **
92404:   ** Return the number of pages in the specified database.
92405:   */
92406:   if( sqlite3StrICmp(zLeft,"page_count")==0
92407:    || sqlite3StrICmp(zLeft,"max_page_count")==0
92408:   ){
92409:     int iReg;
92410:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92411:     sqlite3CodeVerifySchema(pParse, iDb);
92412:     iReg = ++pParse->nMem;
92413:     if( sqlite3Tolower(zLeft[0])=='p' ){
92414:       sqlite3VdbeAddOp2(v, OP_Pagecount, iDb, iReg);
92415:     }else{
92416:       sqlite3VdbeAddOp3(v, OP_MaxPgcnt, iDb, iReg, 
92417:                         sqlite3AbsInt32(sqlite3Atoi(zRight)));
92418:     }
92419:     sqlite3VdbeAddOp2(v, OP_ResultRow, iReg, 1);
92420:     sqlite3VdbeSetNumCols(v, 1);
92421:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT);
92422:   }else
92423: 
92424:   /*
92425:   **  PRAGMA [database.]locking_mode
92426:   **  PRAGMA [database.]locking_mode = (normal|exclusive)
92427:   */
92428:   if( sqlite3StrICmp(zLeft,"locking_mode")==0 ){
92429:     const char *zRet = "normal";
92430:     int eMode = getLockingMode(zRight);
92431: 
92432:     if( pId2->n==0 && eMode==PAGER_LOCKINGMODE_QUERY ){
92433:       /* Simple "PRAGMA locking_mode;" statement. This is a query for
92434:       ** the current default locking mode (which may be different to
92435:       ** the locking-mode of the main database).
92436:       */
92437:       eMode = db->dfltLockMode;
92438:     }else{
92439:       Pager *pPager;
92440:       if( pId2->n==0 ){
92441:         /* This indicates that no database name was specified as part
92442:         ** of the PRAGMA command. In this case the locking-mode must be
92443:         ** set on all attached databases, as well as the main db file.
92444:         **
92445:         ** Also, the sqlite3.dfltLockMode variable is set so that
92446:         ** any subsequently attached databases also use the specified
92447:         ** locking mode.
92448:         */
92449:         int ii;
92450:         assert(pDb==&db->aDb[0]);
92451:         for(ii=2; ii<db->nDb; ii++){
92452:           pPager = sqlite3BtreePager(db->aDb[ii].pBt);
92453:           sqlite3PagerLockingMode(pPager, eMode);
92454:         }
92455:         db->dfltLockMode = (u8)eMode;
92456:       }
92457:       pPager = sqlite3BtreePager(pDb->pBt);
92458:       eMode = sqlite3PagerLockingMode(pPager, eMode);
92459:     }
92460: 
92461:     assert(eMode==PAGER_LOCKINGMODE_NORMAL||eMode==PAGER_LOCKINGMODE_EXCLUSIVE);
92462:     if( eMode==PAGER_LOCKINGMODE_EXCLUSIVE ){
92463:       zRet = "exclusive";
92464:     }
92465:     sqlite3VdbeSetNumCols(v, 1);
92466:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "locking_mode", SQLITE_STATIC);
92467:     sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zRet, 0);
92468:     sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
92469:   }else
92470: 
92471:   /*
92472:   **  PRAGMA [database.]journal_mode
92473:   **  PRAGMA [database.]journal_mode =
92474:   **                      (delete|persist|off|truncate|memory|wal|off)
92475:   */
92476:   if( sqlite3StrICmp(zLeft,"journal_mode")==0 ){
92477:     int eMode;        /* One of the PAGER_JOURNALMODE_XXX symbols */
92478:     int ii;           /* Loop counter */
92479: 
92480:     /* Force the schema to be loaded on all databases.  This causes all
92481:     ** database files to be opened and the journal_modes set.  This is
92482:     ** necessary because subsequent processing must know if the databases
92483:     ** are in WAL mode. */
92484:     if( sqlite3ReadSchema(pParse) ){
92485:       goto pragma_out;
92486:     }
92487: 
92488:     sqlite3VdbeSetNumCols(v, 1);
92489:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "journal_mode", SQLITE_STATIC);
92490: 
92491:     if( zRight==0 ){
92492:       /* If there is no "=MODE" part of the pragma, do a query for the
92493:       ** current mode */
92494:       eMode = PAGER_JOURNALMODE_QUERY;
92495:     }else{
92496:       const char *zMode;
92497:       int n = sqlite3Strlen30(zRight);
92498:       for(eMode=0; (zMode = sqlite3JournalModename(eMode))!=0; eMode++){
92499:         if( sqlite3StrNICmp(zRight, zMode, n)==0 ) break;
92500:       }
92501:       if( !zMode ){
92502:         /* If the "=MODE" part does not match any known journal mode,
92503:         ** then do a query */
92504:         eMode = PAGER_JOURNALMODE_QUERY;
92505:       }
92506:     }
92507:     if( eMode==PAGER_JOURNALMODE_QUERY && pId2->n==0 ){
92508:       /* Convert "PRAGMA journal_mode" into "PRAGMA main.journal_mode" */
92509:       iDb = 0;
92510:       pId2->n = 1;
92511:     }
92512:     for(ii=db->nDb-1; ii>=0; ii--){
92513:       if( db->aDb[ii].pBt && (ii==iDb || pId2->n==0) ){
92514:         sqlite3VdbeUsesBtree(v, ii);
92515:         sqlite3VdbeAddOp3(v, OP_JournalMode, ii, 1, eMode);
92516:       }
92517:     }
92518:     sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
92519:   }else
92520: 
92521:   /*
92522:   **  PRAGMA [database.]journal_size_limit
92523:   **  PRAGMA [database.]journal_size_limit=N
92524:   **
92525:   ** Get or set the size limit on rollback journal files.
92526:   */
92527:   if( sqlite3StrICmp(zLeft,"journal_size_limit")==0 ){
92528:     Pager *pPager = sqlite3BtreePager(pDb->pBt);
92529:     i64 iLimit = -2;
92530:     if( zRight ){
92531:       sqlite3Atoi64(zRight, &iLimit, 1000000, SQLITE_UTF8);
92532:       if( iLimit<-1 ) iLimit = -1;
92533:     }
92534:     iLimit = sqlite3PagerJournalSizeLimit(pPager, iLimit);
92535:     returnSingleInt(pParse, "journal_size_limit", iLimit);
92536:   }else
92537: 
92538: #endif /* SQLITE_OMIT_PAGER_PRAGMAS */
92539: 
92540:   /*
92541:   **  PRAGMA [database.]auto_vacuum
92542:   **  PRAGMA [database.]auto_vacuum=N
92543:   **
92544:   ** Get or set the value of the database 'auto-vacuum' parameter.
92545:   ** The value is one of:  0 NONE 1 FULL 2 INCREMENTAL
92546:   */
92547: #ifndef SQLITE_OMIT_AUTOVACUUM
92548:   if( sqlite3StrICmp(zLeft,"auto_vacuum")==0 ){
92549:     Btree *pBt = pDb->pBt;
92550:     assert( pBt!=0 );
92551:     if( sqlite3ReadSchema(pParse) ){
92552:       goto pragma_out;
92553:     }
92554:     if( !zRight ){
92555:       int auto_vacuum;
92556:       if( ALWAYS(pBt) ){
92557:          auto_vacuum = sqlite3BtreeGetAutoVacuum(pBt);
92558:       }else{
92559:          auto_vacuum = SQLITE_DEFAULT_AUTOVACUUM;
92560:       }
92561:       returnSingleInt(pParse, "auto_vacuum", auto_vacuum);
92562:     }else{
92563:       int eAuto = getAutoVacuum(zRight);
92564:       assert( eAuto>=0 && eAuto<=2 );
92565:       db->nextAutovac = (u8)eAuto;
92566:       if( ALWAYS(eAuto>=0) ){
92567:         /* Call SetAutoVacuum() to set initialize the internal auto and
92568:         ** incr-vacuum flags. This is required in case this connection
92569:         ** creates the database file. It is important that it is created
92570:         ** as an auto-vacuum capable db.
92571:         */
92572:         int rc = sqlite3BtreeSetAutoVacuum(pBt, eAuto);
92573:         if( rc==SQLITE_OK && (eAuto==1 || eAuto==2) ){
92574:           /* When setting the auto_vacuum mode to either "full" or 
92575:           ** "incremental", write the value of meta[6] in the database
92576:           ** file. Before writing to meta[6], check that meta[3] indicates
92577:           ** that this really is an auto-vacuum capable database.
92578:           */
92579:           static const VdbeOpList setMeta6[] = {
92580:             { OP_Transaction,    0,         1,                 0},    /* 0 */
92581:             { OP_ReadCookie,     0,         1,         BTREE_LARGEST_ROOT_PAGE},
92582:             { OP_If,             1,         0,                 0},    /* 2 */
92583:             { OP_Halt,           SQLITE_OK, OE_Abort,          0},    /* 3 */
92584:             { OP_Integer,        0,         1,                 0},    /* 4 */
92585:             { OP_SetCookie,      0,         BTREE_INCR_VACUUM, 1},    /* 5 */
92586:           };
92587:           int iAddr;
92588:           iAddr = sqlite3VdbeAddOpList(v, ArraySize(setMeta6), setMeta6);
92589:           sqlite3VdbeChangeP1(v, iAddr, iDb);
92590:           sqlite3VdbeChangeP1(v, iAddr+1, iDb);
92591:           sqlite3VdbeChangeP2(v, iAddr+2, iAddr+4);
92592:           sqlite3VdbeChangeP1(v, iAddr+4, eAuto-1);
92593:           sqlite3VdbeChangeP1(v, iAddr+5, iDb);
92594:           sqlite3VdbeUsesBtree(v, iDb);
92595:         }
92596:       }
92597:     }
92598:   }else
92599: #endif
92600: 
92601:   /*
92602:   **  PRAGMA [database.]incremental_vacuum(N)
92603:   **
92604:   ** Do N steps of incremental vacuuming on a database.
92605:   */
92606: #ifndef SQLITE_OMIT_AUTOVACUUM
92607:   if( sqlite3StrICmp(zLeft,"incremental_vacuum")==0 ){
92608:     int iLimit, addr;
92609:     if( sqlite3ReadSchema(pParse) ){
92610:       goto pragma_out;
92611:     }
92612:     if( zRight==0 || !sqlite3GetInt32(zRight, &iLimit) || iLimit<=0 ){
92613:       iLimit = 0x7fffffff;
92614:     }
92615:     sqlite3BeginWriteOperation(pParse, 0, iDb);
92616:     sqlite3VdbeAddOp2(v, OP_Integer, iLimit, 1);
92617:     addr = sqlite3VdbeAddOp1(v, OP_IncrVacuum, iDb);
92618:     sqlite3VdbeAddOp1(v, OP_ResultRow, 1);
92619:     sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1);
92620:     sqlite3VdbeAddOp2(v, OP_IfPos, 1, addr);
92621:     sqlite3VdbeJumpHere(v, addr);
92622:   }else
92623: #endif
92624: 
92625: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
92626:   /*
92627:   **  PRAGMA [database.]cache_size
92628:   **  PRAGMA [database.]cache_size=N
92629:   **
92630:   ** The first form reports the current local setting for the
92631:   ** page cache size. The second form sets the local
92632:   ** page cache size value.  If N is positive then that is the
92633:   ** number of pages in the cache.  If N is negative, then the
92634:   ** number of pages is adjusted so that the cache uses -N kibibytes
92635:   ** of memory.
92636:   */
92637:   if( sqlite3StrICmp(zLeft,"cache_size")==0 ){
92638:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92639:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
92640:     if( !zRight ){
92641:       returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size);
92642:     }else{
92643:       int size = sqlite3Atoi(zRight);
92644:       pDb->pSchema->cache_size = size;
92645:       sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
92646:     }
92647:   }else
92648: 
92649:   /*
92650:   **   PRAGMA temp_store
92651:   **   PRAGMA temp_store = "default"|"memory"|"file"
92652:   **
92653:   ** Return or set the local value of the temp_store flag.  Changing
92654:   ** the local value does not make changes to the disk file and the default
92655:   ** value will be restored the next time the database is opened.
92656:   **
92657:   ** Note that it is possible for the library compile-time options to
92658:   ** override this setting
92659:   */
92660:   if( sqlite3StrICmp(zLeft, "temp_store")==0 ){
92661:     if( !zRight ){
92662:       returnSingleInt(pParse, "temp_store", db->temp_store);
92663:     }else{
92664:       changeTempStorage(pParse, zRight);
92665:     }
92666:   }else
92667: 
92668:   /*
92669:   **   PRAGMA temp_store_directory
92670:   **   PRAGMA temp_store_directory = ""|"directory_name"
92671:   **
92672:   ** Return or set the local value of the temp_store_directory flag.  Changing
92673:   ** the value sets a specific directory to be used for temporary files.
92674:   ** Setting to a null string reverts to the default temporary directory search.
92675:   ** If temporary directory is changed, then invalidateTempStorage.
92676:   **
92677:   */
92678:   if( sqlite3StrICmp(zLeft, "temp_store_directory")==0 ){
92679:     if( !zRight ){
92680:       if( sqlite3_temp_directory ){
92681:         sqlite3VdbeSetNumCols(v, 1);
92682:         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, 
92683:             "temp_store_directory", SQLITE_STATIC);
92684:         sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, sqlite3_temp_directory, 0);
92685:         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
92686:       }
92687:     }else{
92688: #ifndef SQLITE_OMIT_WSD
92689:       if( zRight[0] ){
92690:         int rc;
92691:         int res;
92692:         rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
92693:         if( rc!=SQLITE_OK || res==0 ){
92694:           sqlite3ErrorMsg(pParse, "not a writable directory");
92695:           goto pragma_out;
92696:         }
92697:       }
92698:       if( SQLITE_TEMP_STORE==0
92699:        || (SQLITE_TEMP_STORE==1 && db->temp_store<=1)
92700:        || (SQLITE_TEMP_STORE==2 && db->temp_store==1)
92701:       ){
92702:         invalidateTempStorage(pParse);
92703:       }
92704:       sqlite3_free(sqlite3_temp_directory);
92705:       if( zRight[0] ){
92706:         sqlite3_temp_directory = sqlite3_mprintf("%s", zRight);
92707:       }else{
92708:         sqlite3_temp_directory = 0;
92709:       }
92710: #endif /* SQLITE_OMIT_WSD */
92711:     }
92712:   }else
92713: 
92714: #if !defined(SQLITE_ENABLE_LOCKING_STYLE)
92715: #  if defined(__APPLE__)
92716: #    define SQLITE_ENABLE_LOCKING_STYLE 1
92717: #  else
92718: #    define SQLITE_ENABLE_LOCKING_STYLE 0
92719: #  endif
92720: #endif
92721: #if SQLITE_ENABLE_LOCKING_STYLE
92722:   /*
92723:    **   PRAGMA [database.]lock_proxy_file
92724:    **   PRAGMA [database.]lock_proxy_file = ":auto:"|"lock_file_path"
92725:    **
92726:    ** Return or set the value of the lock_proxy_file flag.  Changing
92727:    ** the value sets a specific file to be used for database access locks.
92728:    **
92729:    */
92730:   if( sqlite3StrICmp(zLeft, "lock_proxy_file")==0 ){
92731:     if( !zRight ){
92732:       Pager *pPager = sqlite3BtreePager(pDb->pBt);
92733:       char *proxy_file_path = NULL;
92734:       sqlite3_file *pFile = sqlite3PagerFile(pPager);
92735:       sqlite3OsFileControlHint(pFile, SQLITE_GET_LOCKPROXYFILE, 
92736:                            &proxy_file_path);
92737:       
92738:       if( proxy_file_path ){
92739:         sqlite3VdbeSetNumCols(v, 1);
92740:         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, 
92741:                               "lock_proxy_file", SQLITE_STATIC);
92742:         sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, proxy_file_path, 0);
92743:         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
92744:       }
92745:     }else{
92746:       Pager *pPager = sqlite3BtreePager(pDb->pBt);
92747:       sqlite3_file *pFile = sqlite3PagerFile(pPager);
92748:       int res;
92749:       if( zRight[0] ){
92750:         res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, 
92751:                                      zRight);
92752:       } else {
92753:         res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, 
92754:                                      NULL);
92755:       }
92756:       if( res!=SQLITE_OK ){
92757:         sqlite3ErrorMsg(pParse, "failed to set lock proxy file");
92758:         goto pragma_out;
92759:       }
92760:     }
92761:   }else
92762: #endif /* SQLITE_ENABLE_LOCKING_STYLE */      
92763:     
92764:   /*
92765:   **   PRAGMA [database.]synchronous
92766:   **   PRAGMA [database.]synchronous=OFF|ON|NORMAL|FULL
92767:   **
92768:   ** Return or set the local value of the synchronous flag.  Changing
92769:   ** the local value does not make changes to the disk file and the
92770:   ** default value will be restored the next time the database is
92771:   ** opened.
92772:   */
92773:   if( sqlite3StrICmp(zLeft,"synchronous")==0 ){
92774:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92775:     if( !zRight ){
92776:       returnSingleInt(pParse, "synchronous", pDb->safety_level-1);
92777:     }else{
92778:       if( !db->autoCommit ){
92779:         sqlite3ErrorMsg(pParse, 
92780:             "Safety level may not be changed inside a transaction");
92781:       }else{
92782:         pDb->safety_level = getSafetyLevel(zRight)+1;
92783:       }
92784:     }
92785:   }else
92786: #endif /* SQLITE_OMIT_PAGER_PRAGMAS */
92787: 
92788: #ifndef SQLITE_OMIT_FLAG_PRAGMAS
92789:   if( flagPragma(pParse, zLeft, zRight) ){
92790:     /* The flagPragma() subroutine also generates any necessary code
92791:     ** there is nothing more to do here */
92792:   }else
92793: #endif /* SQLITE_OMIT_FLAG_PRAGMAS */
92794: 
92795: #ifndef SQLITE_OMIT_SCHEMA_PRAGMAS
92796:   /*
92797:   **   PRAGMA table_info(<table>)
92798:   **
92799:   ** Return a single row for each column of the named table. The columns of
92800:   ** the returned data set are:
92801:   **
92802:   ** cid:        Column id (numbered from left to right, starting at 0)
92803:   ** name:       Column name
92804:   ** type:       Column declaration type.
92805:   ** notnull:    True if 'NOT NULL' is part of column declaration
92806:   ** dflt_value: The default value for the column, if any.
92807:   */
92808:   if( sqlite3StrICmp(zLeft, "table_info")==0 && zRight ){
92809:     Table *pTab;
92810:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92811:     pTab = sqlite3FindTable(db, zRight, zDb);
92812:     if( pTab ){
92813:       int i;
92814:       int nHidden = 0;
92815:       Column *pCol;
92816:       sqlite3VdbeSetNumCols(v, 6);
92817:       pParse->nMem = 6;
92818:       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cid", SQLITE_STATIC);
92819:       sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
92820:       sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "type", SQLITE_STATIC);
92821:       sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "notnull", SQLITE_STATIC);
92822:       sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "dflt_value", SQLITE_STATIC);
92823:       sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "pk", SQLITE_STATIC);
92824:       sqlite3ViewGetColumnNames(pParse, pTab);
92825:       for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
92826:         if( IsHiddenColumn(pCol) ){
92827:           nHidden++;
92828:           continue;
92829:         }
92830:         sqlite3VdbeAddOp2(v, OP_Integer, i-nHidden, 1);
92831:         sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pCol->zName, 0);
92832:         sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
92833:            pCol->zType ? pCol->zType : "", 0);
92834:         sqlite3VdbeAddOp2(v, OP_Integer, (pCol->notNull ? 1 : 0), 4);
92835:         if( pCol->zDflt ){
92836:           sqlite3VdbeAddOp4(v, OP_String8, 0, 5, 0, (char*)pCol->zDflt, 0);
92837:         }else{
92838:           sqlite3VdbeAddOp2(v, OP_Null, 0, 5);
92839:         }
92840:         sqlite3VdbeAddOp2(v, OP_Integer, pCol->isPrimKey, 6);
92841:         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 6);
92842:       }
92843:     }
92844:   }else
92845: 
92846:   if( sqlite3StrICmp(zLeft, "index_info")==0 && zRight ){
92847:     Index *pIdx;
92848:     Table *pTab;
92849:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92850:     pIdx = sqlite3FindIndex(db, zRight, zDb);
92851:     if( pIdx ){
92852:       int i;
92853:       pTab = pIdx->pTable;
92854:       sqlite3VdbeSetNumCols(v, 3);
92855:       pParse->nMem = 3;
92856:       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC);
92857:       sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC);
92858:       sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC);
92859:       for(i=0; i<pIdx->nColumn; i++){
92860:         int cnum = pIdx->aiColumn[i];
92861:         sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
92862:         sqlite3VdbeAddOp2(v, OP_Integer, cnum, 2);
92863:         assert( pTab->nCol>cnum );
92864:         sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pTab->aCol[cnum].zName, 0);
92865:         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
92866:       }
92867:     }
92868:   }else
92869: 
92870:   if( sqlite3StrICmp(zLeft, "index_list")==0 && zRight ){
92871:     Index *pIdx;
92872:     Table *pTab;
92873:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92874:     pTab = sqlite3FindTable(db, zRight, zDb);
92875:     if( pTab ){
92876:       v = sqlite3GetVdbe(pParse);
92877:       pIdx = pTab->pIndex;
92878:       if( pIdx ){
92879:         int i = 0; 
92880:         sqlite3VdbeSetNumCols(v, 3);
92881:         pParse->nMem = 3;
92882:         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
92883:         sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
92884:         sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC);
92885:         while(pIdx){
92886:           sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
92887:           sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pIdx->zName, 0);
92888:           sqlite3VdbeAddOp2(v, OP_Integer, pIdx->onError!=OE_None, 3);
92889:           sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
92890:           ++i;
92891:           pIdx = pIdx->pNext;
92892:         }
92893:       }
92894:     }
92895:   }else
92896: 
92897:   if( sqlite3StrICmp(zLeft, "database_list")==0 ){
92898:     int i;
92899:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92900:     sqlite3VdbeSetNumCols(v, 3);
92901:     pParse->nMem = 3;
92902:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
92903:     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
92904:     sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "file", SQLITE_STATIC);
92905:     for(i=0; i<db->nDb; i++){
92906:       if( db->aDb[i].pBt==0 ) continue;
92907:       assert( db->aDb[i].zName!=0 );
92908:       sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
92909:       sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, db->aDb[i].zName, 0);
92910:       sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
92911:            sqlite3BtreeGetFilename(db->aDb[i].pBt), 0);
92912:       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
92913:     }
92914:   }else
92915: 
92916:   if( sqlite3StrICmp(zLeft, "collation_list")==0 ){
92917:     int i = 0;
92918:     HashElem *p;
92919:     sqlite3VdbeSetNumCols(v, 2);
92920:     pParse->nMem = 2;
92921:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
92922:     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
92923:     for(p=sqliteHashFirst(&db->aCollSeq); p; p=sqliteHashNext(p)){
92924:       CollSeq *pColl = (CollSeq *)sqliteHashData(p);
92925:       sqlite3VdbeAddOp2(v, OP_Integer, i++, 1);
92926:       sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pColl->zName, 0);
92927:       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
92928:     }
92929:   }else
92930: #endif /* SQLITE_OMIT_SCHEMA_PRAGMAS */
92931: 
92932: #ifndef SQLITE_OMIT_FOREIGN_KEY
92933:   if( sqlite3StrICmp(zLeft, "foreign_key_list")==0 && zRight ){
92934:     FKey *pFK;
92935:     Table *pTab;
92936:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92937:     pTab = sqlite3FindTable(db, zRight, zDb);
92938:     if( pTab ){
92939:       v = sqlite3GetVdbe(pParse);
92940:       pFK = pTab->pFKey;
92941:       if( pFK ){
92942:         int i = 0; 
92943:         sqlite3VdbeSetNumCols(v, 8);
92944:         pParse->nMem = 8;
92945:         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "id", SQLITE_STATIC);
92946:         sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "seq", SQLITE_STATIC);
92947:         sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "table", SQLITE_STATIC);
92948:         sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "from", SQLITE_STATIC);
92949:         sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "to", SQLITE_STATIC);
92950:         sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "on_update", SQLITE_STATIC);
92951:         sqlite3VdbeSetColName(v, 6, COLNAME_NAME, "on_delete", SQLITE_STATIC);
92952:         sqlite3VdbeSetColName(v, 7, COLNAME_NAME, "match", SQLITE_STATIC);
92953:         while(pFK){
92954:           int j;
92955:           for(j=0; j<pFK->nCol; j++){
92956:             char *zCol = pFK->aCol[j].zCol;
92957:             char *zOnDelete = (char *)actionName(pFK->aAction[0]);
92958:             char *zOnUpdate = (char *)actionName(pFK->aAction[1]);
92959:             sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
92960:             sqlite3VdbeAddOp2(v, OP_Integer, j, 2);
92961:             sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pFK->zTo, 0);
92962:             sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0,
92963:                               pTab->aCol[pFK->aCol[j].iFrom].zName, 0);
92964:             sqlite3VdbeAddOp4(v, zCol ? OP_String8 : OP_Null, 0, 5, 0, zCol, 0);
92965:             sqlite3VdbeAddOp4(v, OP_String8, 0, 6, 0, zOnUpdate, 0);
92966:             sqlite3VdbeAddOp4(v, OP_String8, 0, 7, 0, zOnDelete, 0);
92967:             sqlite3VdbeAddOp4(v, OP_String8, 0, 8, 0, "NONE", 0);
92968:             sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 8);
92969:           }
92970:           ++i;
92971:           pFK = pFK->pNextFrom;
92972:         }
92973:       }
92974:     }
92975:   }else
92976: #endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
92977: 
92978: #ifndef NDEBUG
92979:   if( sqlite3StrICmp(zLeft, "parser_trace")==0 ){
92980:     if( zRight ){
92981:       if( sqlite3GetBoolean(zRight) ){
92982:         sqlite3ParserTrace(stderr, "parser: ");
92983:       }else{
92984:         sqlite3ParserTrace(0, 0);
92985:       }
92986:     }
92987:   }else
92988: #endif
92989: 
92990:   /* Reinstall the LIKE and GLOB functions.  The variant of LIKE
92991:   ** used will be case sensitive or not depending on the RHS.
92992:   */
92993:   if( sqlite3StrICmp(zLeft, "case_sensitive_like")==0 ){
92994:     if( zRight ){
92995:       sqlite3RegisterLikeFunctions(db, sqlite3GetBoolean(zRight));
92996:     }
92997:   }else
92998: 
92999: #ifndef SQLITE_INTEGRITY_CHECK_ERROR_MAX
93000: # define SQLITE_INTEGRITY_CHECK_ERROR_MAX 100
93001: #endif
93002: 
93003: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
93004:   /* Pragma "quick_check" is an experimental reduced version of 
93005:   ** integrity_check designed to detect most database corruption
93006:   ** without most of the overhead of a full integrity-check.
93007:   */
93008:   if( sqlite3StrICmp(zLeft, "integrity_check")==0
93009:    || sqlite3StrICmp(zLeft, "quick_check")==0 
93010:   ){
93011:     int i, j, addr, mxErr;
93012: 
93013:     /* Code that appears at the end of the integrity check.  If no error
93014:     ** messages have been generated, output OK.  Otherwise output the
93015:     ** error message
93016:     */
93017:     static const VdbeOpList endCode[] = {
93018:       { OP_AddImm,      1, 0,        0},    /* 0 */
93019:       { OP_IfNeg,       1, 0,        0},    /* 1 */
93020:       { OP_String8,     0, 3,        0},    /* 2 */
93021:       { OP_ResultRow,   3, 1,        0},
93022:     };
93023: 
93024:     int isQuick = (sqlite3Tolower(zLeft[0])=='q');
93025: 
93026:     /* Initialize the VDBE program */
93027:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
93028:     pParse->nMem = 6;
93029:     sqlite3VdbeSetNumCols(v, 1);
93030:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "integrity_check", SQLITE_STATIC);
93031: 
93032:     /* Set the maximum error count */
93033:     mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
93034:     if( zRight ){
93035:       sqlite3GetInt32(zRight, &mxErr);
93036:       if( mxErr<=0 ){
93037:         mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
93038:       }
93039:     }
93040:     sqlite3VdbeAddOp2(v, OP_Integer, mxErr, 1);  /* reg[1] holds errors left */
93041: 
93042:     /* Do an integrity check on each database file */
93043:     for(i=0; i<db->nDb; i++){
93044:       HashElem *x;
93045:       Hash *pTbls;
93046:       int cnt = 0;
93047: 
93048:       if( OMIT_TEMPDB && i==1 ) continue;
93049: 
93050:       sqlite3CodeVerifySchema(pParse, i);
93051:       addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Halt if out of errors */
93052:       sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
93053:       sqlite3VdbeJumpHere(v, addr);
93054: 
93055:       /* Do an integrity check of the B-Tree
93056:       **
93057:       ** Begin by filling registers 2, 3, ... with the root pages numbers
93058:       ** for all tables and indices in the database.
93059:       */
93060:       assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
93061:       pTbls = &db->aDb[i].pSchema->tblHash;
93062:       for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
93063:         Table *pTab = sqliteHashData(x);
93064:         Index *pIdx;
93065:         sqlite3VdbeAddOp2(v, OP_Integer, pTab->tnum, 2+cnt);
93066:         cnt++;
93067:         for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
93068:           sqlite3VdbeAddOp2(v, OP_Integer, pIdx->tnum, 2+cnt);
93069:           cnt++;
93070:         }
93071:       }
93072: 
93073:       /* Make sure sufficient number of registers have been allocated */
93074:       if( pParse->nMem < cnt+4 ){
93075:         pParse->nMem = cnt+4;
93076:       }
93077: 
93078:       /* Do the b-tree integrity checks */
93079:       sqlite3VdbeAddOp3(v, OP_IntegrityCk, 2, cnt, 1);
93080:       sqlite3VdbeChangeP5(v, (u8)i);
93081:       addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2);
93082:       sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
93083:          sqlite3MPrintf(db, "*** in database %s ***\n", db->aDb[i].zName),
93084:          P4_DYNAMIC);
93085:       sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1);
93086:       sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2);
93087:       sqlite3VdbeAddOp2(v, OP_ResultRow, 2, 1);
93088:       sqlite3VdbeJumpHere(v, addr);
93089: 
93090:       /* Make sure all the indices are constructed correctly.
93091:       */
93092:       for(x=sqliteHashFirst(pTbls); x && !isQuick; x=sqliteHashNext(x)){
93093:         Table *pTab = sqliteHashData(x);
93094:         Index *pIdx;
93095:         int loopTop;
93096: 
93097:         if( pTab->pIndex==0 ) continue;
93098:         addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1);  /* Stop if out of errors */
93099:         sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
93100:         sqlite3VdbeJumpHere(v, addr);
93101:         sqlite3OpenTableAndIndices(pParse, pTab, 1, OP_OpenRead);
93102:         sqlite3VdbeAddOp2(v, OP_Integer, 0, 2);  /* reg(2) will count entries */
93103:         loopTop = sqlite3VdbeAddOp2(v, OP_Rewind, 1, 0);
93104:         sqlite3VdbeAddOp2(v, OP_AddImm, 2, 1);   /* increment entry count */
93105:         for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
93106:           int jmp2;
93107:           int r1;
93108:           static const VdbeOpList idxErr[] = {
93109:             { OP_AddImm,      1, -1,  0},
93110:             { OP_String8,     0,  3,  0},    /* 1 */
93111:             { OP_Rowid,       1,  4,  0},
93112:             { OP_String8,     0,  5,  0},    /* 3 */
93113:             { OP_String8,     0,  6,  0},    /* 4 */
93114:             { OP_Concat,      4,  3,  3},
93115:             { OP_Concat,      5,  3,  3},
93116:             { OP_Concat,      6,  3,  3},
93117:             { OP_ResultRow,   3,  1,  0},
93118:             { OP_IfPos,       1,  0,  0},    /* 9 */
93119:             { OP_Halt,        0,  0,  0},
93120:           };
93121:           r1 = sqlite3GenerateIndexKey(pParse, pIdx, 1, 3, 0);
93122:           jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, j+2, 0, r1, pIdx->nColumn+1);
93123:           addr = sqlite3VdbeAddOpList(v, ArraySize(idxErr), idxErr);
93124:           sqlite3VdbeChangeP4(v, addr+1, "rowid ", P4_STATIC);
93125:           sqlite3VdbeChangeP4(v, addr+3, " missing from index ", P4_STATIC);
93126:           sqlite3VdbeChangeP4(v, addr+4, pIdx->zName, P4_TRANSIENT);
93127:           sqlite3VdbeJumpHere(v, addr+9);
93128:           sqlite3VdbeJumpHere(v, jmp2);
93129:         }
93130:         sqlite3VdbeAddOp2(v, OP_Next, 1, loopTop+1);
93131:         sqlite3VdbeJumpHere(v, loopTop);
93132:         for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
93133:           static const VdbeOpList cntIdx[] = {
93134:              { OP_Integer,      0,  3,  0},
93135:              { OP_Rewind,       0,  0,  0},  /* 1 */
93136:              { OP_AddImm,       3,  1,  0},
93137:              { OP_Next,         0,  0,  0},  /* 3 */
93138:              { OP_Eq,           2,  0,  3},  /* 4 */
93139:              { OP_AddImm,       1, -1,  0},
93140:              { OP_String8,      0,  2,  0},  /* 6 */
93141:              { OP_String8,      0,  3,  0},  /* 7 */
93142:              { OP_Concat,       3,  2,  2},
93143:              { OP_ResultRow,    2,  1,  0},
93144:           };
93145:           addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1);
93146:           sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
93147:           sqlite3VdbeJumpHere(v, addr);
93148:           addr = sqlite3VdbeAddOpList(v, ArraySize(cntIdx), cntIdx);
93149:           sqlite3VdbeChangeP1(v, addr+1, j+2);
93150:           sqlite3VdbeChangeP2(v, addr+1, addr+4);
93151:           sqlite3VdbeChangeP1(v, addr+3, j+2);
93152:           sqlite3VdbeChangeP2(v, addr+3, addr+2);
93153:           sqlite3VdbeJumpHere(v, addr+4);
93154:           sqlite3VdbeChangeP4(v, addr+6, 
93155:                      "wrong # of entries in index ", P4_STATIC);
93156:           sqlite3VdbeChangeP4(v, addr+7, pIdx->zName, P4_TRANSIENT);
93157:         }
93158:       } 
93159:     }
93160:     addr = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode);
93161:     sqlite3VdbeChangeP2(v, addr, -mxErr);
93162:     sqlite3VdbeJumpHere(v, addr+1);
93163:     sqlite3VdbeChangeP4(v, addr+2, "ok", P4_STATIC);
93164:   }else
93165: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
93166: 
93167: #ifndef SQLITE_OMIT_UTF16
93168:   /*
93169:   **   PRAGMA encoding
93170:   **   PRAGMA encoding = "utf-8"|"utf-16"|"utf-16le"|"utf-16be"
93171:   **
93172:   ** In its first form, this pragma returns the encoding of the main
93173:   ** database. If the database is not initialized, it is initialized now.
93174:   **
93175:   ** The second form of this pragma is a no-op if the main database file
93176:   ** has not already been initialized. In this case it sets the default
93177:   ** encoding that will be used for the main database file if a new file
93178:   ** is created. If an existing main database file is opened, then the
93179:   ** default text encoding for the existing database is used.
93180:   ** 
93181:   ** In all cases new databases created using the ATTACH command are
93182:   ** created to use the same default text encoding as the main database. If
93183:   ** the main database has not been initialized and/or created when ATTACH
93184:   ** is executed, this is done before the ATTACH operation.
93185:   **
93186:   ** In the second form this pragma sets the text encoding to be used in
93187:   ** new database files created using this database handle. It is only
93188:   ** useful if invoked immediately after the main database i
93189:   */
93190:   if( sqlite3StrICmp(zLeft, "encoding")==0 ){
93191:     static const struct EncName {
93192:       char *zName;
93193:       u8 enc;
93194:     } encnames[] = {
93195:       { "UTF8",     SQLITE_UTF8        },
93196:       { "UTF-8",    SQLITE_UTF8        },  /* Must be element [1] */
93197:       { "UTF-16le", SQLITE_UTF16LE     },  /* Must be element [2] */
93198:       { "UTF-16be", SQLITE_UTF16BE     },  /* Must be element [3] */
93199:       { "UTF16le",  SQLITE_UTF16LE     },
93200:       { "UTF16be",  SQLITE_UTF16BE     },
93201:       { "UTF-16",   0                  }, /* SQLITE_UTF16NATIVE */
93202:       { "UTF16",    0                  }, /* SQLITE_UTF16NATIVE */
93203:       { 0, 0 }
93204:     };
93205:     const struct EncName *pEnc;
93206:     if( !zRight ){    /* "PRAGMA encoding" */
93207:       if( sqlite3ReadSchema(pParse) ) goto pragma_out;
93208:       sqlite3VdbeSetNumCols(v, 1);
93209:       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "encoding", SQLITE_STATIC);
93210:       sqlite3VdbeAddOp2(v, OP_String8, 0, 1);
93211:       assert( encnames[SQLITE_UTF8].enc==SQLITE_UTF8 );
93212:       assert( encnames[SQLITE_UTF16LE].enc==SQLITE_UTF16LE );
93213:       assert( encnames[SQLITE_UTF16BE].enc==SQLITE_UTF16BE );
93214:       sqlite3VdbeChangeP4(v, -1, encnames[ENC(pParse->db)].zName, P4_STATIC);
93215:       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
93216:     }else{                        /* "PRAGMA encoding = XXX" */
93217:       /* Only change the value of sqlite.enc if the database handle is not
93218:       ** initialized. If the main database exists, the new sqlite.enc value
93219:       ** will be overwritten when the schema is next loaded. If it does not
93220:       ** already exists, it will be created to use the new encoding value.
93221:       */
93222:       if( 
93223:         !(DbHasProperty(db, 0, DB_SchemaLoaded)) || 
93224:         DbHasProperty(db, 0, DB_Empty) 
93225:       ){
93226:         for(pEnc=&encnames[0]; pEnc->zName; pEnc++){
93227:           if( 0==sqlite3StrICmp(zRight, pEnc->zName) ){
93228:             ENC(pParse->db) = pEnc->enc ? pEnc->enc : SQLITE_UTF16NATIVE;
93229:             break;
93230:           }
93231:         }
93232:         if( !pEnc->zName ){
93233:           sqlite3ErrorMsg(pParse, "unsupported encoding: %s", zRight);
93234:         }
93235:       }
93236:     }
93237:   }else
93238: #endif /* SQLITE_OMIT_UTF16 */
93239: 
93240: #ifndef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
93241:   /*
93242:   **   PRAGMA [database.]schema_version
93243:   **   PRAGMA [database.]schema_version = <integer>
93244:   **
93245:   **   PRAGMA [database.]user_version
93246:   **   PRAGMA [database.]user_version = <integer>
93247:   **
93248:   ** The pragma's schema_version and user_version are used to set or get
93249:   ** the value of the schema-version and user-version, respectively. Both
93250:   ** the schema-version and the user-version are 32-bit signed integers
93251:   ** stored in the database header.
93252:   **
93253:   ** The schema-cookie is usually only manipulated internally by SQLite. It
93254:   ** is incremented by SQLite whenever the database schema is modified (by
93255:   ** creating or dropping a table or index). The schema version is used by
93256:   ** SQLite each time a query is executed to ensure that the internal cache
93257:   ** of the schema used when compiling the SQL query matches the schema of
93258:   ** the database against which the compiled query is actually executed.
93259:   ** Subverting this mechanism by using "PRAGMA schema_version" to modify
93260:   ** the schema-version is potentially dangerous and may lead to program
93261:   ** crashes or database corruption. Use with caution!
93262:   **
93263:   ** The user-version is not used internally by SQLite. It may be used by
93264:   ** applications for any purpose.
93265:   */
93266:   if( sqlite3StrICmp(zLeft, "schema_version")==0 
93267:    || sqlite3StrICmp(zLeft, "user_version")==0 
93268:    || sqlite3StrICmp(zLeft, "freelist_count")==0 
93269:   ){
93270:     int iCookie;   /* Cookie index. 1 for schema-cookie, 6 for user-cookie. */
93271:     sqlite3VdbeUsesBtree(v, iDb);
93272:     switch( zLeft[0] ){
93273:       case 'f': case 'F':
93274:         iCookie = BTREE_FREE_PAGE_COUNT;
93275:         break;
93276:       case 's': case 'S':
93277:         iCookie = BTREE_SCHEMA_VERSION;
93278:         break;
93279:       default:
93280:         iCookie = BTREE_USER_VERSION;
93281:         break;
93282:     }
93283: 
93284:     if( zRight && iCookie!=BTREE_FREE_PAGE_COUNT ){
93285:       /* Write the specified cookie value */
93286:       static const VdbeOpList setCookie[] = {
93287:         { OP_Transaction,    0,  1,  0},    /* 0 */
93288:         { OP_Integer,        0,  1,  0},    /* 1 */
93289:         { OP_SetCookie,      0,  0,  1},    /* 2 */
93290:       };
93291:       int addr = sqlite3VdbeAddOpList(v, ArraySize(setCookie), setCookie);
93292:       sqlite3VdbeChangeP1(v, addr, iDb);
93293:       sqlite3VdbeChangeP1(v, addr+1, sqlite3Atoi(zRight));
93294:       sqlite3VdbeChangeP1(v, addr+2, iDb);
93295:       sqlite3VdbeChangeP2(v, addr+2, iCookie);
93296:     }else{
93297:       /* Read the specified cookie value */
93298:       static const VdbeOpList readCookie[] = {
93299:         { OP_Transaction,     0,  0,  0},    /* 0 */
93300:         { OP_ReadCookie,      0,  1,  0},    /* 1 */
93301:         { OP_ResultRow,       1,  1,  0}
93302:       };
93303:       int addr = sqlite3VdbeAddOpList(v, ArraySize(readCookie), readCookie);
93304:       sqlite3VdbeChangeP1(v, addr, iDb);
93305:       sqlite3VdbeChangeP1(v, addr+1, iDb);
93306:       sqlite3VdbeChangeP3(v, addr+1, iCookie);
93307:       sqlite3VdbeSetNumCols(v, 1);
93308:       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT);
93309:     }
93310:   }else
93311: #endif /* SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS */
93312: 
93313: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
93314:   /*
93315:   **   PRAGMA compile_options
93316:   **
93317:   ** Return the names of all compile-time options used in this build,
93318:   ** one option per row.
93319:   */
93320:   if( sqlite3StrICmp(zLeft, "compile_options")==0 ){
93321:     int i = 0;
93322:     const char *zOpt;
93323:     sqlite3VdbeSetNumCols(v, 1);
93324:     pParse->nMem = 1;
93325:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "compile_option", SQLITE_STATIC);
93326:     while( (zOpt = sqlite3_compileoption_get(i++))!=0 ){
93327:       sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zOpt, 0);
93328:       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
93329:     }
93330:   }else
93331: #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
93332: 
93333: #ifndef SQLITE_OMIT_WAL
93334:   /*
93335:   **   PRAGMA [database.]wal_checkpoint = passive|full|restart
93336:   **
93337:   ** Checkpoint the database.
93338:   */
93339:   if( sqlite3StrICmp(zLeft, "wal_checkpoint")==0 ){
93340:     int iBt = (pId2->z?iDb:SQLITE_MAX_ATTACHED);
93341:     int eMode = SQLITE_CHECKPOINT_PASSIVE;
93342:     if( zRight ){
93343:       if( sqlite3StrICmp(zRight, "full")==0 ){
93344:         eMode = SQLITE_CHECKPOINT_FULL;
93345:       }else if( sqlite3StrICmp(zRight, "restart")==0 ){
93346:         eMode = SQLITE_CHECKPOINT_RESTART;
93347:       }
93348:     }
93349:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
93350:     sqlite3VdbeSetNumCols(v, 3);
93351:     pParse->nMem = 3;
93352:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "busy", SQLITE_STATIC);
93353:     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "log", SQLITE_STATIC);
93354:     sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "checkpointed", SQLITE_STATIC);
93355: 
93356:     sqlite3VdbeAddOp3(v, OP_Checkpoint, iBt, eMode, 1);
93357:     sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
93358:   }else
93359: 
93360:   /*
93361:   **   PRAGMA wal_autocheckpoint
93362:   **   PRAGMA wal_autocheckpoint = N
93363:   **
93364:   ** Configure a database connection to automatically checkpoint a database
93365:   ** after accumulating N frames in the log. Or query for the current value
93366:   ** of N.
93367:   */
93368:   if( sqlite3StrICmp(zLeft, "wal_autocheckpoint")==0 ){
93369:     if( zRight ){
93370:       sqlite3_wal_autocheckpoint(db, sqlite3Atoi(zRight));
93371:     }
93372:     returnSingleInt(pParse, "wal_autocheckpoint", 
93373:        db->xWalCallback==sqlite3WalDefaultHook ? 
93374:            SQLITE_PTR_TO_INT(db->pWalArg) : 0);
93375:   }else
93376: #endif
93377: 
93378:   /*
93379:   **  PRAGMA shrink_memory
93380:   **
93381:   ** This pragma attempts to free as much memory as possible from the
93382:   ** current database connection.
93383:   */
93384:   if( sqlite3StrICmp(zLeft, "shrink_memory")==0 ){
93385:     sqlite3_db_release_memory(db);
93386:   }else
93387: 
93388: #if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
93389:   /*
93390:   ** Report the current state of file logs for all databases
93391:   */
93392:   if( sqlite3StrICmp(zLeft, "lock_status")==0 ){
93393:     static const char *const azLockName[] = {
93394:       "unlocked", "shared", "reserved", "pending", "exclusive"
93395:     };
93396:     int i;
93397:     sqlite3VdbeSetNumCols(v, 2);
93398:     pParse->nMem = 2;
93399:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "database", SQLITE_STATIC);
93400:     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "status", SQLITE_STATIC);
93401:     for(i=0; i<db->nDb; i++){
93402:       Btree *pBt;
93403:       Pager *pPager;
93404:       const char *zState = "unknown";
93405:       int j;
93406:       if( db->aDb[i].zName==0 ) continue;
93407:       sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, db->aDb[i].zName, P4_STATIC);
93408:       pBt = db->aDb[i].pBt;
93409:       if( pBt==0 || (pPager = sqlite3BtreePager(pBt))==0 ){
93410:         zState = "closed";
93411:       }else if( sqlite3_file_control(db, i ? db->aDb[i].zName : 0, 
93412:                                      SQLITE_FCNTL_LOCKSTATE, &j)==SQLITE_OK ){
93413:          zState = azLockName[j];
93414:       }
93415:       sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, zState, P4_STATIC);
93416:       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
93417:     }
93418: 
93419:   }else
93420: #endif
93421: 
93422: #ifdef SQLITE_HAS_CODEC
93423:   if( sqlite3StrICmp(zLeft, "key")==0 && zRight ){
93424:     sqlite3_key(db, zRight, sqlite3Strlen30(zRight));
93425:   }else
93426:   if( sqlite3StrICmp(zLeft, "rekey")==0 && zRight ){
93427:     sqlite3_rekey(db, zRight, sqlite3Strlen30(zRight));
93428:   }else
93429:   if( zRight && (sqlite3StrICmp(zLeft, "hexkey")==0 ||
93430:                  sqlite3StrICmp(zLeft, "hexrekey")==0) ){
93431:     int i, h1, h2;
93432:     char zKey[40];
93433:     for(i=0; (h1 = zRight[i])!=0 && (h2 = zRight[i+1])!=0; i+=2){
93434:       h1 += 9*(1&(h1>>6));
93435:       h2 += 9*(1&(h2>>6));
93436:       zKey[i/2] = (h2 & 0x0f) | ((h1 & 0xf)<<4);
93437:     }
93438:     if( (zLeft[3] & 0xf)==0xb ){
93439:       sqlite3_key(db, zKey, i/2);
93440:     }else{
93441:       sqlite3_rekey(db, zKey, i/2);
93442:     }
93443:   }else
93444: #endif
93445: #if defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
93446:   if( sqlite3StrICmp(zLeft, "activate_extensions")==0 ){
93447: #ifdef SQLITE_HAS_CODEC
93448:     if( sqlite3StrNICmp(zRight, "see-", 4)==0 ){
93449:       sqlite3_activate_see(&zRight[4]);
93450:     }
93451: #endif
93452: #ifdef SQLITE_ENABLE_CEROD
93453:     if( sqlite3StrNICmp(zRight, "cerod-", 6)==0 ){
93454:       sqlite3_activate_cerod(&zRight[6]);
93455:     }
93456: #endif
93457:   }else
93458: #endif
93459: 
93460:  
93461:   {/* Empty ELSE clause */}
93462: 
93463:   /*
93464:   ** Reset the safety level, in case the fullfsync flag or synchronous
93465:   ** setting changed.
93466:   */
93467: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
93468:   if( db->autoCommit ){
93469:     sqlite3BtreeSetSafetyLevel(pDb->pBt, pDb->safety_level,
93470:                (db->flags&SQLITE_FullFSync)!=0,
93471:                (db->flags&SQLITE_CkptFullFSync)!=0);
93472:   }
93473: #endif
93474: pragma_out:
93475:   sqlite3DbFree(db, zLeft);
93476:   sqlite3DbFree(db, zRight);
93477: }
93478: 
93479: #endif /* SQLITE_OMIT_PRAGMA */
93480: 
93481: /************** End of pragma.c **********************************************/
93482: /************** Begin file prepare.c *****************************************/
93483: /*
93484: ** 2005 May 25
93485: **
93486: ** The author disclaims copyright to this source code.  In place of
93487: ** a legal notice, here is a blessing:
93488: **
93489: **    May you do good and not evil.
93490: **    May you find forgiveness for yourself and forgive others.
93491: **    May you share freely, never taking more than you give.
93492: **
93493: *************************************************************************
93494: ** This file contains the implementation of the sqlite3_prepare()
93495: ** interface, and routines that contribute to loading the database schema
93496: ** from disk.
93497: */
93498: 
93499: /*
93500: ** Fill the InitData structure with an error message that indicates
93501: ** that the database is corrupt.
93502: */
93503: static void corruptSchema(
93504:   InitData *pData,     /* Initialization context */
93505:   const char *zObj,    /* Object being parsed at the point of error */
93506:   const char *zExtra   /* Error information */
93507: ){
93508:   sqlite3 *db = pData->db;
93509:   if( !db->mallocFailed && (db->flags & SQLITE_RecoveryMode)==0 ){
93510:     if( zObj==0 ) zObj = "?";
93511:     sqlite3SetString(pData->pzErrMsg, db,
93512:       "malformed database schema (%s)", zObj);
93513:     if( zExtra ){
93514:       *pData->pzErrMsg = sqlite3MAppendf(db, *pData->pzErrMsg, 
93515:                                  "%s - %s", *pData->pzErrMsg, zExtra);
93516:     }
93517:   }
93518:   pData->rc = db->mallocFailed ? SQLITE_NOMEM : SQLITE_CORRUPT_BKPT;
93519: }
93520: 
93521: /*
93522: ** This is the callback routine for the code that initializes the
93523: ** database.  See sqlite3Init() below for additional information.
93524: ** This routine is also called from the OP_ParseSchema opcode of the VDBE.
93525: **
93526: ** Each callback contains the following information:
93527: **
93528: **     argv[0] = name of thing being created
93529: **     argv[1] = root page number for table or index. 0 for trigger or view.
93530: **     argv[2] = SQL text for the CREATE statement.
93531: **
93532: */
93533: SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){
93534:   InitData *pData = (InitData*)pInit;
93535:   sqlite3 *db = pData->db;
93536:   int iDb = pData->iDb;
93537: 
93538:   assert( argc==3 );
93539:   UNUSED_PARAMETER2(NotUsed, argc);
93540:   assert( sqlite3_mutex_held(db->mutex) );
93541:   DbClearProperty(db, iDb, DB_Empty);
93542:   if( db->mallocFailed ){
93543:     corruptSchema(pData, argv[0], 0);
93544:     return 1;
93545:   }
93546: 
93547:   assert( iDb>=0 && iDb<db->nDb );
93548:   if( argv==0 ) return 0;   /* Might happen if EMPTY_RESULT_CALLBACKS are on */
93549:   if( argv[1]==0 ){
93550:     corruptSchema(pData, argv[0], 0);
93551:   }else if( argv[2] && argv[2][0] ){
93552:     /* Call the parser to process a CREATE TABLE, INDEX or VIEW.
93553:     ** But because db->init.busy is set to 1, no VDBE code is generated
93554:     ** or executed.  All the parser does is build the internal data
93555:     ** structures that describe the table, index, or view.
93556:     */
93557:     int rc;
93558:     sqlite3_stmt *pStmt;
93559:     TESTONLY(int rcp);            /* Return code from sqlite3_prepare() */
93560: 
93561:     assert( db->init.busy );
93562:     db->init.iDb = iDb;
93563:     db->init.newTnum = sqlite3Atoi(argv[1]);
93564:     db->init.orphanTrigger = 0;
93565:     TESTONLY(rcp = ) sqlite3_prepare(db, argv[2], -1, &pStmt, 0);
93566:     rc = db->errCode;
93567:     assert( (rc&0xFF)==(rcp&0xFF) );
93568:     db->init.iDb = 0;
93569:     if( SQLITE_OK!=rc ){
93570:       if( db->init.orphanTrigger ){
93571:         assert( iDb==1 );
93572:       }else{
93573:         pData->rc = rc;
93574:         if( rc==SQLITE_NOMEM ){
93575:           db->mallocFailed = 1;
93576:         }else if( rc!=SQLITE_INTERRUPT && (rc&0xFF)!=SQLITE_LOCKED ){
93577:           corruptSchema(pData, argv[0], sqlite3_errmsg(db));
93578:         }
93579:       }
93580:     }
93581:     sqlite3_finalize(pStmt);
93582:   }else if( argv[0]==0 ){
93583:     corruptSchema(pData, 0, 0);
93584:   }else{
93585:     /* If the SQL column is blank it means this is an index that
93586:     ** was created to be the PRIMARY KEY or to fulfill a UNIQUE
93587:     ** constraint for a CREATE TABLE.  The index should have already
93588:     ** been created when we processed the CREATE TABLE.  All we have
93589:     ** to do here is record the root page number for that index.
93590:     */
93591:     Index *pIndex;
93592:     pIndex = sqlite3FindIndex(db, argv[0], db->aDb[iDb].zName);
93593:     if( pIndex==0 ){
93594:       /* This can occur if there exists an index on a TEMP table which
93595:       ** has the same name as another index on a permanent index.  Since
93596:       ** the permanent table is hidden by the TEMP table, we can also
93597:       ** safely ignore the index on the permanent table.
93598:       */
93599:       /* Do Nothing */;
93600:     }else if( sqlite3GetInt32(argv[1], &pIndex->tnum)==0 ){
93601:       corruptSchema(pData, argv[0], "invalid rootpage");
93602:     }
93603:   }
93604:   return 0;
93605: }
93606: 
93607: /*
93608: ** Attempt to read the database schema and initialize internal
93609: ** data structures for a single database file.  The index of the
93610: ** database file is given by iDb.  iDb==0 is used for the main
93611: ** database.  iDb==1 should never be used.  iDb>=2 is used for
93612: ** auxiliary databases.  Return one of the SQLITE_ error codes to
93613: ** indicate success or failure.
93614: */
93615: static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
93616:   int rc;
93617:   int i;
93618:   int size;
93619:   Table *pTab;
93620:   Db *pDb;
93621:   char const *azArg[4];
93622:   int meta[5];
93623:   InitData initData;
93624:   char const *zMasterSchema;
93625:   char const *zMasterName;
93626:   int openedTransaction = 0;
93627: 
93628:   /*
93629:   ** The master database table has a structure like this
93630:   */
93631:   static const char master_schema[] = 
93632:      "CREATE TABLE sqlite_master(\n"
93633:      "  type text,\n"
93634:      "  name text,\n"
93635:      "  tbl_name text,\n"
93636:      "  rootpage integer,\n"
93637:      "  sql text\n"
93638:      ")"
93639:   ;
93640: #ifndef SQLITE_OMIT_TEMPDB
93641:   static const char temp_master_schema[] = 
93642:      "CREATE TEMP TABLE sqlite_temp_master(\n"
93643:      "  type text,\n"
93644:      "  name text,\n"
93645:      "  tbl_name text,\n"
93646:      "  rootpage integer,\n"
93647:      "  sql text\n"
93648:      ")"
93649:   ;
93650: #else
93651:   #define temp_master_schema 0
93652: #endif
93653: 
93654:   assert( iDb>=0 && iDb<db->nDb );
93655:   assert( db->aDb[iDb].pSchema );
93656:   assert( sqlite3_mutex_held(db->mutex) );
93657:   assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) );
93658: 
93659:   /* zMasterSchema and zInitScript are set to point at the master schema
93660:   ** and initialisation script appropriate for the database being
93661:   ** initialised. zMasterName is the name of the master table.
93662:   */
93663:   if( !OMIT_TEMPDB && iDb==1 ){
93664:     zMasterSchema = temp_master_schema;
93665:   }else{
93666:     zMasterSchema = master_schema;
93667:   }
93668:   zMasterName = SCHEMA_TABLE(iDb);
93669: 
93670:   /* Construct the schema tables.  */
93671:   azArg[0] = zMasterName;
93672:   azArg[1] = "1";
93673:   azArg[2] = zMasterSchema;
93674:   azArg[3] = 0;
93675:   initData.db = db;
93676:   initData.iDb = iDb;
93677:   initData.rc = SQLITE_OK;
93678:   initData.pzErrMsg = pzErrMsg;
93679:   sqlite3InitCallback(&initData, 3, (char **)azArg, 0);
93680:   if( initData.rc ){
93681:     rc = initData.rc;
93682:     goto error_out;
93683:   }
93684:   pTab = sqlite3FindTable(db, zMasterName, db->aDb[iDb].zName);
93685:   if( ALWAYS(pTab) ){
93686:     pTab->tabFlags |= TF_Readonly;
93687:   }
93688: 
93689:   /* Create a cursor to hold the database open
93690:   */
93691:   pDb = &db->aDb[iDb];
93692:   if( pDb->pBt==0 ){
93693:     if( !OMIT_TEMPDB && ALWAYS(iDb==1) ){
93694:       DbSetProperty(db, 1, DB_SchemaLoaded);
93695:     }
93696:     return SQLITE_OK;
93697:   }
93698: 
93699:   /* If there is not already a read-only (or read-write) transaction opened
93700:   ** on the b-tree database, open one now. If a transaction is opened, it 
93701:   ** will be closed before this function returns.  */
93702:   sqlite3BtreeEnter(pDb->pBt);
93703:   if( !sqlite3BtreeIsInReadTrans(pDb->pBt) ){
93704:     rc = sqlite3BtreeBeginTrans(pDb->pBt, 0);
93705:     if( rc!=SQLITE_OK ){
93706:       sqlite3SetString(pzErrMsg, db, "%s", sqlite3ErrStr(rc));
93707:       goto initone_error_out;
93708:     }
93709:     openedTransaction = 1;
93710:   }
93711: 
93712:   /* Get the database meta information.
93713:   **
93714:   ** Meta values are as follows:
93715:   **    meta[0]   Schema cookie.  Changes with each schema change.
93716:   **    meta[1]   File format of schema layer.
93717:   **    meta[2]   Size of the page cache.
93718:   **    meta[3]   Largest rootpage (auto/incr_vacuum mode)
93719:   **    meta[4]   Db text encoding. 1:UTF-8 2:UTF-16LE 3:UTF-16BE
93720:   **    meta[5]   User version
93721:   **    meta[6]   Incremental vacuum mode
93722:   **    meta[7]   unused
93723:   **    meta[8]   unused
93724:   **    meta[9]   unused
93725:   **
93726:   ** Note: The #defined SQLITE_UTF* symbols in sqliteInt.h correspond to
93727:   ** the possible values of meta[4].
93728:   */
93729:   for(i=0; i<ArraySize(meta); i++){
93730:     sqlite3BtreeGetMeta(pDb->pBt, i+1, (u32 *)&meta[i]);
93731:   }
93732:   pDb->pSchema->schema_cookie = meta[BTREE_SCHEMA_VERSION-1];
93733: 
93734:   /* If opening a non-empty database, check the text encoding. For the
93735:   ** main database, set sqlite3.enc to the encoding of the main database.
93736:   ** For an attached db, it is an error if the encoding is not the same
93737:   ** as sqlite3.enc.
93738:   */
93739:   if( meta[BTREE_TEXT_ENCODING-1] ){  /* text encoding */
93740:     if( iDb==0 ){
93741:       u8 encoding;
93742:       /* If opening the main database, set ENC(db). */
93743:       encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3;
93744:       if( encoding==0 ) encoding = SQLITE_UTF8;
93745:       ENC(db) = encoding;
93746:       db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
93747:     }else{
93748:       /* If opening an attached database, the encoding much match ENC(db) */
93749:       if( meta[BTREE_TEXT_ENCODING-1]!=ENC(db) ){
93750:         sqlite3SetString(pzErrMsg, db, "attached databases must use the same"
93751:             " text encoding as main database");
93752:         rc = SQLITE_ERROR;
93753:         goto initone_error_out;
93754:       }
93755:     }
93756:   }else{
93757:     DbSetProperty(db, iDb, DB_Empty);
93758:   }
93759:   pDb->pSchema->enc = ENC(db);
93760: 
93761:   if( pDb->pSchema->cache_size==0 ){
93762: #ifndef SQLITE_OMIT_DEPRECATED
93763:     size = sqlite3AbsInt32(meta[BTREE_DEFAULT_CACHE_SIZE-1]);
93764:     if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; }
93765:     pDb->pSchema->cache_size = size;
93766: #else
93767:     pDb->pSchema->cache_size = SQLITE_DEFAULT_CACHE_SIZE;
93768: #endif
93769:     sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
93770:   }
93771: 
93772:   /*
93773:   ** file_format==1    Version 3.0.0.
93774:   ** file_format==2    Version 3.1.3.  // ALTER TABLE ADD COLUMN
93775:   ** file_format==3    Version 3.1.4.  // ditto but with non-NULL defaults
93776:   ** file_format==4    Version 3.3.0.  // DESC indices.  Boolean constants
93777:   */
93778:   pDb->pSchema->file_format = (u8)meta[BTREE_FILE_FORMAT-1];
93779:   if( pDb->pSchema->file_format==0 ){
93780:     pDb->pSchema->file_format = 1;
93781:   }
93782:   if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
93783:     sqlite3SetString(pzErrMsg, db, "unsupported file format");
93784:     rc = SQLITE_ERROR;
93785:     goto initone_error_out;
93786:   }
93787: 
93788:   /* Ticket #2804:  When we open a database in the newer file format,
93789:   ** clear the legacy_file_format pragma flag so that a VACUUM will
93790:   ** not downgrade the database and thus invalidate any descending
93791:   ** indices that the user might have created.
93792:   */
93793:   if( iDb==0 && meta[BTREE_FILE_FORMAT-1]>=4 ){
93794:     db->flags &= ~SQLITE_LegacyFileFmt;
93795:   }
93796: 
93797:   /* Read the schema information out of the schema tables
93798:   */
93799:   assert( db->init.busy );
93800:   {
93801:     char *zSql;
93802:     zSql = sqlite3MPrintf(db, 
93803:         "SELECT name, rootpage, sql FROM '%q'.%s ORDER BY rowid",
93804:         db->aDb[iDb].zName, zMasterName);
93805: #ifndef SQLITE_OMIT_AUTHORIZATION
93806:     {
93807:       int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
93808:       xAuth = db->xAuth;
93809:       db->xAuth = 0;
93810: #endif
93811:       rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0);
93812: #ifndef SQLITE_OMIT_AUTHORIZATION
93813:       db->xAuth = xAuth;
93814:     }
93815: #endif
93816:     if( rc==SQLITE_OK ) rc = initData.rc;
93817:     sqlite3DbFree(db, zSql);
93818: #ifndef SQLITE_OMIT_ANALYZE
93819:     if( rc==SQLITE_OK ){
93820:       sqlite3AnalysisLoad(db, iDb);
93821:     }
93822: #endif
93823:   }
93824:   if( db->mallocFailed ){
93825:     rc = SQLITE_NOMEM;
93826:     sqlite3ResetInternalSchema(db, -1);
93827:   }
93828:   if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){
93829:     /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider
93830:     ** the schema loaded, even if errors occurred. In this situation the 
93831:     ** current sqlite3_prepare() operation will fail, but the following one
93832:     ** will attempt to compile the supplied statement against whatever subset
93833:     ** of the schema was loaded before the error occurred. The primary
93834:     ** purpose of this is to allow access to the sqlite_master table
93835:     ** even when its contents have been corrupted.
93836:     */
93837:     DbSetProperty(db, iDb, DB_SchemaLoaded);
93838:     rc = SQLITE_OK;
93839:   }
93840: 
93841:   /* Jump here for an error that occurs after successfully allocating
93842:   ** curMain and calling sqlite3BtreeEnter(). For an error that occurs
93843:   ** before that point, jump to error_out.
93844:   */
93845: initone_error_out:
93846:   if( openedTransaction ){
93847:     sqlite3BtreeCommit(pDb->pBt);
93848:   }
93849:   sqlite3BtreeLeave(pDb->pBt);
93850: 
93851: error_out:
93852:   if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
93853:     db->mallocFailed = 1;
93854:   }
93855:   return rc;
93856: }
93857: 
93858: /*
93859: ** Initialize all database files - the main database file, the file
93860: ** used to store temporary tables, and any additional database files
93861: ** created using ATTACH statements.  Return a success code.  If an
93862: ** error occurs, write an error message into *pzErrMsg.
93863: **
93864: ** After a database is initialized, the DB_SchemaLoaded bit is set
93865: ** bit is set in the flags field of the Db structure. If the database
93866: ** file was of zero-length, then the DB_Empty flag is also set.
93867: */
93868: SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){
93869:   int i, rc;
93870:   int commit_internal = !(db->flags&SQLITE_InternChanges);
93871:   
93872:   assert( sqlite3_mutex_held(db->mutex) );
93873:   rc = SQLITE_OK;
93874:   db->init.busy = 1;
93875:   for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
93876:     if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue;
93877:     rc = sqlite3InitOne(db, i, pzErrMsg);
93878:     if( rc ){
93879:       sqlite3ResetInternalSchema(db, i);
93880:     }
93881:   }
93882: 
93883:   /* Once all the other databases have been initialised, load the schema
93884:   ** for the TEMP database. This is loaded last, as the TEMP database
93885:   ** schema may contain references to objects in other databases.
93886:   */
93887: #ifndef SQLITE_OMIT_TEMPDB
93888:   if( rc==SQLITE_OK && ALWAYS(db->nDb>1)
93889:                     && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
93890:     rc = sqlite3InitOne(db, 1, pzErrMsg);
93891:     if( rc ){
93892:       sqlite3ResetInternalSchema(db, 1);
93893:     }
93894:   }
93895: #endif
93896: 
93897:   db->init.busy = 0;
93898:   if( rc==SQLITE_OK && commit_internal ){
93899:     sqlite3CommitInternalChanges(db);
93900:   }
93901: 
93902:   return rc; 
93903: }
93904: 
93905: /*
93906: ** This routine is a no-op if the database schema is already initialised.
93907: ** Otherwise, the schema is loaded. An error code is returned.
93908: */
93909: SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse){
93910:   int rc = SQLITE_OK;
93911:   sqlite3 *db = pParse->db;
93912:   assert( sqlite3_mutex_held(db->mutex) );
93913:   if( !db->init.busy ){
93914:     rc = sqlite3Init(db, &pParse->zErrMsg);
93915:   }
93916:   if( rc!=SQLITE_OK ){
93917:     pParse->rc = rc;
93918:     pParse->nErr++;
93919:   }
93920:   return rc;
93921: }
93922: 
93923: 
93924: /*
93925: ** Check schema cookies in all databases.  If any cookie is out
93926: ** of date set pParse->rc to SQLITE_SCHEMA.  If all schema cookies
93927: ** make no changes to pParse->rc.
93928: */
93929: static void schemaIsValid(Parse *pParse){
93930:   sqlite3 *db = pParse->db;
93931:   int iDb;
93932:   int rc;
93933:   int cookie;
93934: 
93935:   assert( pParse->checkSchema );
93936:   assert( sqlite3_mutex_held(db->mutex) );
93937:   for(iDb=0; iDb<db->nDb; iDb++){
93938:     int openedTransaction = 0;         /* True if a transaction is opened */
93939:     Btree *pBt = db->aDb[iDb].pBt;     /* Btree database to read cookie from */
93940:     if( pBt==0 ) continue;
93941: 
93942:     /* If there is not already a read-only (or read-write) transaction opened
93943:     ** on the b-tree database, open one now. If a transaction is opened, it 
93944:     ** will be closed immediately after reading the meta-value. */
93945:     if( !sqlite3BtreeIsInReadTrans(pBt) ){
93946:       rc = sqlite3BtreeBeginTrans(pBt, 0);
93947:       if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
93948:         db->mallocFailed = 1;
93949:       }
93950:       if( rc!=SQLITE_OK ) return;
93951:       openedTransaction = 1;
93952:     }
93953: 
93954:     /* Read the schema cookie from the database. If it does not match the 
93955:     ** value stored as part of the in-memory schema representation,
93956:     ** set Parse.rc to SQLITE_SCHEMA. */
93957:     sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie);
93958:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
93959:     if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){
93960:       sqlite3ResetInternalSchema(db, iDb);
93961:       pParse->rc = SQLITE_SCHEMA;
93962:     }
93963: 
93964:     /* Close the transaction, if one was opened. */
93965:     if( openedTransaction ){
93966:       sqlite3BtreeCommit(pBt);
93967:     }
93968:   }
93969: }
93970: 
93971: /*
93972: ** Convert a schema pointer into the iDb index that indicates
93973: ** which database file in db->aDb[] the schema refers to.
93974: **
93975: ** If the same database is attached more than once, the first
93976: ** attached database is returned.
93977: */
93978: SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
93979:   int i = -1000000;
93980: 
93981:   /* If pSchema is NULL, then return -1000000. This happens when code in 
93982:   ** expr.c is trying to resolve a reference to a transient table (i.e. one
93983:   ** created by a sub-select). In this case the return value of this 
93984:   ** function should never be used.
93985:   **
93986:   ** We return -1000000 instead of the more usual -1 simply because using
93987:   ** -1000000 as the incorrect index into db->aDb[] is much 
93988:   ** more likely to cause a segfault than -1 (of course there are assert()
93989:   ** statements too, but it never hurts to play the odds).
93990:   */
93991:   assert( sqlite3_mutex_held(db->mutex) );
93992:   if( pSchema ){
93993:     for(i=0; ALWAYS(i<db->nDb); i++){
93994:       if( db->aDb[i].pSchema==pSchema ){
93995:         break;
93996:       }
93997:     }
93998:     assert( i>=0 && i<db->nDb );
93999:   }
94000:   return i;
94001: }
94002: 
94003: /*
94004: ** Compile the UTF-8 encoded SQL statement zSql into a statement handle.
94005: */
94006: static int sqlite3Prepare(
94007:   sqlite3 *db,              /* Database handle. */
94008:   const char *zSql,         /* UTF-8 encoded SQL statement. */
94009:   int nBytes,               /* Length of zSql in bytes. */
94010:   int saveSqlFlag,          /* True to copy SQL text into the sqlite3_stmt */
94011:   Vdbe *pReprepare,         /* VM being reprepared */
94012:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
94013:   const char **pzTail       /* OUT: End of parsed string */
94014: ){
94015:   Parse *pParse;            /* Parsing context */
94016:   char *zErrMsg = 0;        /* Error message */
94017:   int rc = SQLITE_OK;       /* Result code */
94018:   int i;                    /* Loop counter */
94019: 
94020:   /* Allocate the parsing context */
94021:   pParse = sqlite3StackAllocZero(db, sizeof(*pParse));
94022:   if( pParse==0 ){
94023:     rc = SQLITE_NOMEM;
94024:     goto end_prepare;
94025:   }
94026:   pParse->pReprepare = pReprepare;
94027:   assert( ppStmt && *ppStmt==0 );
94028:   assert( !db->mallocFailed );
94029:   assert( sqlite3_mutex_held(db->mutex) );
94030: 
94031:   /* Check to verify that it is possible to get a read lock on all
94032:   ** database schemas.  The inability to get a read lock indicates that
94033:   ** some other database connection is holding a write-lock, which in
94034:   ** turn means that the other connection has made uncommitted changes
94035:   ** to the schema.
94036:   **
94037:   ** Were we to proceed and prepare the statement against the uncommitted
94038:   ** schema changes and if those schema changes are subsequently rolled
94039:   ** back and different changes are made in their place, then when this
94040:   ** prepared statement goes to run the schema cookie would fail to detect
94041:   ** the schema change.  Disaster would follow.
94042:   **
94043:   ** This thread is currently holding mutexes on all Btrees (because
94044:   ** of the sqlite3BtreeEnterAll() in sqlite3LockAndPrepare()) so it
94045:   ** is not possible for another thread to start a new schema change
94046:   ** while this routine is running.  Hence, we do not need to hold 
94047:   ** locks on the schema, we just need to make sure nobody else is 
94048:   ** holding them.
94049:   **
94050:   ** Note that setting READ_UNCOMMITTED overrides most lock detection,
94051:   ** but it does *not* override schema lock detection, so this all still
94052:   ** works even if READ_UNCOMMITTED is set.
94053:   */
94054:   for(i=0; i<db->nDb; i++) {
94055:     Btree *pBt = db->aDb[i].pBt;
94056:     if( pBt ){
94057:       assert( sqlite3BtreeHoldsMutex(pBt) );
94058:       rc = sqlite3BtreeSchemaLocked(pBt);
94059:       if( rc ){
94060:         const char *zDb = db->aDb[i].zName;
94061:         sqlite3Error(db, rc, "database schema is locked: %s", zDb);
94062:         testcase( db->flags & SQLITE_ReadUncommitted );
94063:         goto end_prepare;
94064:       }
94065:     }
94066:   }
94067: 
94068:   sqlite3VtabUnlockList(db);
94069: 
94070:   pParse->db = db;
94071:   pParse->nQueryLoop = (double)1;
94072:   if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){
94073:     char *zSqlCopy;
94074:     int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
94075:     testcase( nBytes==mxLen );
94076:     testcase( nBytes==mxLen+1 );
94077:     if( nBytes>mxLen ){
94078:       sqlite3Error(db, SQLITE_TOOBIG, "statement too long");
94079:       rc = sqlite3ApiExit(db, SQLITE_TOOBIG);
94080:       goto end_prepare;
94081:     }
94082:     zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes);
94083:     if( zSqlCopy ){
94084:       sqlite3RunParser(pParse, zSqlCopy, &zErrMsg);
94085:       sqlite3DbFree(db, zSqlCopy);
94086:       pParse->zTail = &zSql[pParse->zTail-zSqlCopy];
94087:     }else{
94088:       pParse->zTail = &zSql[nBytes];
94089:     }
94090:   }else{
94091:     sqlite3RunParser(pParse, zSql, &zErrMsg);
94092:   }
94093:   assert( 1==(int)pParse->nQueryLoop );
94094: 
94095:   if( db->mallocFailed ){
94096:     pParse->rc = SQLITE_NOMEM;
94097:   }
94098:   if( pParse->rc==SQLITE_DONE ) pParse->rc = SQLITE_OK;
94099:   if( pParse->checkSchema ){
94100:     schemaIsValid(pParse);
94101:   }
94102:   if( db->mallocFailed ){
94103:     pParse->rc = SQLITE_NOMEM;
94104:   }
94105:   if( pzTail ){
94106:     *pzTail = pParse->zTail;
94107:   }
94108:   rc = pParse->rc;
94109: 
94110: #ifndef SQLITE_OMIT_EXPLAIN
94111:   if( rc==SQLITE_OK && pParse->pVdbe && pParse->explain ){
94112:     static const char * const azColName[] = {
94113:        "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment",
94114:        "selectid", "order", "from", "detail"
94115:     };
94116:     int iFirst, mx;
94117:     if( pParse->explain==2 ){
94118:       sqlite3VdbeSetNumCols(pParse->pVdbe, 4);
94119:       iFirst = 8;
94120:       mx = 12;
94121:     }else{
94122:       sqlite3VdbeSetNumCols(pParse->pVdbe, 8);
94123:       iFirst = 0;
94124:       mx = 8;
94125:     }
94126:     for(i=iFirst; i<mx; i++){
94127:       sqlite3VdbeSetColName(pParse->pVdbe, i-iFirst, COLNAME_NAME,
94128:                             azColName[i], SQLITE_STATIC);
94129:     }
94130:   }
94131: #endif
94132: 
94133:   assert( db->init.busy==0 || saveSqlFlag==0 );
94134:   if( db->init.busy==0 ){
94135:     Vdbe *pVdbe = pParse->pVdbe;
94136:     sqlite3VdbeSetSql(pVdbe, zSql, (int)(pParse->zTail-zSql), saveSqlFlag);
94137:   }
94138:   if( pParse->pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){
94139:     sqlite3VdbeFinalize(pParse->pVdbe);
94140:     assert(!(*ppStmt));
94141:   }else{
94142:     *ppStmt = (sqlite3_stmt*)pParse->pVdbe;
94143:   }
94144: 
94145:   if( zErrMsg ){
94146:     sqlite3Error(db, rc, "%s", zErrMsg);
94147:     sqlite3DbFree(db, zErrMsg);
94148:   }else{
94149:     sqlite3Error(db, rc, 0);
94150:   }
94151: 
94152:   /* Delete any TriggerPrg structures allocated while parsing this statement. */
94153:   while( pParse->pTriggerPrg ){
94154:     TriggerPrg *pT = pParse->pTriggerPrg;
94155:     pParse->pTriggerPrg = pT->pNext;
94156:     sqlite3DbFree(db, pT);
94157:   }
94158: 
94159: end_prepare:
94160: 
94161:   sqlite3StackFree(db, pParse);
94162:   rc = sqlite3ApiExit(db, rc);
94163:   assert( (rc&db->errMask)==rc );
94164:   return rc;
94165: }
94166: static int sqlite3LockAndPrepare(
94167:   sqlite3 *db,              /* Database handle. */
94168:   const char *zSql,         /* UTF-8 encoded SQL statement. */
94169:   int nBytes,               /* Length of zSql in bytes. */
94170:   int saveSqlFlag,          /* True to copy SQL text into the sqlite3_stmt */
94171:   Vdbe *pOld,               /* VM being reprepared */
94172:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
94173:   const char **pzTail       /* OUT: End of parsed string */
94174: ){
94175:   int rc;
94176:   assert( ppStmt!=0 );
94177:   *ppStmt = 0;
94178:   if( !sqlite3SafetyCheckOk(db) ){
94179:     return SQLITE_MISUSE_BKPT;
94180:   }
94181:   sqlite3_mutex_enter(db->mutex);
94182:   sqlite3BtreeEnterAll(db);
94183:   rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
94184:   if( rc==SQLITE_SCHEMA ){
94185:     sqlite3_finalize(*ppStmt);
94186:     rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
94187:   }
94188:   sqlite3BtreeLeaveAll(db);
94189:   sqlite3_mutex_leave(db->mutex);
94190:   return rc;
94191: }
94192: 
94193: /*
94194: ** Rerun the compilation of a statement after a schema change.
94195: **
94196: ** If the statement is successfully recompiled, return SQLITE_OK. Otherwise,
94197: ** if the statement cannot be recompiled because another connection has
94198: ** locked the sqlite3_master table, return SQLITE_LOCKED. If any other error
94199: ** occurs, return SQLITE_SCHEMA.
94200: */
94201: SQLITE_PRIVATE int sqlite3Reprepare(Vdbe *p){
94202:   int rc;
94203:   sqlite3_stmt *pNew;
94204:   const char *zSql;
94205:   sqlite3 *db;
94206: 
94207:   assert( sqlite3_mutex_held(sqlite3VdbeDb(p)->mutex) );
94208:   zSql = sqlite3_sql((sqlite3_stmt *)p);
94209:   assert( zSql!=0 );  /* Reprepare only called for prepare_v2() statements */
94210:   db = sqlite3VdbeDb(p);
94211:   assert( sqlite3_mutex_held(db->mutex) );
94212:   rc = sqlite3LockAndPrepare(db, zSql, -1, 0, p, &pNew, 0);
94213:   if( rc ){
94214:     if( rc==SQLITE_NOMEM ){
94215:       db->mallocFailed = 1;
94216:     }
94217:     assert( pNew==0 );
94218:     return rc;
94219:   }else{
94220:     assert( pNew!=0 );
94221:   }
94222:   sqlite3VdbeSwap((Vdbe*)pNew, p);
94223:   sqlite3TransferBindings(pNew, (sqlite3_stmt*)p);
94224:   sqlite3VdbeResetStepResult((Vdbe*)pNew);
94225:   sqlite3VdbeFinalize((Vdbe*)pNew);
94226:   return SQLITE_OK;
94227: }
94228: 
94229: 
94230: /*
94231: ** Two versions of the official API.  Legacy and new use.  In the legacy
94232: ** version, the original SQL text is not saved in the prepared statement
94233: ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
94234: ** sqlite3_step().  In the new version, the original SQL text is retained
94235: ** and the statement is automatically recompiled if an schema change
94236: ** occurs.
94237: */
94238: SQLITE_API int sqlite3_prepare(
94239:   sqlite3 *db,              /* Database handle. */
94240:   const char *zSql,         /* UTF-8 encoded SQL statement. */
94241:   int nBytes,               /* Length of zSql in bytes. */
94242:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
94243:   const char **pzTail       /* OUT: End of parsed string */
94244: ){
94245:   int rc;
94246:   rc = sqlite3LockAndPrepare(db,zSql,nBytes,0,0,ppStmt,pzTail);
94247:   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
94248:   return rc;
94249: }
94250: SQLITE_API int sqlite3_prepare_v2(
94251:   sqlite3 *db,              /* Database handle. */
94252:   const char *zSql,         /* UTF-8 encoded SQL statement. */
94253:   int nBytes,               /* Length of zSql in bytes. */
94254:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
94255:   const char **pzTail       /* OUT: End of parsed string */
94256: ){
94257:   int rc;
94258:   rc = sqlite3LockAndPrepare(db,zSql,nBytes,1,0,ppStmt,pzTail);
94259:   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
94260:   return rc;
94261: }
94262: 
94263: 
94264: #ifndef SQLITE_OMIT_UTF16
94265: /*
94266: ** Compile the UTF-16 encoded SQL statement zSql into a statement handle.
94267: */
94268: static int sqlite3Prepare16(
94269:   sqlite3 *db,              /* Database handle. */ 
94270:   const void *zSql,         /* UTF-16 encoded SQL statement. */
94271:   int nBytes,               /* Length of zSql in bytes. */
94272:   int saveSqlFlag,          /* True to save SQL text into the sqlite3_stmt */
94273:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
94274:   const void **pzTail       /* OUT: End of parsed string */
94275: ){
94276:   /* This function currently works by first transforming the UTF-16
94277:   ** encoded string to UTF-8, then invoking sqlite3_prepare(). The
94278:   ** tricky bit is figuring out the pointer to return in *pzTail.
94279:   */
94280:   char *zSql8;
94281:   const char *zTail8 = 0;
94282:   int rc = SQLITE_OK;
94283: 
94284:   assert( ppStmt );
94285:   *ppStmt = 0;
94286:   if( !sqlite3SafetyCheckOk(db) ){
94287:     return SQLITE_MISUSE_BKPT;
94288:   }
94289:   sqlite3_mutex_enter(db->mutex);
94290:   zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE);
94291:   if( zSql8 ){
94292:     rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, 0, ppStmt, &zTail8);
94293:   }
94294: 
94295:   if( zTail8 && pzTail ){
94296:     /* If sqlite3_prepare returns a tail pointer, we calculate the
94297:     ** equivalent pointer into the UTF-16 string by counting the unicode
94298:     ** characters between zSql8 and zTail8, and then returning a pointer
94299:     ** the same number of characters into the UTF-16 string.
94300:     */
94301:     int chars_parsed = sqlite3Utf8CharLen(zSql8, (int)(zTail8-zSql8));
94302:     *pzTail = (u8 *)zSql + sqlite3Utf16ByteLen(zSql, chars_parsed);
94303:   }
94304:   sqlite3DbFree(db, zSql8); 
94305:   rc = sqlite3ApiExit(db, rc);
94306:   sqlite3_mutex_leave(db->mutex);
94307:   return rc;
94308: }
94309: 
94310: /*
94311: ** Two versions of the official API.  Legacy and new use.  In the legacy
94312: ** version, the original SQL text is not saved in the prepared statement
94313: ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
94314: ** sqlite3_step().  In the new version, the original SQL text is retained
94315: ** and the statement is automatically recompiled if an schema change
94316: ** occurs.
94317: */
94318: SQLITE_API int sqlite3_prepare16(
94319:   sqlite3 *db,              /* Database handle. */ 
94320:   const void *zSql,         /* UTF-16 encoded SQL statement. */
94321:   int nBytes,               /* Length of zSql in bytes. */
94322:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
94323:   const void **pzTail       /* OUT: End of parsed string */
94324: ){
94325:   int rc;
94326:   rc = sqlite3Prepare16(db,zSql,nBytes,0,ppStmt,pzTail);
94327:   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
94328:   return rc;
94329: }
94330: SQLITE_API int sqlite3_prepare16_v2(
94331:   sqlite3 *db,              /* Database handle. */ 
94332:   const void *zSql,         /* UTF-16 encoded SQL statement. */
94333:   int nBytes,               /* Length of zSql in bytes. */
94334:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
94335:   const void **pzTail       /* OUT: End of parsed string */
94336: ){
94337:   int rc;
94338:   rc = sqlite3Prepare16(db,zSql,nBytes,1,ppStmt,pzTail);
94339:   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
94340:   return rc;
94341: }
94342: 
94343: #endif /* SQLITE_OMIT_UTF16 */
94344: 
94345: /************** End of prepare.c *********************************************/
94346: /************** Begin file select.c ******************************************/
94347: /*
94348: ** 2001 September 15
94349: **
94350: ** The author disclaims copyright to this source code.  In place of
94351: ** a legal notice, here is a blessing:
94352: **
94353: **    May you do good and not evil.
94354: **    May you find forgiveness for yourself and forgive others.
94355: **    May you share freely, never taking more than you give.
94356: **
94357: *************************************************************************
94358: ** This file contains C code routines that are called by the parser
94359: ** to handle SELECT statements in SQLite.
94360: */
94361: 
94362: 
94363: /*
94364: ** Delete all the content of a Select structure but do not deallocate
94365: ** the select structure itself.
94366: */
94367: static void clearSelect(sqlite3 *db, Select *p){
94368:   sqlite3ExprListDelete(db, p->pEList);
94369:   sqlite3SrcListDelete(db, p->pSrc);
94370:   sqlite3ExprDelete(db, p->pWhere);
94371:   sqlite3ExprListDelete(db, p->pGroupBy);
94372:   sqlite3ExprDelete(db, p->pHaving);
94373:   sqlite3ExprListDelete(db, p->pOrderBy);
94374:   sqlite3SelectDelete(db, p->pPrior);
94375:   sqlite3ExprDelete(db, p->pLimit);
94376:   sqlite3ExprDelete(db, p->pOffset);
94377: }
94378: 
94379: /*
94380: ** Initialize a SelectDest structure.
94381: */
94382: SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){
94383:   pDest->eDest = (u8)eDest;
94384:   pDest->iParm = iParm;
94385:   pDest->affinity = 0;
94386:   pDest->iMem = 0;
94387:   pDest->nMem = 0;
94388: }
94389: 
94390: 
94391: /*
94392: ** Allocate a new Select structure and return a pointer to that
94393: ** structure.
94394: */
94395: SQLITE_PRIVATE Select *sqlite3SelectNew(
94396:   Parse *pParse,        /* Parsing context */
94397:   ExprList *pEList,     /* which columns to include in the result */
94398:   SrcList *pSrc,        /* the FROM clause -- which tables to scan */
94399:   Expr *pWhere,         /* the WHERE clause */
94400:   ExprList *pGroupBy,   /* the GROUP BY clause */
94401:   Expr *pHaving,        /* the HAVING clause */
94402:   ExprList *pOrderBy,   /* the ORDER BY clause */
94403:   int isDistinct,       /* true if the DISTINCT keyword is present */
94404:   Expr *pLimit,         /* LIMIT value.  NULL means not used */
94405:   Expr *pOffset         /* OFFSET value.  NULL means no offset */
94406: ){
94407:   Select *pNew;
94408:   Select standin;
94409:   sqlite3 *db = pParse->db;
94410:   pNew = sqlite3DbMallocZero(db, sizeof(*pNew) );
94411:   assert( db->mallocFailed || !pOffset || pLimit ); /* OFFSET implies LIMIT */
94412:   if( pNew==0 ){
94413:     assert( db->mallocFailed );
94414:     pNew = &standin;
94415:     memset(pNew, 0, sizeof(*pNew));
94416:   }
94417:   if( pEList==0 ){
94418:     pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ALL,0));
94419:   }
94420:   pNew->pEList = pEList;
94421:   pNew->pSrc = pSrc;
94422:   pNew->pWhere = pWhere;
94423:   pNew->pGroupBy = pGroupBy;
94424:   pNew->pHaving = pHaving;
94425:   pNew->pOrderBy = pOrderBy;
94426:   pNew->selFlags = isDistinct ? SF_Distinct : 0;
94427:   pNew->op = TK_SELECT;
94428:   pNew->pLimit = pLimit;
94429:   pNew->pOffset = pOffset;
94430:   assert( pOffset==0 || pLimit!=0 );
94431:   pNew->addrOpenEphm[0] = -1;
94432:   pNew->addrOpenEphm[1] = -1;
94433:   pNew->addrOpenEphm[2] = -1;
94434:   if( db->mallocFailed ) {
94435:     clearSelect(db, pNew);
94436:     if( pNew!=&standin ) sqlite3DbFree(db, pNew);
94437:     pNew = 0;
94438:   }else{
94439:     assert( pNew->pSrc!=0 || pParse->nErr>0 );
94440:   }
94441:   assert( pNew!=&standin );
94442:   return pNew;
94443: }
94444: 
94445: /*
94446: ** Delete the given Select structure and all of its substructures.
94447: */
94448: SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){
94449:   if( p ){
94450:     clearSelect(db, p);
94451:     sqlite3DbFree(db, p);
94452:   }
94453: }
94454: 
94455: /*
94456: ** Given 1 to 3 identifiers preceeding the JOIN keyword, determine the
94457: ** type of join.  Return an integer constant that expresses that type
94458: ** in terms of the following bit values:
94459: **
94460: **     JT_INNER
94461: **     JT_CROSS
94462: **     JT_OUTER
94463: **     JT_NATURAL
94464: **     JT_LEFT
94465: **     JT_RIGHT
94466: **
94467: ** A full outer join is the combination of JT_LEFT and JT_RIGHT.
94468: **
94469: ** If an illegal or unsupported join type is seen, then still return
94470: ** a join type, but put an error in the pParse structure.
94471: */
94472: SQLITE_PRIVATE int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){
94473:   int jointype = 0;
94474:   Token *apAll[3];
94475:   Token *p;
94476:                              /*   0123456789 123456789 123456789 123 */
94477:   static const char zKeyText[] = "naturaleftouterightfullinnercross";
94478:   static const struct {
94479:     u8 i;        /* Beginning of keyword text in zKeyText[] */
94480:     u8 nChar;    /* Length of the keyword in characters */
94481:     u8 code;     /* Join type mask */
94482:   } aKeyword[] = {
94483:     /* natural */ { 0,  7, JT_NATURAL                },
94484:     /* left    */ { 6,  4, JT_LEFT|JT_OUTER          },
94485:     /* outer   */ { 10, 5, JT_OUTER                  },
94486:     /* right   */ { 14, 5, JT_RIGHT|JT_OUTER         },
94487:     /* full    */ { 19, 4, JT_LEFT|JT_RIGHT|JT_OUTER },
94488:     /* inner   */ { 23, 5, JT_INNER                  },
94489:     /* cross   */ { 28, 5, JT_INNER|JT_CROSS         },
94490:   };
94491:   int i, j;
94492:   apAll[0] = pA;
94493:   apAll[1] = pB;
94494:   apAll[2] = pC;
94495:   for(i=0; i<3 && apAll[i]; i++){
94496:     p = apAll[i];
94497:     for(j=0; j<ArraySize(aKeyword); j++){
94498:       if( p->n==aKeyword[j].nChar 
94499:           && sqlite3StrNICmp((char*)p->z, &zKeyText[aKeyword[j].i], p->n)==0 ){
94500:         jointype |= aKeyword[j].code;
94501:         break;
94502:       }
94503:     }
94504:     testcase( j==0 || j==1 || j==2 || j==3 || j==4 || j==5 || j==6 );
94505:     if( j>=ArraySize(aKeyword) ){
94506:       jointype |= JT_ERROR;
94507:       break;
94508:     }
94509:   }
94510:   if(
94511:      (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) ||
94512:      (jointype & JT_ERROR)!=0
94513:   ){
94514:     const char *zSp = " ";
94515:     assert( pB!=0 );
94516:     if( pC==0 ){ zSp++; }
94517:     sqlite3ErrorMsg(pParse, "unknown or unsupported join type: "
94518:        "%T %T%s%T", pA, pB, zSp, pC);
94519:     jointype = JT_INNER;
94520:   }else if( (jointype & JT_OUTER)!=0 
94521:          && (jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ){
94522:     sqlite3ErrorMsg(pParse, 
94523:       "RIGHT and FULL OUTER JOINs are not currently supported");
94524:     jointype = JT_INNER;
94525:   }
94526:   return jointype;
94527: }
94528: 
94529: /*
94530: ** Return the index of a column in a table.  Return -1 if the column
94531: ** is not contained in the table.
94532: */
94533: static int columnIndex(Table *pTab, const char *zCol){
94534:   int i;
94535:   for(i=0; i<pTab->nCol; i++){
94536:     if( sqlite3StrICmp(pTab->aCol[i].zName, zCol)==0 ) return i;
94537:   }
94538:   return -1;
94539: }
94540: 
94541: /*
94542: ** Search the first N tables in pSrc, from left to right, looking for a
94543: ** table that has a column named zCol.  
94544: **
94545: ** When found, set *piTab and *piCol to the table index and column index
94546: ** of the matching column and return TRUE.
94547: **
94548: ** If not found, return FALSE.
94549: */
94550: static int tableAndColumnIndex(
94551:   SrcList *pSrc,       /* Array of tables to search */
94552:   int N,               /* Number of tables in pSrc->a[] to search */
94553:   const char *zCol,    /* Name of the column we are looking for */
94554:   int *piTab,          /* Write index of pSrc->a[] here */
94555:   int *piCol           /* Write index of pSrc->a[*piTab].pTab->aCol[] here */
94556: ){
94557:   int i;               /* For looping over tables in pSrc */
94558:   int iCol;            /* Index of column matching zCol */
94559: 
94560:   assert( (piTab==0)==(piCol==0) );  /* Both or neither are NULL */
94561:   for(i=0; i<N; i++){
94562:     iCol = columnIndex(pSrc->a[i].pTab, zCol);
94563:     if( iCol>=0 ){
94564:       if( piTab ){
94565:         *piTab = i;
94566:         *piCol = iCol;
94567:       }
94568:       return 1;
94569:     }
94570:   }
94571:   return 0;
94572: }
94573: 
94574: /*
94575: ** This function is used to add terms implied by JOIN syntax to the
94576: ** WHERE clause expression of a SELECT statement. The new term, which
94577: ** is ANDed with the existing WHERE clause, is of the form:
94578: **
94579: **    (tab1.col1 = tab2.col2)
94580: **
94581: ** where tab1 is the iSrc'th table in SrcList pSrc and tab2 is the 
94582: ** (iSrc+1)'th. Column col1 is column iColLeft of tab1, and col2 is
94583: ** column iColRight of tab2.
94584: */
94585: static void addWhereTerm(
94586:   Parse *pParse,                  /* Parsing context */
94587:   SrcList *pSrc,                  /* List of tables in FROM clause */
94588:   int iLeft,                      /* Index of first table to join in pSrc */
94589:   int iColLeft,                   /* Index of column in first table */
94590:   int iRight,                     /* Index of second table in pSrc */
94591:   int iColRight,                  /* Index of column in second table */
94592:   int isOuterJoin,                /* True if this is an OUTER join */
94593:   Expr **ppWhere                  /* IN/OUT: The WHERE clause to add to */
94594: ){
94595:   sqlite3 *db = pParse->db;
94596:   Expr *pE1;
94597:   Expr *pE2;
94598:   Expr *pEq;
94599: 
94600:   assert( iLeft<iRight );
94601:   assert( pSrc->nSrc>iRight );
94602:   assert( pSrc->a[iLeft].pTab );
94603:   assert( pSrc->a[iRight].pTab );
94604: 
94605:   pE1 = sqlite3CreateColumnExpr(db, pSrc, iLeft, iColLeft);
94606:   pE2 = sqlite3CreateColumnExpr(db, pSrc, iRight, iColRight);
94607: 
94608:   pEq = sqlite3PExpr(pParse, TK_EQ, pE1, pE2, 0);
94609:   if( pEq && isOuterJoin ){
94610:     ExprSetProperty(pEq, EP_FromJoin);
94611:     assert( !ExprHasAnyProperty(pEq, EP_TokenOnly|EP_Reduced) );
94612:     ExprSetIrreducible(pEq);
94613:     pEq->iRightJoinTable = (i16)pE2->iTable;
94614:   }
94615:   *ppWhere = sqlite3ExprAnd(db, *ppWhere, pEq);
94616: }
94617: 
94618: /*
94619: ** Set the EP_FromJoin property on all terms of the given expression.
94620: ** And set the Expr.iRightJoinTable to iTable for every term in the
94621: ** expression.
94622: **
94623: ** The EP_FromJoin property is used on terms of an expression to tell
94624: ** the LEFT OUTER JOIN processing logic that this term is part of the
94625: ** join restriction specified in the ON or USING clause and not a part
94626: ** of the more general WHERE clause.  These terms are moved over to the
94627: ** WHERE clause during join processing but we need to remember that they
94628: ** originated in the ON or USING clause.
94629: **
94630: ** The Expr.iRightJoinTable tells the WHERE clause processing that the
94631: ** expression depends on table iRightJoinTable even if that table is not
94632: ** explicitly mentioned in the expression.  That information is needed
94633: ** for cases like this:
94634: **
94635: **    SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5
94636: **
94637: ** The where clause needs to defer the handling of the t1.x=5
94638: ** term until after the t2 loop of the join.  In that way, a
94639: ** NULL t2 row will be inserted whenever t1.x!=5.  If we do not
94640: ** defer the handling of t1.x=5, it will be processed immediately
94641: ** after the t1 loop and rows with t1.x!=5 will never appear in
94642: ** the output, which is incorrect.
94643: */
94644: static void setJoinExpr(Expr *p, int iTable){
94645:   while( p ){
94646:     ExprSetProperty(p, EP_FromJoin);
94647:     assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) );
94648:     ExprSetIrreducible(p);
94649:     p->iRightJoinTable = (i16)iTable;
94650:     setJoinExpr(p->pLeft, iTable);
94651:     p = p->pRight;
94652:   } 
94653: }
94654: 
94655: /*
94656: ** This routine processes the join information for a SELECT statement.
94657: ** ON and USING clauses are converted into extra terms of the WHERE clause.
94658: ** NATURAL joins also create extra WHERE clause terms.
94659: **
94660: ** The terms of a FROM clause are contained in the Select.pSrc structure.
94661: ** The left most table is the first entry in Select.pSrc.  The right-most
94662: ** table is the last entry.  The join operator is held in the entry to
94663: ** the left.  Thus entry 0 contains the join operator for the join between
94664: ** entries 0 and 1.  Any ON or USING clauses associated with the join are
94665: ** also attached to the left entry.
94666: **
94667: ** This routine returns the number of errors encountered.
94668: */
94669: static int sqliteProcessJoin(Parse *pParse, Select *p){
94670:   SrcList *pSrc;                  /* All tables in the FROM clause */
94671:   int i, j;                       /* Loop counters */
94672:   struct SrcList_item *pLeft;     /* Left table being joined */
94673:   struct SrcList_item *pRight;    /* Right table being joined */
94674: 
94675:   pSrc = p->pSrc;
94676:   pLeft = &pSrc->a[0];
94677:   pRight = &pLeft[1];
94678:   for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){
94679:     Table *pLeftTab = pLeft->pTab;
94680:     Table *pRightTab = pRight->pTab;
94681:     int isOuter;
94682: 
94683:     if( NEVER(pLeftTab==0 || pRightTab==0) ) continue;
94684:     isOuter = (pRight->jointype & JT_OUTER)!=0;
94685: 
94686:     /* When the NATURAL keyword is present, add WHERE clause terms for
94687:     ** every column that the two tables have in common.
94688:     */
94689:     if( pRight->jointype & JT_NATURAL ){
94690:       if( pRight->pOn || pRight->pUsing ){
94691:         sqlite3ErrorMsg(pParse, "a NATURAL join may not have "
94692:            "an ON or USING clause", 0);
94693:         return 1;
94694:       }
94695:       for(j=0; j<pRightTab->nCol; j++){
94696:         char *zName;   /* Name of column in the right table */
94697:         int iLeft;     /* Matching left table */
94698:         int iLeftCol;  /* Matching column in the left table */
94699: 
94700:         zName = pRightTab->aCol[j].zName;
94701:         if( tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol) ){
94702:           addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, j,
94703:                        isOuter, &p->pWhere);
94704:         }
94705:       }
94706:     }
94707: 
94708:     /* Disallow both ON and USING clauses in the same join
94709:     */
94710:     if( pRight->pOn && pRight->pUsing ){
94711:       sqlite3ErrorMsg(pParse, "cannot have both ON and USING "
94712:         "clauses in the same join");
94713:       return 1;
94714:     }
94715: 
94716:     /* Add the ON clause to the end of the WHERE clause, connected by
94717:     ** an AND operator.
94718:     */
94719:     if( pRight->pOn ){
94720:       if( isOuter ) setJoinExpr(pRight->pOn, pRight->iCursor);
94721:       p->pWhere = sqlite3ExprAnd(pParse->db, p->pWhere, pRight->pOn);
94722:       pRight->pOn = 0;
94723:     }
94724: 
94725:     /* Create extra terms on the WHERE clause for each column named
94726:     ** in the USING clause.  Example: If the two tables to be joined are 
94727:     ** A and B and the USING clause names X, Y, and Z, then add this
94728:     ** to the WHERE clause:    A.X=B.X AND A.Y=B.Y AND A.Z=B.Z
94729:     ** Report an error if any column mentioned in the USING clause is
94730:     ** not contained in both tables to be joined.
94731:     */
94732:     if( pRight->pUsing ){
94733:       IdList *pList = pRight->pUsing;
94734:       for(j=0; j<pList->nId; j++){
94735:         char *zName;     /* Name of the term in the USING clause */
94736:         int iLeft;       /* Table on the left with matching column name */
94737:         int iLeftCol;    /* Column number of matching column on the left */
94738:         int iRightCol;   /* Column number of matching column on the right */
94739: 
94740:         zName = pList->a[j].zName;
94741:         iRightCol = columnIndex(pRightTab, zName);
94742:         if( iRightCol<0
94743:          || !tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol)
94744:         ){
94745:           sqlite3ErrorMsg(pParse, "cannot join using column %s - column "
94746:             "not present in both tables", zName);
94747:           return 1;
94748:         }
94749:         addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, iRightCol,
94750:                      isOuter, &p->pWhere);
94751:       }
94752:     }
94753:   }
94754:   return 0;
94755: }
94756: 
94757: /*
94758: ** Insert code into "v" that will push the record on the top of the
94759: ** stack into the sorter.
94760: */
94761: static void pushOntoSorter(
94762:   Parse *pParse,         /* Parser context */
94763:   ExprList *pOrderBy,    /* The ORDER BY clause */
94764:   Select *pSelect,       /* The whole SELECT statement */
94765:   int regData            /* Register holding data to be sorted */
94766: ){
94767:   Vdbe *v = pParse->pVdbe;
94768:   int nExpr = pOrderBy->nExpr;
94769:   int regBase = sqlite3GetTempRange(pParse, nExpr+2);
94770:   int regRecord = sqlite3GetTempReg(pParse);
94771:   int op;
94772:   sqlite3ExprCacheClear(pParse);
94773:   sqlite3ExprCodeExprList(pParse, pOrderBy, regBase, 0);
94774:   sqlite3VdbeAddOp2(v, OP_Sequence, pOrderBy->iECursor, regBase+nExpr);
94775:   sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+1, 1);
94776:   sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nExpr + 2, regRecord);
94777:   if( pSelect->selFlags & SF_UseSorter ){
94778:     op = OP_SorterInsert;
94779:   }else{
94780:     op = OP_IdxInsert;
94781:   }
94782:   sqlite3VdbeAddOp2(v, op, pOrderBy->iECursor, regRecord);
94783:   sqlite3ReleaseTempReg(pParse, regRecord);
94784:   sqlite3ReleaseTempRange(pParse, regBase, nExpr+2);
94785:   if( pSelect->iLimit ){
94786:     int addr1, addr2;
94787:     int iLimit;
94788:     if( pSelect->iOffset ){
94789:       iLimit = pSelect->iOffset+1;
94790:     }else{
94791:       iLimit = pSelect->iLimit;
94792:     }
94793:     addr1 = sqlite3VdbeAddOp1(v, OP_IfZero, iLimit);
94794:     sqlite3VdbeAddOp2(v, OP_AddImm, iLimit, -1);
94795:     addr2 = sqlite3VdbeAddOp0(v, OP_Goto);
94796:     sqlite3VdbeJumpHere(v, addr1);
94797:     sqlite3VdbeAddOp1(v, OP_Last, pOrderBy->iECursor);
94798:     sqlite3VdbeAddOp1(v, OP_Delete, pOrderBy->iECursor);
94799:     sqlite3VdbeJumpHere(v, addr2);
94800:   }
94801: }
94802: 
94803: /*
94804: ** Add code to implement the OFFSET
94805: */
94806: static void codeOffset(
94807:   Vdbe *v,          /* Generate code into this VM */
94808:   Select *p,        /* The SELECT statement being coded */
94809:   int iContinue     /* Jump here to skip the current record */
94810: ){
94811:   if( p->iOffset && iContinue!=0 ){
94812:     int addr;
94813:     sqlite3VdbeAddOp2(v, OP_AddImm, p->iOffset, -1);
94814:     addr = sqlite3VdbeAddOp1(v, OP_IfNeg, p->iOffset);
94815:     sqlite3VdbeAddOp2(v, OP_Goto, 0, iContinue);
94816:     VdbeComment((v, "skip OFFSET records"));
94817:     sqlite3VdbeJumpHere(v, addr);
94818:   }
94819: }
94820: 
94821: /*
94822: ** Add code that will check to make sure the N registers starting at iMem
94823: ** form a distinct entry.  iTab is a sorting index that holds previously
94824: ** seen combinations of the N values.  A new entry is made in iTab
94825: ** if the current N values are new.
94826: **
94827: ** A jump to addrRepeat is made and the N+1 values are popped from the
94828: ** stack if the top N elements are not distinct.
94829: */
94830: static void codeDistinct(
94831:   Parse *pParse,     /* Parsing and code generating context */
94832:   int iTab,          /* A sorting index used to test for distinctness */
94833:   int addrRepeat,    /* Jump to here if not distinct */
94834:   int N,             /* Number of elements */
94835:   int iMem           /* First element */
94836: ){
94837:   Vdbe *v;
94838:   int r1;
94839: 
94840:   v = pParse->pVdbe;
94841:   r1 = sqlite3GetTempReg(pParse);
94842:   sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, iMem, N);
94843:   sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1);
94844:   sqlite3VdbeAddOp2(v, OP_IdxInsert, iTab, r1);
94845:   sqlite3ReleaseTempReg(pParse, r1);
94846: }
94847: 
94848: #ifndef SQLITE_OMIT_SUBQUERY
94849: /*
94850: ** Generate an error message when a SELECT is used within a subexpression
94851: ** (example:  "a IN (SELECT * FROM table)") but it has more than 1 result
94852: ** column.  We do this in a subroutine because the error used to occur
94853: ** in multiple places.  (The error only occurs in one place now, but we
94854: ** retain the subroutine to minimize code disruption.)
94855: */
94856: static int checkForMultiColumnSelectError(
94857:   Parse *pParse,       /* Parse context. */
94858:   SelectDest *pDest,   /* Destination of SELECT results */
94859:   int nExpr            /* Number of result columns returned by SELECT */
94860: ){
94861:   int eDest = pDest->eDest;
94862:   if( nExpr>1 && (eDest==SRT_Mem || eDest==SRT_Set) ){
94863:     sqlite3ErrorMsg(pParse, "only a single result allowed for "
94864:        "a SELECT that is part of an expression");
94865:     return 1;
94866:   }else{
94867:     return 0;
94868:   }
94869: }
94870: #endif
94871: 
94872: /*
94873: ** This routine generates the code for the inside of the inner loop
94874: ** of a SELECT.
94875: **
94876: ** If srcTab and nColumn are both zero, then the pEList expressions
94877: ** are evaluated in order to get the data for this row.  If nColumn>0
94878: ** then data is pulled from srcTab and pEList is used only to get the
94879: ** datatypes for each column.
94880: */
94881: static void selectInnerLoop(
94882:   Parse *pParse,          /* The parser context */
94883:   Select *p,              /* The complete select statement being coded */
94884:   ExprList *pEList,       /* List of values being extracted */
94885:   int srcTab,             /* Pull data from this table */
94886:   int nColumn,            /* Number of columns in the source table */
94887:   ExprList *pOrderBy,     /* If not NULL, sort results using this key */
94888:   int distinct,           /* If >=0, make sure results are distinct */
94889:   SelectDest *pDest,      /* How to dispose of the results */
94890:   int iContinue,          /* Jump here to continue with next row */
94891:   int iBreak              /* Jump here to break out of the inner loop */
94892: ){
94893:   Vdbe *v = pParse->pVdbe;
94894:   int i;
94895:   int hasDistinct;        /* True if the DISTINCT keyword is present */
94896:   int regResult;              /* Start of memory holding result set */
94897:   int eDest = pDest->eDest;   /* How to dispose of results */
94898:   int iParm = pDest->iParm;   /* First argument to disposal method */
94899:   int nResultCol;             /* Number of result columns */
94900: 
94901:   assert( v );
94902:   if( NEVER(v==0) ) return;
94903:   assert( pEList!=0 );
94904:   hasDistinct = distinct>=0;
94905:   if( pOrderBy==0 && !hasDistinct ){
94906:     codeOffset(v, p, iContinue);
94907:   }
94908: 
94909:   /* Pull the requested columns.
94910:   */
94911:   if( nColumn>0 ){
94912:     nResultCol = nColumn;
94913:   }else{
94914:     nResultCol = pEList->nExpr;
94915:   }
94916:   if( pDest->iMem==0 ){
94917:     pDest->iMem = pParse->nMem+1;
94918:     pDest->nMem = nResultCol;
94919:     pParse->nMem += nResultCol;
94920:   }else{ 
94921:     assert( pDest->nMem==nResultCol );
94922:   }
94923:   regResult = pDest->iMem;
94924:   if( nColumn>0 ){
94925:     for(i=0; i<nColumn; i++){
94926:       sqlite3VdbeAddOp3(v, OP_Column, srcTab, i, regResult+i);
94927:     }
94928:   }else if( eDest!=SRT_Exists ){
94929:     /* If the destination is an EXISTS(...) expression, the actual
94930:     ** values returned by the SELECT are not required.
94931:     */
94932:     sqlite3ExprCacheClear(pParse);
94933:     sqlite3ExprCodeExprList(pParse, pEList, regResult, eDest==SRT_Output);
94934:   }
94935:   nColumn = nResultCol;
94936: 
94937:   /* If the DISTINCT keyword was present on the SELECT statement
94938:   ** and this row has been seen before, then do not make this row
94939:   ** part of the result.
94940:   */
94941:   if( hasDistinct ){
94942:     assert( pEList!=0 );
94943:     assert( pEList->nExpr==nColumn );
94944:     codeDistinct(pParse, distinct, iContinue, nColumn, regResult);
94945:     if( pOrderBy==0 ){
94946:       codeOffset(v, p, iContinue);
94947:     }
94948:   }
94949: 
94950:   switch( eDest ){
94951:     /* In this mode, write each query result to the key of the temporary
94952:     ** table iParm.
94953:     */
94954: #ifndef SQLITE_OMIT_COMPOUND_SELECT
94955:     case SRT_Union: {
94956:       int r1;
94957:       r1 = sqlite3GetTempReg(pParse);
94958:       sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
94959:       sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
94960:       sqlite3ReleaseTempReg(pParse, r1);
94961:       break;
94962:     }
94963: 
94964:     /* Construct a record from the query result, but instead of
94965:     ** saving that record, use it as a key to delete elements from
94966:     ** the temporary table iParm.
94967:     */
94968:     case SRT_Except: {
94969:       sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nColumn);
94970:       break;
94971:     }
94972: #endif
94973: 
94974:     /* Store the result as data using a unique key.
94975:     */
94976:     case SRT_Table:
94977:     case SRT_EphemTab: {
94978:       int r1 = sqlite3GetTempReg(pParse);
94979:       testcase( eDest==SRT_Table );
94980:       testcase( eDest==SRT_EphemTab );
94981:       sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
94982:       if( pOrderBy ){
94983:         pushOntoSorter(pParse, pOrderBy, p, r1);
94984:       }else{
94985:         int r2 = sqlite3GetTempReg(pParse);
94986:         sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2);
94987:         sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, r2);
94988:         sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
94989:         sqlite3ReleaseTempReg(pParse, r2);
94990:       }
94991:       sqlite3ReleaseTempReg(pParse, r1);
94992:       break;
94993:     }
94994: 
94995: #ifndef SQLITE_OMIT_SUBQUERY
94996:     /* If we are creating a set for an "expr IN (SELECT ...)" construct,
94997:     ** then there should be a single item on the stack.  Write this
94998:     ** item into the set table with bogus data.
94999:     */
95000:     case SRT_Set: {
95001:       assert( nColumn==1 );
95002:       p->affinity = sqlite3CompareAffinity(pEList->a[0].pExpr, pDest->affinity);
95003:       if( pOrderBy ){
95004:         /* At first glance you would think we could optimize out the
95005:         ** ORDER BY in this case since the order of entries in the set
95006:         ** does not matter.  But there might be a LIMIT clause, in which
95007:         ** case the order does matter */
95008:         pushOntoSorter(pParse, pOrderBy, p, regResult);
95009:       }else{
95010:         int r1 = sqlite3GetTempReg(pParse);
95011:         sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, 1, r1, &p->affinity, 1);
95012:         sqlite3ExprCacheAffinityChange(pParse, regResult, 1);
95013:         sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
95014:         sqlite3ReleaseTempReg(pParse, r1);
95015:       }
95016:       break;
95017:     }
95018: 
95019:     /* If any row exist in the result set, record that fact and abort.
95020:     */
95021:     case SRT_Exists: {
95022:       sqlite3VdbeAddOp2(v, OP_Integer, 1, iParm);
95023:       /* The LIMIT clause will terminate the loop for us */
95024:       break;
95025:     }
95026: 
95027:     /* If this is a scalar select that is part of an expression, then
95028:     ** store the results in the appropriate memory cell and break out
95029:     ** of the scan loop.
95030:     */
95031:     case SRT_Mem: {
95032:       assert( nColumn==1 );
95033:       if( pOrderBy ){
95034:         pushOntoSorter(pParse, pOrderBy, p, regResult);
95035:       }else{
95036:         sqlite3ExprCodeMove(pParse, regResult, iParm, 1);
95037:         /* The LIMIT clause will jump out of the loop for us */
95038:       }
95039:       break;
95040:     }
95041: #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
95042: 
95043:     /* Send the data to the callback function or to a subroutine.  In the
95044:     ** case of a subroutine, the subroutine itself is responsible for
95045:     ** popping the data from the stack.
95046:     */
95047:     case SRT_Coroutine:
95048:     case SRT_Output: {
95049:       testcase( eDest==SRT_Coroutine );
95050:       testcase( eDest==SRT_Output );
95051:       if( pOrderBy ){
95052:         int r1 = sqlite3GetTempReg(pParse);
95053:         sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
95054:         pushOntoSorter(pParse, pOrderBy, p, r1);
95055:         sqlite3ReleaseTempReg(pParse, r1);
95056:       }else if( eDest==SRT_Coroutine ){
95057:         sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
95058:       }else{
95059:         sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nColumn);
95060:         sqlite3ExprCacheAffinityChange(pParse, regResult, nColumn);
95061:       }
95062:       break;
95063:     }
95064: 
95065: #if !defined(SQLITE_OMIT_TRIGGER)
95066:     /* Discard the results.  This is used for SELECT statements inside
95067:     ** the body of a TRIGGER.  The purpose of such selects is to call
95068:     ** user-defined functions that have side effects.  We do not care
95069:     ** about the actual results of the select.
95070:     */
95071:     default: {
95072:       assert( eDest==SRT_Discard );
95073:       break;
95074:     }
95075: #endif
95076:   }
95077: 
95078:   /* Jump to the end of the loop if the LIMIT is reached.  Except, if
95079:   ** there is a sorter, in which case the sorter has already limited
95080:   ** the output for us.
95081:   */
95082:   if( pOrderBy==0 && p->iLimit ){
95083:     sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1);
95084:   }
95085: }
95086: 
95087: /*
95088: ** Given an expression list, generate a KeyInfo structure that records
95089: ** the collating sequence for each expression in that expression list.
95090: **
95091: ** If the ExprList is an ORDER BY or GROUP BY clause then the resulting
95092: ** KeyInfo structure is appropriate for initializing a virtual index to
95093: ** implement that clause.  If the ExprList is the result set of a SELECT
95094: ** then the KeyInfo structure is appropriate for initializing a virtual
95095: ** index to implement a DISTINCT test.
95096: **
95097: ** Space to hold the KeyInfo structure is obtain from malloc.  The calling
95098: ** function is responsible for seeing that this structure is eventually
95099: ** freed.  Add the KeyInfo structure to the P4 field of an opcode using
95100: ** P4_KEYINFO_HANDOFF is the usual way of dealing with this.
95101: */
95102: static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){
95103:   sqlite3 *db = pParse->db;
95104:   int nExpr;
95105:   KeyInfo *pInfo;
95106:   struct ExprList_item *pItem;
95107:   int i;
95108: 
95109:   nExpr = pList->nExpr;
95110:   pInfo = sqlite3DbMallocZero(db, sizeof(*pInfo) + nExpr*(sizeof(CollSeq*)+1) );
95111:   if( pInfo ){
95112:     pInfo->aSortOrder = (u8*)&pInfo->aColl[nExpr];
95113:     pInfo->nField = (u16)nExpr;
95114:     pInfo->enc = ENC(db);
95115:     pInfo->db = db;
95116:     for(i=0, pItem=pList->a; i<nExpr; i++, pItem++){
95117:       CollSeq *pColl;
95118:       pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
95119:       if( !pColl ){
95120:         pColl = db->pDfltColl;
95121:       }
95122:       pInfo->aColl[i] = pColl;
95123:       pInfo->aSortOrder[i] = pItem->sortOrder;
95124:     }
95125:   }
95126:   return pInfo;
95127: }
95128: 
95129: #ifndef SQLITE_OMIT_COMPOUND_SELECT
95130: /*
95131: ** Name of the connection operator, used for error messages.
95132: */
95133: static const char *selectOpName(int id){
95134:   char *z;
95135:   switch( id ){
95136:     case TK_ALL:       z = "UNION ALL";   break;
95137:     case TK_INTERSECT: z = "INTERSECT";   break;
95138:     case TK_EXCEPT:    z = "EXCEPT";      break;
95139:     default:           z = "UNION";       break;
95140:   }
95141:   return z;
95142: }
95143: #endif /* SQLITE_OMIT_COMPOUND_SELECT */
95144: 
95145: #ifndef SQLITE_OMIT_EXPLAIN
95146: /*
95147: ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
95148: ** is a no-op. Otherwise, it adds a single row of output to the EQP result,
95149: ** where the caption is of the form:
95150: **
95151: **   "USE TEMP B-TREE FOR xxx"
95152: **
95153: ** where xxx is one of "DISTINCT", "ORDER BY" or "GROUP BY". Exactly which
95154: ** is determined by the zUsage argument.
95155: */
95156: static void explainTempTable(Parse *pParse, const char *zUsage){
95157:   if( pParse->explain==2 ){
95158:     Vdbe *v = pParse->pVdbe;
95159:     char *zMsg = sqlite3MPrintf(pParse->db, "USE TEMP B-TREE FOR %s", zUsage);
95160:     sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
95161:   }
95162: }
95163: 
95164: /*
95165: ** Assign expression b to lvalue a. A second, no-op, version of this macro
95166: ** is provided when SQLITE_OMIT_EXPLAIN is defined. This allows the code
95167: ** in sqlite3Select() to assign values to structure member variables that
95168: ** only exist if SQLITE_OMIT_EXPLAIN is not defined without polluting the
95169: ** code with #ifndef directives.
95170: */
95171: # define explainSetInteger(a, b) a = b
95172: 
95173: #else
95174: /* No-op versions of the explainXXX() functions and macros. */
95175: # define explainTempTable(y,z)
95176: # define explainSetInteger(y,z)
95177: #endif
95178: 
95179: #if !defined(SQLITE_OMIT_EXPLAIN) && !defined(SQLITE_OMIT_COMPOUND_SELECT)
95180: /*
95181: ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
95182: ** is a no-op. Otherwise, it adds a single row of output to the EQP result,
95183: ** where the caption is of one of the two forms:
95184: **
95185: **   "COMPOSITE SUBQUERIES iSub1 and iSub2 (op)"
95186: **   "COMPOSITE SUBQUERIES iSub1 and iSub2 USING TEMP B-TREE (op)"
95187: **
95188: ** where iSub1 and iSub2 are the integers passed as the corresponding
95189: ** function parameters, and op is the text representation of the parameter
95190: ** of the same name. The parameter "op" must be one of TK_UNION, TK_EXCEPT,
95191: ** TK_INTERSECT or TK_ALL. The first form is used if argument bUseTmp is 
95192: ** false, or the second form if it is true.
95193: */
95194: static void explainComposite(
95195:   Parse *pParse,                  /* Parse context */
95196:   int op,                         /* One of TK_UNION, TK_EXCEPT etc. */
95197:   int iSub1,                      /* Subquery id 1 */
95198:   int iSub2,                      /* Subquery id 2 */
95199:   int bUseTmp                     /* True if a temp table was used */
95200: ){
95201:   assert( op==TK_UNION || op==TK_EXCEPT || op==TK_INTERSECT || op==TK_ALL );
95202:   if( pParse->explain==2 ){
95203:     Vdbe *v = pParse->pVdbe;
95204:     char *zMsg = sqlite3MPrintf(
95205:         pParse->db, "COMPOUND SUBQUERIES %d AND %d %s(%s)", iSub1, iSub2,
95206:         bUseTmp?"USING TEMP B-TREE ":"", selectOpName(op)
95207:     );
95208:     sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
95209:   }
95210: }
95211: #else
95212: /* No-op versions of the explainXXX() functions and macros. */
95213: # define explainComposite(v,w,x,y,z)
95214: #endif
95215: 
95216: /*
95217: ** If the inner loop was generated using a non-null pOrderBy argument,
95218: ** then the results were placed in a sorter.  After the loop is terminated
95219: ** we need to run the sorter and output the results.  The following
95220: ** routine generates the code needed to do that.
95221: */
95222: static void generateSortTail(
95223:   Parse *pParse,    /* Parsing context */
95224:   Select *p,        /* The SELECT statement */
95225:   Vdbe *v,          /* Generate code into this VDBE */
95226:   int nColumn,      /* Number of columns of data */
95227:   SelectDest *pDest /* Write the sorted results here */
95228: ){
95229:   int addrBreak = sqlite3VdbeMakeLabel(v);     /* Jump here to exit loop */
95230:   int addrContinue = sqlite3VdbeMakeLabel(v);  /* Jump here for next cycle */
95231:   int addr;
95232:   int iTab;
95233:   int pseudoTab = 0;
95234:   ExprList *pOrderBy = p->pOrderBy;
95235: 
95236:   int eDest = pDest->eDest;
95237:   int iParm = pDest->iParm;
95238: 
95239:   int regRow;
95240:   int regRowid;
95241: 
95242:   iTab = pOrderBy->iECursor;
95243:   regRow = sqlite3GetTempReg(pParse);
95244:   if( eDest==SRT_Output || eDest==SRT_Coroutine ){
95245:     pseudoTab = pParse->nTab++;
95246:     sqlite3VdbeAddOp3(v, OP_OpenPseudo, pseudoTab, regRow, nColumn);
95247:     regRowid = 0;
95248:   }else{
95249:     regRowid = sqlite3GetTempReg(pParse);
95250:   }
95251:   if( p->selFlags & SF_UseSorter ){
95252:     int regSortOut = ++pParse->nMem;
95253:     int ptab2 = pParse->nTab++;
95254:     sqlite3VdbeAddOp3(v, OP_OpenPseudo, ptab2, regSortOut, pOrderBy->nExpr+2);
95255:     addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak);
95256:     codeOffset(v, p, addrContinue);
95257:     sqlite3VdbeAddOp2(v, OP_SorterData, iTab, regSortOut);
95258:     sqlite3VdbeAddOp3(v, OP_Column, ptab2, pOrderBy->nExpr+1, regRow);
95259:     sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
95260:   }else{
95261:     addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak);
95262:     codeOffset(v, p, addrContinue);
95263:     sqlite3VdbeAddOp3(v, OP_Column, iTab, pOrderBy->nExpr+1, regRow);
95264:   }
95265:   switch( eDest ){
95266:     case SRT_Table:
95267:     case SRT_EphemTab: {
95268:       testcase( eDest==SRT_Table );
95269:       testcase( eDest==SRT_EphemTab );
95270:       sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid);
95271:       sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid);
95272:       sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
95273:       break;
95274:     }
95275: #ifndef SQLITE_OMIT_SUBQUERY
95276:     case SRT_Set: {
95277:       assert( nColumn==1 );
95278:       sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, 1, regRowid, &p->affinity, 1);
95279:       sqlite3ExprCacheAffinityChange(pParse, regRow, 1);
95280:       sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, regRowid);
95281:       break;
95282:     }
95283:     case SRT_Mem: {
95284:       assert( nColumn==1 );
95285:       sqlite3ExprCodeMove(pParse, regRow, iParm, 1);
95286:       /* The LIMIT clause will terminate the loop for us */
95287:       break;
95288:     }
95289: #endif
95290:     default: {
95291:       int i;
95292:       assert( eDest==SRT_Output || eDest==SRT_Coroutine ); 
95293:       testcase( eDest==SRT_Output );
95294:       testcase( eDest==SRT_Coroutine );
95295:       for(i=0; i<nColumn; i++){
95296:         assert( regRow!=pDest->iMem+i );
95297:         sqlite3VdbeAddOp3(v, OP_Column, pseudoTab, i, pDest->iMem+i);
95298:         if( i==0 ){
95299:           sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
95300:         }
95301:       }
95302:       if( eDest==SRT_Output ){
95303:         sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iMem, nColumn);
95304:         sqlite3ExprCacheAffinityChange(pParse, pDest->iMem, nColumn);
95305:       }else{
95306:         sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
95307:       }
95308:       break;
95309:     }
95310:   }
95311:   sqlite3ReleaseTempReg(pParse, regRow);
95312:   sqlite3ReleaseTempReg(pParse, regRowid);
95313: 
95314:   /* The bottom of the loop
95315:   */
95316:   sqlite3VdbeResolveLabel(v, addrContinue);
95317:   if( p->selFlags & SF_UseSorter ){
95318:     sqlite3VdbeAddOp2(v, OP_SorterNext, iTab, addr);
95319:   }else{
95320:     sqlite3VdbeAddOp2(v, OP_Next, iTab, addr);
95321:   }
95322:   sqlite3VdbeResolveLabel(v, addrBreak);
95323:   if( eDest==SRT_Output || eDest==SRT_Coroutine ){
95324:     sqlite3VdbeAddOp2(v, OP_Close, pseudoTab, 0);
95325:   }
95326: }
95327: 
95328: /*
95329: ** Return a pointer to a string containing the 'declaration type' of the
95330: ** expression pExpr. The string may be treated as static by the caller.
95331: **
95332: ** The declaration type is the exact datatype definition extracted from the
95333: ** original CREATE TABLE statement if the expression is a column. The
95334: ** declaration type for a ROWID field is INTEGER. Exactly when an expression
95335: ** is considered a column can be complex in the presence of subqueries. The
95336: ** result-set expression in all of the following SELECT statements is 
95337: ** considered a column by this function.
95338: **
95339: **   SELECT col FROM tbl;
95340: **   SELECT (SELECT col FROM tbl;
95341: **   SELECT (SELECT col FROM tbl);
95342: **   SELECT abc FROM (SELECT col AS abc FROM tbl);
95343: ** 
95344: ** The declaration type for any expression other than a column is NULL.
95345: */
95346: static const char *columnType(
95347:   NameContext *pNC, 
95348:   Expr *pExpr,
95349:   const char **pzOriginDb,
95350:   const char **pzOriginTab,
95351:   const char **pzOriginCol
95352: ){
95353:   char const *zType = 0;
95354:   char const *zOriginDb = 0;
95355:   char const *zOriginTab = 0;
95356:   char const *zOriginCol = 0;
95357:   int j;
95358:   if( NEVER(pExpr==0) || pNC->pSrcList==0 ) return 0;
95359: 
95360:   switch( pExpr->op ){
95361:     case TK_AGG_COLUMN:
95362:     case TK_COLUMN: {
95363:       /* The expression is a column. Locate the table the column is being
95364:       ** extracted from in NameContext.pSrcList. This table may be real
95365:       ** database table or a subquery.
95366:       */
95367:       Table *pTab = 0;            /* Table structure column is extracted from */
95368:       Select *pS = 0;             /* Select the column is extracted from */
95369:       int iCol = pExpr->iColumn;  /* Index of column in pTab */
95370:       testcase( pExpr->op==TK_AGG_COLUMN );
95371:       testcase( pExpr->op==TK_COLUMN );
95372:       while( pNC && !pTab ){
95373:         SrcList *pTabList = pNC->pSrcList;
95374:         for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++);
95375:         if( j<pTabList->nSrc ){
95376:           pTab = pTabList->a[j].pTab;
95377:           pS = pTabList->a[j].pSelect;
95378:         }else{
95379:           pNC = pNC->pNext;
95380:         }
95381:       }
95382: 
95383:       if( pTab==0 ){
95384:         /* At one time, code such as "SELECT new.x" within a trigger would
95385:         ** cause this condition to run.  Since then, we have restructured how
95386:         ** trigger code is generated and so this condition is no longer 
95387:         ** possible. However, it can still be true for statements like
95388:         ** the following:
95389:         **
95390:         **   CREATE TABLE t1(col INTEGER);
95391:         **   SELECT (SELECT t1.col) FROM FROM t1;
95392:         **
95393:         ** when columnType() is called on the expression "t1.col" in the 
95394:         ** sub-select. In this case, set the column type to NULL, even
95395:         ** though it should really be "INTEGER".
95396:         **
95397:         ** This is not a problem, as the column type of "t1.col" is never
95398:         ** used. When columnType() is called on the expression 
95399:         ** "(SELECT t1.col)", the correct type is returned (see the TK_SELECT
95400:         ** branch below.  */
95401:         break;
95402:       }
95403: 
95404:       assert( pTab && pExpr->pTab==pTab );
95405:       if( pS ){
95406:         /* The "table" is actually a sub-select or a view in the FROM clause
95407:         ** of the SELECT statement. Return the declaration type and origin
95408:         ** data for the result-set column of the sub-select.
95409:         */
95410:         if( iCol>=0 && ALWAYS(iCol<pS->pEList->nExpr) ){
95411:           /* If iCol is less than zero, then the expression requests the
95412:           ** rowid of the sub-select or view. This expression is legal (see 
95413:           ** test case misc2.2.2) - it always evaluates to NULL.
95414:           */
95415:           NameContext sNC;
95416:           Expr *p = pS->pEList->a[iCol].pExpr;
95417:           sNC.pSrcList = pS->pSrc;
95418:           sNC.pNext = pNC;
95419:           sNC.pParse = pNC->pParse;
95420:           zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); 
95421:         }
95422:       }else if( ALWAYS(pTab->pSchema) ){
95423:         /* A real table */
95424:         assert( !pS );
95425:         if( iCol<0 ) iCol = pTab->iPKey;
95426:         assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
95427:         if( iCol<0 ){
95428:           zType = "INTEGER";
95429:           zOriginCol = "rowid";
95430:         }else{
95431:           zType = pTab->aCol[iCol].zType;
95432:           zOriginCol = pTab->aCol[iCol].zName;
95433:         }
95434:         zOriginTab = pTab->zName;
95435:         if( pNC->pParse ){
95436:           int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema);
95437:           zOriginDb = pNC->pParse->db->aDb[iDb].zName;
95438:         }
95439:       }
95440:       break;
95441:     }
95442: #ifndef SQLITE_OMIT_SUBQUERY
95443:     case TK_SELECT: {
95444:       /* The expression is a sub-select. Return the declaration type and
95445:       ** origin info for the single column in the result set of the SELECT
95446:       ** statement.
95447:       */
95448:       NameContext sNC;
95449:       Select *pS = pExpr->x.pSelect;
95450:       Expr *p = pS->pEList->a[0].pExpr;
95451:       assert( ExprHasProperty(pExpr, EP_xIsSelect) );
95452:       sNC.pSrcList = pS->pSrc;
95453:       sNC.pNext = pNC;
95454:       sNC.pParse = pNC->pParse;
95455:       zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); 
95456:       break;
95457:     }
95458: #endif
95459:   }
95460:   
95461:   if( pzOriginDb ){
95462:     assert( pzOriginTab && pzOriginCol );
95463:     *pzOriginDb = zOriginDb;
95464:     *pzOriginTab = zOriginTab;
95465:     *pzOriginCol = zOriginCol;
95466:   }
95467:   return zType;
95468: }
95469: 
95470: /*
95471: ** Generate code that will tell the VDBE the declaration types of columns
95472: ** in the result set.
95473: */
95474: static void generateColumnTypes(
95475:   Parse *pParse,      /* Parser context */
95476:   SrcList *pTabList,  /* List of tables */
95477:   ExprList *pEList    /* Expressions defining the result set */
95478: ){
95479: #ifndef SQLITE_OMIT_DECLTYPE
95480:   Vdbe *v = pParse->pVdbe;
95481:   int i;
95482:   NameContext sNC;
95483:   sNC.pSrcList = pTabList;
95484:   sNC.pParse = pParse;
95485:   for(i=0; i<pEList->nExpr; i++){
95486:     Expr *p = pEList->a[i].pExpr;
95487:     const char *zType;
95488: #ifdef SQLITE_ENABLE_COLUMN_METADATA
95489:     const char *zOrigDb = 0;
95490:     const char *zOrigTab = 0;
95491:     const char *zOrigCol = 0;
95492:     zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);
95493: 
95494:     /* The vdbe must make its own copy of the column-type and other 
95495:     ** column specific strings, in case the schema is reset before this
95496:     ** virtual machine is deleted.
95497:     */
95498:     sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, SQLITE_TRANSIENT);
95499:     sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT);
95500:     sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT);
95501: #else
95502:     zType = columnType(&sNC, p, 0, 0, 0);
95503: #endif
95504:     sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT);
95505:   }
95506: #endif /* SQLITE_OMIT_DECLTYPE */
95507: }
95508: 
95509: /*
95510: ** Generate code that will tell the VDBE the names of columns
95511: ** in the result set.  This information is used to provide the
95512: ** azCol[] values in the callback.
95513: */
95514: static void generateColumnNames(
95515:   Parse *pParse,      /* Parser context */
95516:   SrcList *pTabList,  /* List of tables */
95517:   ExprList *pEList    /* Expressions defining the result set */
95518: ){
95519:   Vdbe *v = pParse->pVdbe;
95520:   int i, j;
95521:   sqlite3 *db = pParse->db;
95522:   int fullNames, shortNames;
95523: 
95524: #ifndef SQLITE_OMIT_EXPLAIN
95525:   /* If this is an EXPLAIN, skip this step */
95526:   if( pParse->explain ){
95527:     return;
95528:   }
95529: #endif
95530: 
95531:   if( pParse->colNamesSet || NEVER(v==0) || db->mallocFailed ) return;
95532:   pParse->colNamesSet = 1;
95533:   fullNames = (db->flags & SQLITE_FullColNames)!=0;
95534:   shortNames = (db->flags & SQLITE_ShortColNames)!=0;
95535:   sqlite3VdbeSetNumCols(v, pEList->nExpr);
95536:   for(i=0; i<pEList->nExpr; i++){
95537:     Expr *p;
95538:     p = pEList->a[i].pExpr;
95539:     if( NEVER(p==0) ) continue;
95540:     if( pEList->a[i].zName ){
95541:       char *zName = pEList->a[i].zName;
95542:       sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_TRANSIENT);
95543:     }else if( (p->op==TK_COLUMN || p->op==TK_AGG_COLUMN) && pTabList ){
95544:       Table *pTab;
95545:       char *zCol;
95546:       int iCol = p->iColumn;
95547:       for(j=0; ALWAYS(j<pTabList->nSrc); j++){
95548:         if( pTabList->a[j].iCursor==p->iTable ) break;
95549:       }
95550:       assert( j<pTabList->nSrc );
95551:       pTab = pTabList->a[j].pTab;
95552:       if( iCol<0 ) iCol = pTab->iPKey;
95553:       assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
95554:       if( iCol<0 ){
95555:         zCol = "rowid";
95556:       }else{
95557:         zCol = pTab->aCol[iCol].zName;
95558:       }
95559:       if( !shortNames && !fullNames ){
95560:         sqlite3VdbeSetColName(v, i, COLNAME_NAME, 
95561:             sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC);
95562:       }else if( fullNames ){
95563:         char *zName = 0;
95564:         zName = sqlite3MPrintf(db, "%s.%s", pTab->zName, zCol);
95565:         sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_DYNAMIC);
95566:       }else{
95567:         sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, SQLITE_TRANSIENT);
95568:       }
95569:     }else{
95570:       sqlite3VdbeSetColName(v, i, COLNAME_NAME, 
95571:           sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC);
95572:     }
95573:   }
95574:   generateColumnTypes(pParse, pTabList, pEList);
95575: }
95576: 
95577: /*
95578: ** Given a an expression list (which is really the list of expressions
95579: ** that form the result set of a SELECT statement) compute appropriate
95580: ** column names for a table that would hold the expression list.
95581: **
95582: ** All column names will be unique.
95583: **
95584: ** Only the column names are computed.  Column.zType, Column.zColl,
95585: ** and other fields of Column are zeroed.
95586: **
95587: ** Return SQLITE_OK on success.  If a memory allocation error occurs,
95588: ** store NULL in *paCol and 0 in *pnCol and return SQLITE_NOMEM.
95589: */
95590: static int selectColumnsFromExprList(
95591:   Parse *pParse,          /* Parsing context */
95592:   ExprList *pEList,       /* Expr list from which to derive column names */
95593:   int *pnCol,             /* Write the number of columns here */
95594:   Column **paCol          /* Write the new column list here */
95595: ){
95596:   sqlite3 *db = pParse->db;   /* Database connection */
95597:   int i, j;                   /* Loop counters */
95598:   int cnt;                    /* Index added to make the name unique */
95599:   Column *aCol, *pCol;        /* For looping over result columns */
95600:   int nCol;                   /* Number of columns in the result set */
95601:   Expr *p;                    /* Expression for a single result column */
95602:   char *zName;                /* Column name */
95603:   int nName;                  /* Size of name in zName[] */
95604: 
95605:   *pnCol = nCol = pEList->nExpr;
95606:   aCol = *paCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol);
95607:   if( aCol==0 ) return SQLITE_NOMEM;
95608:   for(i=0, pCol=aCol; i<nCol; i++, pCol++){
95609:     /* Get an appropriate name for the column
95610:     */
95611:     p = pEList->a[i].pExpr;
95612:     assert( p->pRight==0 || ExprHasProperty(p->pRight, EP_IntValue)
95613:                || p->pRight->u.zToken==0 || p->pRight->u.zToken[0]!=0 );
95614:     if( (zName = pEList->a[i].zName)!=0 ){
95615:       /* If the column contains an "AS <name>" phrase, use <name> as the name */
95616:       zName = sqlite3DbStrDup(db, zName);
95617:     }else{
95618:       Expr *pColExpr = p;  /* The expression that is the result column name */
95619:       Table *pTab;         /* Table associated with this expression */
95620:       while( pColExpr->op==TK_DOT ){
95621:         pColExpr = pColExpr->pRight;
95622:         assert( pColExpr!=0 );
95623:       }
95624:       if( pColExpr->op==TK_COLUMN && ALWAYS(pColExpr->pTab!=0) ){
95625:         /* For columns use the column name name */
95626:         int iCol = pColExpr->iColumn;
95627:         pTab = pColExpr->pTab;
95628:         if( iCol<0 ) iCol = pTab->iPKey;
95629:         zName = sqlite3MPrintf(db, "%s",
95630:                  iCol>=0 ? pTab->aCol[iCol].zName : "rowid");
95631:       }else if( pColExpr->op==TK_ID ){
95632:         assert( !ExprHasProperty(pColExpr, EP_IntValue) );
95633:         zName = sqlite3MPrintf(db, "%s", pColExpr->u.zToken);
95634:       }else{
95635:         /* Use the original text of the column expression as its name */
95636:         zName = sqlite3MPrintf(db, "%s", pEList->a[i].zSpan);
95637:       }
95638:     }
95639:     if( db->mallocFailed ){
95640:       sqlite3DbFree(db, zName);
95641:       break;
95642:     }
95643: 
95644:     /* Make sure the column name is unique.  If the name is not unique,
95645:     ** append a integer to the name so that it becomes unique.
95646:     */
95647:     nName = sqlite3Strlen30(zName);
95648:     for(j=cnt=0; j<i; j++){
95649:       if( sqlite3StrICmp(aCol[j].zName, zName)==0 ){
95650:         char *zNewName;
95651:         zName[nName] = 0;
95652:         zNewName = sqlite3MPrintf(db, "%s:%d", zName, ++cnt);
95653:         sqlite3DbFree(db, zName);
95654:         zName = zNewName;
95655:         j = -1;
95656:         if( zName==0 ) break;
95657:       }
95658:     }
95659:     pCol->zName = zName;
95660:   }
95661:   if( db->mallocFailed ){
95662:     for(j=0; j<i; j++){
95663:       sqlite3DbFree(db, aCol[j].zName);
95664:     }
95665:     sqlite3DbFree(db, aCol);
95666:     *paCol = 0;
95667:     *pnCol = 0;
95668:     return SQLITE_NOMEM;
95669:   }
95670:   return SQLITE_OK;
95671: }
95672: 
95673: /*
95674: ** Add type and collation information to a column list based on
95675: ** a SELECT statement.
95676: ** 
95677: ** The column list presumably came from selectColumnNamesFromExprList().
95678: ** The column list has only names, not types or collations.  This
95679: ** routine goes through and adds the types and collations.
95680: **
95681: ** This routine requires that all identifiers in the SELECT
95682: ** statement be resolved.
95683: */
95684: static void selectAddColumnTypeAndCollation(
95685:   Parse *pParse,        /* Parsing contexts */
95686:   int nCol,             /* Number of columns */
95687:   Column *aCol,         /* List of columns */
95688:   Select *pSelect       /* SELECT used to determine types and collations */
95689: ){
95690:   sqlite3 *db = pParse->db;
95691:   NameContext sNC;
95692:   Column *pCol;
95693:   CollSeq *pColl;
95694:   int i;
95695:   Expr *p;
95696:   struct ExprList_item *a;
95697: 
95698:   assert( pSelect!=0 );
95699:   assert( (pSelect->selFlags & SF_Resolved)!=0 );
95700:   assert( nCol==pSelect->pEList->nExpr || db->mallocFailed );
95701:   if( db->mallocFailed ) return;
95702:   memset(&sNC, 0, sizeof(sNC));
95703:   sNC.pSrcList = pSelect->pSrc;
95704:   a = pSelect->pEList->a;
95705:   for(i=0, pCol=aCol; i<nCol; i++, pCol++){
95706:     p = a[i].pExpr;
95707:     pCol->zType = sqlite3DbStrDup(db, columnType(&sNC, p, 0, 0, 0));
95708:     pCol->affinity = sqlite3ExprAffinity(p);
95709:     if( pCol->affinity==0 ) pCol->affinity = SQLITE_AFF_NONE;
95710:     pColl = sqlite3ExprCollSeq(pParse, p);
95711:     if( pColl ){
95712:       pCol->zColl = sqlite3DbStrDup(db, pColl->zName);
95713:     }
95714:   }
95715: }
95716: 
95717: /*
95718: ** Given a SELECT statement, generate a Table structure that describes
95719: ** the result set of that SELECT.
95720: */
95721: SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
95722:   Table *pTab;
95723:   sqlite3 *db = pParse->db;
95724:   int savedFlags;
95725: 
95726:   savedFlags = db->flags;
95727:   db->flags &= ~SQLITE_FullColNames;
95728:   db->flags |= SQLITE_ShortColNames;
95729:   sqlite3SelectPrep(pParse, pSelect, 0);
95730:   if( pParse->nErr ) return 0;
95731:   while( pSelect->pPrior ) pSelect = pSelect->pPrior;
95732:   db->flags = savedFlags;
95733:   pTab = sqlite3DbMallocZero(db, sizeof(Table) );
95734:   if( pTab==0 ){
95735:     return 0;
95736:   }
95737:   /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside
95738:   ** is disabled */
95739:   assert( db->lookaside.bEnabled==0 );
95740:   pTab->nRef = 1;
95741:   pTab->zName = 0;
95742:   pTab->nRowEst = 1000000;
95743:   selectColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
95744:   selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSelect);
95745:   pTab->iPKey = -1;
95746:   if( db->mallocFailed ){
95747:     sqlite3DeleteTable(db, pTab);
95748:     return 0;
95749:   }
95750:   return pTab;
95751: }
95752: 
95753: /*
95754: ** Get a VDBE for the given parser context.  Create a new one if necessary.
95755: ** If an error occurs, return NULL and leave a message in pParse.
95756: */
95757: SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){
95758:   Vdbe *v = pParse->pVdbe;
95759:   if( v==0 ){
95760:     v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db);
95761: #ifndef SQLITE_OMIT_TRACE
95762:     if( v ){
95763:       sqlite3VdbeAddOp0(v, OP_Trace);
95764:     }
95765: #endif
95766:   }
95767:   return v;
95768: }
95769: 
95770: 
95771: /*
95772: ** Compute the iLimit and iOffset fields of the SELECT based on the
95773: ** pLimit and pOffset expressions.  pLimit and pOffset hold the expressions
95774: ** that appear in the original SQL statement after the LIMIT and OFFSET
95775: ** keywords.  Or NULL if those keywords are omitted. iLimit and iOffset 
95776: ** are the integer memory register numbers for counters used to compute 
95777: ** the limit and offset.  If there is no limit and/or offset, then 
95778: ** iLimit and iOffset are negative.
95779: **
95780: ** This routine changes the values of iLimit and iOffset only if
95781: ** a limit or offset is defined by pLimit and pOffset.  iLimit and
95782: ** iOffset should have been preset to appropriate default values
95783: ** (usually but not always -1) prior to calling this routine.
95784: ** Only if pLimit!=0 or pOffset!=0 do the limit registers get
95785: ** redefined.  The UNION ALL operator uses this property to force
95786: ** the reuse of the same limit and offset registers across multiple
95787: ** SELECT statements.
95788: */
95789: static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
95790:   Vdbe *v = 0;
95791:   int iLimit = 0;
95792:   int iOffset;
95793:   int addr1, n;
95794:   if( p->iLimit ) return;
95795: 
95796:   /* 
95797:   ** "LIMIT -1" always shows all rows.  There is some
95798:   ** contraversy about what the correct behavior should be.
95799:   ** The current implementation interprets "LIMIT 0" to mean
95800:   ** no rows.
95801:   */
95802:   sqlite3ExprCacheClear(pParse);
95803:   assert( p->pOffset==0 || p->pLimit!=0 );
95804:   if( p->pLimit ){
95805:     p->iLimit = iLimit = ++pParse->nMem;
95806:     v = sqlite3GetVdbe(pParse);
95807:     if( NEVER(v==0) ) return;  /* VDBE should have already been allocated */
95808:     if( sqlite3ExprIsInteger(p->pLimit, &n) ){
95809:       sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit);
95810:       VdbeComment((v, "LIMIT counter"));
95811:       if( n==0 ){
95812:         sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak);
95813:       }else{
95814:         if( p->nSelectRow > (double)n ) p->nSelectRow = (double)n;
95815:       }
95816:     }else{
95817:       sqlite3ExprCode(pParse, p->pLimit, iLimit);
95818:       sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit);
95819:       VdbeComment((v, "LIMIT counter"));
95820:       sqlite3VdbeAddOp2(v, OP_IfZero, iLimit, iBreak);
95821:     }
95822:     if( p->pOffset ){
95823:       p->iOffset = iOffset = ++pParse->nMem;
95824:       pParse->nMem++;   /* Allocate an extra register for limit+offset */
95825:       sqlite3ExprCode(pParse, p->pOffset, iOffset);
95826:       sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset);
95827:       VdbeComment((v, "OFFSET counter"));
95828:       addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iOffset);
95829:       sqlite3VdbeAddOp2(v, OP_Integer, 0, iOffset);
95830:       sqlite3VdbeJumpHere(v, addr1);
95831:       sqlite3VdbeAddOp3(v, OP_Add, iLimit, iOffset, iOffset+1);
95832:       VdbeComment((v, "LIMIT+OFFSET"));
95833:       addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iLimit);
95834:       sqlite3VdbeAddOp2(v, OP_Integer, -1, iOffset+1);
95835:       sqlite3VdbeJumpHere(v, addr1);
95836:     }
95837:   }
95838: }
95839: 
95840: #ifndef SQLITE_OMIT_COMPOUND_SELECT
95841: /*
95842: ** Return the appropriate collating sequence for the iCol-th column of
95843: ** the result set for the compound-select statement "p".  Return NULL if
95844: ** the column has no default collating sequence.
95845: **
95846: ** The collating sequence for the compound select is taken from the
95847: ** left-most term of the select that has a collating sequence.
95848: */
95849: static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){
95850:   CollSeq *pRet;
95851:   if( p->pPrior ){
95852:     pRet = multiSelectCollSeq(pParse, p->pPrior, iCol);
95853:   }else{
95854:     pRet = 0;
95855:   }
95856:   assert( iCol>=0 );
95857:   if( pRet==0 && iCol<p->pEList->nExpr ){
95858:     pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr);
95859:   }
95860:   return pRet;
95861: }
95862: #endif /* SQLITE_OMIT_COMPOUND_SELECT */
95863: 
95864: /* Forward reference */
95865: static int multiSelectOrderBy(
95866:   Parse *pParse,        /* Parsing context */
95867:   Select *p,            /* The right-most of SELECTs to be coded */
95868:   SelectDest *pDest     /* What to do with query results */
95869: );
95870: 
95871: 
95872: #ifndef SQLITE_OMIT_COMPOUND_SELECT
95873: /*
95874: ** This routine is called to process a compound query form from
95875: ** two or more separate queries using UNION, UNION ALL, EXCEPT, or
95876: ** INTERSECT
95877: **
95878: ** "p" points to the right-most of the two queries.  the query on the
95879: ** left is p->pPrior.  The left query could also be a compound query
95880: ** in which case this routine will be called recursively. 
95881: **
95882: ** The results of the total query are to be written into a destination
95883: ** of type eDest with parameter iParm.
95884: **
95885: ** Example 1:  Consider a three-way compound SQL statement.
95886: **
95887: **     SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3
95888: **
95889: ** This statement is parsed up as follows:
95890: **
95891: **     SELECT c FROM t3
95892: **      |
95893: **      `----->  SELECT b FROM t2
95894: **                |
95895: **                `------>  SELECT a FROM t1
95896: **
95897: ** The arrows in the diagram above represent the Select.pPrior pointer.
95898: ** So if this routine is called with p equal to the t3 query, then
95899: ** pPrior will be the t2 query.  p->op will be TK_UNION in this case.
95900: **
95901: ** Notice that because of the way SQLite parses compound SELECTs, the
95902: ** individual selects always group from left to right.
95903: */
95904: static int multiSelect(
95905:   Parse *pParse,        /* Parsing context */
95906:   Select *p,            /* The right-most of SELECTs to be coded */
95907:   SelectDest *pDest     /* What to do with query results */
95908: ){
95909:   int rc = SQLITE_OK;   /* Success code from a subroutine */
95910:   Select *pPrior;       /* Another SELECT immediately to our left */
95911:   Vdbe *v;              /* Generate code to this VDBE */
95912:   SelectDest dest;      /* Alternative data destination */
95913:   Select *pDelete = 0;  /* Chain of simple selects to delete */
95914:   sqlite3 *db;          /* Database connection */
95915: #ifndef SQLITE_OMIT_EXPLAIN
95916:   int iSub1;            /* EQP id of left-hand query */
95917:   int iSub2;            /* EQP id of right-hand query */
95918: #endif
95919: 
95920:   /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs.  Only
95921:   ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT.
95922:   */
95923:   assert( p && p->pPrior );  /* Calling function guarantees this much */
95924:   db = pParse->db;
95925:   pPrior = p->pPrior;
95926:   assert( pPrior->pRightmost!=pPrior );
95927:   assert( pPrior->pRightmost==p->pRightmost );
95928:   dest = *pDest;
95929:   if( pPrior->pOrderBy ){
95930:     sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before",
95931:       selectOpName(p->op));
95932:     rc = 1;
95933:     goto multi_select_end;
95934:   }
95935:   if( pPrior->pLimit ){
95936:     sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before",
95937:       selectOpName(p->op));
95938:     rc = 1;
95939:     goto multi_select_end;
95940:   }
95941: 
95942:   v = sqlite3GetVdbe(pParse);
95943:   assert( v!=0 );  /* The VDBE already created by calling function */
95944: 
95945:   /* Create the destination temporary table if necessary
95946:   */
95947:   if( dest.eDest==SRT_EphemTab ){
95948:     assert( p->pEList );
95949:     sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iParm, p->pEList->nExpr);
95950:     sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
95951:     dest.eDest = SRT_Table;
95952:   }
95953: 
95954:   /* Make sure all SELECTs in the statement have the same number of elements
95955:   ** in their result sets.
95956:   */
95957:   assert( p->pEList && pPrior->pEList );
95958:   if( p->pEList->nExpr!=pPrior->pEList->nExpr ){
95959:     sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s"
95960:       " do not have the same number of result columns", selectOpName(p->op));
95961:     rc = 1;
95962:     goto multi_select_end;
95963:   }
95964: 
95965:   /* Compound SELECTs that have an ORDER BY clause are handled separately.
95966:   */
95967:   if( p->pOrderBy ){
95968:     return multiSelectOrderBy(pParse, p, pDest);
95969:   }
95970: 
95971:   /* Generate code for the left and right SELECT statements.
95972:   */
95973:   switch( p->op ){
95974:     case TK_ALL: {
95975:       int addr = 0;
95976:       int nLimit;
95977:       assert( !pPrior->pLimit );
95978:       pPrior->pLimit = p->pLimit;
95979:       pPrior->pOffset = p->pOffset;
95980:       explainSetInteger(iSub1, pParse->iNextSelectId);
95981:       rc = sqlite3Select(pParse, pPrior, &dest);
95982:       p->pLimit = 0;
95983:       p->pOffset = 0;
95984:       if( rc ){
95985:         goto multi_select_end;
95986:       }
95987:       p->pPrior = 0;
95988:       p->iLimit = pPrior->iLimit;
95989:       p->iOffset = pPrior->iOffset;
95990:       if( p->iLimit ){
95991:         addr = sqlite3VdbeAddOp1(v, OP_IfZero, p->iLimit);
95992:         VdbeComment((v, "Jump ahead if LIMIT reached"));
95993:       }
95994:       explainSetInteger(iSub2, pParse->iNextSelectId);
95995:       rc = sqlite3Select(pParse, p, &dest);
95996:       testcase( rc!=SQLITE_OK );
95997:       pDelete = p->pPrior;
95998:       p->pPrior = pPrior;
95999:       p->nSelectRow += pPrior->nSelectRow;
96000:       if( pPrior->pLimit
96001:        && sqlite3ExprIsInteger(pPrior->pLimit, &nLimit)
96002:        && p->nSelectRow > (double)nLimit 
96003:       ){
96004:         p->nSelectRow = (double)nLimit;
96005:       }
96006:       if( addr ){
96007:         sqlite3VdbeJumpHere(v, addr);
96008:       }
96009:       break;
96010:     }
96011:     case TK_EXCEPT:
96012:     case TK_UNION: {
96013:       int unionTab;    /* Cursor number of the temporary table holding result */
96014:       u8 op = 0;       /* One of the SRT_ operations to apply to self */
96015:       int priorOp;     /* The SRT_ operation to apply to prior selects */
96016:       Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */
96017:       int addr;
96018:       SelectDest uniondest;
96019: 
96020:       testcase( p->op==TK_EXCEPT );
96021:       testcase( p->op==TK_UNION );
96022:       priorOp = SRT_Union;
96023:       if( dest.eDest==priorOp && ALWAYS(!p->pLimit &&!p->pOffset) ){
96024:         /* We can reuse a temporary table generated by a SELECT to our
96025:         ** right.
96026:         */
96027:         assert( p->pRightmost!=p );  /* Can only happen for leftward elements
96028:                                      ** of a 3-way or more compound */
96029:         assert( p->pLimit==0 );      /* Not allowed on leftward elements */
96030:         assert( p->pOffset==0 );     /* Not allowed on leftward elements */
96031:         unionTab = dest.iParm;
96032:       }else{
96033:         /* We will need to create our own temporary table to hold the
96034:         ** intermediate results.
96035:         */
96036:         unionTab = pParse->nTab++;
96037:         assert( p->pOrderBy==0 );
96038:         addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0);
96039:         assert( p->addrOpenEphm[0] == -1 );
96040:         p->addrOpenEphm[0] = addr;
96041:         p->pRightmost->selFlags |= SF_UsesEphemeral;
96042:         assert( p->pEList );
96043:       }
96044: 
96045:       /* Code the SELECT statements to our left
96046:       */
96047:       assert( !pPrior->pOrderBy );
96048:       sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
96049:       explainSetInteger(iSub1, pParse->iNextSelectId);
96050:       rc = sqlite3Select(pParse, pPrior, &uniondest);
96051:       if( rc ){
96052:         goto multi_select_end;
96053:       }
96054: 
96055:       /* Code the current SELECT statement
96056:       */
96057:       if( p->op==TK_EXCEPT ){
96058:         op = SRT_Except;
96059:       }else{
96060:         assert( p->op==TK_UNION );
96061:         op = SRT_Union;
96062:       }
96063:       p->pPrior = 0;
96064:       pLimit = p->pLimit;
96065:       p->pLimit = 0;
96066:       pOffset = p->pOffset;
96067:       p->pOffset = 0;
96068:       uniondest.eDest = op;
96069:       explainSetInteger(iSub2, pParse->iNextSelectId);
96070:       rc = sqlite3Select(pParse, p, &uniondest);
96071:       testcase( rc!=SQLITE_OK );
96072:       /* Query flattening in sqlite3Select() might refill p->pOrderBy.
96073:       ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */
96074:       sqlite3ExprListDelete(db, p->pOrderBy);
96075:       pDelete = p->pPrior;
96076:       p->pPrior = pPrior;
96077:       p->pOrderBy = 0;
96078:       if( p->op==TK_UNION ) p->nSelectRow += pPrior->nSelectRow;
96079:       sqlite3ExprDelete(db, p->pLimit);
96080:       p->pLimit = pLimit;
96081:       p->pOffset = pOffset;
96082:       p->iLimit = 0;
96083:       p->iOffset = 0;
96084: 
96085:       /* Convert the data in the temporary table into whatever form
96086:       ** it is that we currently need.
96087:       */
96088:       assert( unionTab==dest.iParm || dest.eDest!=priorOp );
96089:       if( dest.eDest!=priorOp ){
96090:         int iCont, iBreak, iStart;
96091:         assert( p->pEList );
96092:         if( dest.eDest==SRT_Output ){
96093:           Select *pFirst = p;
96094:           while( pFirst->pPrior ) pFirst = pFirst->pPrior;
96095:           generateColumnNames(pParse, 0, pFirst->pEList);
96096:         }
96097:         iBreak = sqlite3VdbeMakeLabel(v);
96098:         iCont = sqlite3VdbeMakeLabel(v);
96099:         computeLimitRegisters(pParse, p, iBreak);
96100:         sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak);
96101:         iStart = sqlite3VdbeCurrentAddr(v);
96102:         selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr,
96103:                         0, -1, &dest, iCont, iBreak);
96104:         sqlite3VdbeResolveLabel(v, iCont);
96105:         sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart);
96106:         sqlite3VdbeResolveLabel(v, iBreak);
96107:         sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0);
96108:       }
96109:       break;
96110:     }
96111:     default: assert( p->op==TK_INTERSECT ); {
96112:       int tab1, tab2;
96113:       int iCont, iBreak, iStart;
96114:       Expr *pLimit, *pOffset;
96115:       int addr;
96116:       SelectDest intersectdest;
96117:       int r1;
96118: 
96119:       /* INTERSECT is different from the others since it requires
96120:       ** two temporary tables.  Hence it has its own case.  Begin
96121:       ** by allocating the tables we will need.
96122:       */
96123:       tab1 = pParse->nTab++;
96124:       tab2 = pParse->nTab++;
96125:       assert( p->pOrderBy==0 );
96126: 
96127:       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0);
96128:       assert( p->addrOpenEphm[0] == -1 );
96129:       p->addrOpenEphm[0] = addr;
96130:       p->pRightmost->selFlags |= SF_UsesEphemeral;
96131:       assert( p->pEList );
96132: 
96133:       /* Code the SELECTs to our left into temporary table "tab1".
96134:       */
96135:       sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
96136:       explainSetInteger(iSub1, pParse->iNextSelectId);
96137:       rc = sqlite3Select(pParse, pPrior, &intersectdest);
96138:       if( rc ){
96139:         goto multi_select_end;
96140:       }
96141: 
96142:       /* Code the current SELECT into temporary table "tab2"
96143:       */
96144:       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0);
96145:       assert( p->addrOpenEphm[1] == -1 );
96146:       p->addrOpenEphm[1] = addr;
96147:       p->pPrior = 0;
96148:       pLimit = p->pLimit;
96149:       p->pLimit = 0;
96150:       pOffset = p->pOffset;
96151:       p->pOffset = 0;
96152:       intersectdest.iParm = tab2;
96153:       explainSetInteger(iSub2, pParse->iNextSelectId);
96154:       rc = sqlite3Select(pParse, p, &intersectdest);
96155:       testcase( rc!=SQLITE_OK );
96156:       pDelete = p->pPrior;
96157:       p->pPrior = pPrior;
96158:       if( p->nSelectRow>pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
96159:       sqlite3ExprDelete(db, p->pLimit);
96160:       p->pLimit = pLimit;
96161:       p->pOffset = pOffset;
96162: 
96163:       /* Generate code to take the intersection of the two temporary
96164:       ** tables.
96165:       */
96166:       assert( p->pEList );
96167:       if( dest.eDest==SRT_Output ){
96168:         Select *pFirst = p;
96169:         while( pFirst->pPrior ) pFirst = pFirst->pPrior;
96170:         generateColumnNames(pParse, 0, pFirst->pEList);
96171:       }
96172:       iBreak = sqlite3VdbeMakeLabel(v);
96173:       iCont = sqlite3VdbeMakeLabel(v);
96174:       computeLimitRegisters(pParse, p, iBreak);
96175:       sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak);
96176:       r1 = sqlite3GetTempReg(pParse);
96177:       iStart = sqlite3VdbeAddOp2(v, OP_RowKey, tab1, r1);
96178:       sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0);
96179:       sqlite3ReleaseTempReg(pParse, r1);
96180:       selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr,
96181:                       0, -1, &dest, iCont, iBreak);
96182:       sqlite3VdbeResolveLabel(v, iCont);
96183:       sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart);
96184:       sqlite3VdbeResolveLabel(v, iBreak);
96185:       sqlite3VdbeAddOp2(v, OP_Close, tab2, 0);
96186:       sqlite3VdbeAddOp2(v, OP_Close, tab1, 0);
96187:       break;
96188:     }
96189:   }
96190: 
96191:   explainComposite(pParse, p->op, iSub1, iSub2, p->op!=TK_ALL);
96192: 
96193:   /* Compute collating sequences used by 
96194:   ** temporary tables needed to implement the compound select.
96195:   ** Attach the KeyInfo structure to all temporary tables.
96196:   **
96197:   ** This section is run by the right-most SELECT statement only.
96198:   ** SELECT statements to the left always skip this part.  The right-most
96199:   ** SELECT might also skip this part if it has no ORDER BY clause and
96200:   ** no temp tables are required.
96201:   */
96202:   if( p->selFlags & SF_UsesEphemeral ){
96203:     int i;                        /* Loop counter */
96204:     KeyInfo *pKeyInfo;            /* Collating sequence for the result set */
96205:     Select *pLoop;                /* For looping through SELECT statements */
96206:     CollSeq **apColl;             /* For looping through pKeyInfo->aColl[] */
96207:     int nCol;                     /* Number of columns in result set */
96208: 
96209:     assert( p->pRightmost==p );
96210:     nCol = p->pEList->nExpr;
96211:     pKeyInfo = sqlite3DbMallocZero(db,
96212:                        sizeof(*pKeyInfo)+nCol*(sizeof(CollSeq*) + 1));
96213:     if( !pKeyInfo ){
96214:       rc = SQLITE_NOMEM;
96215:       goto multi_select_end;
96216:     }
96217: 
96218:     pKeyInfo->enc = ENC(db);
96219:     pKeyInfo->nField = (u16)nCol;
96220: 
96221:     for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){
96222:       *apColl = multiSelectCollSeq(pParse, p, i);
96223:       if( 0==*apColl ){
96224:         *apColl = db->pDfltColl;
96225:       }
96226:     }
96227: 
96228:     for(pLoop=p; pLoop; pLoop=pLoop->pPrior){
96229:       for(i=0; i<2; i++){
96230:         int addr = pLoop->addrOpenEphm[i];
96231:         if( addr<0 ){
96232:           /* If [0] is unused then [1] is also unused.  So we can
96233:           ** always safely abort as soon as the first unused slot is found */
96234:           assert( pLoop->addrOpenEphm[1]<0 );
96235:           break;
96236:         }
96237:         sqlite3VdbeChangeP2(v, addr, nCol);
96238:         sqlite3VdbeChangeP4(v, addr, (char*)pKeyInfo, P4_KEYINFO);
96239:         pLoop->addrOpenEphm[i] = -1;
96240:       }
96241:     }
96242:     sqlite3DbFree(db, pKeyInfo);
96243:   }
96244: 
96245: multi_select_end:
96246:   pDest->iMem = dest.iMem;
96247:   pDest->nMem = dest.nMem;
96248:   sqlite3SelectDelete(db, pDelete);
96249:   return rc;
96250: }
96251: #endif /* SQLITE_OMIT_COMPOUND_SELECT */
96252: 
96253: /*
96254: ** Code an output subroutine for a coroutine implementation of a
96255: ** SELECT statment.
96256: **
96257: ** The data to be output is contained in pIn->iMem.  There are
96258: ** pIn->nMem columns to be output.  pDest is where the output should
96259: ** be sent.
96260: **
96261: ** regReturn is the number of the register holding the subroutine
96262: ** return address.
96263: **
96264: ** If regPrev>0 then it is the first register in a vector that
96265: ** records the previous output.  mem[regPrev] is a flag that is false
96266: ** if there has been no previous output.  If regPrev>0 then code is
96267: ** generated to suppress duplicates.  pKeyInfo is used for comparing
96268: ** keys.
96269: **
96270: ** If the LIMIT found in p->iLimit is reached, jump immediately to
96271: ** iBreak.
96272: */
96273: static int generateOutputSubroutine(
96274:   Parse *pParse,          /* Parsing context */
96275:   Select *p,              /* The SELECT statement */
96276:   SelectDest *pIn,        /* Coroutine supplying data */
96277:   SelectDest *pDest,      /* Where to send the data */
96278:   int regReturn,          /* The return address register */
96279:   int regPrev,            /* Previous result register.  No uniqueness if 0 */
96280:   KeyInfo *pKeyInfo,      /* For comparing with previous entry */
96281:   int p4type,             /* The p4 type for pKeyInfo */
96282:   int iBreak              /* Jump here if we hit the LIMIT */
96283: ){
96284:   Vdbe *v = pParse->pVdbe;
96285:   int iContinue;
96286:   int addr;
96287: 
96288:   addr = sqlite3VdbeCurrentAddr(v);
96289:   iContinue = sqlite3VdbeMakeLabel(v);
96290: 
96291:   /* Suppress duplicates for UNION, EXCEPT, and INTERSECT 
96292:   */
96293:   if( regPrev ){
96294:     int j1, j2;
96295:     j1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev);
96296:     j2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iMem, regPrev+1, pIn->nMem,
96297:                               (char*)pKeyInfo, p4type);
96298:     sqlite3VdbeAddOp3(v, OP_Jump, j2+2, iContinue, j2+2);
96299:     sqlite3VdbeJumpHere(v, j1);
96300:     sqlite3ExprCodeCopy(pParse, pIn->iMem, regPrev+1, pIn->nMem);
96301:     sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev);
96302:   }
96303:   if( pParse->db->mallocFailed ) return 0;
96304: 
96305:   /* Suppress the the first OFFSET entries if there is an OFFSET clause
96306:   */
96307:   codeOffset(v, p, iContinue);
96308: 
96309:   switch( pDest->eDest ){
96310:     /* Store the result as data using a unique key.
96311:     */
96312:     case SRT_Table:
96313:     case SRT_EphemTab: {
96314:       int r1 = sqlite3GetTempReg(pParse);
96315:       int r2 = sqlite3GetTempReg(pParse);
96316:       testcase( pDest->eDest==SRT_Table );
96317:       testcase( pDest->eDest==SRT_EphemTab );
96318:       sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iMem, pIn->nMem, r1);
96319:       sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iParm, r2);
96320:       sqlite3VdbeAddOp3(v, OP_Insert, pDest->iParm, r1, r2);
96321:       sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
96322:       sqlite3ReleaseTempReg(pParse, r2);
96323:       sqlite3ReleaseTempReg(pParse, r1);
96324:       break;
96325:     }
96326: 
96327: #ifndef SQLITE_OMIT_SUBQUERY
96328:     /* If we are creating a set for an "expr IN (SELECT ...)" construct,
96329:     ** then there should be a single item on the stack.  Write this
96330:     ** item into the set table with bogus data.
96331:     */
96332:     case SRT_Set: {
96333:       int r1;
96334:       assert( pIn->nMem==1 );
96335:       p->affinity = 
96336:          sqlite3CompareAffinity(p->pEList->a[0].pExpr, pDest->affinity);
96337:       r1 = sqlite3GetTempReg(pParse);
96338:       sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iMem, 1, r1, &p->affinity, 1);
96339:       sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, 1);
96340:       sqlite3VdbeAddOp2(v, OP_IdxInsert, pDest->iParm, r1);
96341:       sqlite3ReleaseTempReg(pParse, r1);
96342:       break;
96343:     }
96344: 
96345: #if 0  /* Never occurs on an ORDER BY query */
96346:     /* If any row exist in the result set, record that fact and abort.
96347:     */
96348:     case SRT_Exists: {
96349:       sqlite3VdbeAddOp2(v, OP_Integer, 1, pDest->iParm);
96350:       /* The LIMIT clause will terminate the loop for us */
96351:       break;
96352:     }
96353: #endif
96354: 
96355:     /* If this is a scalar select that is part of an expression, then
96356:     ** store the results in the appropriate memory cell and break out
96357:     ** of the scan loop.
96358:     */
96359:     case SRT_Mem: {
96360:       assert( pIn->nMem==1 );
96361:       sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iParm, 1);
96362:       /* The LIMIT clause will jump out of the loop for us */
96363:       break;
96364:     }
96365: #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
96366: 
96367:     /* The results are stored in a sequence of registers
96368:     ** starting at pDest->iMem.  Then the co-routine yields.
96369:     */
96370:     case SRT_Coroutine: {
96371:       if( pDest->iMem==0 ){
96372:         pDest->iMem = sqlite3GetTempRange(pParse, pIn->nMem);
96373:         pDest->nMem = pIn->nMem;
96374:       }
96375:       sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iMem, pDest->nMem);
96376:       sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
96377:       break;
96378:     }
96379: 
96380:     /* If none of the above, then the result destination must be
96381:     ** SRT_Output.  This routine is never called with any other
96382:     ** destination other than the ones handled above or SRT_Output.
96383:     **
96384:     ** For SRT_Output, results are stored in a sequence of registers.  
96385:     ** Then the OP_ResultRow opcode is used to cause sqlite3_step() to
96386:     ** return the next row of result.
96387:     */
96388:     default: {
96389:       assert( pDest->eDest==SRT_Output );
96390:       sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iMem, pIn->nMem);
96391:       sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, pIn->nMem);
96392:       break;
96393:     }
96394:   }
96395: 
96396:   /* Jump to the end of the loop if the LIMIT is reached.
96397:   */
96398:   if( p->iLimit ){
96399:     sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1);
96400:   }
96401: 
96402:   /* Generate the subroutine return
96403:   */
96404:   sqlite3VdbeResolveLabel(v, iContinue);
96405:   sqlite3VdbeAddOp1(v, OP_Return, regReturn);
96406: 
96407:   return addr;
96408: }
96409: 
96410: /*
96411: ** Alternative compound select code generator for cases when there
96412: ** is an ORDER BY clause.
96413: **
96414: ** We assume a query of the following form:
96415: **
96416: **      <selectA>  <operator>  <selectB>  ORDER BY <orderbylist>
96417: **
96418: ** <operator> is one of UNION ALL, UNION, EXCEPT, or INTERSECT.  The idea
96419: ** is to code both <selectA> and <selectB> with the ORDER BY clause as
96420: ** co-routines.  Then run the co-routines in parallel and merge the results
96421: ** into the output.  In addition to the two coroutines (called selectA and
96422: ** selectB) there are 7 subroutines:
96423: **
96424: **    outA:    Move the output of the selectA coroutine into the output
96425: **             of the compound query.
96426: **
96427: **    outB:    Move the output of the selectB coroutine into the output
96428: **             of the compound query.  (Only generated for UNION and
96429: **             UNION ALL.  EXCEPT and INSERTSECT never output a row that
96430: **             appears only in B.)
96431: **
96432: **    AltB:    Called when there is data from both coroutines and A<B.
96433: **
96434: **    AeqB:    Called when there is data from both coroutines and A==B.
96435: **
96436: **    AgtB:    Called when there is data from both coroutines and A>B.
96437: **
96438: **    EofA:    Called when data is exhausted from selectA.
96439: **
96440: **    EofB:    Called when data is exhausted from selectB.
96441: **
96442: ** The implementation of the latter five subroutines depend on which 
96443: ** <operator> is used:
96444: **
96445: **
96446: **             UNION ALL         UNION            EXCEPT          INTERSECT
96447: **          -------------  -----------------  --------------  -----------------
96448: **   AltB:   outA, nextA      outA, nextA       outA, nextA         nextA
96449: **
96450: **   AeqB:   outA, nextA         nextA             nextA         outA, nextA
96451: **
96452: **   AgtB:   outB, nextB      outB, nextB          nextB            nextB
96453: **
96454: **   EofA:   outB, nextB      outB, nextB          halt             halt
96455: **
96456: **   EofB:   outA, nextA      outA, nextA       outA, nextA         halt
96457: **
96458: ** In the AltB, AeqB, and AgtB subroutines, an EOF on A following nextA
96459: ** causes an immediate jump to EofA and an EOF on B following nextB causes
96460: ** an immediate jump to EofB.  Within EofA and EofB, and EOF on entry or
96461: ** following nextX causes a jump to the end of the select processing.
96462: **
96463: ** Duplicate removal in the UNION, EXCEPT, and INTERSECT cases is handled
96464: ** within the output subroutine.  The regPrev register set holds the previously
96465: ** output value.  A comparison is made against this value and the output
96466: ** is skipped if the next results would be the same as the previous.
96467: **
96468: ** The implementation plan is to implement the two coroutines and seven
96469: ** subroutines first, then put the control logic at the bottom.  Like this:
96470: **
96471: **          goto Init
96472: **     coA: coroutine for left query (A)
96473: **     coB: coroutine for right query (B)
96474: **    outA: output one row of A
96475: **    outB: output one row of B (UNION and UNION ALL only)
96476: **    EofA: ...
96477: **    EofB: ...
96478: **    AltB: ...
96479: **    AeqB: ...
96480: **    AgtB: ...
96481: **    Init: initialize coroutine registers
96482: **          yield coA
96483: **          if eof(A) goto EofA
96484: **          yield coB
96485: **          if eof(B) goto EofB
96486: **    Cmpr: Compare A, B
96487: **          Jump AltB, AeqB, AgtB
96488: **     End: ...
96489: **
96490: ** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not
96491: ** actually called using Gosub and they do not Return.  EofA and EofB loop
96492: ** until all data is exhausted then jump to the "end" labe.  AltB, AeqB,
96493: ** and AgtB jump to either L2 or to one of EofA or EofB.
96494: */
96495: #ifndef SQLITE_OMIT_COMPOUND_SELECT
96496: static int multiSelectOrderBy(
96497:   Parse *pParse,        /* Parsing context */
96498:   Select *p,            /* The right-most of SELECTs to be coded */
96499:   SelectDest *pDest     /* What to do with query results */
96500: ){
96501:   int i, j;             /* Loop counters */
96502:   Select *pPrior;       /* Another SELECT immediately to our left */
96503:   Vdbe *v;              /* Generate code to this VDBE */
96504:   SelectDest destA;     /* Destination for coroutine A */
96505:   SelectDest destB;     /* Destination for coroutine B */
96506:   int regAddrA;         /* Address register for select-A coroutine */
96507:   int regEofA;          /* Flag to indicate when select-A is complete */
96508:   int regAddrB;         /* Address register for select-B coroutine */
96509:   int regEofB;          /* Flag to indicate when select-B is complete */
96510:   int addrSelectA;      /* Address of the select-A coroutine */
96511:   int addrSelectB;      /* Address of the select-B coroutine */
96512:   int regOutA;          /* Address register for the output-A subroutine */
96513:   int regOutB;          /* Address register for the output-B subroutine */
96514:   int addrOutA;         /* Address of the output-A subroutine */
96515:   int addrOutB = 0;     /* Address of the output-B subroutine */
96516:   int addrEofA;         /* Address of the select-A-exhausted subroutine */
96517:   int addrEofB;         /* Address of the select-B-exhausted subroutine */
96518:   int addrAltB;         /* Address of the A<B subroutine */
96519:   int addrAeqB;         /* Address of the A==B subroutine */
96520:   int addrAgtB;         /* Address of the A>B subroutine */
96521:   int regLimitA;        /* Limit register for select-A */
96522:   int regLimitB;        /* Limit register for select-A */
96523:   int regPrev;          /* A range of registers to hold previous output */
96524:   int savedLimit;       /* Saved value of p->iLimit */
96525:   int savedOffset;      /* Saved value of p->iOffset */
96526:   int labelCmpr;        /* Label for the start of the merge algorithm */
96527:   int labelEnd;         /* Label for the end of the overall SELECT stmt */
96528:   int j1;               /* Jump instructions that get retargetted */
96529:   int op;               /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */
96530:   KeyInfo *pKeyDup = 0; /* Comparison information for duplicate removal */
96531:   KeyInfo *pKeyMerge;   /* Comparison information for merging rows */
96532:   sqlite3 *db;          /* Database connection */
96533:   ExprList *pOrderBy;   /* The ORDER BY clause */
96534:   int nOrderBy;         /* Number of terms in the ORDER BY clause */
96535:   int *aPermute;        /* Mapping from ORDER BY terms to result set columns */
96536: #ifndef SQLITE_OMIT_EXPLAIN
96537:   int iSub1;            /* EQP id of left-hand query */
96538:   int iSub2;            /* EQP id of right-hand query */
96539: #endif
96540: 
96541:   assert( p->pOrderBy!=0 );
96542:   assert( pKeyDup==0 ); /* "Managed" code needs this.  Ticket #3382. */
96543:   db = pParse->db;
96544:   v = pParse->pVdbe;
96545:   assert( v!=0 );       /* Already thrown the error if VDBE alloc failed */
96546:   labelEnd = sqlite3VdbeMakeLabel(v);
96547:   labelCmpr = sqlite3VdbeMakeLabel(v);
96548: 
96549: 
96550:   /* Patch up the ORDER BY clause
96551:   */
96552:   op = p->op;  
96553:   pPrior = p->pPrior;
96554:   assert( pPrior->pOrderBy==0 );
96555:   pOrderBy = p->pOrderBy;
96556:   assert( pOrderBy );
96557:   nOrderBy = pOrderBy->nExpr;
96558: 
96559:   /* For operators other than UNION ALL we have to make sure that
96560:   ** the ORDER BY clause covers every term of the result set.  Add
96561:   ** terms to the ORDER BY clause as necessary.
96562:   */
96563:   if( op!=TK_ALL ){
96564:     for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){
96565:       struct ExprList_item *pItem;
96566:       for(j=0, pItem=pOrderBy->a; j<nOrderBy; j++, pItem++){
96567:         assert( pItem->iOrderByCol>0 );
96568:         if( pItem->iOrderByCol==i ) break;
96569:       }
96570:       if( j==nOrderBy ){
96571:         Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0);
96572:         if( pNew==0 ) return SQLITE_NOMEM;
96573:         pNew->flags |= EP_IntValue;
96574:         pNew->u.iValue = i;
96575:         pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew);
96576:         pOrderBy->a[nOrderBy++].iOrderByCol = (u16)i;
96577:       }
96578:     }
96579:   }
96580: 
96581:   /* Compute the comparison permutation and keyinfo that is used with
96582:   ** the permutation used to determine if the next
96583:   ** row of results comes from selectA or selectB.  Also add explicit
96584:   ** collations to the ORDER BY clause terms so that when the subqueries
96585:   ** to the right and the left are evaluated, they use the correct
96586:   ** collation.
96587:   */
96588:   aPermute = sqlite3DbMallocRaw(db, sizeof(int)*nOrderBy);
96589:   if( aPermute ){
96590:     struct ExprList_item *pItem;
96591:     for(i=0, pItem=pOrderBy->a; i<nOrderBy; i++, pItem++){
96592:       assert( pItem->iOrderByCol>0  && pItem->iOrderByCol<=p->pEList->nExpr );
96593:       aPermute[i] = pItem->iOrderByCol - 1;
96594:     }
96595:     pKeyMerge =
96596:       sqlite3DbMallocRaw(db, sizeof(*pKeyMerge)+nOrderBy*(sizeof(CollSeq*)+1));
96597:     if( pKeyMerge ){
96598:       pKeyMerge->aSortOrder = (u8*)&pKeyMerge->aColl[nOrderBy];
96599:       pKeyMerge->nField = (u16)nOrderBy;
96600:       pKeyMerge->enc = ENC(db);
96601:       for(i=0; i<nOrderBy; i++){
96602:         CollSeq *pColl;
96603:         Expr *pTerm = pOrderBy->a[i].pExpr;
96604:         if( pTerm->flags & EP_ExpCollate ){
96605:           pColl = pTerm->pColl;
96606:         }else{
96607:           pColl = multiSelectCollSeq(pParse, p, aPermute[i]);
96608:           pTerm->flags |= EP_ExpCollate;
96609:           pTerm->pColl = pColl;
96610:         }
96611:         pKeyMerge->aColl[i] = pColl;
96612:         pKeyMerge->aSortOrder[i] = pOrderBy->a[i].sortOrder;
96613:       }
96614:     }
96615:   }else{
96616:     pKeyMerge = 0;
96617:   }
96618: 
96619:   /* Reattach the ORDER BY clause to the query.
96620:   */
96621:   p->pOrderBy = pOrderBy;
96622:   pPrior->pOrderBy = sqlite3ExprListDup(pParse->db, pOrderBy, 0);
96623: 
96624:   /* Allocate a range of temporary registers and the KeyInfo needed
96625:   ** for the logic that removes duplicate result rows when the
96626:   ** operator is UNION, EXCEPT, or INTERSECT (but not UNION ALL).
96627:   */
96628:   if( op==TK_ALL ){
96629:     regPrev = 0;
96630:   }else{
96631:     int nExpr = p->pEList->nExpr;
96632:     assert( nOrderBy>=nExpr || db->mallocFailed );
96633:     regPrev = sqlite3GetTempRange(pParse, nExpr+1);
96634:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev);
96635:     pKeyDup = sqlite3DbMallocZero(db,
96636:                   sizeof(*pKeyDup) + nExpr*(sizeof(CollSeq*)+1) );
96637:     if( pKeyDup ){
96638:       pKeyDup->aSortOrder = (u8*)&pKeyDup->aColl[nExpr];
96639:       pKeyDup->nField = (u16)nExpr;
96640:       pKeyDup->enc = ENC(db);
96641:       for(i=0; i<nExpr; i++){
96642:         pKeyDup->aColl[i] = multiSelectCollSeq(pParse, p, i);
96643:         pKeyDup->aSortOrder[i] = 0;
96644:       }
96645:     }
96646:   }
96647:  
96648:   /* Separate the left and the right query from one another
96649:   */
96650:   p->pPrior = 0;
96651:   sqlite3ResolveOrderGroupBy(pParse, p, p->pOrderBy, "ORDER");
96652:   if( pPrior->pPrior==0 ){
96653:     sqlite3ResolveOrderGroupBy(pParse, pPrior, pPrior->pOrderBy, "ORDER");
96654:   }
96655: 
96656:   /* Compute the limit registers */
96657:   computeLimitRegisters(pParse, p, labelEnd);
96658:   if( p->iLimit && op==TK_ALL ){
96659:     regLimitA = ++pParse->nMem;
96660:     regLimitB = ++pParse->nMem;
96661:     sqlite3VdbeAddOp2(v, OP_Copy, p->iOffset ? p->iOffset+1 : p->iLimit,
96662:                                   regLimitA);
96663:     sqlite3VdbeAddOp2(v, OP_Copy, regLimitA, regLimitB);
96664:   }else{
96665:     regLimitA = regLimitB = 0;
96666:   }
96667:   sqlite3ExprDelete(db, p->pLimit);
96668:   p->pLimit = 0;
96669:   sqlite3ExprDelete(db, p->pOffset);
96670:   p->pOffset = 0;
96671: 
96672:   regAddrA = ++pParse->nMem;
96673:   regEofA = ++pParse->nMem;
96674:   regAddrB = ++pParse->nMem;
96675:   regEofB = ++pParse->nMem;
96676:   regOutA = ++pParse->nMem;
96677:   regOutB = ++pParse->nMem;
96678:   sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA);
96679:   sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB);
96680: 
96681:   /* Jump past the various subroutines and coroutines to the main
96682:   ** merge loop
96683:   */
96684:   j1 = sqlite3VdbeAddOp0(v, OP_Goto);
96685:   addrSelectA = sqlite3VdbeCurrentAddr(v);
96686: 
96687: 
96688:   /* Generate a coroutine to evaluate the SELECT statement to the
96689:   ** left of the compound operator - the "A" select.
96690:   */
96691:   VdbeNoopComment((v, "Begin coroutine for left SELECT"));
96692:   pPrior->iLimit = regLimitA;
96693:   explainSetInteger(iSub1, pParse->iNextSelectId);
96694:   sqlite3Select(pParse, pPrior, &destA);
96695:   sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofA);
96696:   sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
96697:   VdbeNoopComment((v, "End coroutine for left SELECT"));
96698: 
96699:   /* Generate a coroutine to evaluate the SELECT statement on 
96700:   ** the right - the "B" select
96701:   */
96702:   addrSelectB = sqlite3VdbeCurrentAddr(v);
96703:   VdbeNoopComment((v, "Begin coroutine for right SELECT"));
96704:   savedLimit = p->iLimit;
96705:   savedOffset = p->iOffset;
96706:   p->iLimit = regLimitB;
96707:   p->iOffset = 0;  
96708:   explainSetInteger(iSub2, pParse->iNextSelectId);
96709:   sqlite3Select(pParse, p, &destB);
96710:   p->iLimit = savedLimit;
96711:   p->iOffset = savedOffset;
96712:   sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofB);
96713:   sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
96714:   VdbeNoopComment((v, "End coroutine for right SELECT"));
96715: 
96716:   /* Generate a subroutine that outputs the current row of the A
96717:   ** select as the next output row of the compound select.
96718:   */
96719:   VdbeNoopComment((v, "Output routine for A"));
96720:   addrOutA = generateOutputSubroutine(pParse,
96721:                  p, &destA, pDest, regOutA,
96722:                  regPrev, pKeyDup, P4_KEYINFO_HANDOFF, labelEnd);
96723:   
96724:   /* Generate a subroutine that outputs the current row of the B
96725:   ** select as the next output row of the compound select.
96726:   */
96727:   if( op==TK_ALL || op==TK_UNION ){
96728:     VdbeNoopComment((v, "Output routine for B"));
96729:     addrOutB = generateOutputSubroutine(pParse,
96730:                  p, &destB, pDest, regOutB,
96731:                  regPrev, pKeyDup, P4_KEYINFO_STATIC, labelEnd);
96732:   }
96733: 
96734:   /* Generate a subroutine to run when the results from select A
96735:   ** are exhausted and only data in select B remains.
96736:   */
96737:   VdbeNoopComment((v, "eof-A subroutine"));
96738:   if( op==TK_EXCEPT || op==TK_INTERSECT ){
96739:     addrEofA = sqlite3VdbeAddOp2(v, OP_Goto, 0, labelEnd);
96740:   }else{  
96741:     addrEofA = sqlite3VdbeAddOp2(v, OP_If, regEofB, labelEnd);
96742:     sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
96743:     sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
96744:     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofA);
96745:     p->nSelectRow += pPrior->nSelectRow;
96746:   }
96747: 
96748:   /* Generate a subroutine to run when the results from select B
96749:   ** are exhausted and only data in select A remains.
96750:   */
96751:   if( op==TK_INTERSECT ){
96752:     addrEofB = addrEofA;
96753:     if( p->nSelectRow > pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
96754:   }else{  
96755:     VdbeNoopComment((v, "eof-B subroutine"));
96756:     addrEofB = sqlite3VdbeAddOp2(v, OP_If, regEofA, labelEnd);
96757:     sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
96758:     sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
96759:     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofB);
96760:   }
96761: 
96762:   /* Generate code to handle the case of A<B
96763:   */
96764:   VdbeNoopComment((v, "A-lt-B subroutine"));
96765:   addrAltB = sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
96766:   sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
96767:   sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
96768:   sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
96769: 
96770:   /* Generate code to handle the case of A==B
96771:   */
96772:   if( op==TK_ALL ){
96773:     addrAeqB = addrAltB;
96774:   }else if( op==TK_INTERSECT ){
96775:     addrAeqB = addrAltB;
96776:     addrAltB++;
96777:   }else{
96778:     VdbeNoopComment((v, "A-eq-B subroutine"));
96779:     addrAeqB =
96780:     sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
96781:     sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
96782:     sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
96783:   }
96784: 
96785:   /* Generate code to handle the case of A>B
96786:   */
96787:   VdbeNoopComment((v, "A-gt-B subroutine"));
96788:   addrAgtB = sqlite3VdbeCurrentAddr(v);
96789:   if( op==TK_ALL || op==TK_UNION ){
96790:     sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
96791:   }
96792:   sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
96793:   sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB);
96794:   sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
96795: 
96796:   /* This code runs once to initialize everything.
96797:   */
96798:   sqlite3VdbeJumpHere(v, j1);
96799:   sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofA);
96800:   sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofB);
96801:   sqlite3VdbeAddOp2(v, OP_Gosub, regAddrA, addrSelectA);
96802:   sqlite3VdbeAddOp2(v, OP_Gosub, regAddrB, addrSelectB);
96803:   sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
96804:   sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB);
96805: 
96806:   /* Implement the main merge loop
96807:   */
96808:   sqlite3VdbeResolveLabel(v, labelCmpr);
96809:   sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY);
96810:   sqlite3VdbeAddOp4(v, OP_Compare, destA.iMem, destB.iMem, nOrderBy,
96811:                          (char*)pKeyMerge, P4_KEYINFO_HANDOFF);
96812:   sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB);
96813: 
96814:   /* Release temporary registers
96815:   */
96816:   if( regPrev ){
96817:     sqlite3ReleaseTempRange(pParse, regPrev, nOrderBy+1);
96818:   }
96819: 
96820:   /* Jump to the this point in order to terminate the query.
96821:   */
96822:   sqlite3VdbeResolveLabel(v, labelEnd);
96823: 
96824:   /* Set the number of output columns
96825:   */
96826:   if( pDest->eDest==SRT_Output ){
96827:     Select *pFirst = pPrior;
96828:     while( pFirst->pPrior ) pFirst = pFirst->pPrior;
96829:     generateColumnNames(pParse, 0, pFirst->pEList);
96830:   }
96831: 
96832:   /* Reassembly the compound query so that it will be freed correctly
96833:   ** by the calling function */
96834:   if( p->pPrior ){
96835:     sqlite3SelectDelete(db, p->pPrior);
96836:   }
96837:   p->pPrior = pPrior;
96838: 
96839:   /*** TBD:  Insert subroutine calls to close cursors on incomplete
96840:   **** subqueries ****/
96841:   explainComposite(pParse, p->op, iSub1, iSub2, 0);
96842:   return SQLITE_OK;
96843: }
96844: #endif
96845: 
96846: #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
96847: /* Forward Declarations */
96848: static void substExprList(sqlite3*, ExprList*, int, ExprList*);
96849: static void substSelect(sqlite3*, Select *, int, ExprList *);
96850: 
96851: /*
96852: ** Scan through the expression pExpr.  Replace every reference to
96853: ** a column in table number iTable with a copy of the iColumn-th
96854: ** entry in pEList.  (But leave references to the ROWID column 
96855: ** unchanged.)
96856: **
96857: ** This routine is part of the flattening procedure.  A subquery
96858: ** whose result set is defined by pEList appears as entry in the
96859: ** FROM clause of a SELECT such that the VDBE cursor assigned to that
96860: ** FORM clause entry is iTable.  This routine make the necessary 
96861: ** changes to pExpr so that it refers directly to the source table
96862: ** of the subquery rather the result set of the subquery.
96863: */
96864: static Expr *substExpr(
96865:   sqlite3 *db,        /* Report malloc errors to this connection */
96866:   Expr *pExpr,        /* Expr in which substitution occurs */
96867:   int iTable,         /* Table to be substituted */
96868:   ExprList *pEList    /* Substitute expressions */
96869: ){
96870:   if( pExpr==0 ) return 0;
96871:   if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){
96872:     if( pExpr->iColumn<0 ){
96873:       pExpr->op = TK_NULL;
96874:     }else{
96875:       Expr *pNew;
96876:       assert( pEList!=0 && pExpr->iColumn<pEList->nExpr );
96877:       assert( pExpr->pLeft==0 && pExpr->pRight==0 );
96878:       pNew = sqlite3ExprDup(db, pEList->a[pExpr->iColumn].pExpr, 0);
96879:       if( pNew && pExpr->pColl ){
96880:         pNew->pColl = pExpr->pColl;
96881:       }
96882:       sqlite3ExprDelete(db, pExpr);
96883:       pExpr = pNew;
96884:     }
96885:   }else{
96886:     pExpr->pLeft = substExpr(db, pExpr->pLeft, iTable, pEList);
96887:     pExpr->pRight = substExpr(db, pExpr->pRight, iTable, pEList);
96888:     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
96889:       substSelect(db, pExpr->x.pSelect, iTable, pEList);
96890:     }else{
96891:       substExprList(db, pExpr->x.pList, iTable, pEList);
96892:     }
96893:   }
96894:   return pExpr;
96895: }
96896: static void substExprList(
96897:   sqlite3 *db,         /* Report malloc errors here */
96898:   ExprList *pList,     /* List to scan and in which to make substitutes */
96899:   int iTable,          /* Table to be substituted */
96900:   ExprList *pEList     /* Substitute values */
96901: ){
96902:   int i;
96903:   if( pList==0 ) return;
96904:   for(i=0; i<pList->nExpr; i++){
96905:     pList->a[i].pExpr = substExpr(db, pList->a[i].pExpr, iTable, pEList);
96906:   }
96907: }
96908: static void substSelect(
96909:   sqlite3 *db,         /* Report malloc errors here */
96910:   Select *p,           /* SELECT statement in which to make substitutions */
96911:   int iTable,          /* Table to be replaced */
96912:   ExprList *pEList     /* Substitute values */
96913: ){
96914:   SrcList *pSrc;
96915:   struct SrcList_item *pItem;
96916:   int i;
96917:   if( !p ) return;
96918:   substExprList(db, p->pEList, iTable, pEList);
96919:   substExprList(db, p->pGroupBy, iTable, pEList);
96920:   substExprList(db, p->pOrderBy, iTable, pEList);
96921:   p->pHaving = substExpr(db, p->pHaving, iTable, pEList);
96922:   p->pWhere = substExpr(db, p->pWhere, iTable, pEList);
96923:   substSelect(db, p->pPrior, iTable, pEList);
96924:   pSrc = p->pSrc;
96925:   assert( pSrc );  /* Even for (SELECT 1) we have: pSrc!=0 but pSrc->nSrc==0 */
96926:   if( ALWAYS(pSrc) ){
96927:     for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
96928:       substSelect(db, pItem->pSelect, iTable, pEList);
96929:     }
96930:   }
96931: }
96932: #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
96933: 
96934: #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
96935: /*
96936: ** This routine attempts to flatten subqueries as a performance optimization.
96937: ** This routine returns 1 if it makes changes and 0 if no flattening occurs.
96938: **
96939: ** To understand the concept of flattening, consider the following
96940: ** query:
96941: **
96942: **     SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5
96943: **
96944: ** The default way of implementing this query is to execute the
96945: ** subquery first and store the results in a temporary table, then
96946: ** run the outer query on that temporary table.  This requires two
96947: ** passes over the data.  Furthermore, because the temporary table
96948: ** has no indices, the WHERE clause on the outer query cannot be
96949: ** optimized.
96950: **
96951: ** This routine attempts to rewrite queries such as the above into
96952: ** a single flat select, like this:
96953: **
96954: **     SELECT x+y AS a FROM t1 WHERE z<100 AND a>5
96955: **
96956: ** The code generated for this simpification gives the same result
96957: ** but only has to scan the data once.  And because indices might 
96958: ** exist on the table t1, a complete scan of the data might be
96959: ** avoided.
96960: **
96961: ** Flattening is only attempted if all of the following are true:
96962: **
96963: **   (1)  The subquery and the outer query do not both use aggregates.
96964: **
96965: **   (2)  The subquery is not an aggregate or the outer query is not a join.
96966: **
96967: **   (3)  The subquery is not the right operand of a left outer join
96968: **        (Originally ticket #306.  Strengthened by ticket #3300)
96969: **
96970: **   (4)  The subquery is not DISTINCT.
96971: **
96972: **  (**)  At one point restrictions (4) and (5) defined a subset of DISTINCT
96973: **        sub-queries that were excluded from this optimization. Restriction 
96974: **        (4) has since been expanded to exclude all DISTINCT subqueries.
96975: **
96976: **   (6)  The subquery does not use aggregates or the outer query is not
96977: **        DISTINCT.
96978: **
96979: **   (7)  The subquery has a FROM clause.  TODO:  For subqueries without
96980: **        A FROM clause, consider adding a FROM close with the special
96981: **        table sqlite_once that consists of a single row containing a
96982: **        single NULL.
96983: **
96984: **   (8)  The subquery does not use LIMIT or the outer query is not a join.
96985: **
96986: **   (9)  The subquery does not use LIMIT or the outer query does not use
96987: **        aggregates.
96988: **
96989: **  (10)  The subquery does not use aggregates or the outer query does not
96990: **        use LIMIT.
96991: **
96992: **  (11)  The subquery and the outer query do not both have ORDER BY clauses.
96993: **
96994: **  (**)  Not implemented.  Subsumed into restriction (3).  Was previously
96995: **        a separate restriction deriving from ticket #350.
96996: **
96997: **  (13)  The subquery and outer query do not both use LIMIT.
96998: **
96999: **  (14)  The subquery does not use OFFSET.
97000: **
97001: **  (15)  The outer query is not part of a compound select or the
97002: **        subquery does not have a LIMIT clause.
97003: **        (See ticket #2339 and ticket [02a8e81d44]).
97004: **
97005: **  (16)  The outer query is not an aggregate or the subquery does
97006: **        not contain ORDER BY.  (Ticket #2942)  This used to not matter
97007: **        until we introduced the group_concat() function.  
97008: **
97009: **  (17)  The sub-query is not a compound select, or it is a UNION ALL 
97010: **        compound clause made up entirely of non-aggregate queries, and 
97011: **        the parent query:
97012: **
97013: **          * is not itself part of a compound select,
97014: **          * is not an aggregate or DISTINCT query, and
97015: **          * is not a join
97016: **
97017: **        The parent and sub-query may contain WHERE clauses. Subject to
97018: **        rules (11), (13) and (14), they may also contain ORDER BY,
97019: **        LIMIT and OFFSET clauses.  The subquery cannot use any compound
97020: **        operator other than UNION ALL because all the other compound
97021: **        operators have an implied DISTINCT which is disallowed by
97022: **        restriction (4).
97023: **
97024: **  (18)  If the sub-query is a compound select, then all terms of the
97025: **        ORDER by clause of the parent must be simple references to 
97026: **        columns of the sub-query.
97027: **
97028: **  (19)  The subquery does not use LIMIT or the outer query does not
97029: **        have a WHERE clause.
97030: **
97031: **  (20)  If the sub-query is a compound select, then it must not use
97032: **        an ORDER BY clause.  Ticket #3773.  We could relax this constraint
97033: **        somewhat by saying that the terms of the ORDER BY clause must
97034: **        appear as unmodified result columns in the outer query.  But we
97035: **        have other optimizations in mind to deal with that case.
97036: **
97037: **  (21)  The subquery does not use LIMIT or the outer query is not
97038: **        DISTINCT.  (See ticket [752e1646fc]).
97039: **
97040: ** In this routine, the "p" parameter is a pointer to the outer query.
97041: ** The subquery is p->pSrc->a[iFrom].  isAgg is true if the outer query
97042: ** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates.
97043: **
97044: ** If flattening is not attempted, this routine is a no-op and returns 0.
97045: ** If flattening is attempted this routine returns 1.
97046: **
97047: ** All of the expression analysis must occur on both the outer query and
97048: ** the subquery before this routine runs.
97049: */
97050: static int flattenSubquery(
97051:   Parse *pParse,       /* Parsing context */
97052:   Select *p,           /* The parent or outer SELECT statement */
97053:   int iFrom,           /* Index in p->pSrc->a[] of the inner subquery */
97054:   int isAgg,           /* True if outer SELECT uses aggregate functions */
97055:   int subqueryIsAgg    /* True if the subquery uses aggregate functions */
97056: ){
97057:   const char *zSavedAuthContext = pParse->zAuthContext;
97058:   Select *pParent;
97059:   Select *pSub;       /* The inner query or "subquery" */
97060:   Select *pSub1;      /* Pointer to the rightmost select in sub-query */
97061:   SrcList *pSrc;      /* The FROM clause of the outer query */
97062:   SrcList *pSubSrc;   /* The FROM clause of the subquery */
97063:   ExprList *pList;    /* The result set of the outer query */
97064:   int iParent;        /* VDBE cursor number of the pSub result set temp table */
97065:   int i;              /* Loop counter */
97066:   Expr *pWhere;                    /* The WHERE clause */
97067:   struct SrcList_item *pSubitem;   /* The subquery */
97068:   sqlite3 *db = pParse->db;
97069: 
97070:   /* Check to see if flattening is permitted.  Return 0 if not.
97071:   */
97072:   assert( p!=0 );
97073:   assert( p->pPrior==0 );  /* Unable to flatten compound queries */
97074:   if( db->flags & SQLITE_QueryFlattener ) return 0;
97075:   pSrc = p->pSrc;
97076:   assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
97077:   pSubitem = &pSrc->a[iFrom];
97078:   iParent = pSubitem->iCursor;
97079:   pSub = pSubitem->pSelect;
97080:   assert( pSub!=0 );
97081:   if( isAgg && subqueryIsAgg ) return 0;                 /* Restriction (1)  */
97082:   if( subqueryIsAgg && pSrc->nSrc>1 ) return 0;          /* Restriction (2)  */
97083:   pSubSrc = pSub->pSrc;
97084:   assert( pSubSrc );
97085:   /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants,
97086:   ** not arbitrary expresssions, we allowed some combining of LIMIT and OFFSET
97087:   ** because they could be computed at compile-time.  But when LIMIT and OFFSET
97088:   ** became arbitrary expressions, we were forced to add restrictions (13)
97089:   ** and (14). */
97090:   if( pSub->pLimit && p->pLimit ) return 0;              /* Restriction (13) */
97091:   if( pSub->pOffset ) return 0;                          /* Restriction (14) */
97092:   if( p->pRightmost && pSub->pLimit ){
97093:     return 0;                                            /* Restriction (15) */
97094:   }
97095:   if( pSubSrc->nSrc==0 ) return 0;                       /* Restriction (7)  */
97096:   if( pSub->selFlags & SF_Distinct ) return 0;           /* Restriction (5)  */
97097:   if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){
97098:      return 0;         /* Restrictions (8)(9) */
97099:   }
97100:   if( (p->selFlags & SF_Distinct)!=0 && subqueryIsAgg ){
97101:      return 0;         /* Restriction (6)  */
97102:   }
97103:   if( p->pOrderBy && pSub->pOrderBy ){
97104:      return 0;                                           /* Restriction (11) */
97105:   }
97106:   if( isAgg && pSub->pOrderBy ) return 0;                /* Restriction (16) */
97107:   if( pSub->pLimit && p->pWhere ) return 0;              /* Restriction (19) */
97108:   if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){
97109:      return 0;         /* Restriction (21) */
97110:   }
97111: 
97112:   /* OBSOLETE COMMENT 1:
97113:   ** Restriction 3:  If the subquery is a join, make sure the subquery is 
97114:   ** not used as the right operand of an outer join.  Examples of why this
97115:   ** is not allowed:
97116:   **
97117:   **         t1 LEFT OUTER JOIN (t2 JOIN t3)
97118:   **
97119:   ** If we flatten the above, we would get
97120:   **
97121:   **         (t1 LEFT OUTER JOIN t2) JOIN t3
97122:   **
97123:   ** which is not at all the same thing.
97124:   **
97125:   ** OBSOLETE COMMENT 2:
97126:   ** Restriction 12:  If the subquery is the right operand of a left outer
97127:   ** join, make sure the subquery has no WHERE clause.
97128:   ** An examples of why this is not allowed:
97129:   **
97130:   **         t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0)
97131:   **
97132:   ** If we flatten the above, we would get
97133:   **
97134:   **         (t1 LEFT OUTER JOIN t2) WHERE t2.x>0
97135:   **
97136:   ** But the t2.x>0 test will always fail on a NULL row of t2, which
97137:   ** effectively converts the OUTER JOIN into an INNER JOIN.
97138:   **
97139:   ** THIS OVERRIDES OBSOLETE COMMENTS 1 AND 2 ABOVE:
97140:   ** Ticket #3300 shows that flattening the right term of a LEFT JOIN
97141:   ** is fraught with danger.  Best to avoid the whole thing.  If the
97142:   ** subquery is the right term of a LEFT JOIN, then do not flatten.
97143:   */
97144:   if( (pSubitem->jointype & JT_OUTER)!=0 ){
97145:     return 0;
97146:   }
97147: 
97148:   /* Restriction 17: If the sub-query is a compound SELECT, then it must
97149:   ** use only the UNION ALL operator. And none of the simple select queries
97150:   ** that make up the compound SELECT are allowed to be aggregate or distinct
97151:   ** queries.
97152:   */
97153:   if( pSub->pPrior ){
97154:     if( pSub->pOrderBy ){
97155:       return 0;  /* Restriction 20 */
97156:     }
97157:     if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){
97158:       return 0;
97159:     }
97160:     for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
97161:       testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
97162:       testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
97163:       assert( pSub->pSrc!=0 );
97164:       if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0
97165:        || (pSub1->pPrior && pSub1->op!=TK_ALL) 
97166:        || pSub1->pSrc->nSrc<1
97167:       ){
97168:         return 0;
97169:       }
97170:       testcase( pSub1->pSrc->nSrc>1 );
97171:     }
97172: 
97173:     /* Restriction 18. */
97174:     if( p->pOrderBy ){
97175:       int ii;
97176:       for(ii=0; ii<p->pOrderBy->nExpr; ii++){
97177:         if( p->pOrderBy->a[ii].iOrderByCol==0 ) return 0;
97178:       }
97179:     }
97180:   }
97181: 
97182:   /***** If we reach this point, flattening is permitted. *****/
97183: 
97184:   /* Authorize the subquery */
97185:   pParse->zAuthContext = pSubitem->zName;
97186:   sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
97187:   pParse->zAuthContext = zSavedAuthContext;
97188: 
97189:   /* If the sub-query is a compound SELECT statement, then (by restrictions
97190:   ** 17 and 18 above) it must be a UNION ALL and the parent query must 
97191:   ** be of the form:
97192:   **
97193:   **     SELECT <expr-list> FROM (<sub-query>) <where-clause> 
97194:   **
97195:   ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block
97196:   ** creates N-1 copies of the parent query without any ORDER BY, LIMIT or 
97197:   ** OFFSET clauses and joins them to the left-hand-side of the original
97198:   ** using UNION ALL operators. In this case N is the number of simple
97199:   ** select statements in the compound sub-query.
97200:   **
97201:   ** Example:
97202:   **
97203:   **     SELECT a+1 FROM (
97204:   **        SELECT x FROM tab
97205:   **        UNION ALL
97206:   **        SELECT y FROM tab
97207:   **        UNION ALL
97208:   **        SELECT abs(z*2) FROM tab2
97209:   **     ) WHERE a!=5 ORDER BY 1
97210:   **
97211:   ** Transformed into:
97212:   **
97213:   **     SELECT x+1 FROM tab WHERE x+1!=5
97214:   **     UNION ALL
97215:   **     SELECT y+1 FROM tab WHERE y+1!=5
97216:   **     UNION ALL
97217:   **     SELECT abs(z*2)+1 FROM tab2 WHERE abs(z*2)+1!=5
97218:   **     ORDER BY 1
97219:   **
97220:   ** We call this the "compound-subquery flattening".
97221:   */
97222:   for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){
97223:     Select *pNew;
97224:     ExprList *pOrderBy = p->pOrderBy;
97225:     Expr *pLimit = p->pLimit;
97226:     Select *pPrior = p->pPrior;
97227:     p->pOrderBy = 0;
97228:     p->pSrc = 0;
97229:     p->pPrior = 0;
97230:     p->pLimit = 0;
97231:     pNew = sqlite3SelectDup(db, p, 0);
97232:     p->pLimit = pLimit;
97233:     p->pOrderBy = pOrderBy;
97234:     p->pSrc = pSrc;
97235:     p->op = TK_ALL;
97236:     p->pRightmost = 0;
97237:     if( pNew==0 ){
97238:       pNew = pPrior;
97239:     }else{
97240:       pNew->pPrior = pPrior;
97241:       pNew->pRightmost = 0;
97242:     }
97243:     p->pPrior = pNew;
97244:     if( db->mallocFailed ) return 1;
97245:   }
97246: 
97247:   /* Begin flattening the iFrom-th entry of the FROM clause 
97248:   ** in the outer query.
97249:   */
97250:   pSub = pSub1 = pSubitem->pSelect;
97251: 
97252:   /* Delete the transient table structure associated with the
97253:   ** subquery
97254:   */
97255:   sqlite3DbFree(db, pSubitem->zDatabase);
97256:   sqlite3DbFree(db, pSubitem->zName);
97257:   sqlite3DbFree(db, pSubitem->zAlias);
97258:   pSubitem->zDatabase = 0;
97259:   pSubitem->zName = 0;
97260:   pSubitem->zAlias = 0;
97261:   pSubitem->pSelect = 0;
97262: 
97263:   /* Defer deleting the Table object associated with the
97264:   ** subquery until code generation is
97265:   ** complete, since there may still exist Expr.pTab entries that
97266:   ** refer to the subquery even after flattening.  Ticket #3346.
97267:   **
97268:   ** pSubitem->pTab is always non-NULL by test restrictions and tests above.
97269:   */
97270:   if( ALWAYS(pSubitem->pTab!=0) ){
97271:     Table *pTabToDel = pSubitem->pTab;
97272:     if( pTabToDel->nRef==1 ){
97273:       Parse *pToplevel = sqlite3ParseToplevel(pParse);
97274:       pTabToDel->pNextZombie = pToplevel->pZombieTab;
97275:       pToplevel->pZombieTab = pTabToDel;
97276:     }else{
97277:       pTabToDel->nRef--;
97278:     }
97279:     pSubitem->pTab = 0;
97280:   }
97281: 
97282:   /* The following loop runs once for each term in a compound-subquery
97283:   ** flattening (as described above).  If we are doing a different kind
97284:   ** of flattening - a flattening other than a compound-subquery flattening -
97285:   ** then this loop only runs once.
97286:   **
97287:   ** This loop moves all of the FROM elements of the subquery into the
97288:   ** the FROM clause of the outer query.  Before doing this, remember
97289:   ** the cursor number for the original outer query FROM element in
97290:   ** iParent.  The iParent cursor will never be used.  Subsequent code
97291:   ** will scan expressions looking for iParent references and replace
97292:   ** those references with expressions that resolve to the subquery FROM
97293:   ** elements we are now copying in.
97294:   */
97295:   for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){
97296:     int nSubSrc;
97297:     u8 jointype = 0;
97298:     pSubSrc = pSub->pSrc;     /* FROM clause of subquery */
97299:     nSubSrc = pSubSrc->nSrc;  /* Number of terms in subquery FROM clause */
97300:     pSrc = pParent->pSrc;     /* FROM clause of the outer query */
97301: 
97302:     if( pSrc ){
97303:       assert( pParent==p );  /* First time through the loop */
97304:       jointype = pSubitem->jointype;
97305:     }else{
97306:       assert( pParent!=p );  /* 2nd and subsequent times through the loop */
97307:       pSrc = pParent->pSrc = sqlite3SrcListAppend(db, 0, 0, 0);
97308:       if( pSrc==0 ){
97309:         assert( db->mallocFailed );
97310:         break;
97311:       }
97312:     }
97313: 
97314:     /* The subquery uses a single slot of the FROM clause of the outer
97315:     ** query.  If the subquery has more than one element in its FROM clause,
97316:     ** then expand the outer query to make space for it to hold all elements
97317:     ** of the subquery.
97318:     **
97319:     ** Example:
97320:     **
97321:     **    SELECT * FROM tabA, (SELECT * FROM sub1, sub2), tabB;
97322:     **
97323:     ** The outer query has 3 slots in its FROM clause.  One slot of the
97324:     ** outer query (the middle slot) is used by the subquery.  The next
97325:     ** block of code will expand the out query to 4 slots.  The middle
97326:     ** slot is expanded to two slots in order to make space for the
97327:     ** two elements in the FROM clause of the subquery.
97328:     */
97329:     if( nSubSrc>1 ){
97330:       pParent->pSrc = pSrc = sqlite3SrcListEnlarge(db, pSrc, nSubSrc-1,iFrom+1);
97331:       if( db->mallocFailed ){
97332:         break;
97333:       }
97334:     }
97335: 
97336:     /* Transfer the FROM clause terms from the subquery into the
97337:     ** outer query.
97338:     */
97339:     for(i=0; i<nSubSrc; i++){
97340:       sqlite3IdListDelete(db, pSrc->a[i+iFrom].pUsing);
97341:       pSrc->a[i+iFrom] = pSubSrc->a[i];
97342:       memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i]));
97343:     }
97344:     pSrc->a[iFrom].jointype = jointype;
97345:   
97346:     /* Now begin substituting subquery result set expressions for 
97347:     ** references to the iParent in the outer query.
97348:     ** 
97349:     ** Example:
97350:     **
97351:     **   SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b;
97352:     **   \                     \_____________ subquery __________/          /
97353:     **    \_____________________ outer query ______________________________/
97354:     **
97355:     ** We look at every expression in the outer query and every place we see
97356:     ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10".
97357:     */
97358:     pList = pParent->pEList;
97359:     for(i=0; i<pList->nExpr; i++){
97360:       if( pList->a[i].zName==0 ){
97361:         const char *zSpan = pList->a[i].zSpan;
97362:         if( ALWAYS(zSpan) ){
97363:           pList->a[i].zName = sqlite3DbStrDup(db, zSpan);
97364:         }
97365:       }
97366:     }
97367:     substExprList(db, pParent->pEList, iParent, pSub->pEList);
97368:     if( isAgg ){
97369:       substExprList(db, pParent->pGroupBy, iParent, pSub->pEList);
97370:       pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList);
97371:     }
97372:     if( pSub->pOrderBy ){
97373:       assert( pParent->pOrderBy==0 );
97374:       pParent->pOrderBy = pSub->pOrderBy;
97375:       pSub->pOrderBy = 0;
97376:     }else if( pParent->pOrderBy ){
97377:       substExprList(db, pParent->pOrderBy, iParent, pSub->pEList);
97378:     }
97379:     if( pSub->pWhere ){
97380:       pWhere = sqlite3ExprDup(db, pSub->pWhere, 0);
97381:     }else{
97382:       pWhere = 0;
97383:     }
97384:     if( subqueryIsAgg ){
97385:       assert( pParent->pHaving==0 );
97386:       pParent->pHaving = pParent->pWhere;
97387:       pParent->pWhere = pWhere;
97388:       pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList);
97389:       pParent->pHaving = sqlite3ExprAnd(db, pParent->pHaving, 
97390:                                   sqlite3ExprDup(db, pSub->pHaving, 0));
97391:       assert( pParent->pGroupBy==0 );
97392:       pParent->pGroupBy = sqlite3ExprListDup(db, pSub->pGroupBy, 0);
97393:     }else{
97394:       pParent->pWhere = substExpr(db, pParent->pWhere, iParent, pSub->pEList);
97395:       pParent->pWhere = sqlite3ExprAnd(db, pParent->pWhere, pWhere);
97396:     }
97397:   
97398:     /* The flattened query is distinct if either the inner or the
97399:     ** outer query is distinct. 
97400:     */
97401:     pParent->selFlags |= pSub->selFlags & SF_Distinct;
97402:   
97403:     /*
97404:     ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y;
97405:     **
97406:     ** One is tempted to try to add a and b to combine the limits.  But this
97407:     ** does not work if either limit is negative.
97408:     */
97409:     if( pSub->pLimit ){
97410:       pParent->pLimit = pSub->pLimit;
97411:       pSub->pLimit = 0;
97412:     }
97413:   }
97414: 
97415:   /* Finially, delete what is left of the subquery and return
97416:   ** success.
97417:   */
97418:   sqlite3SelectDelete(db, pSub1);
97419: 
97420:   return 1;
97421: }
97422: #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
97423: 
97424: /*
97425: ** Analyze the SELECT statement passed as an argument to see if it
97426: ** is a min() or max() query. Return WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX if 
97427: ** it is, or 0 otherwise. At present, a query is considered to be
97428: ** a min()/max() query if:
97429: **
97430: **   1. There is a single object in the FROM clause.
97431: **
97432: **   2. There is a single expression in the result set, and it is
97433: **      either min(x) or max(x), where x is a column reference.
97434: */
97435: static u8 minMaxQuery(Select *p){
97436:   Expr *pExpr;
97437:   ExprList *pEList = p->pEList;
97438: 
97439:   if( pEList->nExpr!=1 ) return WHERE_ORDERBY_NORMAL;
97440:   pExpr = pEList->a[0].pExpr;
97441:   if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
97442:   if( NEVER(ExprHasProperty(pExpr, EP_xIsSelect)) ) return 0;
97443:   pEList = pExpr->x.pList;
97444:   if( pEList==0 || pEList->nExpr!=1 ) return 0;
97445:   if( pEList->a[0].pExpr->op!=TK_AGG_COLUMN ) return WHERE_ORDERBY_NORMAL;
97446:   assert( !ExprHasProperty(pExpr, EP_IntValue) );
97447:   if( sqlite3StrICmp(pExpr->u.zToken,"min")==0 ){
97448:     return WHERE_ORDERBY_MIN;
97449:   }else if( sqlite3StrICmp(pExpr->u.zToken,"max")==0 ){
97450:     return WHERE_ORDERBY_MAX;
97451:   }
97452:   return WHERE_ORDERBY_NORMAL;
97453: }
97454: 
97455: /*
97456: ** The select statement passed as the first argument is an aggregate query.
97457: ** The second argment is the associated aggregate-info object. This 
97458: ** function tests if the SELECT is of the form:
97459: **
97460: **   SELECT count(*) FROM <tbl>
97461: **
97462: ** where table is a database table, not a sub-select or view. If the query
97463: ** does match this pattern, then a pointer to the Table object representing
97464: ** <tbl> is returned. Otherwise, 0 is returned.
97465: */
97466: static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){
97467:   Table *pTab;
97468:   Expr *pExpr;
97469: 
97470:   assert( !p->pGroupBy );
97471: 
97472:   if( p->pWhere || p->pEList->nExpr!=1 
97473:    || p->pSrc->nSrc!=1 || p->pSrc->a[0].pSelect
97474:   ){
97475:     return 0;
97476:   }
97477:   pTab = p->pSrc->a[0].pTab;
97478:   pExpr = p->pEList->a[0].pExpr;
97479:   assert( pTab && !pTab->pSelect && pExpr );
97480: 
97481:   if( IsVirtual(pTab) ) return 0;
97482:   if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
97483:   if( (pAggInfo->aFunc[0].pFunc->flags&SQLITE_FUNC_COUNT)==0 ) return 0;
97484:   if( pExpr->flags&EP_Distinct ) return 0;
97485: 
97486:   return pTab;
97487: }
97488: 
97489: /*
97490: ** If the source-list item passed as an argument was augmented with an
97491: ** INDEXED BY clause, then try to locate the specified index. If there
97492: ** was such a clause and the named index cannot be found, return 
97493: ** SQLITE_ERROR and leave an error in pParse. Otherwise, populate 
97494: ** pFrom->pIndex and return SQLITE_OK.
97495: */
97496: SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *pParse, struct SrcList_item *pFrom){
97497:   if( pFrom->pTab && pFrom->zIndex ){
97498:     Table *pTab = pFrom->pTab;
97499:     char *zIndex = pFrom->zIndex;
97500:     Index *pIdx;
97501:     for(pIdx=pTab->pIndex; 
97502:         pIdx && sqlite3StrICmp(pIdx->zName, zIndex); 
97503:         pIdx=pIdx->pNext
97504:     );
97505:     if( !pIdx ){
97506:       sqlite3ErrorMsg(pParse, "no such index: %s", zIndex, 0);
97507:       pParse->checkSchema = 1;
97508:       return SQLITE_ERROR;
97509:     }
97510:     pFrom->pIndex = pIdx;
97511:   }
97512:   return SQLITE_OK;
97513: }
97514: 
97515: /*
97516: ** This routine is a Walker callback for "expanding" a SELECT statement.
97517: ** "Expanding" means to do the following:
97518: **
97519: **    (1)  Make sure VDBE cursor numbers have been assigned to every
97520: **         element of the FROM clause.
97521: **
97522: **    (2)  Fill in the pTabList->a[].pTab fields in the SrcList that 
97523: **         defines FROM clause.  When views appear in the FROM clause,
97524: **         fill pTabList->a[].pSelect with a copy of the SELECT statement
97525: **         that implements the view.  A copy is made of the view's SELECT
97526: **         statement so that we can freely modify or delete that statement
97527: **         without worrying about messing up the presistent representation
97528: **         of the view.
97529: **
97530: **    (3)  Add terms to the WHERE clause to accomodate the NATURAL keyword
97531: **         on joins and the ON and USING clause of joins.
97532: **
97533: **    (4)  Scan the list of columns in the result set (pEList) looking
97534: **         for instances of the "*" operator or the TABLE.* operator.
97535: **         If found, expand each "*" to be every column in every table
97536: **         and TABLE.* to be every column in TABLE.
97537: **
97538: */
97539: static int selectExpander(Walker *pWalker, Select *p){
97540:   Parse *pParse = pWalker->pParse;
97541:   int i, j, k;
97542:   SrcList *pTabList;
97543:   ExprList *pEList;
97544:   struct SrcList_item *pFrom;
97545:   sqlite3 *db = pParse->db;
97546: 
97547:   if( db->mallocFailed  ){
97548:     return WRC_Abort;
97549:   }
97550:   if( NEVER(p->pSrc==0) || (p->selFlags & SF_Expanded)!=0 ){
97551:     return WRC_Prune;
97552:   }
97553:   p->selFlags |= SF_Expanded;
97554:   pTabList = p->pSrc;
97555:   pEList = p->pEList;
97556: 
97557:   /* Make sure cursor numbers have been assigned to all entries in
97558:   ** the FROM clause of the SELECT statement.
97559:   */
97560:   sqlite3SrcListAssignCursors(pParse, pTabList);
97561: 
97562:   /* Look up every table named in the FROM clause of the select.  If
97563:   ** an entry of the FROM clause is a subquery instead of a table or view,
97564:   ** then create a transient table structure to describe the subquery.
97565:   */
97566:   for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
97567:     Table *pTab;
97568:     if( pFrom->pTab!=0 ){
97569:       /* This statement has already been prepared.  There is no need
97570:       ** to go further. */
97571:       assert( i==0 );
97572:       return WRC_Prune;
97573:     }
97574:     if( pFrom->zName==0 ){
97575: #ifndef SQLITE_OMIT_SUBQUERY
97576:       Select *pSel = pFrom->pSelect;
97577:       /* A sub-query in the FROM clause of a SELECT */
97578:       assert( pSel!=0 );
97579:       assert( pFrom->pTab==0 );
97580:       sqlite3WalkSelect(pWalker, pSel);
97581:       pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table));
97582:       if( pTab==0 ) return WRC_Abort;
97583:       pTab->nRef = 1;
97584:       pTab->zName = sqlite3MPrintf(db, "sqlite_subquery_%p_", (void*)pTab);
97585:       while( pSel->pPrior ){ pSel = pSel->pPrior; }
97586:       selectColumnsFromExprList(pParse, pSel->pEList, &pTab->nCol, &pTab->aCol);
97587:       pTab->iPKey = -1;
97588:       pTab->nRowEst = 1000000;
97589:       pTab->tabFlags |= TF_Ephemeral;
97590: #endif
97591:     }else{
97592:       /* An ordinary table or view name in the FROM clause */
97593:       assert( pFrom->pTab==0 );
97594:       pFrom->pTab = pTab = 
97595:         sqlite3LocateTable(pParse,0,pFrom->zName,pFrom->zDatabase);
97596:       if( pTab==0 ) return WRC_Abort;
97597:       pTab->nRef++;
97598: #if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE)
97599:       if( pTab->pSelect || IsVirtual(pTab) ){
97600:         /* We reach here if the named table is a really a view */
97601:         if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
97602:         assert( pFrom->pSelect==0 );
97603:         pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0);
97604:         sqlite3WalkSelect(pWalker, pFrom->pSelect);
97605:       }
97606: #endif
97607:     }
97608: 
97609:     /* Locate the index named by the INDEXED BY clause, if any. */
97610:     if( sqlite3IndexedByLookup(pParse, pFrom) ){
97611:       return WRC_Abort;
97612:     }
97613:   }
97614: 
97615:   /* Process NATURAL keywords, and ON and USING clauses of joins.
97616:   */
97617:   if( db->mallocFailed || sqliteProcessJoin(pParse, p) ){
97618:     return WRC_Abort;
97619:   }
97620: 
97621:   /* For every "*" that occurs in the column list, insert the names of
97622:   ** all columns in all tables.  And for every TABLE.* insert the names
97623:   ** of all columns in TABLE.  The parser inserted a special expression
97624:   ** with the TK_ALL operator for each "*" that it found in the column list.
97625:   ** The following code just has to locate the TK_ALL expressions and expand
97626:   ** each one to the list of all columns in all tables.
97627:   **
97628:   ** The first loop just checks to see if there are any "*" operators
97629:   ** that need expanding.
97630:   */
97631:   for(k=0; k<pEList->nExpr; k++){
97632:     Expr *pE = pEList->a[k].pExpr;
97633:     if( pE->op==TK_ALL ) break;
97634:     assert( pE->op!=TK_DOT || pE->pRight!=0 );
97635:     assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) );
97636:     if( pE->op==TK_DOT && pE->pRight->op==TK_ALL ) break;
97637:   }
97638:   if( k<pEList->nExpr ){
97639:     /*
97640:     ** If we get here it means the result set contains one or more "*"
97641:     ** operators that need to be expanded.  Loop through each expression
97642:     ** in the result set and expand them one by one.
97643:     */
97644:     struct ExprList_item *a = pEList->a;
97645:     ExprList *pNew = 0;
97646:     int flags = pParse->db->flags;
97647:     int longNames = (flags & SQLITE_FullColNames)!=0
97648:                       && (flags & SQLITE_ShortColNames)==0;
97649: 
97650:     for(k=0; k<pEList->nExpr; k++){
97651:       Expr *pE = a[k].pExpr;
97652:       assert( pE->op!=TK_DOT || pE->pRight!=0 );
97653:       if( pE->op!=TK_ALL && (pE->op!=TK_DOT || pE->pRight->op!=TK_ALL) ){
97654:         /* This particular expression does not need to be expanded.
97655:         */
97656:         pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr);
97657:         if( pNew ){
97658:           pNew->a[pNew->nExpr-1].zName = a[k].zName;
97659:           pNew->a[pNew->nExpr-1].zSpan = a[k].zSpan;
97660:           a[k].zName = 0;
97661:           a[k].zSpan = 0;
97662:         }
97663:         a[k].pExpr = 0;
97664:       }else{
97665:         /* This expression is a "*" or a "TABLE.*" and needs to be
97666:         ** expanded. */
97667:         int tableSeen = 0;      /* Set to 1 when TABLE matches */
97668:         char *zTName;            /* text of name of TABLE */
97669:         if( pE->op==TK_DOT ){
97670:           assert( pE->pLeft!=0 );
97671:           assert( !ExprHasProperty(pE->pLeft, EP_IntValue) );
97672:           zTName = pE->pLeft->u.zToken;
97673:         }else{
97674:           zTName = 0;
97675:         }
97676:         for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
97677:           Table *pTab = pFrom->pTab;
97678:           char *zTabName = pFrom->zAlias;
97679:           if( zTabName==0 ){
97680:             zTabName = pTab->zName;
97681:           }
97682:           if( db->mallocFailed ) break;
97683:           if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){
97684:             continue;
97685:           }
97686:           tableSeen = 1;
97687:           for(j=0; j<pTab->nCol; j++){
97688:             Expr *pExpr, *pRight;
97689:             char *zName = pTab->aCol[j].zName;
97690:             char *zColname;  /* The computed column name */
97691:             char *zToFree;   /* Malloced string that needs to be freed */
97692:             Token sColname;  /* Computed column name as a token */
97693: 
97694:             /* If a column is marked as 'hidden' (currently only possible
97695:             ** for virtual tables), do not include it in the expanded
97696:             ** result-set list.
97697:             */
97698:             if( IsHiddenColumn(&pTab->aCol[j]) ){
97699:               assert(IsVirtual(pTab));
97700:               continue;
97701:             }
97702: 
97703:             if( i>0 && zTName==0 ){
97704:               if( (pFrom->jointype & JT_NATURAL)!=0
97705:                 && tableAndColumnIndex(pTabList, i, zName, 0, 0)
97706:               ){
97707:                 /* In a NATURAL join, omit the join columns from the 
97708:                 ** table to the right of the join */
97709:                 continue;
97710:               }
97711:               if( sqlite3IdListIndex(pFrom->pUsing, zName)>=0 ){
97712:                 /* In a join with a USING clause, omit columns in the
97713:                 ** using clause from the table on the right. */
97714:                 continue;
97715:               }
97716:             }
97717:             pRight = sqlite3Expr(db, TK_ID, zName);
97718:             zColname = zName;
97719:             zToFree = 0;
97720:             if( longNames || pTabList->nSrc>1 ){
97721:               Expr *pLeft;
97722:               pLeft = sqlite3Expr(db, TK_ID, zTabName);
97723:               pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
97724:               if( longNames ){
97725:                 zColname = sqlite3MPrintf(db, "%s.%s", zTabName, zName);
97726:                 zToFree = zColname;
97727:               }
97728:             }else{
97729:               pExpr = pRight;
97730:             }
97731:             pNew = sqlite3ExprListAppend(pParse, pNew, pExpr);
97732:             sColname.z = zColname;
97733:             sColname.n = sqlite3Strlen30(zColname);
97734:             sqlite3ExprListSetName(pParse, pNew, &sColname, 0);
97735:             sqlite3DbFree(db, zToFree);
97736:           }
97737:         }
97738:         if( !tableSeen ){
97739:           if( zTName ){
97740:             sqlite3ErrorMsg(pParse, "no such table: %s", zTName);
97741:           }else{
97742:             sqlite3ErrorMsg(pParse, "no tables specified");
97743:           }
97744:         }
97745:       }
97746:     }
97747:     sqlite3ExprListDelete(db, pEList);
97748:     p->pEList = pNew;
97749:   }
97750: #if SQLITE_MAX_COLUMN
97751:   if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
97752:     sqlite3ErrorMsg(pParse, "too many columns in result set");
97753:   }
97754: #endif
97755:   return WRC_Continue;
97756: }
97757: 
97758: /*
97759: ** No-op routine for the parse-tree walker.
97760: **
97761: ** When this routine is the Walker.xExprCallback then expression trees
97762: ** are walked without any actions being taken at each node.  Presumably,
97763: ** when this routine is used for Walker.xExprCallback then 
97764: ** Walker.xSelectCallback is set to do something useful for every 
97765: ** subquery in the parser tree.
97766: */
97767: static int exprWalkNoop(Walker *NotUsed, Expr *NotUsed2){
97768:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
97769:   return WRC_Continue;
97770: }
97771: 
97772: /*
97773: ** This routine "expands" a SELECT statement and all of its subqueries.
97774: ** For additional information on what it means to "expand" a SELECT
97775: ** statement, see the comment on the selectExpand worker callback above.
97776: **
97777: ** Expanding a SELECT statement is the first step in processing a
97778: ** SELECT statement.  The SELECT statement must be expanded before
97779: ** name resolution is performed.
97780: **
97781: ** If anything goes wrong, an error message is written into pParse.
97782: ** The calling function can detect the problem by looking at pParse->nErr
97783: ** and/or pParse->db->mallocFailed.
97784: */
97785: static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
97786:   Walker w;
97787:   w.xSelectCallback = selectExpander;
97788:   w.xExprCallback = exprWalkNoop;
97789:   w.pParse = pParse;
97790:   sqlite3WalkSelect(&w, pSelect);
97791: }
97792: 
97793: 
97794: #ifndef SQLITE_OMIT_SUBQUERY
97795: /*
97796: ** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo()
97797: ** interface.
97798: **
97799: ** For each FROM-clause subquery, add Column.zType and Column.zColl
97800: ** information to the Table structure that represents the result set
97801: ** of that subquery.
97802: **
97803: ** The Table structure that represents the result set was constructed
97804: ** by selectExpander() but the type and collation information was omitted
97805: ** at that point because identifiers had not yet been resolved.  This
97806: ** routine is called after identifier resolution.
97807: */
97808: static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
97809:   Parse *pParse;
97810:   int i;
97811:   SrcList *pTabList;
97812:   struct SrcList_item *pFrom;
97813: 
97814:   assert( p->selFlags & SF_Resolved );
97815:   if( (p->selFlags & SF_HasTypeInfo)==0 ){
97816:     p->selFlags |= SF_HasTypeInfo;
97817:     pParse = pWalker->pParse;
97818:     pTabList = p->pSrc;
97819:     for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
97820:       Table *pTab = pFrom->pTab;
97821:       if( ALWAYS(pTab!=0) && (pTab->tabFlags & TF_Ephemeral)!=0 ){
97822:         /* A sub-query in the FROM clause of a SELECT */
97823:         Select *pSel = pFrom->pSelect;
97824:         assert( pSel );
97825:         while( pSel->pPrior ) pSel = pSel->pPrior;
97826:         selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSel);
97827:       }
97828:     }
97829:   }
97830:   return WRC_Continue;
97831: }
97832: #endif
97833: 
97834: 
97835: /*
97836: ** This routine adds datatype and collating sequence information to
97837: ** the Table structures of all FROM-clause subqueries in a
97838: ** SELECT statement.
97839: **
97840: ** Use this routine after name resolution.
97841: */
97842: static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){
97843: #ifndef SQLITE_OMIT_SUBQUERY
97844:   Walker w;
97845:   w.xSelectCallback = selectAddSubqueryTypeInfo;
97846:   w.xExprCallback = exprWalkNoop;
97847:   w.pParse = pParse;
97848:   sqlite3WalkSelect(&w, pSelect);
97849: #endif
97850: }
97851: 
97852: 
97853: /*
97854: ** This routine sets of a SELECT statement for processing.  The
97855: ** following is accomplished:
97856: **
97857: **     *  VDBE Cursor numbers are assigned to all FROM-clause terms.
97858: **     *  Ephemeral Table objects are created for all FROM-clause subqueries.
97859: **     *  ON and USING clauses are shifted into WHERE statements
97860: **     *  Wildcards "*" and "TABLE.*" in result sets are expanded.
97861: **     *  Identifiers in expression are matched to tables.
97862: **
97863: ** This routine acts recursively on all subqueries within the SELECT.
97864: */
97865: SQLITE_PRIVATE void sqlite3SelectPrep(
97866:   Parse *pParse,         /* The parser context */
97867:   Select *p,             /* The SELECT statement being coded. */
97868:   NameContext *pOuterNC  /* Name context for container */
97869: ){
97870:   sqlite3 *db;
97871:   if( NEVER(p==0) ) return;
97872:   db = pParse->db;
97873:   if( p->selFlags & SF_HasTypeInfo ) return;
97874:   sqlite3SelectExpand(pParse, p);
97875:   if( pParse->nErr || db->mallocFailed ) return;
97876:   sqlite3ResolveSelectNames(pParse, p, pOuterNC);
97877:   if( pParse->nErr || db->mallocFailed ) return;
97878:   sqlite3SelectAddTypeInfo(pParse, p);
97879: }
97880: 
97881: /*
97882: ** Reset the aggregate accumulator.
97883: **
97884: ** The aggregate accumulator is a set of memory cells that hold
97885: ** intermediate results while calculating an aggregate.  This
97886: ** routine simply stores NULLs in all of those memory cells.
97887: */
97888: static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
97889:   Vdbe *v = pParse->pVdbe;
97890:   int i;
97891:   struct AggInfo_func *pFunc;
97892:   if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){
97893:     return;
97894:   }
97895:   for(i=0; i<pAggInfo->nColumn; i++){
97896:     sqlite3VdbeAddOp2(v, OP_Null, 0, pAggInfo->aCol[i].iMem);
97897:   }
97898:   for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
97899:     sqlite3VdbeAddOp2(v, OP_Null, 0, pFunc->iMem);
97900:     if( pFunc->iDistinct>=0 ){
97901:       Expr *pE = pFunc->pExpr;
97902:       assert( !ExprHasProperty(pE, EP_xIsSelect) );
97903:       if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){
97904:         sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one "
97905:            "argument");
97906:         pFunc->iDistinct = -1;
97907:       }else{
97908:         KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList);
97909:         sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0,
97910:                           (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
97911:       }
97912:     }
97913:   }
97914: }
97915: 
97916: /*
97917: ** Invoke the OP_AggFinalize opcode for every aggregate function
97918: ** in the AggInfo structure.
97919: */
97920: static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
97921:   Vdbe *v = pParse->pVdbe;
97922:   int i;
97923:   struct AggInfo_func *pF;
97924:   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
97925:     ExprList *pList = pF->pExpr->x.pList;
97926:     assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
97927:     sqlite3VdbeAddOp4(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0, 0,
97928:                       (void*)pF->pFunc, P4_FUNCDEF);
97929:   }
97930: }
97931: 
97932: /*
97933: ** Update the accumulator memory cells for an aggregate based on
97934: ** the current cursor position.
97935: */
97936: static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){
97937:   Vdbe *v = pParse->pVdbe;
97938:   int i;
97939:   struct AggInfo_func *pF;
97940:   struct AggInfo_col *pC;
97941: 
97942:   pAggInfo->directMode = 1;
97943:   sqlite3ExprCacheClear(pParse);
97944:   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
97945:     int nArg;
97946:     int addrNext = 0;
97947:     int regAgg;
97948:     ExprList *pList = pF->pExpr->x.pList;
97949:     assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
97950:     if( pList ){
97951:       nArg = pList->nExpr;
97952:       regAgg = sqlite3GetTempRange(pParse, nArg);
97953:       sqlite3ExprCodeExprList(pParse, pList, regAgg, 1);
97954:     }else{
97955:       nArg = 0;
97956:       regAgg = 0;
97957:     }
97958:     if( pF->iDistinct>=0 ){
97959:       addrNext = sqlite3VdbeMakeLabel(v);
97960:       assert( nArg==1 );
97961:       codeDistinct(pParse, pF->iDistinct, addrNext, 1, regAgg);
97962:     }
97963:     if( pF->pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
97964:       CollSeq *pColl = 0;
97965:       struct ExprList_item *pItem;
97966:       int j;
97967:       assert( pList!=0 );  /* pList!=0 if pF->pFunc has NEEDCOLL */
97968:       for(j=0, pItem=pList->a; !pColl && j<nArg; j++, pItem++){
97969:         pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
97970:       }
97971:       if( !pColl ){
97972:         pColl = pParse->db->pDfltColl;
97973:       }
97974:       sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
97975:     }
97976:     sqlite3VdbeAddOp4(v, OP_AggStep, 0, regAgg, pF->iMem,
97977:                       (void*)pF->pFunc, P4_FUNCDEF);
97978:     sqlite3VdbeChangeP5(v, (u8)nArg);
97979:     sqlite3ExprCacheAffinityChange(pParse, regAgg, nArg);
97980:     sqlite3ReleaseTempRange(pParse, regAgg, nArg);
97981:     if( addrNext ){
97982:       sqlite3VdbeResolveLabel(v, addrNext);
97983:       sqlite3ExprCacheClear(pParse);
97984:     }
97985:   }
97986: 
97987:   /* Before populating the accumulator registers, clear the column cache.
97988:   ** Otherwise, if any of the required column values are already present 
97989:   ** in registers, sqlite3ExprCode() may use OP_SCopy to copy the value
97990:   ** to pC->iMem. But by the time the value is used, the original register
97991:   ** may have been used, invalidating the underlying buffer holding the
97992:   ** text or blob value. See ticket [883034dcb5].
97993:   **
97994:   ** Another solution would be to change the OP_SCopy used to copy cached
97995:   ** values to an OP_Copy.
97996:   */
97997:   sqlite3ExprCacheClear(pParse);
97998:   for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
97999:     sqlite3ExprCode(pParse, pC->pExpr, pC->iMem);
98000:   }
98001:   pAggInfo->directMode = 0;
98002:   sqlite3ExprCacheClear(pParse);
98003: }
98004: 
98005: /*
98006: ** Add a single OP_Explain instruction to the VDBE to explain a simple
98007: ** count(*) query ("SELECT count(*) FROM pTab").
98008: */
98009: #ifndef SQLITE_OMIT_EXPLAIN
98010: static void explainSimpleCount(
98011:   Parse *pParse,                  /* Parse context */
98012:   Table *pTab,                    /* Table being queried */
98013:   Index *pIdx                     /* Index used to optimize scan, or NULL */
98014: ){
98015:   if( pParse->explain==2 ){
98016:     char *zEqp = sqlite3MPrintf(pParse->db, "SCAN TABLE %s %s%s(~%d rows)",
98017:         pTab->zName, 
98018:         pIdx ? "USING COVERING INDEX " : "",
98019:         pIdx ? pIdx->zName : "",
98020:         pTab->nRowEst
98021:     );
98022:     sqlite3VdbeAddOp4(
98023:         pParse->pVdbe, OP_Explain, pParse->iSelectId, 0, 0, zEqp, P4_DYNAMIC
98024:     );
98025:   }
98026: }
98027: #else
98028: # define explainSimpleCount(a,b,c)
98029: #endif
98030: 
98031: /*
98032: ** Generate code for the SELECT statement given in the p argument.  
98033: **
98034: ** The results are distributed in various ways depending on the
98035: ** contents of the SelectDest structure pointed to by argument pDest
98036: ** as follows:
98037: **
98038: **     pDest->eDest    Result
98039: **     ------------    -------------------------------------------
98040: **     SRT_Output      Generate a row of output (using the OP_ResultRow
98041: **                     opcode) for each row in the result set.
98042: **
98043: **     SRT_Mem         Only valid if the result is a single column.
98044: **                     Store the first column of the first result row
98045: **                     in register pDest->iParm then abandon the rest
98046: **                     of the query.  This destination implies "LIMIT 1".
98047: **
98048: **     SRT_Set         The result must be a single column.  Store each
98049: **                     row of result as the key in table pDest->iParm. 
98050: **                     Apply the affinity pDest->affinity before storing
98051: **                     results.  Used to implement "IN (SELECT ...)".
98052: **
98053: **     SRT_Union       Store results as a key in a temporary table pDest->iParm.
98054: **
98055: **     SRT_Except      Remove results from the temporary table pDest->iParm.
98056: **
98057: **     SRT_Table       Store results in temporary table pDest->iParm.
98058: **                     This is like SRT_EphemTab except that the table
98059: **                     is assumed to already be open.
98060: **
98061: **     SRT_EphemTab    Create an temporary table pDest->iParm and store
98062: **                     the result there. The cursor is left open after
98063: **                     returning.  This is like SRT_Table except that
98064: **                     this destination uses OP_OpenEphemeral to create
98065: **                     the table first.
98066: **
98067: **     SRT_Coroutine   Generate a co-routine that returns a new row of
98068: **                     results each time it is invoked.  The entry point
98069: **                     of the co-routine is stored in register pDest->iParm.
98070: **
98071: **     SRT_Exists      Store a 1 in memory cell pDest->iParm if the result
98072: **                     set is not empty.
98073: **
98074: **     SRT_Discard     Throw the results away.  This is used by SELECT
98075: **                     statements within triggers whose only purpose is
98076: **                     the side-effects of functions.
98077: **
98078: ** This routine returns the number of errors.  If any errors are
98079: ** encountered, then an appropriate error message is left in
98080: ** pParse->zErrMsg.
98081: **
98082: ** This routine does NOT free the Select structure passed in.  The
98083: ** calling function needs to do that.
98084: */
98085: SQLITE_PRIVATE int sqlite3Select(
98086:   Parse *pParse,         /* The parser context */
98087:   Select *p,             /* The SELECT statement being coded. */
98088:   SelectDest *pDest      /* What to do with the query results */
98089: ){
98090:   int i, j;              /* Loop counters */
98091:   WhereInfo *pWInfo;     /* Return from sqlite3WhereBegin() */
98092:   Vdbe *v;               /* The virtual machine under construction */
98093:   int isAgg;             /* True for select lists like "count(*)" */
98094:   ExprList *pEList;      /* List of columns to extract. */
98095:   SrcList *pTabList;     /* List of tables to select from */
98096:   Expr *pWhere;          /* The WHERE clause.  May be NULL */
98097:   ExprList *pOrderBy;    /* The ORDER BY clause.  May be NULL */
98098:   ExprList *pGroupBy;    /* The GROUP BY clause.  May be NULL */
98099:   Expr *pHaving;         /* The HAVING clause.  May be NULL */
98100:   int isDistinct;        /* True if the DISTINCT keyword is present */
98101:   int distinct;          /* Table to use for the distinct set */
98102:   int rc = 1;            /* Value to return from this function */
98103:   int addrSortIndex;     /* Address of an OP_OpenEphemeral instruction */
98104:   int addrDistinctIndex; /* Address of an OP_OpenEphemeral instruction */
98105:   AggInfo sAggInfo;      /* Information used by aggregate queries */
98106:   int iEnd;              /* Address of the end of the query */
98107:   sqlite3 *db;           /* The database connection */
98108: 
98109: #ifndef SQLITE_OMIT_EXPLAIN
98110:   int iRestoreSelectId = pParse->iSelectId;
98111:   pParse->iSelectId = pParse->iNextSelectId++;
98112: #endif
98113: 
98114:   db = pParse->db;
98115:   if( p==0 || db->mallocFailed || pParse->nErr ){
98116:     return 1;
98117:   }
98118:   if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
98119:   memset(&sAggInfo, 0, sizeof(sAggInfo));
98120: 
98121:   if( IgnorableOrderby(pDest) ){
98122:     assert(pDest->eDest==SRT_Exists || pDest->eDest==SRT_Union || 
98123:            pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard);
98124:     /* If ORDER BY makes no difference in the output then neither does
98125:     ** DISTINCT so it can be removed too. */
98126:     sqlite3ExprListDelete(db, p->pOrderBy);
98127:     p->pOrderBy = 0;
98128:     p->selFlags &= ~SF_Distinct;
98129:   }
98130:   sqlite3SelectPrep(pParse, p, 0);
98131:   pOrderBy = p->pOrderBy;
98132:   pTabList = p->pSrc;
98133:   pEList = p->pEList;
98134:   if( pParse->nErr || db->mallocFailed ){
98135:     goto select_end;
98136:   }
98137:   isAgg = (p->selFlags & SF_Aggregate)!=0;
98138:   assert( pEList!=0 );
98139: 
98140:   /* Begin generating code.
98141:   */
98142:   v = sqlite3GetVdbe(pParse);
98143:   if( v==0 ) goto select_end;
98144: 
98145:   /* If writing to memory or generating a set
98146:   ** only a single column may be output.
98147:   */
98148: #ifndef SQLITE_OMIT_SUBQUERY
98149:   if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){
98150:     goto select_end;
98151:   }
98152: #endif
98153: 
98154:   /* Generate code for all sub-queries in the FROM clause
98155:   */
98156: #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
98157:   for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
98158:     struct SrcList_item *pItem = &pTabList->a[i];
98159:     SelectDest dest;
98160:     Select *pSub = pItem->pSelect;
98161:     int isAggSub;
98162: 
98163:     if( pSub==0 ) continue;
98164:     if( pItem->addrFillSub ){
98165:       sqlite3VdbeAddOp2(v, OP_Gosub, pItem->regReturn, pItem->addrFillSub);
98166:       continue;
98167:     }
98168: 
98169:     /* Increment Parse.nHeight by the height of the largest expression
98170:     ** tree refered to by this, the parent select. The child select
98171:     ** may contain expression trees of at most
98172:     ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit
98173:     ** more conservative than necessary, but much easier than enforcing
98174:     ** an exact limit.
98175:     */
98176:     pParse->nHeight += sqlite3SelectExprHeight(p);
98177: 
98178:     isAggSub = (pSub->selFlags & SF_Aggregate)!=0;
98179:     if( flattenSubquery(pParse, p, i, isAgg, isAggSub) ){
98180:       /* This subquery can be absorbed into its parent. */
98181:       if( isAggSub ){
98182:         isAgg = 1;
98183:         p->selFlags |= SF_Aggregate;
98184:       }
98185:       i = -1;
98186:     }else{
98187:       /* Generate a subroutine that will fill an ephemeral table with
98188:       ** the content of this subquery.  pItem->addrFillSub will point
98189:       ** to the address of the generated subroutine.  pItem->regReturn
98190:       ** is a register allocated to hold the subroutine return address
98191:       */
98192:       int topAddr;
98193:       int onceAddr = 0;
98194:       int retAddr;
98195:       assert( pItem->addrFillSub==0 );
98196:       pItem->regReturn = ++pParse->nMem;
98197:       topAddr = sqlite3VdbeAddOp2(v, OP_Integer, 0, pItem->regReturn);
98198:       pItem->addrFillSub = topAddr+1;
98199:       VdbeNoopComment((v, "materialize %s", pItem->pTab->zName));
98200:       if( pItem->isCorrelated==0 ){
98201:         /* If the subquery is no correlated and if we are not inside of
98202:         ** a trigger, then we only need to compute the value of the subquery
98203:         ** once. */
98204:         onceAddr = sqlite3CodeOnce(pParse);
98205:       }
98206:       sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
98207:       explainSetInteger(pItem->iSelectId, (u8)pParse->iNextSelectId);
98208:       sqlite3Select(pParse, pSub, &dest);
98209:       pItem->pTab->nRowEst = (unsigned)pSub->nSelectRow;
98210:       if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr);
98211:       retAddr = sqlite3VdbeAddOp1(v, OP_Return, pItem->regReturn);
98212:       VdbeComment((v, "end %s", pItem->pTab->zName));
98213:       sqlite3VdbeChangeP1(v, topAddr, retAddr);
98214:       sqlite3ClearTempRegCache(pParse);
98215:     }
98216:     if( /*pParse->nErr ||*/ db->mallocFailed ){
98217:       goto select_end;
98218:     }
98219:     pParse->nHeight -= sqlite3SelectExprHeight(p);
98220:     pTabList = p->pSrc;
98221:     if( !IgnorableOrderby(pDest) ){
98222:       pOrderBy = p->pOrderBy;
98223:     }
98224:   }
98225:   pEList = p->pEList;
98226: #endif
98227:   pWhere = p->pWhere;
98228:   pGroupBy = p->pGroupBy;
98229:   pHaving = p->pHaving;
98230:   isDistinct = (p->selFlags & SF_Distinct)!=0;
98231: 
98232: #ifndef SQLITE_OMIT_COMPOUND_SELECT
98233:   /* If there is are a sequence of queries, do the earlier ones first.
98234:   */
98235:   if( p->pPrior ){
98236:     if( p->pRightmost==0 ){
98237:       Select *pLoop, *pRight = 0;
98238:       int cnt = 0;
98239:       int mxSelect;
98240:       for(pLoop=p; pLoop; pLoop=pLoop->pPrior, cnt++){
98241:         pLoop->pRightmost = p;
98242:         pLoop->pNext = pRight;
98243:         pRight = pLoop;
98244:       }
98245:       mxSelect = db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT];
98246:       if( mxSelect && cnt>mxSelect ){
98247:         sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
98248:         goto select_end;
98249:       }
98250:     }
98251:     rc = multiSelect(pParse, p, pDest);
98252:     explainSetInteger(pParse->iSelectId, iRestoreSelectId);
98253:     return rc;
98254:   }
98255: #endif
98256: 
98257:   /* If there is both a GROUP BY and an ORDER BY clause and they are
98258:   ** identical, then disable the ORDER BY clause since the GROUP BY
98259:   ** will cause elements to come out in the correct order.  This is
98260:   ** an optimization - the correct answer should result regardless.
98261:   ** Use the SQLITE_GroupByOrder flag with SQLITE_TESTCTRL_OPTIMIZER
98262:   ** to disable this optimization for testing purposes.
98263:   */
98264:   if( sqlite3ExprListCompare(p->pGroupBy, pOrderBy)==0
98265:          && (db->flags & SQLITE_GroupByOrder)==0 ){
98266:     pOrderBy = 0;
98267:   }
98268: 
98269:   /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and 
98270:   ** if the select-list is the same as the ORDER BY list, then this query
98271:   ** can be rewritten as a GROUP BY. In other words, this:
98272:   **
98273:   **     SELECT DISTINCT xyz FROM ... ORDER BY xyz
98274:   **
98275:   ** is transformed to:
98276:   **
98277:   **     SELECT xyz FROM ... GROUP BY xyz
98278:   **
98279:   ** The second form is preferred as a single index (or temp-table) may be 
98280:   ** used for both the ORDER BY and DISTINCT processing. As originally 
98281:   ** written the query must use a temp-table for at least one of the ORDER 
98282:   ** BY and DISTINCT, and an index or separate temp-table for the other.
98283:   */
98284:   if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct 
98285:    && sqlite3ExprListCompare(pOrderBy, p->pEList)==0
98286:   ){
98287:     p->selFlags &= ~SF_Distinct;
98288:     p->pGroupBy = sqlite3ExprListDup(db, p->pEList, 0);
98289:     pGroupBy = p->pGroupBy;
98290:     pOrderBy = 0;
98291:   }
98292: 
98293:   /* If there is an ORDER BY clause, then this sorting
98294:   ** index might end up being unused if the data can be 
98295:   ** extracted in pre-sorted order.  If that is the case, then the
98296:   ** OP_OpenEphemeral instruction will be changed to an OP_Noop once
98297:   ** we figure out that the sorting index is not needed.  The addrSortIndex
98298:   ** variable is used to facilitate that change.
98299:   */
98300:   if( pOrderBy ){
98301:     KeyInfo *pKeyInfo;
98302:     pKeyInfo = keyInfoFromExprList(pParse, pOrderBy);
98303:     pOrderBy->iECursor = pParse->nTab++;
98304:     p->addrOpenEphm[2] = addrSortIndex =
98305:       sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
98306:                            pOrderBy->iECursor, pOrderBy->nExpr+2, 0,
98307:                            (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
98308:   }else{
98309:     addrSortIndex = -1;
98310:   }
98311: 
98312:   /* If the output is destined for a temporary table, open that table.
98313:   */
98314:   if( pDest->eDest==SRT_EphemTab ){
98315:     sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iParm, pEList->nExpr);
98316:   }
98317: 
98318:   /* Set the limiter.
98319:   */
98320:   iEnd = sqlite3VdbeMakeLabel(v);
98321:   p->nSelectRow = (double)LARGEST_INT64;
98322:   computeLimitRegisters(pParse, p, iEnd);
98323:   if( p->iLimit==0 && addrSortIndex>=0 ){
98324:     sqlite3VdbeGetOp(v, addrSortIndex)->opcode = OP_SorterOpen;
98325:     p->selFlags |= SF_UseSorter;
98326:   }
98327: 
98328:   /* Open a virtual index to use for the distinct set.
98329:   */
98330:   if( p->selFlags & SF_Distinct ){
98331:     KeyInfo *pKeyInfo;
98332:     distinct = pParse->nTab++;
98333:     pKeyInfo = keyInfoFromExprList(pParse, p->pEList);
98334:     addrDistinctIndex = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, distinct, 0, 0,
98335:         (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
98336:     sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
98337:   }else{
98338:     distinct = addrDistinctIndex = -1;
98339:   }
98340: 
98341:   /* Aggregate and non-aggregate queries are handled differently */
98342:   if( !isAgg && pGroupBy==0 ){
98343:     ExprList *pDist = (isDistinct ? p->pEList : 0);
98344: 
98345:     /* Begin the database scan. */
98346:     pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy, pDist, 0);
98347:     if( pWInfo==0 ) goto select_end;
98348:     if( pWInfo->nRowOut < p->nSelectRow ) p->nSelectRow = pWInfo->nRowOut;
98349: 
98350:     /* If sorting index that was created by a prior OP_OpenEphemeral 
98351:     ** instruction ended up not being needed, then change the OP_OpenEphemeral
98352:     ** into an OP_Noop.
98353:     */
98354:     if( addrSortIndex>=0 && pOrderBy==0 ){
98355:       sqlite3VdbeChangeToNoop(v, addrSortIndex);
98356:       p->addrOpenEphm[2] = -1;
98357:     }
98358: 
98359:     if( pWInfo->eDistinct ){
98360:       VdbeOp *pOp;                /* No longer required OpenEphemeral instr. */
98361:      
98362:       assert( addrDistinctIndex>=0 );
98363:       pOp = sqlite3VdbeGetOp(v, addrDistinctIndex);
98364: 
98365:       assert( isDistinct );
98366:       assert( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED 
98367:            || pWInfo->eDistinct==WHERE_DISTINCT_UNIQUE 
98368:       );
98369:       distinct = -1;
98370:       if( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED ){
98371:         int iJump;
98372:         int iExpr;
98373:         int iFlag = ++pParse->nMem;
98374:         int iBase = pParse->nMem+1;
98375:         int iBase2 = iBase + pEList->nExpr;
98376:         pParse->nMem += (pEList->nExpr*2);
98377: 
98378:         /* Change the OP_OpenEphemeral coded earlier to an OP_Integer. The
98379:         ** OP_Integer initializes the "first row" flag.  */
98380:         pOp->opcode = OP_Integer;
98381:         pOp->p1 = 1;
98382:         pOp->p2 = iFlag;
98383: 
98384:         sqlite3ExprCodeExprList(pParse, pEList, iBase, 1);
98385:         iJump = sqlite3VdbeCurrentAddr(v) + 1 + pEList->nExpr + 1 + 1;
98386:         sqlite3VdbeAddOp2(v, OP_If, iFlag, iJump-1);
98387:         for(iExpr=0; iExpr<pEList->nExpr; iExpr++){
98388:           CollSeq *pColl = sqlite3ExprCollSeq(pParse, pEList->a[iExpr].pExpr);
98389:           sqlite3VdbeAddOp3(v, OP_Ne, iBase+iExpr, iJump, iBase2+iExpr);
98390:           sqlite3VdbeChangeP4(v, -1, (const char *)pColl, P4_COLLSEQ);
98391:           sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
98392:         }
98393:         sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iContinue);
98394: 
98395:         sqlite3VdbeAddOp2(v, OP_Integer, 0, iFlag);
98396:         assert( sqlite3VdbeCurrentAddr(v)==iJump );
98397:         sqlite3VdbeAddOp3(v, OP_Move, iBase, iBase2, pEList->nExpr);
98398:       }else{
98399:         pOp->opcode = OP_Noop;
98400:       }
98401:     }
98402: 
98403:     /* Use the standard inner loop. */
98404:     selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, distinct, pDest,
98405:                     pWInfo->iContinue, pWInfo->iBreak);
98406: 
98407:     /* End the database scan loop.
98408:     */
98409:     sqlite3WhereEnd(pWInfo);
98410:   }else{
98411:     /* This is the processing for aggregate queries */
98412:     NameContext sNC;    /* Name context for processing aggregate information */
98413:     int iAMem;          /* First Mem address for storing current GROUP BY */
98414:     int iBMem;          /* First Mem address for previous GROUP BY */
98415:     int iUseFlag;       /* Mem address holding flag indicating that at least
98416:                         ** one row of the input to the aggregator has been
98417:                         ** processed */
98418:     int iAbortFlag;     /* Mem address which causes query abort if positive */
98419:     int groupBySort;    /* Rows come from source in GROUP BY order */
98420:     int addrEnd;        /* End of processing for this SELECT */
98421:     int sortPTab = 0;   /* Pseudotable used to decode sorting results */
98422:     int sortOut = 0;    /* Output register from the sorter */
98423: 
98424:     /* Remove any and all aliases between the result set and the
98425:     ** GROUP BY clause.
98426:     */
98427:     if( pGroupBy ){
98428:       int k;                        /* Loop counter */
98429:       struct ExprList_item *pItem;  /* For looping over expression in a list */
98430: 
98431:       for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){
98432:         pItem->iAlias = 0;
98433:       }
98434:       for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){
98435:         pItem->iAlias = 0;
98436:       }
98437:       if( p->nSelectRow>(double)100 ) p->nSelectRow = (double)100;
98438:     }else{
98439:       p->nSelectRow = (double)1;
98440:     }
98441: 
98442:  
98443:     /* Create a label to jump to when we want to abort the query */
98444:     addrEnd = sqlite3VdbeMakeLabel(v);
98445: 
98446:     /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in
98447:     ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the
98448:     ** SELECT statement.
98449:     */
98450:     memset(&sNC, 0, sizeof(sNC));
98451:     sNC.pParse = pParse;
98452:     sNC.pSrcList = pTabList;
98453:     sNC.pAggInfo = &sAggInfo;
98454:     sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0;
98455:     sAggInfo.pGroupBy = pGroupBy;
98456:     sqlite3ExprAnalyzeAggList(&sNC, pEList);
98457:     sqlite3ExprAnalyzeAggList(&sNC, pOrderBy);
98458:     if( pHaving ){
98459:       sqlite3ExprAnalyzeAggregates(&sNC, pHaving);
98460:     }
98461:     sAggInfo.nAccumulator = sAggInfo.nColumn;
98462:     for(i=0; i<sAggInfo.nFunc; i++){
98463:       assert( !ExprHasProperty(sAggInfo.aFunc[i].pExpr, EP_xIsSelect) );
98464:       sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->x.pList);
98465:     }
98466:     if( db->mallocFailed ) goto select_end;
98467: 
98468:     /* Processing for aggregates with GROUP BY is very different and
98469:     ** much more complex than aggregates without a GROUP BY.
98470:     */
98471:     if( pGroupBy ){
98472:       KeyInfo *pKeyInfo;  /* Keying information for the group by clause */
98473:       int j1;             /* A-vs-B comparision jump */
98474:       int addrOutputRow;  /* Start of subroutine that outputs a result row */
98475:       int regOutputRow;   /* Return address register for output subroutine */
98476:       int addrSetAbort;   /* Set the abort flag and return */
98477:       int addrTopOfLoop;  /* Top of the input loop */
98478:       int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */
98479:       int addrReset;      /* Subroutine for resetting the accumulator */
98480:       int regReset;       /* Return address register for reset subroutine */
98481: 
98482:       /* If there is a GROUP BY clause we might need a sorting index to
98483:       ** implement it.  Allocate that sorting index now.  If it turns out
98484:       ** that we do not need it after all, the OP_SorterOpen instruction
98485:       ** will be converted into a Noop.  
98486:       */
98487:       sAggInfo.sortingIdx = pParse->nTab++;
98488:       pKeyInfo = keyInfoFromExprList(pParse, pGroupBy);
98489:       addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, 
98490:           sAggInfo.sortingIdx, sAggInfo.nSortingColumn, 
98491:           0, (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
98492: 
98493:       /* Initialize memory locations used by GROUP BY aggregate processing
98494:       */
98495:       iUseFlag = ++pParse->nMem;
98496:       iAbortFlag = ++pParse->nMem;
98497:       regOutputRow = ++pParse->nMem;
98498:       addrOutputRow = sqlite3VdbeMakeLabel(v);
98499:       regReset = ++pParse->nMem;
98500:       addrReset = sqlite3VdbeMakeLabel(v);
98501:       iAMem = pParse->nMem + 1;
98502:       pParse->nMem += pGroupBy->nExpr;
98503:       iBMem = pParse->nMem + 1;
98504:       pParse->nMem += pGroupBy->nExpr;
98505:       sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag);
98506:       VdbeComment((v, "clear abort flag"));
98507:       sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag);
98508:       VdbeComment((v, "indicate accumulator empty"));
98509:       sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1);
98510: 
98511:       /* Begin a loop that will extract all source rows in GROUP BY order.
98512:       ** This might involve two separate loops with an OP_Sort in between, or
98513:       ** it might be a single loop that uses an index to extract information
98514:       ** in the right order to begin with.
98515:       */
98516:       sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
98517:       pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy, 0, 0);
98518:       if( pWInfo==0 ) goto select_end;
98519:       if( pGroupBy==0 ){
98520:         /* The optimizer is able to deliver rows in group by order so
98521:         ** we do not have to sort.  The OP_OpenEphemeral table will be
98522:         ** cancelled later because we still need to use the pKeyInfo
98523:         */
98524:         pGroupBy = p->pGroupBy;
98525:         groupBySort = 0;
98526:       }else{
98527:         /* Rows are coming out in undetermined order.  We have to push
98528:         ** each row into a sorting index, terminate the first loop,
98529:         ** then loop over the sorting index in order to get the output
98530:         ** in sorted order
98531:         */
98532:         int regBase;
98533:         int regRecord;
98534:         int nCol;
98535:         int nGroupBy;
98536: 
98537:         explainTempTable(pParse, 
98538:             isDistinct && !(p->selFlags&SF_Distinct)?"DISTINCT":"GROUP BY");
98539: 
98540:         groupBySort = 1;
98541:         nGroupBy = pGroupBy->nExpr;
98542:         nCol = nGroupBy + 1;
98543:         j = nGroupBy+1;
98544:         for(i=0; i<sAggInfo.nColumn; i++){
98545:           if( sAggInfo.aCol[i].iSorterColumn>=j ){
98546:             nCol++;
98547:             j++;
98548:           }
98549:         }
98550:         regBase = sqlite3GetTempRange(pParse, nCol);
98551:         sqlite3ExprCacheClear(pParse);
98552:         sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0);
98553:         sqlite3VdbeAddOp2(v, OP_Sequence, sAggInfo.sortingIdx,regBase+nGroupBy);
98554:         j = nGroupBy+1;
98555:         for(i=0; i<sAggInfo.nColumn; i++){
98556:           struct AggInfo_col *pCol = &sAggInfo.aCol[i];
98557:           if( pCol->iSorterColumn>=j ){
98558:             int r1 = j + regBase;
98559:             int r2;
98560: 
98561:             r2 = sqlite3ExprCodeGetColumn(pParse, 
98562:                                pCol->pTab, pCol->iColumn, pCol->iTable, r1);
98563:             if( r1!=r2 ){
98564:               sqlite3VdbeAddOp2(v, OP_SCopy, r2, r1);
98565:             }
98566:             j++;
98567:           }
98568:         }
98569:         regRecord = sqlite3GetTempReg(pParse);
98570:         sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
98571:         sqlite3VdbeAddOp2(v, OP_SorterInsert, sAggInfo.sortingIdx, regRecord);
98572:         sqlite3ReleaseTempReg(pParse, regRecord);
98573:         sqlite3ReleaseTempRange(pParse, regBase, nCol);
98574:         sqlite3WhereEnd(pWInfo);
98575:         sAggInfo.sortingIdxPTab = sortPTab = pParse->nTab++;
98576:         sortOut = sqlite3GetTempReg(pParse);
98577:         sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol);
98578:         sqlite3VdbeAddOp2(v, OP_SorterSort, sAggInfo.sortingIdx, addrEnd);
98579:         VdbeComment((v, "GROUP BY sort"));
98580:         sAggInfo.useSortingIdx = 1;
98581:         sqlite3ExprCacheClear(pParse);
98582:       }
98583: 
98584:       /* Evaluate the current GROUP BY terms and store in b0, b1, b2...
98585:       ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth)
98586:       ** Then compare the current GROUP BY terms against the GROUP BY terms
98587:       ** from the previous row currently stored in a0, a1, a2...
98588:       */
98589:       addrTopOfLoop = sqlite3VdbeCurrentAddr(v);
98590:       sqlite3ExprCacheClear(pParse);
98591:       if( groupBySort ){
98592:         sqlite3VdbeAddOp2(v, OP_SorterData, sAggInfo.sortingIdx, sortOut);
98593:       }
98594:       for(j=0; j<pGroupBy->nExpr; j++){
98595:         if( groupBySort ){
98596:           sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j);
98597:           if( j==0 ) sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
98598:         }else{
98599:           sAggInfo.directMode = 1;
98600:           sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j);
98601:         }
98602:       }
98603:       sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr,
98604:                           (char*)pKeyInfo, P4_KEYINFO);
98605:       j1 = sqlite3VdbeCurrentAddr(v);
98606:       sqlite3VdbeAddOp3(v, OP_Jump, j1+1, 0, j1+1);
98607: 
98608:       /* Generate code that runs whenever the GROUP BY changes.
98609:       ** Changes in the GROUP BY are detected by the previous code
98610:       ** block.  If there were no changes, this block is skipped.
98611:       **
98612:       ** This code copies current group by terms in b0,b1,b2,...
98613:       ** over to a0,a1,a2.  It then calls the output subroutine
98614:       ** and resets the aggregate accumulator registers in preparation
98615:       ** for the next GROUP BY batch.
98616:       */
98617:       sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr);
98618:       sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
98619:       VdbeComment((v, "output one row"));
98620:       sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd);
98621:       VdbeComment((v, "check abort flag"));
98622:       sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
98623:       VdbeComment((v, "reset accumulator"));
98624: 
98625:       /* Update the aggregate accumulators based on the content of
98626:       ** the current row
98627:       */
98628:       sqlite3VdbeJumpHere(v, j1);
98629:       updateAccumulator(pParse, &sAggInfo);
98630:       sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag);
98631:       VdbeComment((v, "indicate data in accumulator"));
98632: 
98633:       /* End of the loop
98634:       */
98635:       if( groupBySort ){
98636:         sqlite3VdbeAddOp2(v, OP_SorterNext, sAggInfo.sortingIdx, addrTopOfLoop);
98637:       }else{
98638:         sqlite3WhereEnd(pWInfo);
98639:         sqlite3VdbeChangeToNoop(v, addrSortingIdx);
98640:       }
98641: 
98642:       /* Output the final row of result
98643:       */
98644:       sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
98645:       VdbeComment((v, "output final row"));
98646: 
98647:       /* Jump over the subroutines
98648:       */
98649:       sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEnd);
98650: 
98651:       /* Generate a subroutine that outputs a single row of the result
98652:       ** set.  This subroutine first looks at the iUseFlag.  If iUseFlag
98653:       ** is less than or equal to zero, the subroutine is a no-op.  If
98654:       ** the processing calls for the query to abort, this subroutine
98655:       ** increments the iAbortFlag memory location before returning in
98656:       ** order to signal the caller to abort.
98657:       */
98658:       addrSetAbort = sqlite3VdbeCurrentAddr(v);
98659:       sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag);
98660:       VdbeComment((v, "set abort flag"));
98661:       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
98662:       sqlite3VdbeResolveLabel(v, addrOutputRow);
98663:       addrOutputRow = sqlite3VdbeCurrentAddr(v);
98664:       sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2);
98665:       VdbeComment((v, "Groupby result generator entry point"));
98666:       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
98667:       finalizeAggFunctions(pParse, &sAggInfo);
98668:       sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);
98669:       selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy,
98670:                       distinct, pDest,
98671:                       addrOutputRow+1, addrSetAbort);
98672:       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
98673:       VdbeComment((v, "end groupby result generator"));
98674: 
98675:       /* Generate a subroutine that will reset the group-by accumulator
98676:       */
98677:       sqlite3VdbeResolveLabel(v, addrReset);
98678:       resetAccumulator(pParse, &sAggInfo);
98679:       sqlite3VdbeAddOp1(v, OP_Return, regReset);
98680:      
98681:     } /* endif pGroupBy.  Begin aggregate queries without GROUP BY: */
98682:     else {
98683:       ExprList *pDel = 0;
98684: #ifndef SQLITE_OMIT_BTREECOUNT
98685:       Table *pTab;
98686:       if( (pTab = isSimpleCount(p, &sAggInfo))!=0 ){
98687:         /* If isSimpleCount() returns a pointer to a Table structure, then
98688:         ** the SQL statement is of the form:
98689:         **
98690:         **   SELECT count(*) FROM <tbl>
98691:         **
98692:         ** where the Table structure returned represents table <tbl>.
98693:         **
98694:         ** This statement is so common that it is optimized specially. The
98695:         ** OP_Count instruction is executed either on the intkey table that
98696:         ** contains the data for table <tbl> or on one of its indexes. It
98697:         ** is better to execute the op on an index, as indexes are almost
98698:         ** always spread across less pages than their corresponding tables.
98699:         */
98700:         const int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
98701:         const int iCsr = pParse->nTab++;     /* Cursor to scan b-tree */
98702:         Index *pIdx;                         /* Iterator variable */
98703:         KeyInfo *pKeyInfo = 0;               /* Keyinfo for scanned index */
98704:         Index *pBest = 0;                    /* Best index found so far */
98705:         int iRoot = pTab->tnum;              /* Root page of scanned b-tree */
98706: 
98707:         sqlite3CodeVerifySchema(pParse, iDb);
98708:         sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
98709: 
98710:         /* Search for the index that has the least amount of columns. If
98711:         ** there is such an index, and it has less columns than the table
98712:         ** does, then we can assume that it consumes less space on disk and
98713:         ** will therefore be cheaper to scan to determine the query result.
98714:         ** In this case set iRoot to the root page number of the index b-tree
98715:         ** and pKeyInfo to the KeyInfo structure required to navigate the
98716:         ** index.
98717:         **
98718:         ** (2011-04-15) Do not do a full scan of an unordered index.
98719:         **
98720:         ** In practice the KeyInfo structure will not be used. It is only 
98721:         ** passed to keep OP_OpenRead happy.
98722:         */
98723:         for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
98724:           if( pIdx->bUnordered==0 && (!pBest || pIdx->nColumn<pBest->nColumn) ){
98725:             pBest = pIdx;
98726:           }
98727:         }
98728:         if( pBest && pBest->nColumn<pTab->nCol ){
98729:           iRoot = pBest->tnum;
98730:           pKeyInfo = sqlite3IndexKeyinfo(pParse, pBest);
98731:         }
98732: 
98733:         /* Open a read-only cursor, execute the OP_Count, close the cursor. */
98734:         sqlite3VdbeAddOp3(v, OP_OpenRead, iCsr, iRoot, iDb);
98735:         if( pKeyInfo ){
98736:           sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO_HANDOFF);
98737:         }
98738:         sqlite3VdbeAddOp2(v, OP_Count, iCsr, sAggInfo.aFunc[0].iMem);
98739:         sqlite3VdbeAddOp1(v, OP_Close, iCsr);
98740:         explainSimpleCount(pParse, pTab, pBest);
98741:       }else
98742: #endif /* SQLITE_OMIT_BTREECOUNT */
98743:       {
98744:         /* Check if the query is of one of the following forms:
98745:         **
98746:         **   SELECT min(x) FROM ...
98747:         **   SELECT max(x) FROM ...
98748:         **
98749:         ** If it is, then ask the code in where.c to attempt to sort results
98750:         ** as if there was an "ORDER ON x" or "ORDER ON x DESC" clause. 
98751:         ** If where.c is able to produce results sorted in this order, then
98752:         ** add vdbe code to break out of the processing loop after the 
98753:         ** first iteration (since the first iteration of the loop is 
98754:         ** guaranteed to operate on the row with the minimum or maximum 
98755:         ** value of x, the only row required).
98756:         **
98757:         ** A special flag must be passed to sqlite3WhereBegin() to slightly
98758:         ** modify behaviour as follows:
98759:         **
98760:         **   + If the query is a "SELECT min(x)", then the loop coded by
98761:         **     where.c should not iterate over any values with a NULL value
98762:         **     for x.
98763:         **
98764:         **   + The optimizer code in where.c (the thing that decides which
98765:         **     index or indices to use) should place a different priority on 
98766:         **     satisfying the 'ORDER BY' clause than it does in other cases.
98767:         **     Refer to code and comments in where.c for details.
98768:         */
98769:         ExprList *pMinMax = 0;
98770:         u8 flag = minMaxQuery(p);
98771:         if( flag ){
98772:           assert( !ExprHasProperty(p->pEList->a[0].pExpr, EP_xIsSelect) );
98773:           pMinMax = sqlite3ExprListDup(db, p->pEList->a[0].pExpr->x.pList,0);
98774:           pDel = pMinMax;
98775:           if( pMinMax && !db->mallocFailed ){
98776:             pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN ?1:0;
98777:             pMinMax->a[0].pExpr->op = TK_COLUMN;
98778:           }
98779:         }
98780:   
98781:         /* This case runs if the aggregate has no GROUP BY clause.  The
98782:         ** processing is much simpler since there is only a single row
98783:         ** of output.
98784:         */
98785:         resetAccumulator(pParse, &sAggInfo);
98786:         pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pMinMax, 0, flag);
98787:         if( pWInfo==0 ){
98788:           sqlite3ExprListDelete(db, pDel);
98789:           goto select_end;
98790:         }
98791:         updateAccumulator(pParse, &sAggInfo);
98792:         if( !pMinMax && flag ){
98793:           sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iBreak);
98794:           VdbeComment((v, "%s() by index",
98795:                 (flag==WHERE_ORDERBY_MIN?"min":"max")));
98796:         }
98797:         sqlite3WhereEnd(pWInfo);
98798:         finalizeAggFunctions(pParse, &sAggInfo);
98799:       }
98800: 
98801:       pOrderBy = 0;
98802:       sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL);
98803:       selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, -1, 
98804:                       pDest, addrEnd, addrEnd);
98805:       sqlite3ExprListDelete(db, pDel);
98806:     }
98807:     sqlite3VdbeResolveLabel(v, addrEnd);
98808:     
98809:   } /* endif aggregate query */
98810: 
98811:   if( distinct>=0 ){
98812:     explainTempTable(pParse, "DISTINCT");
98813:   }
98814: 
98815:   /* If there is an ORDER BY clause, then we need to sort the results
98816:   ** and send them to the callback one by one.
98817:   */
98818:   if( pOrderBy ){
98819:     explainTempTable(pParse, "ORDER BY");
98820:     generateSortTail(pParse, p, v, pEList->nExpr, pDest);
98821:   }
98822: 
98823:   /* Jump here to skip this query
98824:   */
98825:   sqlite3VdbeResolveLabel(v, iEnd);
98826: 
98827:   /* The SELECT was successfully coded.   Set the return code to 0
98828:   ** to indicate no errors.
98829:   */
98830:   rc = 0;
98831: 
98832:   /* Control jumps to here if an error is encountered above, or upon
98833:   ** successful coding of the SELECT.
98834:   */
98835: select_end:
98836:   explainSetInteger(pParse->iSelectId, iRestoreSelectId);
98837: 
98838:   /* Identify column names if results of the SELECT are to be output.
98839:   */
98840:   if( rc==SQLITE_OK && pDest->eDest==SRT_Output ){
98841:     generateColumnNames(pParse, pTabList, pEList);
98842:   }
98843: 
98844:   sqlite3DbFree(db, sAggInfo.aCol);
98845:   sqlite3DbFree(db, sAggInfo.aFunc);
98846:   return rc;
98847: }
98848: 
98849: #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
98850: /*
98851: ** Generate a human-readable description of a the Select object.
98852: */
98853: static void explainOneSelect(Vdbe *pVdbe, Select *p){
98854:   sqlite3ExplainPrintf(pVdbe, "SELECT ");
98855:   if( p->selFlags & (SF_Distinct|SF_Aggregate) ){
98856:     if( p->selFlags & SF_Distinct ){
98857:       sqlite3ExplainPrintf(pVdbe, "DISTINCT ");
98858:     }
98859:     if( p->selFlags & SF_Aggregate ){
98860:       sqlite3ExplainPrintf(pVdbe, "agg_flag ");
98861:     }
98862:     sqlite3ExplainNL(pVdbe);
98863:     sqlite3ExplainPrintf(pVdbe, "   ");
98864:   }
98865:   sqlite3ExplainExprList(pVdbe, p->pEList);
98866:   sqlite3ExplainNL(pVdbe);
98867:   if( p->pSrc && p->pSrc->nSrc ){
98868:     int i;
98869:     sqlite3ExplainPrintf(pVdbe, "FROM ");
98870:     sqlite3ExplainPush(pVdbe);
98871:     for(i=0; i<p->pSrc->nSrc; i++){
98872:       struct SrcList_item *pItem = &p->pSrc->a[i];
98873:       sqlite3ExplainPrintf(pVdbe, "{%d,*} = ", pItem->iCursor);
98874:       if( pItem->pSelect ){
98875:         sqlite3ExplainSelect(pVdbe, pItem->pSelect);
98876:         if( pItem->pTab ){
98877:           sqlite3ExplainPrintf(pVdbe, " (tabname=%s)", pItem->pTab->zName);
98878:         }
98879:       }else if( pItem->zName ){
98880:         sqlite3ExplainPrintf(pVdbe, "%s", pItem->zName);
98881:       }
98882:       if( pItem->zAlias ){
98883:         sqlite3ExplainPrintf(pVdbe, " (AS %s)", pItem->zAlias);
98884:       }
98885:       if( pItem->jointype & JT_LEFT ){
98886:         sqlite3ExplainPrintf(pVdbe, " LEFT-JOIN");
98887:       }
98888:       sqlite3ExplainNL(pVdbe);
98889:     }
98890:     sqlite3ExplainPop(pVdbe);
98891:   }
98892:   if( p->pWhere ){
98893:     sqlite3ExplainPrintf(pVdbe, "WHERE ");
98894:     sqlite3ExplainExpr(pVdbe, p->pWhere);
98895:     sqlite3ExplainNL(pVdbe);
98896:   }
98897:   if( p->pGroupBy ){
98898:     sqlite3ExplainPrintf(pVdbe, "GROUPBY ");
98899:     sqlite3ExplainExprList(pVdbe, p->pGroupBy);
98900:     sqlite3ExplainNL(pVdbe);
98901:   }
98902:   if( p->pHaving ){
98903:     sqlite3ExplainPrintf(pVdbe, "HAVING ");
98904:     sqlite3ExplainExpr(pVdbe, p->pHaving);
98905:     sqlite3ExplainNL(pVdbe);
98906:   }
98907:   if( p->pOrderBy ){
98908:     sqlite3ExplainPrintf(pVdbe, "ORDERBY ");
98909:     sqlite3ExplainExprList(pVdbe, p->pOrderBy);
98910:     sqlite3ExplainNL(pVdbe);
98911:   }
98912:   if( p->pLimit ){
98913:     sqlite3ExplainPrintf(pVdbe, "LIMIT ");
98914:     sqlite3ExplainExpr(pVdbe, p->pLimit);
98915:     sqlite3ExplainNL(pVdbe);
98916:   }
98917:   if( p->pOffset ){
98918:     sqlite3ExplainPrintf(pVdbe, "OFFSET ");
98919:     sqlite3ExplainExpr(pVdbe, p->pOffset);
98920:     sqlite3ExplainNL(pVdbe);
98921:   }
98922: }
98923: SQLITE_PRIVATE void sqlite3ExplainSelect(Vdbe *pVdbe, Select *p){
98924:   if( p==0 ){
98925:     sqlite3ExplainPrintf(pVdbe, "(null-select)");
98926:     return;
98927:   }
98928:   while( p->pPrior ) p = p->pPrior;
98929:   sqlite3ExplainPush(pVdbe);
98930:   while( p ){
98931:     explainOneSelect(pVdbe, p);
98932:     p = p->pNext;
98933:     if( p==0 ) break;
98934:     sqlite3ExplainNL(pVdbe);
98935:     sqlite3ExplainPrintf(pVdbe, "%s\n", selectOpName(p->op));
98936:   }
98937:   sqlite3ExplainPrintf(pVdbe, "END");
98938:   sqlite3ExplainPop(pVdbe);
98939: }
98940: 
98941: /* End of the structure debug printing code
98942: *****************************************************************************/
98943: #endif /* defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */
98944: 
98945: /************** End of select.c **********************************************/
98946: /************** Begin file table.c *******************************************/
98947: /*
98948: ** 2001 September 15
98949: **
98950: ** The author disclaims copyright to this source code.  In place of
98951: ** a legal notice, here is a blessing:
98952: **
98953: **    May you do good and not evil.
98954: **    May you find forgiveness for yourself and forgive others.
98955: **    May you share freely, never taking more than you give.
98956: **
98957: *************************************************************************
98958: ** This file contains the sqlite3_get_table() and sqlite3_free_table()
98959: ** interface routines.  These are just wrappers around the main
98960: ** interface routine of sqlite3_exec().
98961: **
98962: ** These routines are in a separate files so that they will not be linked
98963: ** if they are not used.
98964: */
98965: /* #include <stdlib.h> */
98966: /* #include <string.h> */
98967: 
98968: #ifndef SQLITE_OMIT_GET_TABLE
98969: 
98970: /*
98971: ** This structure is used to pass data from sqlite3_get_table() through
98972: ** to the callback function is uses to build the result.
98973: */
98974: typedef struct TabResult {
98975:   char **azResult;   /* Accumulated output */
98976:   char *zErrMsg;     /* Error message text, if an error occurs */
98977:   int nAlloc;        /* Slots allocated for azResult[] */
98978:   int nRow;          /* Number of rows in the result */
98979:   int nColumn;       /* Number of columns in the result */
98980:   int nData;         /* Slots used in azResult[].  (nRow+1)*nColumn */
98981:   int rc;            /* Return code from sqlite3_exec() */
98982: } TabResult;
98983: 
98984: /*
98985: ** This routine is called once for each row in the result table.  Its job
98986: ** is to fill in the TabResult structure appropriately, allocating new
98987: ** memory as necessary.
98988: */
98989: static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){
98990:   TabResult *p = (TabResult*)pArg;  /* Result accumulator */
98991:   int need;                         /* Slots needed in p->azResult[] */
98992:   int i;                            /* Loop counter */
98993:   char *z;                          /* A single column of result */
98994: 
98995:   /* Make sure there is enough space in p->azResult to hold everything
98996:   ** we need to remember from this invocation of the callback.
98997:   */
98998:   if( p->nRow==0 && argv!=0 ){
98999:     need = nCol*2;
99000:   }else{
99001:     need = nCol;
99002:   }
99003:   if( p->nData + need > p->nAlloc ){
99004:     char **azNew;
99005:     p->nAlloc = p->nAlloc*2 + need;
99006:     azNew = sqlite3_realloc( p->azResult, sizeof(char*)*p->nAlloc );
99007:     if( azNew==0 ) goto malloc_failed;
99008:     p->azResult = azNew;
99009:   }
99010: 
99011:   /* If this is the first row, then generate an extra row containing
99012:   ** the names of all columns.
99013:   */
99014:   if( p->nRow==0 ){
99015:     p->nColumn = nCol;
99016:     for(i=0; i<nCol; i++){
99017:       z = sqlite3_mprintf("%s", colv[i]);
99018:       if( z==0 ) goto malloc_failed;
99019:       p->azResult[p->nData++] = z;
99020:     }
99021:   }else if( p->nColumn!=nCol ){
99022:     sqlite3_free(p->zErrMsg);
99023:     p->zErrMsg = sqlite3_mprintf(
99024:        "sqlite3_get_table() called with two or more incompatible queries"
99025:     );
99026:     p->rc = SQLITE_ERROR;
99027:     return 1;
99028:   }
99029: 
99030:   /* Copy over the row data
99031:   */
99032:   if( argv!=0 ){
99033:     for(i=0; i<nCol; i++){
99034:       if( argv[i]==0 ){
99035:         z = 0;
99036:       }else{
99037:         int n = sqlite3Strlen30(argv[i])+1;
99038:         z = sqlite3_malloc( n );
99039:         if( z==0 ) goto malloc_failed;
99040:         memcpy(z, argv[i], n);
99041:       }
99042:       p->azResult[p->nData++] = z;
99043:     }
99044:     p->nRow++;
99045:   }
99046:   return 0;
99047: 
99048: malloc_failed:
99049:   p->rc = SQLITE_NOMEM;
99050:   return 1;
99051: }
99052: 
99053: /*
99054: ** Query the database.  But instead of invoking a callback for each row,
99055: ** malloc() for space to hold the result and return the entire results
99056: ** at the conclusion of the call.
99057: **
99058: ** The result that is written to ***pazResult is held in memory obtained
99059: ** from malloc().  But the caller cannot free this memory directly.  
99060: ** Instead, the entire table should be passed to sqlite3_free_table() when
99061: ** the calling procedure is finished using it.
99062: */
99063: SQLITE_API int sqlite3_get_table(
99064:   sqlite3 *db,                /* The database on which the SQL executes */
99065:   const char *zSql,           /* The SQL to be executed */
99066:   char ***pazResult,          /* Write the result table here */
99067:   int *pnRow,                 /* Write the number of rows in the result here */
99068:   int *pnColumn,              /* Write the number of columns of result here */
99069:   char **pzErrMsg             /* Write error messages here */
99070: ){
99071:   int rc;
99072:   TabResult res;
99073: 
99074:   *pazResult = 0;
99075:   if( pnColumn ) *pnColumn = 0;
99076:   if( pnRow ) *pnRow = 0;
99077:   if( pzErrMsg ) *pzErrMsg = 0;
99078:   res.zErrMsg = 0;
99079:   res.nRow = 0;
99080:   res.nColumn = 0;
99081:   res.nData = 1;
99082:   res.nAlloc = 20;
99083:   res.rc = SQLITE_OK;
99084:   res.azResult = sqlite3_malloc(sizeof(char*)*res.nAlloc );
99085:   if( res.azResult==0 ){
99086:      db->errCode = SQLITE_NOMEM;
99087:      return SQLITE_NOMEM;
99088:   }
99089:   res.azResult[0] = 0;
99090:   rc = sqlite3_exec(db, zSql, sqlite3_get_table_cb, &res, pzErrMsg);
99091:   assert( sizeof(res.azResult[0])>= sizeof(res.nData) );
99092:   res.azResult[0] = SQLITE_INT_TO_PTR(res.nData);
99093:   if( (rc&0xff)==SQLITE_ABORT ){
99094:     sqlite3_free_table(&res.azResult[1]);
99095:     if( res.zErrMsg ){
99096:       if( pzErrMsg ){
99097:         sqlite3_free(*pzErrMsg);
99098:         *pzErrMsg = sqlite3_mprintf("%s",res.zErrMsg);
99099:       }
99100:       sqlite3_free(res.zErrMsg);
99101:     }
99102:     db->errCode = res.rc;  /* Assume 32-bit assignment is atomic */
99103:     return res.rc;
99104:   }
99105:   sqlite3_free(res.zErrMsg);
99106:   if( rc!=SQLITE_OK ){
99107:     sqlite3_free_table(&res.azResult[1]);
99108:     return rc;
99109:   }
99110:   if( res.nAlloc>res.nData ){
99111:     char **azNew;
99112:     azNew = sqlite3_realloc( res.azResult, sizeof(char*)*res.nData );
99113:     if( azNew==0 ){
99114:       sqlite3_free_table(&res.azResult[1]);
99115:       db->errCode = SQLITE_NOMEM;
99116:       return SQLITE_NOMEM;
99117:     }
99118:     res.azResult = azNew;
99119:   }
99120:   *pazResult = &res.azResult[1];
99121:   if( pnColumn ) *pnColumn = res.nColumn;
99122:   if( pnRow ) *pnRow = res.nRow;
99123:   return rc;
99124: }
99125: 
99126: /*
99127: ** This routine frees the space the sqlite3_get_table() malloced.
99128: */
99129: SQLITE_API void sqlite3_free_table(
99130:   char **azResult            /* Result returned from from sqlite3_get_table() */
99131: ){
99132:   if( azResult ){
99133:     int i, n;
99134:     azResult--;
99135:     assert( azResult!=0 );
99136:     n = SQLITE_PTR_TO_INT(azResult[0]);
99137:     for(i=1; i<n; i++){ if( azResult[i] ) sqlite3_free(azResult[i]); }
99138:     sqlite3_free(azResult);
99139:   }
99140: }
99141: 
99142: #endif /* SQLITE_OMIT_GET_TABLE */
99143: 
99144: /************** End of table.c ***********************************************/
99145: /************** Begin file trigger.c *****************************************/
99146: /*
99147: **
99148: ** The author disclaims copyright to this source code.  In place of
99149: ** a legal notice, here is a blessing:
99150: **
99151: **    May you do good and not evil.
99152: **    May you find forgiveness for yourself and forgive others.
99153: **    May you share freely, never taking more than you give.
99154: **
99155: *************************************************************************
99156: ** This file contains the implementation for TRIGGERs
99157: */
99158: 
99159: #ifndef SQLITE_OMIT_TRIGGER
99160: /*
99161: ** Delete a linked list of TriggerStep structures.
99162: */
99163: SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3 *db, TriggerStep *pTriggerStep){
99164:   while( pTriggerStep ){
99165:     TriggerStep * pTmp = pTriggerStep;
99166:     pTriggerStep = pTriggerStep->pNext;
99167: 
99168:     sqlite3ExprDelete(db, pTmp->pWhere);
99169:     sqlite3ExprListDelete(db, pTmp->pExprList);
99170:     sqlite3SelectDelete(db, pTmp->pSelect);
99171:     sqlite3IdListDelete(db, pTmp->pIdList);
99172: 
99173:     sqlite3DbFree(db, pTmp);
99174:   }
99175: }
99176: 
99177: /*
99178: ** Given table pTab, return a list of all the triggers attached to 
99179: ** the table. The list is connected by Trigger.pNext pointers.
99180: **
99181: ** All of the triggers on pTab that are in the same database as pTab
99182: ** are already attached to pTab->pTrigger.  But there might be additional
99183: ** triggers on pTab in the TEMP schema.  This routine prepends all
99184: ** TEMP triggers on pTab to the beginning of the pTab->pTrigger list
99185: ** and returns the combined list.
99186: **
99187: ** To state it another way:  This routine returns a list of all triggers
99188: ** that fire off of pTab.  The list will include any TEMP triggers on
99189: ** pTab as well as the triggers lised in pTab->pTrigger.
99190: */
99191: SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *pParse, Table *pTab){
99192:   Schema * const pTmpSchema = pParse->db->aDb[1].pSchema;
99193:   Trigger *pList = 0;                  /* List of triggers to return */
99194: 
99195:   if( pParse->disableTriggers ){
99196:     return 0;
99197:   }
99198: 
99199:   if( pTmpSchema!=pTab->pSchema ){
99200:     HashElem *p;
99201:     assert( sqlite3SchemaMutexHeld(pParse->db, 0, pTmpSchema) );
99202:     for(p=sqliteHashFirst(&pTmpSchema->trigHash); p; p=sqliteHashNext(p)){
99203:       Trigger *pTrig = (Trigger *)sqliteHashData(p);
99204:       if( pTrig->pTabSchema==pTab->pSchema
99205:        && 0==sqlite3StrICmp(pTrig->table, pTab->zName) 
99206:       ){
99207:         pTrig->pNext = (pList ? pList : pTab->pTrigger);
99208:         pList = pTrig;
99209:       }
99210:     }
99211:   }
99212: 
99213:   return (pList ? pList : pTab->pTrigger);
99214: }
99215: 
99216: /*
99217: ** This is called by the parser when it sees a CREATE TRIGGER statement
99218: ** up to the point of the BEGIN before the trigger actions.  A Trigger
99219: ** structure is generated based on the information available and stored
99220: ** in pParse->pNewTrigger.  After the trigger actions have been parsed, the
99221: ** sqlite3FinishTrigger() function is called to complete the trigger
99222: ** construction process.
99223: */
99224: SQLITE_PRIVATE void sqlite3BeginTrigger(
99225:   Parse *pParse,      /* The parse context of the CREATE TRIGGER statement */
99226:   Token *pName1,      /* The name of the trigger */
99227:   Token *pName2,      /* The name of the trigger */
99228:   int tr_tm,          /* One of TK_BEFORE, TK_AFTER, TK_INSTEAD */
99229:   int op,             /* One of TK_INSERT, TK_UPDATE, TK_DELETE */
99230:   IdList *pColumns,   /* column list if this is an UPDATE OF trigger */
99231:   SrcList *pTableName,/* The name of the table/view the trigger applies to */
99232:   Expr *pWhen,        /* WHEN clause */
99233:   int isTemp,         /* True if the TEMPORARY keyword is present */
99234:   int noErr           /* Suppress errors if the trigger already exists */
99235: ){
99236:   Trigger *pTrigger = 0;  /* The new trigger */
99237:   Table *pTab;            /* Table that the trigger fires off of */
99238:   char *zName = 0;        /* Name of the trigger */
99239:   sqlite3 *db = pParse->db;  /* The database connection */
99240:   int iDb;                /* The database to store the trigger in */
99241:   Token *pName;           /* The unqualified db name */
99242:   DbFixer sFix;           /* State vector for the DB fixer */
99243:   int iTabDb;             /* Index of the database holding pTab */
99244: 
99245:   assert( pName1!=0 );   /* pName1->z might be NULL, but not pName1 itself */
99246:   assert( pName2!=0 );
99247:   assert( op==TK_INSERT || op==TK_UPDATE || op==TK_DELETE );
99248:   assert( op>0 && op<0xff );
99249:   if( isTemp ){
99250:     /* If TEMP was specified, then the trigger name may not be qualified. */
99251:     if( pName2->n>0 ){
99252:       sqlite3ErrorMsg(pParse, "temporary trigger may not have qualified name");
99253:       goto trigger_cleanup;
99254:     }
99255:     iDb = 1;
99256:     pName = pName1;
99257:   }else{
99258:     /* Figure out the db that the the trigger will be created in */
99259:     iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
99260:     if( iDb<0 ){
99261:       goto trigger_cleanup;
99262:     }
99263:   }
99264:   if( !pTableName || db->mallocFailed ){
99265:     goto trigger_cleanup;
99266:   }
99267: 
99268:   /* A long-standing parser bug is that this syntax was allowed:
99269:   **
99270:   **    CREATE TRIGGER attached.demo AFTER INSERT ON attached.tab ....
99271:   **                                                 ^^^^^^^^
99272:   **
99273:   ** To maintain backwards compatibility, ignore the database
99274:   ** name on pTableName if we are reparsing our of SQLITE_MASTER.
99275:   */
99276:   if( db->init.busy && iDb!=1 ){
99277:     sqlite3DbFree(db, pTableName->a[0].zDatabase);
99278:     pTableName->a[0].zDatabase = 0;
99279:   }
99280: 
99281:   /* If the trigger name was unqualified, and the table is a temp table,
99282:   ** then set iDb to 1 to create the trigger in the temporary database.
99283:   ** If sqlite3SrcListLookup() returns 0, indicating the table does not
99284:   ** exist, the error is caught by the block below.
99285:   */
99286:   pTab = sqlite3SrcListLookup(pParse, pTableName);
99287:   if( db->init.busy==0 && pName2->n==0 && pTab
99288:         && pTab->pSchema==db->aDb[1].pSchema ){
99289:     iDb = 1;
99290:   }
99291: 
99292:   /* Ensure the table name matches database name and that the table exists */
99293:   if( db->mallocFailed ) goto trigger_cleanup;
99294:   assert( pTableName->nSrc==1 );
99295:   if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", pName) && 
99296:       sqlite3FixSrcList(&sFix, pTableName) ){
99297:     goto trigger_cleanup;
99298:   }
99299:   pTab = sqlite3SrcListLookup(pParse, pTableName);
99300:   if( !pTab ){
99301:     /* The table does not exist. */
99302:     if( db->init.iDb==1 ){
99303:       /* Ticket #3810.
99304:       ** Normally, whenever a table is dropped, all associated triggers are
99305:       ** dropped too.  But if a TEMP trigger is created on a non-TEMP table
99306:       ** and the table is dropped by a different database connection, the
99307:       ** trigger is not visible to the database connection that does the
99308:       ** drop so the trigger cannot be dropped.  This results in an
99309:       ** "orphaned trigger" - a trigger whose associated table is missing.
99310:       */
99311:       db->init.orphanTrigger = 1;
99312:     }
99313:     goto trigger_cleanup;
99314:   }
99315:   if( IsVirtual(pTab) ){
99316:     sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables");
99317:     goto trigger_cleanup;
99318:   }
99319: 
99320:   /* Check that the trigger name is not reserved and that no trigger of the
99321:   ** specified name exists */
99322:   zName = sqlite3NameFromToken(db, pName);
99323:   if( !zName || SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
99324:     goto trigger_cleanup;
99325:   }
99326:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
99327:   if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),
99328:                       zName, sqlite3Strlen30(zName)) ){
99329:     if( !noErr ){
99330:       sqlite3ErrorMsg(pParse, "trigger %T already exists", pName);
99331:     }else{
99332:       assert( !db->init.busy );
99333:       sqlite3CodeVerifySchema(pParse, iDb);
99334:     }
99335:     goto trigger_cleanup;
99336:   }
99337: 
99338:   /* Do not create a trigger on a system table */
99339:   if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){
99340:     sqlite3ErrorMsg(pParse, "cannot create trigger on system table");
99341:     pParse->nErr++;
99342:     goto trigger_cleanup;
99343:   }
99344: 
99345:   /* INSTEAD of triggers are only for views and views only support INSTEAD
99346:   ** of triggers.
99347:   */
99348:   if( pTab->pSelect && tr_tm!=TK_INSTEAD ){
99349:     sqlite3ErrorMsg(pParse, "cannot create %s trigger on view: %S", 
99350:         (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName, 0);
99351:     goto trigger_cleanup;
99352:   }
99353:   if( !pTab->pSelect && tr_tm==TK_INSTEAD ){
99354:     sqlite3ErrorMsg(pParse, "cannot create INSTEAD OF"
99355:         " trigger on table: %S", pTableName, 0);
99356:     goto trigger_cleanup;
99357:   }
99358:   iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema);
99359: 
99360: #ifndef SQLITE_OMIT_AUTHORIZATION
99361:   {
99362:     int code = SQLITE_CREATE_TRIGGER;
99363:     const char *zDb = db->aDb[iTabDb].zName;
99364:     const char *zDbTrig = isTemp ? db->aDb[1].zName : zDb;
99365:     if( iTabDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER;
99366:     if( sqlite3AuthCheck(pParse, code, zName, pTab->zName, zDbTrig) ){
99367:       goto trigger_cleanup;
99368:     }
99369:     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iTabDb),0,zDb)){
99370:       goto trigger_cleanup;
99371:     }
99372:   }
99373: #endif
99374: 
99375:   /* INSTEAD OF triggers can only appear on views and BEFORE triggers
99376:   ** cannot appear on views.  So we might as well translate every
99377:   ** INSTEAD OF trigger into a BEFORE trigger.  It simplifies code
99378:   ** elsewhere.
99379:   */
99380:   if (tr_tm == TK_INSTEAD){
99381:     tr_tm = TK_BEFORE;
99382:   }
99383: 
99384:   /* Build the Trigger object */
99385:   pTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger));
99386:   if( pTrigger==0 ) goto trigger_cleanup;
99387:   pTrigger->zName = zName;
99388:   zName = 0;
99389:   pTrigger->table = sqlite3DbStrDup(db, pTableName->a[0].zName);
99390:   pTrigger->pSchema = db->aDb[iDb].pSchema;
99391:   pTrigger->pTabSchema = pTab->pSchema;
99392:   pTrigger->op = (u8)op;
99393:   pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER;
99394:   pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE);
99395:   pTrigger->pColumns = sqlite3IdListDup(db, pColumns);
99396:   assert( pParse->pNewTrigger==0 );
99397:   pParse->pNewTrigger = pTrigger;
99398: 
99399: trigger_cleanup:
99400:   sqlite3DbFree(db, zName);
99401:   sqlite3SrcListDelete(db, pTableName);
99402:   sqlite3IdListDelete(db, pColumns);
99403:   sqlite3ExprDelete(db, pWhen);
99404:   if( !pParse->pNewTrigger ){
99405:     sqlite3DeleteTrigger(db, pTrigger);
99406:   }else{
99407:     assert( pParse->pNewTrigger==pTrigger );
99408:   }
99409: }
99410: 
99411: /*
99412: ** This routine is called after all of the trigger actions have been parsed
99413: ** in order to complete the process of building the trigger.
99414: */
99415: SQLITE_PRIVATE void sqlite3FinishTrigger(
99416:   Parse *pParse,          /* Parser context */
99417:   TriggerStep *pStepList, /* The triggered program */
99418:   Token *pAll             /* Token that describes the complete CREATE TRIGGER */
99419: ){
99420:   Trigger *pTrig = pParse->pNewTrigger;   /* Trigger being finished */
99421:   char *zName;                            /* Name of trigger */
99422:   sqlite3 *db = pParse->db;               /* The database */
99423:   DbFixer sFix;                           /* Fixer object */
99424:   int iDb;                                /* Database containing the trigger */
99425:   Token nameToken;                        /* Trigger name for error reporting */
99426: 
99427:   pParse->pNewTrigger = 0;
99428:   if( NEVER(pParse->nErr) || !pTrig ) goto triggerfinish_cleanup;
99429:   zName = pTrig->zName;
99430:   iDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);
99431:   pTrig->step_list = pStepList;
99432:   while( pStepList ){
99433:     pStepList->pTrig = pTrig;
99434:     pStepList = pStepList->pNext;
99435:   }
99436:   nameToken.z = pTrig->zName;
99437:   nameToken.n = sqlite3Strlen30(nameToken.z);
99438:   if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", &nameToken) 
99439:           && sqlite3FixTriggerStep(&sFix, pTrig->step_list) ){
99440:     goto triggerfinish_cleanup;
99441:   }
99442: 
99443:   /* if we are not initializing,
99444:   ** build the sqlite_master entry
99445:   */
99446:   if( !db->init.busy ){
99447:     Vdbe *v;
99448:     char *z;
99449: 
99450:     /* Make an entry in the sqlite_master table */
99451:     v = sqlite3GetVdbe(pParse);
99452:     if( v==0 ) goto triggerfinish_cleanup;
99453:     sqlite3BeginWriteOperation(pParse, 0, iDb);
99454:     z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n);
99455:     sqlite3NestedParse(pParse,
99456:        "INSERT INTO %Q.%s VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')",
99457:        db->aDb[iDb].zName, SCHEMA_TABLE(iDb), zName,
99458:        pTrig->table, z);
99459:     sqlite3DbFree(db, z);
99460:     sqlite3ChangeCookie(pParse, iDb);
99461:     sqlite3VdbeAddParseSchemaOp(v, iDb,
99462:         sqlite3MPrintf(db, "type='trigger' AND name='%q'", zName));
99463:   }
99464: 
99465:   if( db->init.busy ){
99466:     Trigger *pLink = pTrig;
99467:     Hash *pHash = &db->aDb[iDb].pSchema->trigHash;
99468:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
99469:     pTrig = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), pTrig);
99470:     if( pTrig ){
99471:       db->mallocFailed = 1;
99472:     }else if( pLink->pSchema==pLink->pTabSchema ){
99473:       Table *pTab;
99474:       int n = sqlite3Strlen30(pLink->table);
99475:       pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table, n);
99476:       assert( pTab!=0 );
99477:       pLink->pNext = pTab->pTrigger;
99478:       pTab->pTrigger = pLink;
99479:     }
99480:   }
99481: 
99482: triggerfinish_cleanup:
99483:   sqlite3DeleteTrigger(db, pTrig);
99484:   assert( !pParse->pNewTrigger );
99485:   sqlite3DeleteTriggerStep(db, pStepList);
99486: }
99487: 
99488: /*
99489: ** Turn a SELECT statement (that the pSelect parameter points to) into
99490: ** a trigger step.  Return a pointer to a TriggerStep structure.
99491: **
99492: ** The parser calls this routine when it finds a SELECT statement in
99493: ** body of a TRIGGER.  
99494: */
99495: SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelect){
99496:   TriggerStep *pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep));
99497:   if( pTriggerStep==0 ) {
99498:     sqlite3SelectDelete(db, pSelect);
99499:     return 0;
99500:   }
99501:   pTriggerStep->op = TK_SELECT;
99502:   pTriggerStep->pSelect = pSelect;
99503:   pTriggerStep->orconf = OE_Default;
99504:   return pTriggerStep;
99505: }
99506: 
99507: /*
99508: ** Allocate space to hold a new trigger step.  The allocated space
99509: ** holds both the TriggerStep object and the TriggerStep.target.z string.
99510: **
99511: ** If an OOM error occurs, NULL is returned and db->mallocFailed is set.
99512: */
99513: static TriggerStep *triggerStepAllocate(
99514:   sqlite3 *db,                /* Database connection */
99515:   u8 op,                      /* Trigger opcode */
99516:   Token *pName                /* The target name */
99517: ){
99518:   TriggerStep *pTriggerStep;
99519: 
99520:   pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep) + pName->n);
99521:   if( pTriggerStep ){
99522:     char *z = (char*)&pTriggerStep[1];
99523:     memcpy(z, pName->z, pName->n);
99524:     pTriggerStep->target.z = z;
99525:     pTriggerStep->target.n = pName->n;
99526:     pTriggerStep->op = op;
99527:   }
99528:   return pTriggerStep;
99529: }
99530: 
99531: /*
99532: ** Build a trigger step out of an INSERT statement.  Return a pointer
99533: ** to the new trigger step.
99534: **
99535: ** The parser calls this routine when it sees an INSERT inside the
99536: ** body of a trigger.
99537: */
99538: SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(
99539:   sqlite3 *db,        /* The database connection */
99540:   Token *pTableName,  /* Name of the table into which we insert */
99541:   IdList *pColumn,    /* List of columns in pTableName to insert into */
99542:   ExprList *pEList,   /* The VALUE clause: a list of values to be inserted */
99543:   Select *pSelect,    /* A SELECT statement that supplies values */
99544:   u8 orconf           /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */
99545: ){
99546:   TriggerStep *pTriggerStep;
99547: 
99548:   assert(pEList == 0 || pSelect == 0);
99549:   assert(pEList != 0 || pSelect != 0 || db->mallocFailed);
99550: 
99551:   pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName);
99552:   if( pTriggerStep ){
99553:     pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
99554:     pTriggerStep->pIdList = pColumn;
99555:     pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
99556:     pTriggerStep->orconf = orconf;
99557:   }else{
99558:     sqlite3IdListDelete(db, pColumn);
99559:   }
99560:   sqlite3ExprListDelete(db, pEList);
99561:   sqlite3SelectDelete(db, pSelect);
99562: 
99563:   return pTriggerStep;
99564: }
99565: 
99566: /*
99567: ** Construct a trigger step that implements an UPDATE statement and return
99568: ** a pointer to that trigger step.  The parser calls this routine when it
99569: ** sees an UPDATE statement inside the body of a CREATE TRIGGER.
99570: */
99571: SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(
99572:   sqlite3 *db,         /* The database connection */
99573:   Token *pTableName,   /* Name of the table to be updated */
99574:   ExprList *pEList,    /* The SET clause: list of column and new values */
99575:   Expr *pWhere,        /* The WHERE clause */
99576:   u8 orconf            /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */
99577: ){
99578:   TriggerStep *pTriggerStep;
99579: 
99580:   pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName);
99581:   if( pTriggerStep ){
99582:     pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
99583:     pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
99584:     pTriggerStep->orconf = orconf;
99585:   }
99586:   sqlite3ExprListDelete(db, pEList);
99587:   sqlite3ExprDelete(db, pWhere);
99588:   return pTriggerStep;
99589: }
99590: 
99591: /*
99592: ** Construct a trigger step that implements a DELETE statement and return
99593: ** a pointer to that trigger step.  The parser calls this routine when it
99594: ** sees a DELETE statement inside the body of a CREATE TRIGGER.
99595: */
99596: SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(
99597:   sqlite3 *db,            /* Database connection */
99598:   Token *pTableName,      /* The table from which rows are deleted */
99599:   Expr *pWhere            /* The WHERE clause */
99600: ){
99601:   TriggerStep *pTriggerStep;
99602: 
99603:   pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName);
99604:   if( pTriggerStep ){
99605:     pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
99606:     pTriggerStep->orconf = OE_Default;
99607:   }
99608:   sqlite3ExprDelete(db, pWhere);
99609:   return pTriggerStep;
99610: }
99611: 
99612: /* 
99613: ** Recursively delete a Trigger structure
99614: */
99615: SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3 *db, Trigger *pTrigger){
99616:   if( pTrigger==0 ) return;
99617:   sqlite3DeleteTriggerStep(db, pTrigger->step_list);
99618:   sqlite3DbFree(db, pTrigger->zName);
99619:   sqlite3DbFree(db, pTrigger->table);
99620:   sqlite3ExprDelete(db, pTrigger->pWhen);
99621:   sqlite3IdListDelete(db, pTrigger->pColumns);
99622:   sqlite3DbFree(db, pTrigger);
99623: }
99624: 
99625: /*
99626: ** This function is called to drop a trigger from the database schema. 
99627: **
99628: ** This may be called directly from the parser and therefore identifies
99629: ** the trigger by name.  The sqlite3DropTriggerPtr() routine does the
99630: ** same job as this routine except it takes a pointer to the trigger
99631: ** instead of the trigger name.
99632: **/
99633: SQLITE_PRIVATE void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr){
99634:   Trigger *pTrigger = 0;
99635:   int i;
99636:   const char *zDb;
99637:   const char *zName;
99638:   int nName;
99639:   sqlite3 *db = pParse->db;
99640: 
99641:   if( db->mallocFailed ) goto drop_trigger_cleanup;
99642:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
99643:     goto drop_trigger_cleanup;
99644:   }
99645: 
99646:   assert( pName->nSrc==1 );
99647:   zDb = pName->a[0].zDatabase;
99648:   zName = pName->a[0].zName;
99649:   nName = sqlite3Strlen30(zName);
99650:   assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
99651:   for(i=OMIT_TEMPDB; i<db->nDb; i++){
99652:     int j = (i<2) ? i^1 : i;  /* Search TEMP before MAIN */
99653:     if( zDb && sqlite3StrICmp(db->aDb[j].zName, zDb) ) continue;
99654:     assert( sqlite3SchemaMutexHeld(db, j, 0) );
99655:     pTrigger = sqlite3HashFind(&(db->aDb[j].pSchema->trigHash), zName, nName);
99656:     if( pTrigger ) break;
99657:   }
99658:   if( !pTrigger ){
99659:     if( !noErr ){
99660:       sqlite3ErrorMsg(pParse, "no such trigger: %S", pName, 0);
99661:     }else{
99662:       sqlite3CodeVerifyNamedSchema(pParse, zDb);
99663:     }
99664:     pParse->checkSchema = 1;
99665:     goto drop_trigger_cleanup;
99666:   }
99667:   sqlite3DropTriggerPtr(pParse, pTrigger);
99668: 
99669: drop_trigger_cleanup:
99670:   sqlite3SrcListDelete(db, pName);
99671: }
99672: 
99673: /*
99674: ** Return a pointer to the Table structure for the table that a trigger
99675: ** is set on.
99676: */
99677: static Table *tableOfTrigger(Trigger *pTrigger){
99678:   int n = sqlite3Strlen30(pTrigger->table);
99679:   return sqlite3HashFind(&pTrigger->pTabSchema->tblHash, pTrigger->table, n);
99680: }
99681: 
99682: 
99683: /*
99684: ** Drop a trigger given a pointer to that trigger. 
99685: */
99686: SQLITE_PRIVATE void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger){
99687:   Table   *pTable;
99688:   Vdbe *v;
99689:   sqlite3 *db = pParse->db;
99690:   int iDb;
99691: 
99692:   iDb = sqlite3SchemaToIndex(pParse->db, pTrigger->pSchema);
99693:   assert( iDb>=0 && iDb<db->nDb );
99694:   pTable = tableOfTrigger(pTrigger);
99695:   assert( pTable );
99696:   assert( pTable->pSchema==pTrigger->pSchema || iDb==1 );
99697: #ifndef SQLITE_OMIT_AUTHORIZATION
99698:   {
99699:     int code = SQLITE_DROP_TRIGGER;
99700:     const char *zDb = db->aDb[iDb].zName;
99701:     const char *zTab = SCHEMA_TABLE(iDb);
99702:     if( iDb==1 ) code = SQLITE_DROP_TEMP_TRIGGER;
99703:     if( sqlite3AuthCheck(pParse, code, pTrigger->zName, pTable->zName, zDb) ||
99704:       sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
99705:       return;
99706:     }
99707:   }
99708: #endif
99709: 
99710:   /* Generate code to destroy the database record of the trigger.
99711:   */
99712:   assert( pTable!=0 );
99713:   if( (v = sqlite3GetVdbe(pParse))!=0 ){
99714:     int base;
99715:     static const VdbeOpList dropTrigger[] = {
99716:       { OP_Rewind,     0, ADDR(9),  0},
99717:       { OP_String8,    0, 1,        0}, /* 1 */
99718:       { OP_Column,     0, 1,        2},
99719:       { OP_Ne,         2, ADDR(8),  1},
99720:       { OP_String8,    0, 1,        0}, /* 4: "trigger" */
99721:       { OP_Column,     0, 0,        2},
99722:       { OP_Ne,         2, ADDR(8),  1},
99723:       { OP_Delete,     0, 0,        0},
99724:       { OP_Next,       0, ADDR(1),  0}, /* 8 */
99725:     };
99726: 
99727:     sqlite3BeginWriteOperation(pParse, 0, iDb);
99728:     sqlite3OpenMasterTable(pParse, iDb);
99729:     base = sqlite3VdbeAddOpList(v,  ArraySize(dropTrigger), dropTrigger);
99730:     sqlite3VdbeChangeP4(v, base+1, pTrigger->zName, P4_TRANSIENT);
99731:     sqlite3VdbeChangeP4(v, base+4, "trigger", P4_STATIC);
99732:     sqlite3ChangeCookie(pParse, iDb);
99733:     sqlite3VdbeAddOp2(v, OP_Close, 0, 0);
99734:     sqlite3VdbeAddOp4(v, OP_DropTrigger, iDb, 0, 0, pTrigger->zName, 0);
99735:     if( pParse->nMem<3 ){
99736:       pParse->nMem = 3;
99737:     }
99738:   }
99739: }
99740: 
99741: /*
99742: ** Remove a trigger from the hash tables of the sqlite* pointer.
99743: */
99744: SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){
99745:   Trigger *pTrigger;
99746:   Hash *pHash;
99747: 
99748:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
99749:   pHash = &(db->aDb[iDb].pSchema->trigHash);
99750:   pTrigger = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), 0);
99751:   if( ALWAYS(pTrigger) ){
99752:     if( pTrigger->pSchema==pTrigger->pTabSchema ){
99753:       Table *pTab = tableOfTrigger(pTrigger);
99754:       Trigger **pp;
99755:       for(pp=&pTab->pTrigger; *pp!=pTrigger; pp=&((*pp)->pNext));
99756:       *pp = (*pp)->pNext;
99757:     }
99758:     sqlite3DeleteTrigger(db, pTrigger);
99759:     db->flags |= SQLITE_InternChanges;
99760:   }
99761: }
99762: 
99763: /*
99764: ** pEList is the SET clause of an UPDATE statement.  Each entry
99765: ** in pEList is of the format <id>=<expr>.  If any of the entries
99766: ** in pEList have an <id> which matches an identifier in pIdList,
99767: ** then return TRUE.  If pIdList==NULL, then it is considered a
99768: ** wildcard that matches anything.  Likewise if pEList==NULL then
99769: ** it matches anything so always return true.  Return false only
99770: ** if there is no match.
99771: */
99772: static int checkColumnOverlap(IdList *pIdList, ExprList *pEList){
99773:   int e;
99774:   if( pIdList==0 || NEVER(pEList==0) ) return 1;
99775:   for(e=0; e<pEList->nExpr; e++){
99776:     if( sqlite3IdListIndex(pIdList, pEList->a[e].zName)>=0 ) return 1;
99777:   }
99778:   return 0; 
99779: }
99780: 
99781: /*
99782: ** Return a list of all triggers on table pTab if there exists at least
99783: ** one trigger that must be fired when an operation of type 'op' is 
99784: ** performed on the table, and, if that operation is an UPDATE, if at
99785: ** least one of the columns in pChanges is being modified.
99786: */
99787: SQLITE_PRIVATE Trigger *sqlite3TriggersExist(
99788:   Parse *pParse,          /* Parse context */
99789:   Table *pTab,            /* The table the contains the triggers */
99790:   int op,                 /* one of TK_DELETE, TK_INSERT, TK_UPDATE */
99791:   ExprList *pChanges,     /* Columns that change in an UPDATE statement */
99792:   int *pMask              /* OUT: Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
99793: ){
99794:   int mask = 0;
99795:   Trigger *pList = 0;
99796:   Trigger *p;
99797: 
99798:   if( (pParse->db->flags & SQLITE_EnableTrigger)!=0 ){
99799:     pList = sqlite3TriggerList(pParse, pTab);
99800:   }
99801:   assert( pList==0 || IsVirtual(pTab)==0 );
99802:   for(p=pList; p; p=p->pNext){
99803:     if( p->op==op && checkColumnOverlap(p->pColumns, pChanges) ){
99804:       mask |= p->tr_tm;
99805:     }
99806:   }
99807:   if( pMask ){
99808:     *pMask = mask;
99809:   }
99810:   return (mask ? pList : 0);
99811: }
99812: 
99813: /*
99814: ** Convert the pStep->target token into a SrcList and return a pointer
99815: ** to that SrcList.
99816: **
99817: ** This routine adds a specific database name, if needed, to the target when
99818: ** forming the SrcList.  This prevents a trigger in one database from
99819: ** referring to a target in another database.  An exception is when the
99820: ** trigger is in TEMP in which case it can refer to any other database it
99821: ** wants.
99822: */
99823: static SrcList *targetSrcList(
99824:   Parse *pParse,       /* The parsing context */
99825:   TriggerStep *pStep   /* The trigger containing the target token */
99826: ){
99827:   int iDb;             /* Index of the database to use */
99828:   SrcList *pSrc;       /* SrcList to be returned */
99829: 
99830:   pSrc = sqlite3SrcListAppend(pParse->db, 0, &pStep->target, 0);
99831:   if( pSrc ){
99832:     assert( pSrc->nSrc>0 );
99833:     assert( pSrc->a!=0 );
99834:     iDb = sqlite3SchemaToIndex(pParse->db, pStep->pTrig->pSchema);
99835:     if( iDb==0 || iDb>=2 ){
99836:       sqlite3 *db = pParse->db;
99837:       assert( iDb<pParse->db->nDb );
99838:       pSrc->a[pSrc->nSrc-1].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zName);
99839:     }
99840:   }
99841:   return pSrc;
99842: }
99843: 
99844: /*
99845: ** Generate VDBE code for the statements inside the body of a single 
99846: ** trigger.
99847: */
99848: static int codeTriggerProgram(
99849:   Parse *pParse,            /* The parser context */
99850:   TriggerStep *pStepList,   /* List of statements inside the trigger body */
99851:   int orconf                /* Conflict algorithm. (OE_Abort, etc) */  
99852: ){
99853:   TriggerStep *pStep;
99854:   Vdbe *v = pParse->pVdbe;
99855:   sqlite3 *db = pParse->db;
99856: 
99857:   assert( pParse->pTriggerTab && pParse->pToplevel );
99858:   assert( pStepList );
99859:   assert( v!=0 );
99860:   for(pStep=pStepList; pStep; pStep=pStep->pNext){
99861:     /* Figure out the ON CONFLICT policy that will be used for this step
99862:     ** of the trigger program. If the statement that caused this trigger
99863:     ** to fire had an explicit ON CONFLICT, then use it. Otherwise, use
99864:     ** the ON CONFLICT policy that was specified as part of the trigger
99865:     ** step statement. Example:
99866:     **
99867:     **   CREATE TRIGGER AFTER INSERT ON t1 BEGIN;
99868:     **     INSERT OR REPLACE INTO t2 VALUES(new.a, new.b);
99869:     **   END;
99870:     **
99871:     **   INSERT INTO t1 ... ;            -- insert into t2 uses REPLACE policy
99872:     **   INSERT OR IGNORE INTO t1 ... ;  -- insert into t2 uses IGNORE policy
99873:     */
99874:     pParse->eOrconf = (orconf==OE_Default)?pStep->orconf:(u8)orconf;
99875: 
99876:     switch( pStep->op ){
99877:       case TK_UPDATE: {
99878:         sqlite3Update(pParse, 
99879:           targetSrcList(pParse, pStep),
99880:           sqlite3ExprListDup(db, pStep->pExprList, 0), 
99881:           sqlite3ExprDup(db, pStep->pWhere, 0), 
99882:           pParse->eOrconf
99883:         );
99884:         break;
99885:       }
99886:       case TK_INSERT: {
99887:         sqlite3Insert(pParse, 
99888:           targetSrcList(pParse, pStep),
99889:           sqlite3ExprListDup(db, pStep->pExprList, 0), 
99890:           sqlite3SelectDup(db, pStep->pSelect, 0), 
99891:           sqlite3IdListDup(db, pStep->pIdList), 
99892:           pParse->eOrconf
99893:         );
99894:         break;
99895:       }
99896:       case TK_DELETE: {
99897:         sqlite3DeleteFrom(pParse, 
99898:           targetSrcList(pParse, pStep),
99899:           sqlite3ExprDup(db, pStep->pWhere, 0)
99900:         );
99901:         break;
99902:       }
99903:       default: assert( pStep->op==TK_SELECT ); {
99904:         SelectDest sDest;
99905:         Select *pSelect = sqlite3SelectDup(db, pStep->pSelect, 0);
99906:         sqlite3SelectDestInit(&sDest, SRT_Discard, 0);
99907:         sqlite3Select(pParse, pSelect, &sDest);
99908:         sqlite3SelectDelete(db, pSelect);
99909:         break;
99910:       }
99911:     } 
99912:     if( pStep->op!=TK_SELECT ){
99913:       sqlite3VdbeAddOp0(v, OP_ResetCount);
99914:     }
99915:   }
99916: 
99917:   return 0;
99918: }
99919: 
99920: #ifdef SQLITE_DEBUG
99921: /*
99922: ** This function is used to add VdbeComment() annotations to a VDBE
99923: ** program. It is not used in production code, only for debugging.
99924: */
99925: static const char *onErrorText(int onError){
99926:   switch( onError ){
99927:     case OE_Abort:    return "abort";
99928:     case OE_Rollback: return "rollback";
99929:     case OE_Fail:     return "fail";
99930:     case OE_Replace:  return "replace";
99931:     case OE_Ignore:   return "ignore";
99932:     case OE_Default:  return "default";
99933:   }
99934:   return "n/a";
99935: }
99936: #endif
99937: 
99938: /*
99939: ** Parse context structure pFrom has just been used to create a sub-vdbe
99940: ** (trigger program). If an error has occurred, transfer error information
99941: ** from pFrom to pTo.
99942: */
99943: static void transferParseError(Parse *pTo, Parse *pFrom){
99944:   assert( pFrom->zErrMsg==0 || pFrom->nErr );
99945:   assert( pTo->zErrMsg==0 || pTo->nErr );
99946:   if( pTo->nErr==0 ){
99947:     pTo->zErrMsg = pFrom->zErrMsg;
99948:     pTo->nErr = pFrom->nErr;
99949:   }else{
99950:     sqlite3DbFree(pFrom->db, pFrom->zErrMsg);
99951:   }
99952: }
99953: 
99954: /*
99955: ** Create and populate a new TriggerPrg object with a sub-program 
99956: ** implementing trigger pTrigger with ON CONFLICT policy orconf.
99957: */
99958: static TriggerPrg *codeRowTrigger(
99959:   Parse *pParse,       /* Current parse context */
99960:   Trigger *pTrigger,   /* Trigger to code */
99961:   Table *pTab,         /* The table pTrigger is attached to */
99962:   int orconf           /* ON CONFLICT policy to code trigger program with */
99963: ){
99964:   Parse *pTop = sqlite3ParseToplevel(pParse);
99965:   sqlite3 *db = pParse->db;   /* Database handle */
99966:   TriggerPrg *pPrg;           /* Value to return */
99967:   Expr *pWhen = 0;            /* Duplicate of trigger WHEN expression */
99968:   Vdbe *v;                    /* Temporary VM */
99969:   NameContext sNC;            /* Name context for sub-vdbe */
99970:   SubProgram *pProgram = 0;   /* Sub-vdbe for trigger program */
99971:   Parse *pSubParse;           /* Parse context for sub-vdbe */
99972:   int iEndTrigger = 0;        /* Label to jump to if WHEN is false */
99973: 
99974:   assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) );
99975:   assert( pTop->pVdbe );
99976: 
99977:   /* Allocate the TriggerPrg and SubProgram objects. To ensure that they
99978:   ** are freed if an error occurs, link them into the Parse.pTriggerPrg 
99979:   ** list of the top-level Parse object sooner rather than later.  */
99980:   pPrg = sqlite3DbMallocZero(db, sizeof(TriggerPrg));
99981:   if( !pPrg ) return 0;
99982:   pPrg->pNext = pTop->pTriggerPrg;
99983:   pTop->pTriggerPrg = pPrg;
99984:   pPrg->pProgram = pProgram = sqlite3DbMallocZero(db, sizeof(SubProgram));
99985:   if( !pProgram ) return 0;
99986:   sqlite3VdbeLinkSubProgram(pTop->pVdbe, pProgram);
99987:   pPrg->pTrigger = pTrigger;
99988:   pPrg->orconf = orconf;
99989:   pPrg->aColmask[0] = 0xffffffff;
99990:   pPrg->aColmask[1] = 0xffffffff;
99991: 
99992:   /* Allocate and populate a new Parse context to use for coding the 
99993:   ** trigger sub-program.  */
99994:   pSubParse = sqlite3StackAllocZero(db, sizeof(Parse));
99995:   if( !pSubParse ) return 0;
99996:   memset(&sNC, 0, sizeof(sNC));
99997:   sNC.pParse = pSubParse;
99998:   pSubParse->db = db;
99999:   pSubParse->pTriggerTab = pTab;
100000:   pSubParse->pToplevel = pTop;
100001:   pSubParse->zAuthContext = pTrigger->zName;
100002:   pSubParse->eTriggerOp = pTrigger->op;
100003:   pSubParse->nQueryLoop = pParse->nQueryLoop;
100004: 
100005:   v = sqlite3GetVdbe(pSubParse);
100006:   if( v ){
100007:     VdbeComment((v, "Start: %s.%s (%s %s%s%s ON %s)", 
100008:       pTrigger->zName, onErrorText(orconf),
100009:       (pTrigger->tr_tm==TRIGGER_BEFORE ? "BEFORE" : "AFTER"),
100010:         (pTrigger->op==TK_UPDATE ? "UPDATE" : ""),
100011:         (pTrigger->op==TK_INSERT ? "INSERT" : ""),
100012:         (pTrigger->op==TK_DELETE ? "DELETE" : ""),
100013:       pTab->zName
100014:     ));
100015: #ifndef SQLITE_OMIT_TRACE
100016:     sqlite3VdbeChangeP4(v, -1, 
100017:       sqlite3MPrintf(db, "-- TRIGGER %s", pTrigger->zName), P4_DYNAMIC
100018:     );
100019: #endif
100020: 
100021:     /* If one was specified, code the WHEN clause. If it evaluates to false
100022:     ** (or NULL) the sub-vdbe is immediately halted by jumping to the 
100023:     ** OP_Halt inserted at the end of the program.  */
100024:     if( pTrigger->pWhen ){
100025:       pWhen = sqlite3ExprDup(db, pTrigger->pWhen, 0);
100026:       if( SQLITE_OK==sqlite3ResolveExprNames(&sNC, pWhen) 
100027:        && db->mallocFailed==0 
100028:       ){
100029:         iEndTrigger = sqlite3VdbeMakeLabel(v);
100030:         sqlite3ExprIfFalse(pSubParse, pWhen, iEndTrigger, SQLITE_JUMPIFNULL);
100031:       }
100032:       sqlite3ExprDelete(db, pWhen);
100033:     }
100034: 
100035:     /* Code the trigger program into the sub-vdbe. */
100036:     codeTriggerProgram(pSubParse, pTrigger->step_list, orconf);
100037: 
100038:     /* Insert an OP_Halt at the end of the sub-program. */
100039:     if( iEndTrigger ){
100040:       sqlite3VdbeResolveLabel(v, iEndTrigger);
100041:     }
100042:     sqlite3VdbeAddOp0(v, OP_Halt);
100043:     VdbeComment((v, "End: %s.%s", pTrigger->zName, onErrorText(orconf)));
100044: 
100045:     transferParseError(pParse, pSubParse);
100046:     if( db->mallocFailed==0 ){
100047:       pProgram->aOp = sqlite3VdbeTakeOpArray(v, &pProgram->nOp, &pTop->nMaxArg);
100048:     }
100049:     pProgram->nMem = pSubParse->nMem;
100050:     pProgram->nCsr = pSubParse->nTab;
100051:     pProgram->nOnce = pSubParse->nOnce;
100052:     pProgram->token = (void *)pTrigger;
100053:     pPrg->aColmask[0] = pSubParse->oldmask;
100054:     pPrg->aColmask[1] = pSubParse->newmask;
100055:     sqlite3VdbeDelete(v);
100056:   }
100057: 
100058:   assert( !pSubParse->pAinc       && !pSubParse->pZombieTab );
100059:   assert( !pSubParse->pTriggerPrg && !pSubParse->nMaxArg );
100060:   sqlite3StackFree(db, pSubParse);
100061: 
100062:   return pPrg;
100063: }
100064:     
100065: /*
100066: ** Return a pointer to a TriggerPrg object containing the sub-program for
100067: ** trigger pTrigger with default ON CONFLICT algorithm orconf. If no such
100068: ** TriggerPrg object exists, a new object is allocated and populated before
100069: ** being returned.
100070: */
100071: static TriggerPrg *getRowTrigger(
100072:   Parse *pParse,       /* Current parse context */
100073:   Trigger *pTrigger,   /* Trigger to code */
100074:   Table *pTab,         /* The table trigger pTrigger is attached to */
100075:   int orconf           /* ON CONFLICT algorithm. */
100076: ){
100077:   Parse *pRoot = sqlite3ParseToplevel(pParse);
100078:   TriggerPrg *pPrg;
100079: 
100080:   assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) );
100081: 
100082:   /* It may be that this trigger has already been coded (or is in the
100083:   ** process of being coded). If this is the case, then an entry with
100084:   ** a matching TriggerPrg.pTrigger field will be present somewhere
100085:   ** in the Parse.pTriggerPrg list. Search for such an entry.  */
100086:   for(pPrg=pRoot->pTriggerPrg; 
100087:       pPrg && (pPrg->pTrigger!=pTrigger || pPrg->orconf!=orconf); 
100088:       pPrg=pPrg->pNext
100089:   );
100090: 
100091:   /* If an existing TriggerPrg could not be located, create a new one. */
100092:   if( !pPrg ){
100093:     pPrg = codeRowTrigger(pParse, pTrigger, pTab, orconf);
100094:   }
100095: 
100096:   return pPrg;
100097: }
100098: 
100099: /*
100100: ** Generate code for the trigger program associated with trigger p on 
100101: ** table pTab. The reg, orconf and ignoreJump parameters passed to this
100102: ** function are the same as those described in the header function for
100103: ** sqlite3CodeRowTrigger()
100104: */
100105: SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect(
100106:   Parse *pParse,       /* Parse context */
100107:   Trigger *p,          /* Trigger to code */
100108:   Table *pTab,         /* The table to code triggers from */
100109:   int reg,             /* Reg array containing OLD.* and NEW.* values */
100110:   int orconf,          /* ON CONFLICT policy */
100111:   int ignoreJump       /* Instruction to jump to for RAISE(IGNORE) */
100112: ){
100113:   Vdbe *v = sqlite3GetVdbe(pParse); /* Main VM */
100114:   TriggerPrg *pPrg;
100115:   pPrg = getRowTrigger(pParse, p, pTab, orconf);
100116:   assert( pPrg || pParse->nErr || pParse->db->mallocFailed );
100117: 
100118:   /* Code the OP_Program opcode in the parent VDBE. P4 of the OP_Program 
100119:   ** is a pointer to the sub-vdbe containing the trigger program.  */
100120:   if( pPrg ){
100121:     int bRecursive = (p->zName && 0==(pParse->db->flags&SQLITE_RecTriggers));
100122: 
100123:     sqlite3VdbeAddOp3(v, OP_Program, reg, ignoreJump, ++pParse->nMem);
100124:     sqlite3VdbeChangeP4(v, -1, (const char *)pPrg->pProgram, P4_SUBPROGRAM);
100125:     VdbeComment(
100126:         (v, "Call: %s.%s", (p->zName?p->zName:"fkey"), onErrorText(orconf)));
100127: 
100128:     /* Set the P5 operand of the OP_Program instruction to non-zero if
100129:     ** recursive invocation of this trigger program is disallowed. Recursive
100130:     ** invocation is disallowed if (a) the sub-program is really a trigger,
100131:     ** not a foreign key action, and (b) the flag to enable recursive triggers
100132:     ** is clear.  */
100133:     sqlite3VdbeChangeP5(v, (u8)bRecursive);
100134:   }
100135: }
100136: 
100137: /*
100138: ** This is called to code the required FOR EACH ROW triggers for an operation
100139: ** on table pTab. The operation to code triggers for (INSERT, UPDATE or DELETE)
100140: ** is given by the op paramater. The tr_tm parameter determines whether the
100141: ** BEFORE or AFTER triggers are coded. If the operation is an UPDATE, then
100142: ** parameter pChanges is passed the list of columns being modified.
100143: **
100144: ** If there are no triggers that fire at the specified time for the specified
100145: ** operation on pTab, this function is a no-op.
100146: **
100147: ** The reg argument is the address of the first in an array of registers 
100148: ** that contain the values substituted for the new.* and old.* references
100149: ** in the trigger program. If N is the number of columns in table pTab
100150: ** (a copy of pTab->nCol), then registers are populated as follows:
100151: **
100152: **   Register       Contains
100153: **   ------------------------------------------------------
100154: **   reg+0          OLD.rowid
100155: **   reg+1          OLD.* value of left-most column of pTab
100156: **   ...            ...
100157: **   reg+N          OLD.* value of right-most column of pTab
100158: **   reg+N+1        NEW.rowid
100159: **   reg+N+2        OLD.* value of left-most column of pTab
100160: **   ...            ...
100161: **   reg+N+N+1      NEW.* value of right-most column of pTab
100162: **
100163: ** For ON DELETE triggers, the registers containing the NEW.* values will
100164: ** never be accessed by the trigger program, so they are not allocated or 
100165: ** populated by the caller (there is no data to populate them with anyway). 
100166: ** Similarly, for ON INSERT triggers the values stored in the OLD.* registers
100167: ** are never accessed, and so are not allocated by the caller. So, for an
100168: ** ON INSERT trigger, the value passed to this function as parameter reg
100169: ** is not a readable register, although registers (reg+N) through 
100170: ** (reg+N+N+1) are.
100171: **
100172: ** Parameter orconf is the default conflict resolution algorithm for the
100173: ** trigger program to use (REPLACE, IGNORE etc.). Parameter ignoreJump
100174: ** is the instruction that control should jump to if a trigger program
100175: ** raises an IGNORE exception.
100176: */
100177: SQLITE_PRIVATE void sqlite3CodeRowTrigger(
100178:   Parse *pParse,       /* Parse context */
100179:   Trigger *pTrigger,   /* List of triggers on table pTab */
100180:   int op,              /* One of TK_UPDATE, TK_INSERT, TK_DELETE */
100181:   ExprList *pChanges,  /* Changes list for any UPDATE OF triggers */
100182:   int tr_tm,           /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
100183:   Table *pTab,         /* The table to code triggers from */
100184:   int reg,             /* The first in an array of registers (see above) */
100185:   int orconf,          /* ON CONFLICT policy */
100186:   int ignoreJump       /* Instruction to jump to for RAISE(IGNORE) */
100187: ){
100188:   Trigger *p;          /* Used to iterate through pTrigger list */
100189: 
100190:   assert( op==TK_UPDATE || op==TK_INSERT || op==TK_DELETE );
100191:   assert( tr_tm==TRIGGER_BEFORE || tr_tm==TRIGGER_AFTER );
100192:   assert( (op==TK_UPDATE)==(pChanges!=0) );
100193: 
100194:   for(p=pTrigger; p; p=p->pNext){
100195: 
100196:     /* Sanity checking:  The schema for the trigger and for the table are
100197:     ** always defined.  The trigger must be in the same schema as the table
100198:     ** or else it must be a TEMP trigger. */
100199:     assert( p->pSchema!=0 );
100200:     assert( p->pTabSchema!=0 );
100201:     assert( p->pSchema==p->pTabSchema 
100202:          || p->pSchema==pParse->db->aDb[1].pSchema );
100203: 
100204:     /* Determine whether we should code this trigger */
100205:     if( p->op==op 
100206:      && p->tr_tm==tr_tm 
100207:      && checkColumnOverlap(p->pColumns, pChanges)
100208:     ){
100209:       sqlite3CodeRowTriggerDirect(pParse, p, pTab, reg, orconf, ignoreJump);
100210:     }
100211:   }
100212: }
100213: 
100214: /*
100215: ** Triggers may access values stored in the old.* or new.* pseudo-table. 
100216: ** This function returns a 32-bit bitmask indicating which columns of the 
100217: ** old.* or new.* tables actually are used by triggers. This information 
100218: ** may be used by the caller, for example, to avoid having to load the entire
100219: ** old.* record into memory when executing an UPDATE or DELETE command.
100220: **
100221: ** Bit 0 of the returned mask is set if the left-most column of the
100222: ** table may be accessed using an [old|new].<col> reference. Bit 1 is set if
100223: ** the second leftmost column value is required, and so on. If there
100224: ** are more than 32 columns in the table, and at least one of the columns
100225: ** with an index greater than 32 may be accessed, 0xffffffff is returned.
100226: **
100227: ** It is not possible to determine if the old.rowid or new.rowid column is 
100228: ** accessed by triggers. The caller must always assume that it is.
100229: **
100230: ** Parameter isNew must be either 1 or 0. If it is 0, then the mask returned
100231: ** applies to the old.* table. If 1, the new.* table.
100232: **
100233: ** Parameter tr_tm must be a mask with one or both of the TRIGGER_BEFORE
100234: ** and TRIGGER_AFTER bits set. Values accessed by BEFORE triggers are only
100235: ** included in the returned mask if the TRIGGER_BEFORE bit is set in the
100236: ** tr_tm parameter. Similarly, values accessed by AFTER triggers are only
100237: ** included in the returned mask if the TRIGGER_AFTER bit is set in tr_tm.
100238: */
100239: SQLITE_PRIVATE u32 sqlite3TriggerColmask(
100240:   Parse *pParse,       /* Parse context */
100241:   Trigger *pTrigger,   /* List of triggers on table pTab */
100242:   ExprList *pChanges,  /* Changes list for any UPDATE OF triggers */
100243:   int isNew,           /* 1 for new.* ref mask, 0 for old.* ref mask */
100244:   int tr_tm,           /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
100245:   Table *pTab,         /* The table to code triggers from */
100246:   int orconf           /* Default ON CONFLICT policy for trigger steps */
100247: ){
100248:   const int op = pChanges ? TK_UPDATE : TK_DELETE;
100249:   u32 mask = 0;
100250:   Trigger *p;
100251: 
100252:   assert( isNew==1 || isNew==0 );
100253:   for(p=pTrigger; p; p=p->pNext){
100254:     if( p->op==op && (tr_tm&p->tr_tm)
100255:      && checkColumnOverlap(p->pColumns,pChanges)
100256:     ){
100257:       TriggerPrg *pPrg;
100258:       pPrg = getRowTrigger(pParse, p, pTab, orconf);
100259:       if( pPrg ){
100260:         mask |= pPrg->aColmask[isNew];
100261:       }
100262:     }
100263:   }
100264: 
100265:   return mask;
100266: }
100267: 
100268: #endif /* !defined(SQLITE_OMIT_TRIGGER) */
100269: 
100270: /************** End of trigger.c *********************************************/
100271: /************** Begin file update.c ******************************************/
100272: /*
100273: ** 2001 September 15
100274: **
100275: ** The author disclaims copyright to this source code.  In place of
100276: ** a legal notice, here is a blessing:
100277: **
100278: **    May you do good and not evil.
100279: **    May you find forgiveness for yourself and forgive others.
100280: **    May you share freely, never taking more than you give.
100281: **
100282: *************************************************************************
100283: ** This file contains C code routines that are called by the parser
100284: ** to handle UPDATE statements.
100285: */
100286: 
100287: #ifndef SQLITE_OMIT_VIRTUALTABLE
100288: /* Forward declaration */
100289: static void updateVirtualTable(
100290:   Parse *pParse,       /* The parsing context */
100291:   SrcList *pSrc,       /* The virtual table to be modified */
100292:   Table *pTab,         /* The virtual table */
100293:   ExprList *pChanges,  /* The columns to change in the UPDATE statement */
100294:   Expr *pRowidExpr,    /* Expression used to recompute the rowid */
100295:   int *aXRef,          /* Mapping from columns of pTab to entries in pChanges */
100296:   Expr *pWhere,        /* WHERE clause of the UPDATE statement */
100297:   int onError          /* ON CONFLICT strategy */
100298: );
100299: #endif /* SQLITE_OMIT_VIRTUALTABLE */
100300: 
100301: /*
100302: ** The most recently coded instruction was an OP_Column to retrieve the
100303: ** i-th column of table pTab. This routine sets the P4 parameter of the 
100304: ** OP_Column to the default value, if any.
100305: **
100306: ** The default value of a column is specified by a DEFAULT clause in the 
100307: ** column definition. This was either supplied by the user when the table
100308: ** was created, or added later to the table definition by an ALTER TABLE
100309: ** command. If the latter, then the row-records in the table btree on disk
100310: ** may not contain a value for the column and the default value, taken
100311: ** from the P4 parameter of the OP_Column instruction, is returned instead.
100312: ** If the former, then all row-records are guaranteed to include a value
100313: ** for the column and the P4 value is not required.
100314: **
100315: ** Column definitions created by an ALTER TABLE command may only have 
100316: ** literal default values specified: a number, null or a string. (If a more
100317: ** complicated default expression value was provided, it is evaluated 
100318: ** when the ALTER TABLE is executed and one of the literal values written
100319: ** into the sqlite_master table.)
100320: **
100321: ** Therefore, the P4 parameter is only required if the default value for
100322: ** the column is a literal number, string or null. The sqlite3ValueFromExpr()
100323: ** function is capable of transforming these types of expressions into
100324: ** sqlite3_value objects.
100325: **
100326: ** If parameter iReg is not negative, code an OP_RealAffinity instruction
100327: ** on register iReg. This is used when an equivalent integer value is 
100328: ** stored in place of an 8-byte floating point value in order to save 
100329: ** space.
100330: */
100331: SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){
100332:   assert( pTab!=0 );
100333:   if( !pTab->pSelect ){
100334:     sqlite3_value *pValue;
100335:     u8 enc = ENC(sqlite3VdbeDb(v));
100336:     Column *pCol = &pTab->aCol[i];
100337:     VdbeComment((v, "%s.%s", pTab->zName, pCol->zName));
100338:     assert( i<pTab->nCol );
100339:     sqlite3ValueFromExpr(sqlite3VdbeDb(v), pCol->pDflt, enc, 
100340:                          pCol->affinity, &pValue);
100341:     if( pValue ){
100342:       sqlite3VdbeChangeP4(v, -1, (const char *)pValue, P4_MEM);
100343:     }
100344: #ifndef SQLITE_OMIT_FLOATING_POINT
100345:     if( iReg>=0 && pTab->aCol[i].affinity==SQLITE_AFF_REAL ){
100346:       sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg);
100347:     }
100348: #endif
100349:   }
100350: }
100351: 
100352: /*
100353: ** Process an UPDATE statement.
100354: **
100355: **   UPDATE OR IGNORE table_wxyz SET a=b, c=d WHERE e<5 AND f NOT NULL;
100356: **          \_______/ \________/     \______/       \________________/
100357: *            onError   pTabList      pChanges             pWhere
100358: */
100359: SQLITE_PRIVATE void sqlite3Update(
100360:   Parse *pParse,         /* The parser context */
100361:   SrcList *pTabList,     /* The table in which we should change things */
100362:   ExprList *pChanges,    /* Things to be changed */
100363:   Expr *pWhere,          /* The WHERE clause.  May be null */
100364:   int onError            /* How to handle constraint errors */
100365: ){
100366:   int i, j;              /* Loop counters */
100367:   Table *pTab;           /* The table to be updated */
100368:   int addr = 0;          /* VDBE instruction address of the start of the loop */
100369:   WhereInfo *pWInfo;     /* Information about the WHERE clause */
100370:   Vdbe *v;               /* The virtual database engine */
100371:   Index *pIdx;           /* For looping over indices */
100372:   int nIdx;              /* Number of indices that need updating */
100373:   int iCur;              /* VDBE Cursor number of pTab */
100374:   sqlite3 *db;           /* The database structure */
100375:   int *aRegIdx = 0;      /* One register assigned to each index to be updated */
100376:   int *aXRef = 0;        /* aXRef[i] is the index in pChanges->a[] of the
100377:                          ** an expression for the i-th column of the table.
100378:                          ** aXRef[i]==-1 if the i-th column is not changed. */
100379:   int chngRowid;         /* True if the record number is being changed */
100380:   Expr *pRowidExpr = 0;  /* Expression defining the new record number */
100381:   int openAll = 0;       /* True if all indices need to be opened */
100382:   AuthContext sContext;  /* The authorization context */
100383:   NameContext sNC;       /* The name-context to resolve expressions in */
100384:   int iDb;               /* Database containing the table being updated */
100385:   int okOnePass;         /* True for one-pass algorithm without the FIFO */
100386:   int hasFK;             /* True if foreign key processing is required */
100387: 
100388: #ifndef SQLITE_OMIT_TRIGGER
100389:   int isView;            /* True when updating a view (INSTEAD OF trigger) */
100390:   Trigger *pTrigger;     /* List of triggers on pTab, if required */
100391:   int tmask;             /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
100392: #endif
100393:   int newmask;           /* Mask of NEW.* columns accessed by BEFORE triggers */
100394: 
100395:   /* Register Allocations */
100396:   int regRowCount = 0;   /* A count of rows changed */
100397:   int regOldRowid;       /* The old rowid */
100398:   int regNewRowid;       /* The new rowid */
100399:   int regNew;            /* Content of the NEW.* table in triggers */
100400:   int regOld = 0;        /* Content of OLD.* table in triggers */
100401:   int regRowSet = 0;     /* Rowset of rows to be updated */
100402: 
100403:   memset(&sContext, 0, sizeof(sContext));
100404:   db = pParse->db;
100405:   if( pParse->nErr || db->mallocFailed ){
100406:     goto update_cleanup;
100407:   }
100408:   assert( pTabList->nSrc==1 );
100409: 
100410:   /* Locate the table which we want to update. 
100411:   */
100412:   pTab = sqlite3SrcListLookup(pParse, pTabList);
100413:   if( pTab==0 ) goto update_cleanup;
100414:   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
100415: 
100416:   /* Figure out if we have any triggers and if the table being
100417:   ** updated is a view.
100418:   */
100419: #ifndef SQLITE_OMIT_TRIGGER
100420:   pTrigger = sqlite3TriggersExist(pParse, pTab, TK_UPDATE, pChanges, &tmask);
100421:   isView = pTab->pSelect!=0;
100422:   assert( pTrigger || tmask==0 );
100423: #else
100424: # define pTrigger 0
100425: # define isView 0
100426: # define tmask 0
100427: #endif
100428: #ifdef SQLITE_OMIT_VIEW
100429: # undef isView
100430: # define isView 0
100431: #endif
100432: 
100433:   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
100434:     goto update_cleanup;
100435:   }
100436:   if( sqlite3IsReadOnly(pParse, pTab, tmask) ){
100437:     goto update_cleanup;
100438:   }
100439:   aXRef = sqlite3DbMallocRaw(db, sizeof(int) * pTab->nCol );
100440:   if( aXRef==0 ) goto update_cleanup;
100441:   for(i=0; i<pTab->nCol; i++) aXRef[i] = -1;
100442: 
100443:   /* Allocate a cursors for the main database table and for all indices.
100444:   ** The index cursors might not be used, but if they are used they
100445:   ** need to occur right after the database cursor.  So go ahead and
100446:   ** allocate enough space, just in case.
100447:   */
100448:   pTabList->a[0].iCursor = iCur = pParse->nTab++;
100449:   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
100450:     pParse->nTab++;
100451:   }
100452: 
100453:   /* Initialize the name-context */
100454:   memset(&sNC, 0, sizeof(sNC));
100455:   sNC.pParse = pParse;
100456:   sNC.pSrcList = pTabList;
100457: 
100458:   /* Resolve the column names in all the expressions of the
100459:   ** of the UPDATE statement.  Also find the column index
100460:   ** for each column to be updated in the pChanges array.  For each
100461:   ** column to be updated, make sure we have authorization to change
100462:   ** that column.
100463:   */
100464:   chngRowid = 0;
100465:   for(i=0; i<pChanges->nExpr; i++){
100466:     if( sqlite3ResolveExprNames(&sNC, pChanges->a[i].pExpr) ){
100467:       goto update_cleanup;
100468:     }
100469:     for(j=0; j<pTab->nCol; j++){
100470:       if( sqlite3StrICmp(pTab->aCol[j].zName, pChanges->a[i].zName)==0 ){
100471:         if( j==pTab->iPKey ){
100472:           chngRowid = 1;
100473:           pRowidExpr = pChanges->a[i].pExpr;
100474:         }
100475:         aXRef[j] = i;
100476:         break;
100477:       }
100478:     }
100479:     if( j>=pTab->nCol ){
100480:       if( sqlite3IsRowid(pChanges->a[i].zName) ){
100481:         chngRowid = 1;
100482:         pRowidExpr = pChanges->a[i].pExpr;
100483:       }else{
100484:         sqlite3ErrorMsg(pParse, "no such column: %s", pChanges->a[i].zName);
100485:         pParse->checkSchema = 1;
100486:         goto update_cleanup;
100487:       }
100488:     }
100489: #ifndef SQLITE_OMIT_AUTHORIZATION
100490:     {
100491:       int rc;
100492:       rc = sqlite3AuthCheck(pParse, SQLITE_UPDATE, pTab->zName,
100493:                            pTab->aCol[j].zName, db->aDb[iDb].zName);
100494:       if( rc==SQLITE_DENY ){
100495:         goto update_cleanup;
100496:       }else if( rc==SQLITE_IGNORE ){
100497:         aXRef[j] = -1;
100498:       }
100499:     }
100500: #endif
100501:   }
100502: 
100503:   hasFK = sqlite3FkRequired(pParse, pTab, aXRef, chngRowid);
100504: 
100505:   /* Allocate memory for the array aRegIdx[].  There is one entry in the
100506:   ** array for each index associated with table being updated.  Fill in
100507:   ** the value with a register number for indices that are to be used
100508:   ** and with zero for unused indices.
100509:   */
100510:   for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){}
100511:   if( nIdx>0 ){
100512:     aRegIdx = sqlite3DbMallocRaw(db, sizeof(Index*) * nIdx );
100513:     if( aRegIdx==0 ) goto update_cleanup;
100514:   }
100515:   for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
100516:     int reg;
100517:     if( hasFK || chngRowid ){
100518:       reg = ++pParse->nMem;
100519:     }else{
100520:       reg = 0;
100521:       for(i=0; i<pIdx->nColumn; i++){
100522:         if( aXRef[pIdx->aiColumn[i]]>=0 ){
100523:           reg = ++pParse->nMem;
100524:           break;
100525:         }
100526:       }
100527:     }
100528:     aRegIdx[j] = reg;
100529:   }
100530: 
100531:   /* Begin generating code. */
100532:   v = sqlite3GetVdbe(pParse);
100533:   if( v==0 ) goto update_cleanup;
100534:   if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
100535:   sqlite3BeginWriteOperation(pParse, 1, iDb);
100536: 
100537: #ifndef SQLITE_OMIT_VIRTUALTABLE
100538:   /* Virtual tables must be handled separately */
100539:   if( IsVirtual(pTab) ){
100540:     updateVirtualTable(pParse, pTabList, pTab, pChanges, pRowidExpr, aXRef,
100541:                        pWhere, onError);
100542:     pWhere = 0;
100543:     pTabList = 0;
100544:     goto update_cleanup;
100545:   }
100546: #endif
100547: 
100548:   /* Allocate required registers. */
100549:   regRowSet = ++pParse->nMem;
100550:   regOldRowid = regNewRowid = ++pParse->nMem;
100551:   if( pTrigger || hasFK ){
100552:     regOld = pParse->nMem + 1;
100553:     pParse->nMem += pTab->nCol;
100554:   }
100555:   if( chngRowid || pTrigger || hasFK ){
100556:     regNewRowid = ++pParse->nMem;
100557:   }
100558:   regNew = pParse->nMem + 1;
100559:   pParse->nMem += pTab->nCol;
100560: 
100561:   /* Start the view context. */
100562:   if( isView ){
100563:     sqlite3AuthContextPush(pParse, &sContext, pTab->zName);
100564:   }
100565: 
100566:   /* If we are trying to update a view, realize that view into
100567:   ** a ephemeral table.
100568:   */
100569: #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
100570:   if( isView ){
100571:     sqlite3MaterializeView(pParse, pTab, pWhere, iCur);
100572:   }
100573: #endif
100574: 
100575:   /* Resolve the column names in all the expressions in the
100576:   ** WHERE clause.
100577:   */
100578:   if( sqlite3ResolveExprNames(&sNC, pWhere) ){
100579:     goto update_cleanup;
100580:   }
100581: 
100582:   /* Begin the database scan
100583:   */
100584:   sqlite3VdbeAddOp3(v, OP_Null, 0, regRowSet, regOldRowid);
100585:   pWInfo = sqlite3WhereBegin(
100586:       pParse, pTabList, pWhere, 0, 0, WHERE_ONEPASS_DESIRED
100587:   );
100588:   if( pWInfo==0 ) goto update_cleanup;
100589:   okOnePass = pWInfo->okOnePass;
100590: 
100591:   /* Remember the rowid of every item to be updated.
100592:   */
100593:   sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regOldRowid);
100594:   if( !okOnePass ){
100595:     sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid);
100596:   }
100597: 
100598:   /* End the database scan loop.
100599:   */
100600:   sqlite3WhereEnd(pWInfo);
100601: 
100602:   /* Initialize the count of updated rows
100603:   */
100604:   if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab ){
100605:     regRowCount = ++pParse->nMem;
100606:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);
100607:   }
100608: 
100609:   if( !isView ){
100610:     /* 
100611:     ** Open every index that needs updating.  Note that if any
100612:     ** index could potentially invoke a REPLACE conflict resolution 
100613:     ** action, then we need to open all indices because we might need
100614:     ** to be deleting some records.
100615:     */
100616:     if( !okOnePass ) sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenWrite); 
100617:     if( onError==OE_Replace ){
100618:       openAll = 1;
100619:     }else{
100620:       openAll = 0;
100621:       for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
100622:         if( pIdx->onError==OE_Replace ){
100623:           openAll = 1;
100624:           break;
100625:         }
100626:       }
100627:     }
100628:     for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
100629:       assert( aRegIdx );
100630:       if( openAll || aRegIdx[i]>0 ){
100631:         KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
100632:         sqlite3VdbeAddOp4(v, OP_OpenWrite, iCur+i+1, pIdx->tnum, iDb,
100633:                        (char*)pKey, P4_KEYINFO_HANDOFF);
100634:         assert( pParse->nTab>iCur+i+1 );
100635:       }
100636:     }
100637:   }
100638: 
100639:   /* Top of the update loop */
100640:   if( okOnePass ){
100641:     int a1 = sqlite3VdbeAddOp1(v, OP_NotNull, regOldRowid);
100642:     addr = sqlite3VdbeAddOp0(v, OP_Goto);
100643:     sqlite3VdbeJumpHere(v, a1);
100644:   }else{
100645:     addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, regRowSet, 0, regOldRowid);
100646:   }
100647: 
100648:   /* Make cursor iCur point to the record that is being updated. If
100649:   ** this record does not exist for some reason (deleted by a trigger,
100650:   ** for example, then jump to the next iteration of the RowSet loop.  */
100651:   sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid);
100652: 
100653:   /* If the record number will change, set register regNewRowid to
100654:   ** contain the new value. If the record number is not being modified,
100655:   ** then regNewRowid is the same register as regOldRowid, which is
100656:   ** already populated.  */
100657:   assert( chngRowid || pTrigger || hasFK || regOldRowid==regNewRowid );
100658:   if( chngRowid ){
100659:     sqlite3ExprCode(pParse, pRowidExpr, regNewRowid);
100660:     sqlite3VdbeAddOp1(v, OP_MustBeInt, regNewRowid);
100661:   }
100662: 
100663:   /* If there are triggers on this table, populate an array of registers 
100664:   ** with the required old.* column data.  */
100665:   if( hasFK || pTrigger ){
100666:     u32 oldmask = (hasFK ? sqlite3FkOldmask(pParse, pTab) : 0);
100667:     oldmask |= sqlite3TriggerColmask(pParse, 
100668:         pTrigger, pChanges, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onError
100669:     );
100670:     for(i=0; i<pTab->nCol; i++){
100671:       if( aXRef[i]<0 || oldmask==0xffffffff || (i<32 && (oldmask & (1<<i))) ){
100672:         sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOld+i);
100673:       }else{
100674:         sqlite3VdbeAddOp2(v, OP_Null, 0, regOld+i);
100675:       }
100676:     }
100677:     if( chngRowid==0 ){
100678:       sqlite3VdbeAddOp2(v, OP_Copy, regOldRowid, regNewRowid);
100679:     }
100680:   }
100681: 
100682:   /* Populate the array of registers beginning at regNew with the new
100683:   ** row data. This array is used to check constaints, create the new
100684:   ** table and index records, and as the values for any new.* references
100685:   ** made by triggers.
100686:   **
100687:   ** If there are one or more BEFORE triggers, then do not populate the
100688:   ** registers associated with columns that are (a) not modified by
100689:   ** this UPDATE statement and (b) not accessed by new.* references. The
100690:   ** values for registers not modified by the UPDATE must be reloaded from 
100691:   ** the database after the BEFORE triggers are fired anyway (as the trigger 
100692:   ** may have modified them). So not loading those that are not going to
100693:   ** be used eliminates some redundant opcodes.
100694:   */
100695:   newmask = sqlite3TriggerColmask(
100696:       pParse, pTrigger, pChanges, 1, TRIGGER_BEFORE, pTab, onError
100697:   );
100698:   sqlite3VdbeAddOp3(v, OP_Null, 0, regNew, regNew+pTab->nCol-1);
100699:   for(i=0; i<pTab->nCol; i++){
100700:     if( i==pTab->iPKey ){
100701:       /*sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i);*/
100702:     }else{
100703:       j = aXRef[i];
100704:       if( j>=0 ){
100705:         sqlite3ExprCode(pParse, pChanges->a[j].pExpr, regNew+i);
100706:       }else if( 0==(tmask&TRIGGER_BEFORE) || i>31 || (newmask&(1<<i)) ){
100707:         /* This branch loads the value of a column that will not be changed 
100708:         ** into a register. This is done if there are no BEFORE triggers, or
100709:         ** if there are one or more BEFORE triggers that use this value via
100710:         ** a new.* reference in a trigger program.
100711:         */
100712:         testcase( i==31 );
100713:         testcase( i==32 );
100714:         sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i);
100715:         sqlite3ColumnDefault(v, pTab, i, regNew+i);
100716:       }
100717:     }
100718:   }
100719: 
100720:   /* Fire any BEFORE UPDATE triggers. This happens before constraints are
100721:   ** verified. One could argue that this is wrong.
100722:   */
100723:   if( tmask&TRIGGER_BEFORE ){
100724:     sqlite3VdbeAddOp2(v, OP_Affinity, regNew, pTab->nCol);
100725:     sqlite3TableAffinityStr(v, pTab);
100726:     sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, 
100727:         TRIGGER_BEFORE, pTab, regOldRowid, onError, addr);
100728: 
100729:     /* The row-trigger may have deleted the row being updated. In this
100730:     ** case, jump to the next row. No updates or AFTER triggers are 
100731:     ** required. This behaviour - what happens when the row being updated
100732:     ** is deleted or renamed by a BEFORE trigger - is left undefined in the
100733:     ** documentation.
100734:     */
100735:     sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid);
100736: 
100737:     /* If it did not delete it, the row-trigger may still have modified 
100738:     ** some of the columns of the row being updated. Load the values for 
100739:     ** all columns not modified by the update statement into their 
100740:     ** registers in case this has happened.
100741:     */
100742:     for(i=0; i<pTab->nCol; i++){
100743:       if( aXRef[i]<0 && i!=pTab->iPKey ){
100744:         sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i);
100745:         sqlite3ColumnDefault(v, pTab, i, regNew+i);
100746:       }
100747:     }
100748:   }
100749: 
100750:   if( !isView ){
100751:     int j1;                       /* Address of jump instruction */
100752: 
100753:     /* Do constraint checks. */
100754:     sqlite3GenerateConstraintChecks(pParse, pTab, iCur, regNewRowid,
100755:         aRegIdx, (chngRowid?regOldRowid:0), 1, onError, addr, 0);
100756: 
100757:     /* Do FK constraint checks. */
100758:     if( hasFK ){
100759:       sqlite3FkCheck(pParse, pTab, regOldRowid, 0);
100760:     }
100761: 
100762:     /* Delete the index entries associated with the current record.  */
100763:     j1 = sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regOldRowid);
100764:     sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, aRegIdx);
100765:   
100766:     /* If changing the record number, delete the old record.  */
100767:     if( hasFK || chngRowid ){
100768:       sqlite3VdbeAddOp2(v, OP_Delete, iCur, 0);
100769:     }
100770:     sqlite3VdbeJumpHere(v, j1);
100771: 
100772:     if( hasFK ){
100773:       sqlite3FkCheck(pParse, pTab, 0, regNewRowid);
100774:     }
100775:   
100776:     /* Insert the new index entries and the new record. */
100777:     sqlite3CompleteInsertion(pParse, pTab, iCur, regNewRowid, aRegIdx, 1, 0, 0);
100778: 
100779:     /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to
100780:     ** handle rows (possibly in other tables) that refer via a foreign key
100781:     ** to the row just updated. */ 
100782:     if( hasFK ){
100783:       sqlite3FkActions(pParse, pTab, pChanges, regOldRowid);
100784:     }
100785:   }
100786: 
100787:   /* Increment the row counter 
100788:   */
100789:   if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab){
100790:     sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1);
100791:   }
100792: 
100793:   sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, 
100794:       TRIGGER_AFTER, pTab, regOldRowid, onError, addr);
100795: 
100796:   /* Repeat the above with the next record to be updated, until
100797:   ** all record selected by the WHERE clause have been updated.
100798:   */
100799:   sqlite3VdbeAddOp2(v, OP_Goto, 0, addr);
100800:   sqlite3VdbeJumpHere(v, addr);
100801: 
100802:   /* Close all tables */
100803:   for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
100804:     assert( aRegIdx );
100805:     if( openAll || aRegIdx[i]>0 ){
100806:       sqlite3VdbeAddOp2(v, OP_Close, iCur+i+1, 0);
100807:     }
100808:   }
100809:   sqlite3VdbeAddOp2(v, OP_Close, iCur, 0);
100810: 
100811:   /* Update the sqlite_sequence table by storing the content of the
100812:   ** maximum rowid counter values recorded while inserting into
100813:   ** autoincrement tables.
100814:   */
100815:   if( pParse->nested==0 && pParse->pTriggerTab==0 ){
100816:     sqlite3AutoincrementEnd(pParse);
100817:   }
100818: 
100819:   /*
100820:   ** Return the number of rows that were changed. If this routine is 
100821:   ** generating code because of a call to sqlite3NestedParse(), do not
100822:   ** invoke the callback function.
100823:   */
100824:   if( (db->flags&SQLITE_CountRows) && !pParse->pTriggerTab && !pParse->nested ){
100825:     sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
100826:     sqlite3VdbeSetNumCols(v, 1);
100827:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows updated", SQLITE_STATIC);
100828:   }
100829: 
100830: update_cleanup:
100831:   sqlite3AuthContextPop(&sContext);
100832:   sqlite3DbFree(db, aRegIdx);
100833:   sqlite3DbFree(db, aXRef);
100834:   sqlite3SrcListDelete(db, pTabList);
100835:   sqlite3ExprListDelete(db, pChanges);
100836:   sqlite3ExprDelete(db, pWhere);
100837:   return;
100838: }
100839: /* Make sure "isView" and other macros defined above are undefined. Otherwise
100840: ** thely may interfere with compilation of other functions in this file
100841: ** (or in another file, if this file becomes part of the amalgamation).  */
100842: #ifdef isView
100843:  #undef isView
100844: #endif
100845: #ifdef pTrigger
100846:  #undef pTrigger
100847: #endif
100848: 
100849: #ifndef SQLITE_OMIT_VIRTUALTABLE
100850: /*
100851: ** Generate code for an UPDATE of a virtual table.
100852: **
100853: ** The strategy is that we create an ephemerial table that contains
100854: ** for each row to be changed:
100855: **
100856: **   (A)  The original rowid of that row.
100857: **   (B)  The revised rowid for the row. (note1)
100858: **   (C)  The content of every column in the row.
100859: **
100860: ** Then we loop over this ephemeral table and for each row in
100861: ** the ephermeral table call VUpdate.
100862: **
100863: ** When finished, drop the ephemeral table.
100864: **
100865: ** (note1) Actually, if we know in advance that (A) is always the same
100866: ** as (B) we only store (A), then duplicate (A) when pulling
100867: ** it out of the ephemeral table before calling VUpdate.
100868: */
100869: static void updateVirtualTable(
100870:   Parse *pParse,       /* The parsing context */
100871:   SrcList *pSrc,       /* The virtual table to be modified */
100872:   Table *pTab,         /* The virtual table */
100873:   ExprList *pChanges,  /* The columns to change in the UPDATE statement */
100874:   Expr *pRowid,        /* Expression used to recompute the rowid */
100875:   int *aXRef,          /* Mapping from columns of pTab to entries in pChanges */
100876:   Expr *pWhere,        /* WHERE clause of the UPDATE statement */
100877:   int onError          /* ON CONFLICT strategy */
100878: ){
100879:   Vdbe *v = pParse->pVdbe;  /* Virtual machine under construction */
100880:   ExprList *pEList = 0;     /* The result set of the SELECT statement */
100881:   Select *pSelect = 0;      /* The SELECT statement */
100882:   Expr *pExpr;              /* Temporary expression */
100883:   int ephemTab;             /* Table holding the result of the SELECT */
100884:   int i;                    /* Loop counter */
100885:   int addr;                 /* Address of top of loop */
100886:   int iReg;                 /* First register in set passed to OP_VUpdate */
100887:   sqlite3 *db = pParse->db; /* Database connection */
100888:   const char *pVTab = (const char*)sqlite3GetVTable(db, pTab);
100889:   SelectDest dest;
100890: 
100891:   /* Construct the SELECT statement that will find the new values for
100892:   ** all updated rows. 
100893:   */
100894:   pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ID, "_rowid_"));
100895:   if( pRowid ){
100896:     pEList = sqlite3ExprListAppend(pParse, pEList,
100897:                                    sqlite3ExprDup(db, pRowid, 0));
100898:   }
100899:   assert( pTab->iPKey<0 );
100900:   for(i=0; i<pTab->nCol; i++){
100901:     if( aXRef[i]>=0 ){
100902:       pExpr = sqlite3ExprDup(db, pChanges->a[aXRef[i]].pExpr, 0);
100903:     }else{
100904:       pExpr = sqlite3Expr(db, TK_ID, pTab->aCol[i].zName);
100905:     }
100906:     pEList = sqlite3ExprListAppend(pParse, pEList, pExpr);
100907:   }
100908:   pSelect = sqlite3SelectNew(pParse, pEList, pSrc, pWhere, 0, 0, 0, 0, 0, 0);
100909:   
100910:   /* Create the ephemeral table into which the update results will
100911:   ** be stored.
100912:   */
100913:   assert( v );
100914:   ephemTab = pParse->nTab++;
100915:   sqlite3VdbeAddOp2(v, OP_OpenEphemeral, ephemTab, pTab->nCol+1+(pRowid!=0));
100916:   sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
100917: 
100918:   /* fill the ephemeral table 
100919:   */
100920:   sqlite3SelectDestInit(&dest, SRT_Table, ephemTab);
100921:   sqlite3Select(pParse, pSelect, &dest);
100922: 
100923:   /* Generate code to scan the ephemeral table and call VUpdate. */
100924:   iReg = ++pParse->nMem;
100925:   pParse->nMem += pTab->nCol+1;
100926:   addr = sqlite3VdbeAddOp2(v, OP_Rewind, ephemTab, 0);
100927:   sqlite3VdbeAddOp3(v, OP_Column,  ephemTab, 0, iReg);
100928:   sqlite3VdbeAddOp3(v, OP_Column, ephemTab, (pRowid?1:0), iReg+1);
100929:   for(i=0; i<pTab->nCol; i++){
100930:     sqlite3VdbeAddOp3(v, OP_Column, ephemTab, i+1+(pRowid!=0), iReg+2+i);
100931:   }
100932:   sqlite3VtabMakeWritable(pParse, pTab);
100933:   sqlite3VdbeAddOp4(v, OP_VUpdate, 0, pTab->nCol+2, iReg, pVTab, P4_VTAB);
100934:   sqlite3VdbeChangeP5(v, onError==OE_Default ? OE_Abort : onError);
100935:   sqlite3MayAbort(pParse);
100936:   sqlite3VdbeAddOp2(v, OP_Next, ephemTab, addr+1);
100937:   sqlite3VdbeJumpHere(v, addr);
100938:   sqlite3VdbeAddOp2(v, OP_Close, ephemTab, 0);
100939: 
100940:   /* Cleanup */
100941:   sqlite3SelectDelete(db, pSelect);  
100942: }
100943: #endif /* SQLITE_OMIT_VIRTUALTABLE */
100944: 
100945: /************** End of update.c **********************************************/
100946: /************** Begin file vacuum.c ******************************************/
100947: /*
100948: ** 2003 April 6
100949: **
100950: ** The author disclaims copyright to this source code.  In place of
100951: ** a legal notice, here is a blessing:
100952: **
100953: **    May you do good and not evil.
100954: **    May you find forgiveness for yourself and forgive others.
100955: **    May you share freely, never taking more than you give.
100956: **
100957: *************************************************************************
100958: ** This file contains code used to implement the VACUUM command.
100959: **
100960: ** Most of the code in this file may be omitted by defining the
100961: ** SQLITE_OMIT_VACUUM macro.
100962: */
100963: 
100964: #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH)
100965: /*
100966: ** Finalize a prepared statement.  If there was an error, store the
100967: ** text of the error message in *pzErrMsg.  Return the result code.
100968: */
100969: static int vacuumFinalize(sqlite3 *db, sqlite3_stmt *pStmt, char **pzErrMsg){
100970:   int rc;
100971:   rc = sqlite3VdbeFinalize((Vdbe*)pStmt);
100972:   if( rc ){
100973:     sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db));
100974:   }
100975:   return rc;
100976: }
100977: 
100978: /*
100979: ** Execute zSql on database db. Return an error code.
100980: */
100981: static int execSql(sqlite3 *db, char **pzErrMsg, const char *zSql){
100982:   sqlite3_stmt *pStmt;
100983:   VVA_ONLY( int rc; )
100984:   if( !zSql ){
100985:     return SQLITE_NOMEM;
100986:   }
100987:   if( SQLITE_OK!=sqlite3_prepare(db, zSql, -1, &pStmt, 0) ){
100988:     sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db));
100989:     return sqlite3_errcode(db);
100990:   }
100991:   VVA_ONLY( rc = ) sqlite3_step(pStmt);
100992:   assert( rc!=SQLITE_ROW || (db->flags&SQLITE_CountRows) );
100993:   return vacuumFinalize(db, pStmt, pzErrMsg);
100994: }
100995: 
100996: /*
100997: ** Execute zSql on database db. The statement returns exactly
100998: ** one column. Execute this as SQL on the same database.
100999: */
101000: static int execExecSql(sqlite3 *db, char **pzErrMsg, const char *zSql){
101001:   sqlite3_stmt *pStmt;
101002:   int rc;
101003: 
101004:   rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
101005:   if( rc!=SQLITE_OK ) return rc;
101006: 
101007:   while( SQLITE_ROW==sqlite3_step(pStmt) ){
101008:     rc = execSql(db, pzErrMsg, (char*)sqlite3_column_text(pStmt, 0));
101009:     if( rc!=SQLITE_OK ){
101010:       vacuumFinalize(db, pStmt, pzErrMsg);
101011:       return rc;
101012:     }
101013:   }
101014: 
101015:   return vacuumFinalize(db, pStmt, pzErrMsg);
101016: }
101017: 
101018: /*
101019: ** The non-standard VACUUM command is used to clean up the database,
101020: ** collapse free space, etc.  It is modelled after the VACUUM command
101021: ** in PostgreSQL.
101022: **
101023: ** In version 1.0.x of SQLite, the VACUUM command would call
101024: ** gdbm_reorganize() on all the database tables.  But beginning
101025: ** with 2.0.0, SQLite no longer uses GDBM so this command has
101026: ** become a no-op.
101027: */
101028: SQLITE_PRIVATE void sqlite3Vacuum(Parse *pParse){
101029:   Vdbe *v = sqlite3GetVdbe(pParse);
101030:   if( v ){
101031:     sqlite3VdbeAddOp2(v, OP_Vacuum, 0, 0);
101032:   }
101033:   return;
101034: }
101035: 
101036: /*
101037: ** This routine implements the OP_Vacuum opcode of the VDBE.
101038: */
101039: SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
101040:   int rc = SQLITE_OK;     /* Return code from service routines */
101041:   Btree *pMain;           /* The database being vacuumed */
101042:   Btree *pTemp;           /* The temporary database we vacuum into */
101043:   char *zSql = 0;         /* SQL statements */
101044:   int saved_flags;        /* Saved value of the db->flags */
101045:   int saved_nChange;      /* Saved value of db->nChange */
101046:   int saved_nTotalChange; /* Saved value of db->nTotalChange */
101047:   void (*saved_xTrace)(void*,const char*);  /* Saved db->xTrace */
101048:   Db *pDb = 0;            /* Database to detach at end of vacuum */
101049:   int isMemDb;            /* True if vacuuming a :memory: database */
101050:   int nRes;               /* Bytes of reserved space at the end of each page */
101051:   int nDb;                /* Number of attached databases */
101052: 
101053:   if( !db->autoCommit ){
101054:     sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction");
101055:     return SQLITE_ERROR;
101056:   }
101057:   if( db->activeVdbeCnt>1 ){
101058:     sqlite3SetString(pzErrMsg, db,"cannot VACUUM - SQL statements in progress");
101059:     return SQLITE_ERROR;
101060:   }
101061: 
101062:   /* Save the current value of the database flags so that it can be 
101063:   ** restored before returning. Then set the writable-schema flag, and
101064:   ** disable CHECK and foreign key constraints.  */
101065:   saved_flags = db->flags;
101066:   saved_nChange = db->nChange;
101067:   saved_nTotalChange = db->nTotalChange;
101068:   saved_xTrace = db->xTrace;
101069:   db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks | SQLITE_PreferBuiltin;
101070:   db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder);
101071:   db->xTrace = 0;
101072: 
101073:   pMain = db->aDb[0].pBt;
101074:   isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain));
101075: 
101076:   /* Attach the temporary database as 'vacuum_db'. The synchronous pragma
101077:   ** can be set to 'off' for this file, as it is not recovered if a crash
101078:   ** occurs anyway. The integrity of the database is maintained by a
101079:   ** (possibly synchronous) transaction opened on the main database before
101080:   ** sqlite3BtreeCopyFile() is called.
101081:   **
101082:   ** An optimisation would be to use a non-journaled pager.
101083:   ** (Later:) I tried setting "PRAGMA vacuum_db.journal_mode=OFF" but
101084:   ** that actually made the VACUUM run slower.  Very little journalling
101085:   ** actually occurs when doing a vacuum since the vacuum_db is initially
101086:   ** empty.  Only the journal header is written.  Apparently it takes more
101087:   ** time to parse and run the PRAGMA to turn journalling off than it does
101088:   ** to write the journal header file.
101089:   */
101090:   nDb = db->nDb;
101091:   if( sqlite3TempInMemory(db) ){
101092:     zSql = "ATTACH ':memory:' AS vacuum_db;";
101093:   }else{
101094:     zSql = "ATTACH '' AS vacuum_db;";
101095:   }
101096:   rc = execSql(db, pzErrMsg, zSql);
101097:   if( db->nDb>nDb ){
101098:     pDb = &db->aDb[db->nDb-1];
101099:     assert( strcmp(pDb->zName,"vacuum_db")==0 );
101100:   }
101101:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
101102:   pTemp = db->aDb[db->nDb-1].pBt;
101103: 
101104:   /* The call to execSql() to attach the temp database has left the file
101105:   ** locked (as there was more than one active statement when the transaction
101106:   ** to read the schema was concluded. Unlock it here so that this doesn't
101107:   ** cause problems for the call to BtreeSetPageSize() below.  */
101108:   sqlite3BtreeCommit(pTemp);
101109: 
101110:   nRes = sqlite3BtreeGetReserve(pMain);
101111: 
101112:   /* A VACUUM cannot change the pagesize of an encrypted database. */
101113: #ifdef SQLITE_HAS_CODEC
101114:   if( db->nextPagesize ){
101115:     extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);
101116:     int nKey;
101117:     char *zKey;
101118:     sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey);
101119:     if( nKey ) db->nextPagesize = 0;
101120:   }
101121: #endif
101122: 
101123:   /* Do not attempt to change the page size for a WAL database */
101124:   if( sqlite3PagerGetJournalMode(sqlite3BtreePager(pMain))
101125:                                                ==PAGER_JOURNALMODE_WAL ){
101126:     db->nextPagesize = 0;
101127:   }
101128: 
101129:   if( sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain), nRes, 0)
101130:    || (!isMemDb && sqlite3BtreeSetPageSize(pTemp, db->nextPagesize, nRes, 0))
101131:    || NEVER(db->mallocFailed)
101132:   ){
101133:     rc = SQLITE_NOMEM;
101134:     goto end_of_vacuum;
101135:   }
101136:   rc = execSql(db, pzErrMsg, "PRAGMA vacuum_db.synchronous=OFF");
101137:   if( rc!=SQLITE_OK ){
101138:     goto end_of_vacuum;
101139:   }
101140: 
101141: #ifndef SQLITE_OMIT_AUTOVACUUM
101142:   sqlite3BtreeSetAutoVacuum(pTemp, db->nextAutovac>=0 ? db->nextAutovac :
101143:                                            sqlite3BtreeGetAutoVacuum(pMain));
101144: #endif
101145: 
101146:   /* Begin a transaction */
101147:   rc = execSql(db, pzErrMsg, "BEGIN EXCLUSIVE;");
101148:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
101149: 
101150:   /* Query the schema of the main database. Create a mirror schema
101151:   ** in the temporary database.
101152:   */
101153:   rc = execExecSql(db, pzErrMsg,
101154:       "SELECT 'CREATE TABLE vacuum_db.' || substr(sql,14) "
101155:       "  FROM sqlite_master WHERE type='table' AND name!='sqlite_sequence'"
101156:       "   AND rootpage>0"
101157:   );
101158:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
101159:   rc = execExecSql(db, pzErrMsg,
101160:       "SELECT 'CREATE INDEX vacuum_db.' || substr(sql,14)"
101161:       "  FROM sqlite_master WHERE sql LIKE 'CREATE INDEX %' ");
101162:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
101163:   rc = execExecSql(db, pzErrMsg,
101164:       "SELECT 'CREATE UNIQUE INDEX vacuum_db.' || substr(sql,21) "
101165:       "  FROM sqlite_master WHERE sql LIKE 'CREATE UNIQUE INDEX %'");
101166:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
101167: 
101168:   /* Loop through the tables in the main database. For each, do
101169:   ** an "INSERT INTO vacuum_db.xxx SELECT * FROM main.xxx;" to copy
101170:   ** the contents to the temporary database.
101171:   */
101172:   rc = execExecSql(db, pzErrMsg,
101173:       "SELECT 'INSERT INTO vacuum_db.' || quote(name) "
101174:       "|| ' SELECT * FROM main.' || quote(name) || ';'"
101175:       "FROM main.sqlite_master "
101176:       "WHERE type = 'table' AND name!='sqlite_sequence' "
101177:       "  AND rootpage>0"
101178:   );
101179:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
101180: 
101181:   /* Copy over the sequence table
101182:   */
101183:   rc = execExecSql(db, pzErrMsg,
101184:       "SELECT 'DELETE FROM vacuum_db.' || quote(name) || ';' "
101185:       "FROM vacuum_db.sqlite_master WHERE name='sqlite_sequence' "
101186:   );
101187:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
101188:   rc = execExecSql(db, pzErrMsg,
101189:       "SELECT 'INSERT INTO vacuum_db.' || quote(name) "
101190:       "|| ' SELECT * FROM main.' || quote(name) || ';' "
101191:       "FROM vacuum_db.sqlite_master WHERE name=='sqlite_sequence';"
101192:   );
101193:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
101194: 
101195: 
101196:   /* Copy the triggers, views, and virtual tables from the main database
101197:   ** over to the temporary database.  None of these objects has any
101198:   ** associated storage, so all we have to do is copy their entries
101199:   ** from the SQLITE_MASTER table.
101200:   */
101201:   rc = execSql(db, pzErrMsg,
101202:       "INSERT INTO vacuum_db.sqlite_master "
101203:       "  SELECT type, name, tbl_name, rootpage, sql"
101204:       "    FROM main.sqlite_master"
101205:       "   WHERE type='view' OR type='trigger'"
101206:       "      OR (type='table' AND rootpage=0)"
101207:   );
101208:   if( rc ) goto end_of_vacuum;
101209: 
101210:   /* At this point, there is a write transaction open on both the 
101211:   ** vacuum database and the main database. Assuming no error occurs,
101212:   ** both transactions are closed by this block - the main database
101213:   ** transaction by sqlite3BtreeCopyFile() and the other by an explicit
101214:   ** call to sqlite3BtreeCommit().
101215:   */
101216:   {
101217:     u32 meta;
101218:     int i;
101219: 
101220:     /* This array determines which meta meta values are preserved in the
101221:     ** vacuum.  Even entries are the meta value number and odd entries
101222:     ** are an increment to apply to the meta value after the vacuum.
101223:     ** The increment is used to increase the schema cookie so that other
101224:     ** connections to the same database will know to reread the schema.
101225:     */
101226:     static const unsigned char aCopy[] = {
101227:        BTREE_SCHEMA_VERSION,     1,  /* Add one to the old schema cookie */
101228:        BTREE_DEFAULT_CACHE_SIZE, 0,  /* Preserve the default page cache size */
101229:        BTREE_TEXT_ENCODING,      0,  /* Preserve the text encoding */
101230:        BTREE_USER_VERSION,       0,  /* Preserve the user version */
101231:     };
101232: 
101233:     assert( 1==sqlite3BtreeIsInTrans(pTemp) );
101234:     assert( 1==sqlite3BtreeIsInTrans(pMain) );
101235: 
101236:     /* Copy Btree meta values */
101237:     for(i=0; i<ArraySize(aCopy); i+=2){
101238:       /* GetMeta() and UpdateMeta() cannot fail in this context because
101239:       ** we already have page 1 loaded into cache and marked dirty. */
101240:       sqlite3BtreeGetMeta(pMain, aCopy[i], &meta);
101241:       rc = sqlite3BtreeUpdateMeta(pTemp, aCopy[i], meta+aCopy[i+1]);
101242:       if( NEVER(rc!=SQLITE_OK) ) goto end_of_vacuum;
101243:     }
101244: 
101245:     rc = sqlite3BtreeCopyFile(pMain, pTemp);
101246:     if( rc!=SQLITE_OK ) goto end_of_vacuum;
101247:     rc = sqlite3BtreeCommit(pTemp);
101248:     if( rc!=SQLITE_OK ) goto end_of_vacuum;
101249: #ifndef SQLITE_OMIT_AUTOVACUUM
101250:     sqlite3BtreeSetAutoVacuum(pMain, sqlite3BtreeGetAutoVacuum(pTemp));
101251: #endif
101252:   }
101253: 
101254:   assert( rc==SQLITE_OK );
101255:   rc = sqlite3BtreeSetPageSize(pMain, sqlite3BtreeGetPageSize(pTemp), nRes,1);
101256: 
101257: end_of_vacuum:
101258:   /* Restore the original value of db->flags */
101259:   db->flags = saved_flags;
101260:   db->nChange = saved_nChange;
101261:   db->nTotalChange = saved_nTotalChange;
101262:   db->xTrace = saved_xTrace;
101263:   sqlite3BtreeSetPageSize(pMain, -1, -1, 1);
101264: 
101265:   /* Currently there is an SQL level transaction open on the vacuum
101266:   ** database. No locks are held on any other files (since the main file
101267:   ** was committed at the btree level). So it safe to end the transaction
101268:   ** by manually setting the autoCommit flag to true and detaching the
101269:   ** vacuum database. The vacuum_db journal file is deleted when the pager
101270:   ** is closed by the DETACH.
101271:   */
101272:   db->autoCommit = 1;
101273: 
101274:   if( pDb ){
101275:     sqlite3BtreeClose(pDb->pBt);
101276:     pDb->pBt = 0;
101277:     pDb->pSchema = 0;
101278:   }
101279: 
101280:   /* This both clears the schemas and reduces the size of the db->aDb[]
101281:   ** array. */ 
101282:   sqlite3ResetInternalSchema(db, -1);
101283: 
101284:   return rc;
101285: }
101286: 
101287: #endif  /* SQLITE_OMIT_VACUUM && SQLITE_OMIT_ATTACH */
101288: 
101289: /************** End of vacuum.c **********************************************/
101290: /************** Begin file vtab.c ********************************************/
101291: /*
101292: ** 2006 June 10
101293: **
101294: ** The author disclaims copyright to this source code.  In place of
101295: ** a legal notice, here is a blessing:
101296: **
101297: **    May you do good and not evil.
101298: **    May you find forgiveness for yourself and forgive others.
101299: **    May you share freely, never taking more than you give.
101300: **
101301: *************************************************************************
101302: ** This file contains code used to help implement virtual tables.
101303: */
101304: #ifndef SQLITE_OMIT_VIRTUALTABLE
101305: 
101306: /*
101307: ** Before a virtual table xCreate() or xConnect() method is invoked, the
101308: ** sqlite3.pVtabCtx member variable is set to point to an instance of
101309: ** this struct allocated on the stack. It is used by the implementation of 
101310: ** the sqlite3_declare_vtab() and sqlite3_vtab_config() APIs, both of which
101311: ** are invoked only from within xCreate and xConnect methods.
101312: */
101313: struct VtabCtx {
101314:   Table *pTab;
101315:   VTable *pVTable;
101316: };
101317: 
101318: /*
101319: ** The actual function that does the work of creating a new module.
101320: ** This function implements the sqlite3_create_module() and
101321: ** sqlite3_create_module_v2() interfaces.
101322: */
101323: static int createModule(
101324:   sqlite3 *db,                    /* Database in which module is registered */
101325:   const char *zName,              /* Name assigned to this module */
101326:   const sqlite3_module *pModule,  /* The definition of the module */
101327:   void *pAux,                     /* Context pointer for xCreate/xConnect */
101328:   void (*xDestroy)(void *)        /* Module destructor function */
101329: ){
101330:   int rc, nName;
101331:   Module *pMod;
101332: 
101333:   sqlite3_mutex_enter(db->mutex);
101334:   nName = sqlite3Strlen30(zName);
101335:   pMod = (Module *)sqlite3DbMallocRaw(db, sizeof(Module) + nName + 1);
101336:   if( pMod ){
101337:     Module *pDel;
101338:     char *zCopy = (char *)(&pMod[1]);
101339:     memcpy(zCopy, zName, nName+1);
101340:     pMod->zName = zCopy;
101341:     pMod->pModule = pModule;
101342:     pMod->pAux = pAux;
101343:     pMod->xDestroy = xDestroy;
101344:     pDel = (Module *)sqlite3HashInsert(&db->aModule, zCopy, nName, (void*)pMod);
101345:     if( pDel && pDel->xDestroy ){
101346:       sqlite3ResetInternalSchema(db, -1);
101347:       pDel->xDestroy(pDel->pAux);
101348:     }
101349:     sqlite3DbFree(db, pDel);
101350:     if( pDel==pMod ){
101351:       db->mallocFailed = 1;
101352:     }
101353:   }else if( xDestroy ){
101354:     xDestroy(pAux);
101355:   }
101356:   rc = sqlite3ApiExit(db, SQLITE_OK);
101357:   sqlite3_mutex_leave(db->mutex);
101358:   return rc;
101359: }
101360: 
101361: 
101362: /*
101363: ** External API function used to create a new virtual-table module.
101364: */
101365: SQLITE_API int sqlite3_create_module(
101366:   sqlite3 *db,                    /* Database in which module is registered */
101367:   const char *zName,              /* Name assigned to this module */
101368:   const sqlite3_module *pModule,  /* The definition of the module */
101369:   void *pAux                      /* Context pointer for xCreate/xConnect */
101370: ){
101371:   return createModule(db, zName, pModule, pAux, 0);
101372: }
101373: 
101374: /*
101375: ** External API function used to create a new virtual-table module.
101376: */
101377: SQLITE_API int sqlite3_create_module_v2(
101378:   sqlite3 *db,                    /* Database in which module is registered */
101379:   const char *zName,              /* Name assigned to this module */
101380:   const sqlite3_module *pModule,  /* The definition of the module */
101381:   void *pAux,                     /* Context pointer for xCreate/xConnect */
101382:   void (*xDestroy)(void *)        /* Module destructor function */
101383: ){
101384:   return createModule(db, zName, pModule, pAux, xDestroy);
101385: }
101386: 
101387: /*
101388: ** Lock the virtual table so that it cannot be disconnected.
101389: ** Locks nest.  Every lock should have a corresponding unlock.
101390: ** If an unlock is omitted, resources leaks will occur.  
101391: **
101392: ** If a disconnect is attempted while a virtual table is locked,
101393: ** the disconnect is deferred until all locks have been removed.
101394: */
101395: SQLITE_PRIVATE void sqlite3VtabLock(VTable *pVTab){
101396:   pVTab->nRef++;
101397: }
101398: 
101399: 
101400: /*
101401: ** pTab is a pointer to a Table structure representing a virtual-table.
101402: ** Return a pointer to the VTable object used by connection db to access 
101403: ** this virtual-table, if one has been created, or NULL otherwise.
101404: */
101405: SQLITE_PRIVATE VTable *sqlite3GetVTable(sqlite3 *db, Table *pTab){
101406:   VTable *pVtab;
101407:   assert( IsVirtual(pTab) );
101408:   for(pVtab=pTab->pVTable; pVtab && pVtab->db!=db; pVtab=pVtab->pNext);
101409:   return pVtab;
101410: }
101411: 
101412: /*
101413: ** Decrement the ref-count on a virtual table object. When the ref-count
101414: ** reaches zero, call the xDisconnect() method to delete the object.
101415: */
101416: SQLITE_PRIVATE void sqlite3VtabUnlock(VTable *pVTab){
101417:   sqlite3 *db = pVTab->db;
101418: 
101419:   assert( db );
101420:   assert( pVTab->nRef>0 );
101421:   assert( sqlite3SafetyCheckOk(db) );
101422: 
101423:   pVTab->nRef--;
101424:   if( pVTab->nRef==0 ){
101425:     sqlite3_vtab *p = pVTab->pVtab;
101426:     if( p ){
101427:       p->pModule->xDisconnect(p);
101428:     }
101429:     sqlite3DbFree(db, pVTab);
101430:   }
101431: }
101432: 
101433: /*
101434: ** Table p is a virtual table. This function moves all elements in the
101435: ** p->pVTable list to the sqlite3.pDisconnect lists of their associated
101436: ** database connections to be disconnected at the next opportunity. 
101437: ** Except, if argument db is not NULL, then the entry associated with
101438: ** connection db is left in the p->pVTable list.
101439: */
101440: static VTable *vtabDisconnectAll(sqlite3 *db, Table *p){
101441:   VTable *pRet = 0;
101442:   VTable *pVTable = p->pVTable;
101443:   p->pVTable = 0;
101444: 
101445:   /* Assert that the mutex (if any) associated with the BtShared database 
101446:   ** that contains table p is held by the caller. See header comments 
101447:   ** above function sqlite3VtabUnlockList() for an explanation of why
101448:   ** this makes it safe to access the sqlite3.pDisconnect list of any
101449:   ** database connection that may have an entry in the p->pVTable list.
101450:   */
101451:   assert( db==0 || sqlite3SchemaMutexHeld(db, 0, p->pSchema) );
101452: 
101453:   while( pVTable ){
101454:     sqlite3 *db2 = pVTable->db;
101455:     VTable *pNext = pVTable->pNext;
101456:     assert( db2 );
101457:     if( db2==db ){
101458:       pRet = pVTable;
101459:       p->pVTable = pRet;
101460:       pRet->pNext = 0;
101461:     }else{
101462:       pVTable->pNext = db2->pDisconnect;
101463:       db2->pDisconnect = pVTable;
101464:     }
101465:     pVTable = pNext;
101466:   }
101467: 
101468:   assert( !db || pRet );
101469:   return pRet;
101470: }
101471: 
101472: 
101473: /*
101474: ** Disconnect all the virtual table objects in the sqlite3.pDisconnect list.
101475: **
101476: ** This function may only be called when the mutexes associated with all
101477: ** shared b-tree databases opened using connection db are held by the 
101478: ** caller. This is done to protect the sqlite3.pDisconnect list. The
101479: ** sqlite3.pDisconnect list is accessed only as follows:
101480: **
101481: **   1) By this function. In this case, all BtShared mutexes and the mutex
101482: **      associated with the database handle itself must be held.
101483: **
101484: **   2) By function vtabDisconnectAll(), when it adds a VTable entry to
101485: **      the sqlite3.pDisconnect list. In this case either the BtShared mutex
101486: **      associated with the database the virtual table is stored in is held
101487: **      or, if the virtual table is stored in a non-sharable database, then
101488: **      the database handle mutex is held.
101489: **
101490: ** As a result, a sqlite3.pDisconnect cannot be accessed simultaneously 
101491: ** by multiple threads. It is thread-safe.
101492: */
101493: SQLITE_PRIVATE void sqlite3VtabUnlockList(sqlite3 *db){
101494:   VTable *p = db->pDisconnect;
101495:   db->pDisconnect = 0;
101496: 
101497:   assert( sqlite3BtreeHoldsAllMutexes(db) );
101498:   assert( sqlite3_mutex_held(db->mutex) );
101499: 
101500:   if( p ){
101501:     sqlite3ExpirePreparedStatements(db);
101502:     do {
101503:       VTable *pNext = p->pNext;
101504:       sqlite3VtabUnlock(p);
101505:       p = pNext;
101506:     }while( p );
101507:   }
101508: }
101509: 
101510: /*
101511: ** Clear any and all virtual-table information from the Table record.
101512: ** This routine is called, for example, just before deleting the Table
101513: ** record.
101514: **
101515: ** Since it is a virtual-table, the Table structure contains a pointer
101516: ** to the head of a linked list of VTable structures. Each VTable 
101517: ** structure is associated with a single sqlite3* user of the schema.
101518: ** The reference count of the VTable structure associated with database 
101519: ** connection db is decremented immediately (which may lead to the 
101520: ** structure being xDisconnected and free). Any other VTable structures
101521: ** in the list are moved to the sqlite3.pDisconnect list of the associated 
101522: ** database connection.
101523: */
101524: SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){
101525:   if( !db || db->pnBytesFreed==0 ) vtabDisconnectAll(0, p);
101526:   if( p->azModuleArg ){
101527:     int i;
101528:     for(i=0; i<p->nModuleArg; i++){
101529:       sqlite3DbFree(db, p->azModuleArg[i]);
101530:     }
101531:     sqlite3DbFree(db, p->azModuleArg);
101532:   }
101533: }
101534: 
101535: /*
101536: ** Add a new module argument to pTable->azModuleArg[].
101537: ** The string is not copied - the pointer is stored.  The
101538: ** string will be freed automatically when the table is
101539: ** deleted.
101540: */
101541: static void addModuleArgument(sqlite3 *db, Table *pTable, char *zArg){
101542:   int i = pTable->nModuleArg++;
101543:   int nBytes = sizeof(char *)*(1+pTable->nModuleArg);
101544:   char **azModuleArg;
101545:   azModuleArg = sqlite3DbRealloc(db, pTable->azModuleArg, nBytes);
101546:   if( azModuleArg==0 ){
101547:     int j;
101548:     for(j=0; j<i; j++){
101549:       sqlite3DbFree(db, pTable->azModuleArg[j]);
101550:     }
101551:     sqlite3DbFree(db, zArg);
101552:     sqlite3DbFree(db, pTable->azModuleArg);
101553:     pTable->nModuleArg = 0;
101554:   }else{
101555:     azModuleArg[i] = zArg;
101556:     azModuleArg[i+1] = 0;
101557:   }
101558:   pTable->azModuleArg = azModuleArg;
101559: }
101560: 
101561: /*
101562: ** The parser calls this routine when it first sees a CREATE VIRTUAL TABLE
101563: ** statement.  The module name has been parsed, but the optional list
101564: ** of parameters that follow the module name are still pending.
101565: */
101566: SQLITE_PRIVATE void sqlite3VtabBeginParse(
101567:   Parse *pParse,        /* Parsing context */
101568:   Token *pName1,        /* Name of new table, or database name */
101569:   Token *pName2,        /* Name of new table or NULL */
101570:   Token *pModuleName    /* Name of the module for the virtual table */
101571: ){
101572:   int iDb;              /* The database the table is being created in */
101573:   Table *pTable;        /* The new virtual table */
101574:   sqlite3 *db;          /* Database connection */
101575: 
101576:   sqlite3StartTable(pParse, pName1, pName2, 0, 0, 1, 0);
101577:   pTable = pParse->pNewTable;
101578:   if( pTable==0 ) return;
101579:   assert( 0==pTable->pIndex );
101580: 
101581:   db = pParse->db;
101582:   iDb = sqlite3SchemaToIndex(db, pTable->pSchema);
101583:   assert( iDb>=0 );
101584: 
101585:   pTable->tabFlags |= TF_Virtual;
101586:   pTable->nModuleArg = 0;
101587:   addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName));
101588:   addModuleArgument(db, pTable, sqlite3DbStrDup(db, db->aDb[iDb].zName));
101589:   addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName));
101590:   pParse->sNameToken.n = (int)(&pModuleName->z[pModuleName->n] - pName1->z);
101591: 
101592: #ifndef SQLITE_OMIT_AUTHORIZATION
101593:   /* Creating a virtual table invokes the authorization callback twice.
101594:   ** The first invocation, to obtain permission to INSERT a row into the
101595:   ** sqlite_master table, has already been made by sqlite3StartTable().
101596:   ** The second call, to obtain permission to create the table, is made now.
101597:   */
101598:   if( pTable->azModuleArg ){
101599:     sqlite3AuthCheck(pParse, SQLITE_CREATE_VTABLE, pTable->zName, 
101600:             pTable->azModuleArg[0], pParse->db->aDb[iDb].zName);
101601:   }
101602: #endif
101603: }
101604: 
101605: /*
101606: ** This routine takes the module argument that has been accumulating
101607: ** in pParse->zArg[] and appends it to the list of arguments on the
101608: ** virtual table currently under construction in pParse->pTable.
101609: */
101610: static void addArgumentToVtab(Parse *pParse){
101611:   if( pParse->sArg.z && ALWAYS(pParse->pNewTable) ){
101612:     const char *z = (const char*)pParse->sArg.z;
101613:     int n = pParse->sArg.n;
101614:     sqlite3 *db = pParse->db;
101615:     addModuleArgument(db, pParse->pNewTable, sqlite3DbStrNDup(db, z, n));
101616:   }
101617: }
101618: 
101619: /*
101620: ** The parser calls this routine after the CREATE VIRTUAL TABLE statement
101621: ** has been completely parsed.
101622: */
101623: SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){
101624:   Table *pTab = pParse->pNewTable;  /* The table being constructed */
101625:   sqlite3 *db = pParse->db;         /* The database connection */
101626: 
101627:   if( pTab==0 ) return;
101628:   addArgumentToVtab(pParse);
101629:   pParse->sArg.z = 0;
101630:   if( pTab->nModuleArg<1 ) return;
101631:   
101632:   /* If the CREATE VIRTUAL TABLE statement is being entered for the
101633:   ** first time (in other words if the virtual table is actually being
101634:   ** created now instead of just being read out of sqlite_master) then
101635:   ** do additional initialization work and store the statement text
101636:   ** in the sqlite_master table.
101637:   */
101638:   if( !db->init.busy ){
101639:     char *zStmt;
101640:     char *zWhere;
101641:     int iDb;
101642:     Vdbe *v;
101643: 
101644:     /* Compute the complete text of the CREATE VIRTUAL TABLE statement */
101645:     if( pEnd ){
101646:       pParse->sNameToken.n = (int)(pEnd->z - pParse->sNameToken.z) + pEnd->n;
101647:     }
101648:     zStmt = sqlite3MPrintf(db, "CREATE VIRTUAL TABLE %T", &pParse->sNameToken);
101649: 
101650:     /* A slot for the record has already been allocated in the 
101651:     ** SQLITE_MASTER table.  We just need to update that slot with all
101652:     ** the information we've collected.  
101653:     **
101654:     ** The VM register number pParse->regRowid holds the rowid of an
101655:     ** entry in the sqlite_master table tht was created for this vtab
101656:     ** by sqlite3StartTable().
101657:     */
101658:     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
101659:     sqlite3NestedParse(pParse,
101660:       "UPDATE %Q.%s "
101661:          "SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q "
101662:        "WHERE rowid=#%d",
101663:       db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
101664:       pTab->zName,
101665:       pTab->zName,
101666:       zStmt,
101667:       pParse->regRowid
101668:     );
101669:     sqlite3DbFree(db, zStmt);
101670:     v = sqlite3GetVdbe(pParse);
101671:     sqlite3ChangeCookie(pParse, iDb);
101672: 
101673:     sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
101674:     zWhere = sqlite3MPrintf(db, "name='%q' AND type='table'", pTab->zName);
101675:     sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere);
101676:     sqlite3VdbeAddOp4(v, OP_VCreate, iDb, 0, 0, 
101677:                          pTab->zName, sqlite3Strlen30(pTab->zName) + 1);
101678:   }
101679: 
101680:   /* If we are rereading the sqlite_master table create the in-memory
101681:   ** record of the table. The xConnect() method is not called until
101682:   ** the first time the virtual table is used in an SQL statement. This
101683:   ** allows a schema that contains virtual tables to be loaded before
101684:   ** the required virtual table implementations are registered.  */
101685:   else {
101686:     Table *pOld;
101687:     Schema *pSchema = pTab->pSchema;
101688:     const char *zName = pTab->zName;
101689:     int nName = sqlite3Strlen30(zName);
101690:     assert( sqlite3SchemaMutexHeld(db, 0, pSchema) );
101691:     pOld = sqlite3HashInsert(&pSchema->tblHash, zName, nName, pTab);
101692:     if( pOld ){
101693:       db->mallocFailed = 1;
101694:       assert( pTab==pOld );  /* Malloc must have failed inside HashInsert() */
101695:       return;
101696:     }
101697:     pParse->pNewTable = 0;
101698:   }
101699: }
101700: 
101701: /*
101702: ** The parser calls this routine when it sees the first token
101703: ** of an argument to the module name in a CREATE VIRTUAL TABLE statement.
101704: */
101705: SQLITE_PRIVATE void sqlite3VtabArgInit(Parse *pParse){
101706:   addArgumentToVtab(pParse);
101707:   pParse->sArg.z = 0;
101708:   pParse->sArg.n = 0;
101709: }
101710: 
101711: /*
101712: ** The parser calls this routine for each token after the first token
101713: ** in an argument to the module name in a CREATE VIRTUAL TABLE statement.
101714: */
101715: SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse *pParse, Token *p){
101716:   Token *pArg = &pParse->sArg;
101717:   if( pArg->z==0 ){
101718:     pArg->z = p->z;
101719:     pArg->n = p->n;
101720:   }else{
101721:     assert(pArg->z < p->z);
101722:     pArg->n = (int)(&p->z[p->n] - pArg->z);
101723:   }
101724: }
101725: 
101726: /*
101727: ** Invoke a virtual table constructor (either xCreate or xConnect). The
101728: ** pointer to the function to invoke is passed as the fourth parameter
101729: ** to this procedure.
101730: */
101731: static int vtabCallConstructor(
101732:   sqlite3 *db, 
101733:   Table *pTab,
101734:   Module *pMod,
101735:   int (*xConstruct)(sqlite3*,void*,int,const char*const*,sqlite3_vtab**,char**),
101736:   char **pzErr
101737: ){
101738:   VtabCtx sCtx;
101739:   VTable *pVTable;
101740:   int rc;
101741:   const char *const*azArg = (const char *const*)pTab->azModuleArg;
101742:   int nArg = pTab->nModuleArg;
101743:   char *zErr = 0;
101744:   char *zModuleName = sqlite3MPrintf(db, "%s", pTab->zName);
101745: 
101746:   if( !zModuleName ){
101747:     return SQLITE_NOMEM;
101748:   }
101749: 
101750:   pVTable = sqlite3DbMallocZero(db, sizeof(VTable));
101751:   if( !pVTable ){
101752:     sqlite3DbFree(db, zModuleName);
101753:     return SQLITE_NOMEM;
101754:   }
101755:   pVTable->db = db;
101756:   pVTable->pMod = pMod;
101757: 
101758:   /* Invoke the virtual table constructor */
101759:   assert( &db->pVtabCtx );
101760:   assert( xConstruct );
101761:   sCtx.pTab = pTab;
101762:   sCtx.pVTable = pVTable;
101763:   db->pVtabCtx = &sCtx;
101764:   rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr);
101765:   db->pVtabCtx = 0;
101766:   if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
101767: 
101768:   if( SQLITE_OK!=rc ){
101769:     if( zErr==0 ){
101770:       *pzErr = sqlite3MPrintf(db, "vtable constructor failed: %s", zModuleName);
101771:     }else {
101772:       *pzErr = sqlite3MPrintf(db, "%s", zErr);
101773:       sqlite3_free(zErr);
101774:     }
101775:     sqlite3DbFree(db, pVTable);
101776:   }else if( ALWAYS(pVTable->pVtab) ){
101777:     /* Justification of ALWAYS():  A correct vtab constructor must allocate
101778:     ** the sqlite3_vtab object if successful.  */
101779:     pVTable->pVtab->pModule = pMod->pModule;
101780:     pVTable->nRef = 1;
101781:     if( sCtx.pTab ){
101782:       const char *zFormat = "vtable constructor did not declare schema: %s";
101783:       *pzErr = sqlite3MPrintf(db, zFormat, pTab->zName);
101784:       sqlite3VtabUnlock(pVTable);
101785:       rc = SQLITE_ERROR;
101786:     }else{
101787:       int iCol;
101788:       /* If everything went according to plan, link the new VTable structure
101789:       ** into the linked list headed by pTab->pVTable. Then loop through the 
101790:       ** columns of the table to see if any of them contain the token "hidden".
101791:       ** If so, set the Column.isHidden flag and remove the token from
101792:       ** the type string.  */
101793:       pVTable->pNext = pTab->pVTable;
101794:       pTab->pVTable = pVTable;
101795: 
101796:       for(iCol=0; iCol<pTab->nCol; iCol++){
101797:         char *zType = pTab->aCol[iCol].zType;
101798:         int nType;
101799:         int i = 0;
101800:         if( !zType ) continue;
101801:         nType = sqlite3Strlen30(zType);
101802:         if( sqlite3StrNICmp("hidden", zType, 6)||(zType[6] && zType[6]!=' ') ){
101803:           for(i=0; i<nType; i++){
101804:             if( (0==sqlite3StrNICmp(" hidden", &zType[i], 7))
101805:              && (zType[i+7]=='\0' || zType[i+7]==' ')
101806:             ){
101807:               i++;
101808:               break;
101809:             }
101810:           }
101811:         }
101812:         if( i<nType ){
101813:           int j;
101814:           int nDel = 6 + (zType[i+6] ? 1 : 0);
101815:           for(j=i; (j+nDel)<=nType; j++){
101816:             zType[j] = zType[j+nDel];
101817:           }
101818:           if( zType[i]=='\0' && i>0 ){
101819:             assert(zType[i-1]==' ');
101820:             zType[i-1] = '\0';
101821:           }
101822:           pTab->aCol[iCol].isHidden = 1;
101823:         }
101824:       }
101825:     }
101826:   }
101827: 
101828:   sqlite3DbFree(db, zModuleName);
101829:   return rc;
101830: }
101831: 
101832: /*
101833: ** This function is invoked by the parser to call the xConnect() method
101834: ** of the virtual table pTab. If an error occurs, an error code is returned 
101835: ** and an error left in pParse.
101836: **
101837: ** This call is a no-op if table pTab is not a virtual table.
101838: */
101839: SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){
101840:   sqlite3 *db = pParse->db;
101841:   const char *zMod;
101842:   Module *pMod;
101843:   int rc;
101844: 
101845:   assert( pTab );
101846:   if( (pTab->tabFlags & TF_Virtual)==0 || sqlite3GetVTable(db, pTab) ){
101847:     return SQLITE_OK;
101848:   }
101849: 
101850:   /* Locate the required virtual table module */
101851:   zMod = pTab->azModuleArg[0];
101852:   pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod));
101853: 
101854:   if( !pMod ){
101855:     const char *zModule = pTab->azModuleArg[0];
101856:     sqlite3ErrorMsg(pParse, "no such module: %s", zModule);
101857:     rc = SQLITE_ERROR;
101858:   }else{
101859:     char *zErr = 0;
101860:     rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xConnect, &zErr);
101861:     if( rc!=SQLITE_OK ){
101862:       sqlite3ErrorMsg(pParse, "%s", zErr);
101863:     }
101864:     sqlite3DbFree(db, zErr);
101865:   }
101866: 
101867:   return rc;
101868: }
101869: /*
101870: ** Grow the db->aVTrans[] array so that there is room for at least one
101871: ** more v-table. Return SQLITE_NOMEM if a malloc fails, or SQLITE_OK otherwise.
101872: */
101873: static int growVTrans(sqlite3 *db){
101874:   const int ARRAY_INCR = 5;
101875: 
101876:   /* Grow the sqlite3.aVTrans array if required */
101877:   if( (db->nVTrans%ARRAY_INCR)==0 ){
101878:     VTable **aVTrans;
101879:     int nBytes = sizeof(sqlite3_vtab *) * (db->nVTrans + ARRAY_INCR);
101880:     aVTrans = sqlite3DbRealloc(db, (void *)db->aVTrans, nBytes);
101881:     if( !aVTrans ){
101882:       return SQLITE_NOMEM;
101883:     }
101884:     memset(&aVTrans[db->nVTrans], 0, sizeof(sqlite3_vtab *)*ARRAY_INCR);
101885:     db->aVTrans = aVTrans;
101886:   }
101887: 
101888:   return SQLITE_OK;
101889: }
101890: 
101891: /*
101892: ** Add the virtual table pVTab to the array sqlite3.aVTrans[]. Space should
101893: ** have already been reserved using growVTrans().
101894: */
101895: static void addToVTrans(sqlite3 *db, VTable *pVTab){
101896:   /* Add pVtab to the end of sqlite3.aVTrans */
101897:   db->aVTrans[db->nVTrans++] = pVTab;
101898:   sqlite3VtabLock(pVTab);
101899: }
101900: 
101901: /*
101902: ** This function is invoked by the vdbe to call the xCreate method
101903: ** of the virtual table named zTab in database iDb. 
101904: **
101905: ** If an error occurs, *pzErr is set to point an an English language
101906: ** description of the error and an SQLITE_XXX error code is returned.
101907: ** In this case the caller must call sqlite3DbFree(db, ) on *pzErr.
101908: */
101909: SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab, char **pzErr){
101910:   int rc = SQLITE_OK;
101911:   Table *pTab;
101912:   Module *pMod;
101913:   const char *zMod;
101914: 
101915:   pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
101916:   assert( pTab && (pTab->tabFlags & TF_Virtual)!=0 && !pTab->pVTable );
101917: 
101918:   /* Locate the required virtual table module */
101919:   zMod = pTab->azModuleArg[0];
101920:   pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod));
101921: 
101922:   /* If the module has been registered and includes a Create method, 
101923:   ** invoke it now. If the module has not been registered, return an 
101924:   ** error. Otherwise, do nothing.
101925:   */
101926:   if( !pMod ){
101927:     *pzErr = sqlite3MPrintf(db, "no such module: %s", zMod);
101928:     rc = SQLITE_ERROR;
101929:   }else{
101930:     rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xCreate, pzErr);
101931:   }
101932: 
101933:   /* Justification of ALWAYS():  The xConstructor method is required to
101934:   ** create a valid sqlite3_vtab if it returns SQLITE_OK. */
101935:   if( rc==SQLITE_OK && ALWAYS(sqlite3GetVTable(db, pTab)) ){
101936:     rc = growVTrans(db);
101937:     if( rc==SQLITE_OK ){
101938:       addToVTrans(db, sqlite3GetVTable(db, pTab));
101939:     }
101940:   }
101941: 
101942:   return rc;
101943: }
101944: 
101945: /*
101946: ** This function is used to set the schema of a virtual table.  It is only
101947: ** valid to call this function from within the xCreate() or xConnect() of a
101948: ** virtual table module.
101949: */
101950: SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
101951:   Parse *pParse;
101952: 
101953:   int rc = SQLITE_OK;
101954:   Table *pTab;
101955:   char *zErr = 0;
101956: 
101957:   sqlite3_mutex_enter(db->mutex);
101958:   if( !db->pVtabCtx || !(pTab = db->pVtabCtx->pTab) ){
101959:     sqlite3Error(db, SQLITE_MISUSE, 0);
101960:     sqlite3_mutex_leave(db->mutex);
101961:     return SQLITE_MISUSE_BKPT;
101962:   }
101963:   assert( (pTab->tabFlags & TF_Virtual)!=0 );
101964: 
101965:   pParse = sqlite3StackAllocZero(db, sizeof(*pParse));
101966:   if( pParse==0 ){
101967:     rc = SQLITE_NOMEM;
101968:   }else{
101969:     pParse->declareVtab = 1;
101970:     pParse->db = db;
101971:     pParse->nQueryLoop = 1;
101972:   
101973:     if( SQLITE_OK==sqlite3RunParser(pParse, zCreateTable, &zErr) 
101974:      && pParse->pNewTable
101975:      && !db->mallocFailed
101976:      && !pParse->pNewTable->pSelect
101977:      && (pParse->pNewTable->tabFlags & TF_Virtual)==0
101978:     ){
101979:       if( !pTab->aCol ){
101980:         pTab->aCol = pParse->pNewTable->aCol;
101981:         pTab->nCol = pParse->pNewTable->nCol;
101982:         pParse->pNewTable->nCol = 0;
101983:         pParse->pNewTable->aCol = 0;
101984:       }
101985:       db->pVtabCtx->pTab = 0;
101986:     }else{
101987:       sqlite3Error(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
101988:       sqlite3DbFree(db, zErr);
101989:       rc = SQLITE_ERROR;
101990:     }
101991:     pParse->declareVtab = 0;
101992:   
101993:     if( pParse->pVdbe ){
101994:       sqlite3VdbeFinalize(pParse->pVdbe);
101995:     }
101996:     sqlite3DeleteTable(db, pParse->pNewTable);
101997:     sqlite3StackFree(db, pParse);
101998:   }
101999: 
102000:   assert( (rc&0xff)==rc );
102001:   rc = sqlite3ApiExit(db, rc);
102002:   sqlite3_mutex_leave(db->mutex);
102003:   return rc;
102004: }
102005: 
102006: /*
102007: ** This function is invoked by the vdbe to call the xDestroy method
102008: ** of the virtual table named zTab in database iDb. This occurs
102009: ** when a DROP TABLE is mentioned.
102010: **
102011: ** This call is a no-op if zTab is not a virtual table.
102012: */
102013: SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3 *db, int iDb, const char *zTab){
102014:   int rc = SQLITE_OK;
102015:   Table *pTab;
102016: 
102017:   pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
102018:   if( ALWAYS(pTab!=0 && pTab->pVTable!=0) ){
102019:     VTable *p = vtabDisconnectAll(db, pTab);
102020: 
102021:     assert( rc==SQLITE_OK );
102022:     rc = p->pMod->pModule->xDestroy(p->pVtab);
102023: 
102024:     /* Remove the sqlite3_vtab* from the aVTrans[] array, if applicable */
102025:     if( rc==SQLITE_OK ){
102026:       assert( pTab->pVTable==p && p->pNext==0 );
102027:       p->pVtab = 0;
102028:       pTab->pVTable = 0;
102029:       sqlite3VtabUnlock(p);
102030:     }
102031:   }
102032: 
102033:   return rc;
102034: }
102035: 
102036: /*
102037: ** This function invokes either the xRollback or xCommit method
102038: ** of each of the virtual tables in the sqlite3.aVTrans array. The method
102039: ** called is identified by the second argument, "offset", which is
102040: ** the offset of the method to call in the sqlite3_module structure.
102041: **
102042: ** The array is cleared after invoking the callbacks. 
102043: */
102044: static void callFinaliser(sqlite3 *db, int offset){
102045:   int i;
102046:   if( db->aVTrans ){
102047:     for(i=0; i<db->nVTrans; i++){
102048:       VTable *pVTab = db->aVTrans[i];
102049:       sqlite3_vtab *p = pVTab->pVtab;
102050:       if( p ){
102051:         int (*x)(sqlite3_vtab *);
102052:         x = *(int (**)(sqlite3_vtab *))((char *)p->pModule + offset);
102053:         if( x ) x(p);
102054:       }
102055:       pVTab->iSavepoint = 0;
102056:       sqlite3VtabUnlock(pVTab);
102057:     }
102058:     sqlite3DbFree(db, db->aVTrans);
102059:     db->nVTrans = 0;
102060:     db->aVTrans = 0;
102061:   }
102062: }
102063: 
102064: /*
102065: ** Invoke the xSync method of all virtual tables in the sqlite3.aVTrans
102066: ** array. Return the error code for the first error that occurs, or
102067: ** SQLITE_OK if all xSync operations are successful.
102068: **
102069: ** Set *pzErrmsg to point to a buffer that should be released using 
102070: ** sqlite3DbFree() containing an error message, if one is available.
102071: */
102072: SQLITE_PRIVATE int sqlite3VtabSync(sqlite3 *db, char **pzErrmsg){
102073:   int i;
102074:   int rc = SQLITE_OK;
102075:   VTable **aVTrans = db->aVTrans;
102076: 
102077:   db->aVTrans = 0;
102078:   for(i=0; rc==SQLITE_OK && i<db->nVTrans; i++){
102079:     int (*x)(sqlite3_vtab *);
102080:     sqlite3_vtab *pVtab = aVTrans[i]->pVtab;
102081:     if( pVtab && (x = pVtab->pModule->xSync)!=0 ){
102082:       rc = x(pVtab);
102083:       sqlite3DbFree(db, *pzErrmsg);
102084:       *pzErrmsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
102085:       sqlite3_free(pVtab->zErrMsg);
102086:     }
102087:   }
102088:   db->aVTrans = aVTrans;
102089:   return rc;
102090: }
102091: 
102092: /*
102093: ** Invoke the xRollback method of all virtual tables in the 
102094: ** sqlite3.aVTrans array. Then clear the array itself.
102095: */
102096: SQLITE_PRIVATE int sqlite3VtabRollback(sqlite3 *db){
102097:   callFinaliser(db, offsetof(sqlite3_module,xRollback));
102098:   return SQLITE_OK;
102099: }
102100: 
102101: /*
102102: ** Invoke the xCommit method of all virtual tables in the 
102103: ** sqlite3.aVTrans array. Then clear the array itself.
102104: */
102105: SQLITE_PRIVATE int sqlite3VtabCommit(sqlite3 *db){
102106:   callFinaliser(db, offsetof(sqlite3_module,xCommit));
102107:   return SQLITE_OK;
102108: }
102109: 
102110: /*
102111: ** If the virtual table pVtab supports the transaction interface
102112: ** (xBegin/xRollback/xCommit and optionally xSync) and a transaction is
102113: ** not currently open, invoke the xBegin method now.
102114: **
102115: ** If the xBegin call is successful, place the sqlite3_vtab pointer
102116: ** in the sqlite3.aVTrans array.
102117: */
102118: SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *db, VTable *pVTab){
102119:   int rc = SQLITE_OK;
102120:   const sqlite3_module *pModule;
102121: 
102122:   /* Special case: If db->aVTrans is NULL and db->nVTrans is greater
102123:   ** than zero, then this function is being called from within a
102124:   ** virtual module xSync() callback. It is illegal to write to 
102125:   ** virtual module tables in this case, so return SQLITE_LOCKED.
102126:   */
102127:   if( sqlite3VtabInSync(db) ){
102128:     return SQLITE_LOCKED;
102129:   }
102130:   if( !pVTab ){
102131:     return SQLITE_OK;
102132:   } 
102133:   pModule = pVTab->pVtab->pModule;
102134: 
102135:   if( pModule->xBegin ){
102136:     int i;
102137: 
102138:     /* If pVtab is already in the aVTrans array, return early */
102139:     for(i=0; i<db->nVTrans; i++){
102140:       if( db->aVTrans[i]==pVTab ){
102141:         return SQLITE_OK;
102142:       }
102143:     }
102144: 
102145:     /* Invoke the xBegin method. If successful, add the vtab to the 
102146:     ** sqlite3.aVTrans[] array. */
102147:     rc = growVTrans(db);
102148:     if( rc==SQLITE_OK ){
102149:       rc = pModule->xBegin(pVTab->pVtab);
102150:       if( rc==SQLITE_OK ){
102151:         addToVTrans(db, pVTab);
102152:       }
102153:     }
102154:   }
102155:   return rc;
102156: }
102157: 
102158: /*
102159: ** Invoke either the xSavepoint, xRollbackTo or xRelease method of all
102160: ** virtual tables that currently have an open transaction. Pass iSavepoint
102161: ** as the second argument to the virtual table method invoked.
102162: **
102163: ** If op is SAVEPOINT_BEGIN, the xSavepoint method is invoked. If it is
102164: ** SAVEPOINT_ROLLBACK, the xRollbackTo method. Otherwise, if op is 
102165: ** SAVEPOINT_RELEASE, then the xRelease method of each virtual table with
102166: ** an open transaction is invoked.
102167: **
102168: ** If any virtual table method returns an error code other than SQLITE_OK, 
102169: ** processing is abandoned and the error returned to the caller of this
102170: ** function immediately. If all calls to virtual table methods are successful,
102171: ** SQLITE_OK is returned.
102172: */
102173: SQLITE_PRIVATE int sqlite3VtabSavepoint(sqlite3 *db, int op, int iSavepoint){
102174:   int rc = SQLITE_OK;
102175: 
102176:   assert( op==SAVEPOINT_RELEASE||op==SAVEPOINT_ROLLBACK||op==SAVEPOINT_BEGIN );
102177:   assert( iSavepoint>=0 );
102178:   if( db->aVTrans ){
102179:     int i;
102180:     for(i=0; rc==SQLITE_OK && i<db->nVTrans; i++){
102181:       VTable *pVTab = db->aVTrans[i];
102182:       const sqlite3_module *pMod = pVTab->pMod->pModule;
102183:       if( pVTab->pVtab && pMod->iVersion>=2 ){
102184:         int (*xMethod)(sqlite3_vtab *, int);
102185:         switch( op ){
102186:           case SAVEPOINT_BEGIN:
102187:             xMethod = pMod->xSavepoint;
102188:             pVTab->iSavepoint = iSavepoint+1;
102189:             break;
102190:           case SAVEPOINT_ROLLBACK:
102191:             xMethod = pMod->xRollbackTo;
102192:             break;
102193:           default:
102194:             xMethod = pMod->xRelease;
102195:             break;
102196:         }
102197:         if( xMethod && pVTab->iSavepoint>iSavepoint ){
102198:           rc = xMethod(pVTab->pVtab, iSavepoint);
102199:         }
102200:       }
102201:     }
102202:   }
102203:   return rc;
102204: }
102205: 
102206: /*
102207: ** The first parameter (pDef) is a function implementation.  The
102208: ** second parameter (pExpr) is the first argument to this function.
102209: ** If pExpr is a column in a virtual table, then let the virtual
102210: ** table implementation have an opportunity to overload the function.
102211: **
102212: ** This routine is used to allow virtual table implementations to
102213: ** overload MATCH, LIKE, GLOB, and REGEXP operators.
102214: **
102215: ** Return either the pDef argument (indicating no change) or a 
102216: ** new FuncDef structure that is marked as ephemeral using the
102217: ** SQLITE_FUNC_EPHEM flag.
102218: */
102219: SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction(
102220:   sqlite3 *db,    /* Database connection for reporting malloc problems */
102221:   FuncDef *pDef,  /* Function to possibly overload */
102222:   int nArg,       /* Number of arguments to the function */
102223:   Expr *pExpr     /* First argument to the function */
102224: ){
102225:   Table *pTab;
102226:   sqlite3_vtab *pVtab;
102227:   sqlite3_module *pMod;
102228:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**) = 0;
102229:   void *pArg = 0;
102230:   FuncDef *pNew;
102231:   int rc = 0;
102232:   char *zLowerName;
102233:   unsigned char *z;
102234: 
102235: 
102236:   /* Check to see the left operand is a column in a virtual table */
102237:   if( NEVER(pExpr==0) ) return pDef;
102238:   if( pExpr->op!=TK_COLUMN ) return pDef;
102239:   pTab = pExpr->pTab;
102240:   if( NEVER(pTab==0) ) return pDef;
102241:   if( (pTab->tabFlags & TF_Virtual)==0 ) return pDef;
102242:   pVtab = sqlite3GetVTable(db, pTab)->pVtab;
102243:   assert( pVtab!=0 );
102244:   assert( pVtab->pModule!=0 );
102245:   pMod = (sqlite3_module *)pVtab->pModule;
102246:   if( pMod->xFindFunction==0 ) return pDef;
102247:  
102248:   /* Call the xFindFunction method on the virtual table implementation
102249:   ** to see if the implementation wants to overload this function 
102250:   */
102251:   zLowerName = sqlite3DbStrDup(db, pDef->zName);
102252:   if( zLowerName ){
102253:     for(z=(unsigned char*)zLowerName; *z; z++){
102254:       *z = sqlite3UpperToLower[*z];
102255:     }
102256:     rc = pMod->xFindFunction(pVtab, nArg, zLowerName, &xFunc, &pArg);
102257:     sqlite3DbFree(db, zLowerName);
102258:   }
102259:   if( rc==0 ){
102260:     return pDef;
102261:   }
102262: 
102263:   /* Create a new ephemeral function definition for the overloaded
102264:   ** function */
102265:   pNew = sqlite3DbMallocZero(db, sizeof(*pNew)
102266:                              + sqlite3Strlen30(pDef->zName) + 1);
102267:   if( pNew==0 ){
102268:     return pDef;
102269:   }
102270:   *pNew = *pDef;
102271:   pNew->zName = (char *)&pNew[1];
102272:   memcpy(pNew->zName, pDef->zName, sqlite3Strlen30(pDef->zName)+1);
102273:   pNew->xFunc = xFunc;
102274:   pNew->pUserData = pArg;
102275:   pNew->flags |= SQLITE_FUNC_EPHEM;
102276:   return pNew;
102277: }
102278: 
102279: /*
102280: ** Make sure virtual table pTab is contained in the pParse->apVirtualLock[]
102281: ** array so that an OP_VBegin will get generated for it.  Add pTab to the
102282: ** array if it is missing.  If pTab is already in the array, this routine
102283: ** is a no-op.
102284: */
102285: SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse *pParse, Table *pTab){
102286:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
102287:   int i, n;
102288:   Table **apVtabLock;
102289: 
102290:   assert( IsVirtual(pTab) );
102291:   for(i=0; i<pToplevel->nVtabLock; i++){
102292:     if( pTab==pToplevel->apVtabLock[i] ) return;
102293:   }
102294:   n = (pToplevel->nVtabLock+1)*sizeof(pToplevel->apVtabLock[0]);
102295:   apVtabLock = sqlite3_realloc(pToplevel->apVtabLock, n);
102296:   if( apVtabLock ){
102297:     pToplevel->apVtabLock = apVtabLock;
102298:     pToplevel->apVtabLock[pToplevel->nVtabLock++] = pTab;
102299:   }else{
102300:     pToplevel->db->mallocFailed = 1;
102301:   }
102302: }
102303: 
102304: /*
102305: ** Return the ON CONFLICT resolution mode in effect for the virtual
102306: ** table update operation currently in progress.
102307: **
102308: ** The results of this routine are undefined unless it is called from
102309: ** within an xUpdate method.
102310: */
102311: SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *db){
102312:   static const unsigned char aMap[] = { 
102313:     SQLITE_ROLLBACK, SQLITE_ABORT, SQLITE_FAIL, SQLITE_IGNORE, SQLITE_REPLACE 
102314:   };
102315:   assert( OE_Rollback==1 && OE_Abort==2 && OE_Fail==3 );
102316:   assert( OE_Ignore==4 && OE_Replace==5 );
102317:   assert( db->vtabOnConflict>=1 && db->vtabOnConflict<=5 );
102318:   return (int)aMap[db->vtabOnConflict-1];
102319: }
102320: 
102321: /*
102322: ** Call from within the xCreate() or xConnect() methods to provide 
102323: ** the SQLite core with additional information about the behavior
102324: ** of the virtual table being implemented.
102325: */
102326: SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){
102327:   va_list ap;
102328:   int rc = SQLITE_OK;
102329: 
102330:   sqlite3_mutex_enter(db->mutex);
102331: 
102332:   va_start(ap, op);
102333:   switch( op ){
102334:     case SQLITE_VTAB_CONSTRAINT_SUPPORT: {
102335:       VtabCtx *p = db->pVtabCtx;
102336:       if( !p ){
102337:         rc = SQLITE_MISUSE_BKPT;
102338:       }else{
102339:         assert( p->pTab==0 || (p->pTab->tabFlags & TF_Virtual)!=0 );
102340:         p->pVTable->bConstraint = (u8)va_arg(ap, int);
102341:       }
102342:       break;
102343:     }
102344:     default:
102345:       rc = SQLITE_MISUSE_BKPT;
102346:       break;
102347:   }
102348:   va_end(ap);
102349: 
102350:   if( rc!=SQLITE_OK ) sqlite3Error(db, rc, 0);
102351:   sqlite3_mutex_leave(db->mutex);
102352:   return rc;
102353: }
102354: 
102355: #endif /* SQLITE_OMIT_VIRTUALTABLE */
102356: 
102357: /************** End of vtab.c ************************************************/
102358: /************** Begin file where.c *******************************************/
102359: /*
102360: ** 2001 September 15
102361: **
102362: ** The author disclaims copyright to this source code.  In place of
102363: ** a legal notice, here is a blessing:
102364: **
102365: **    May you do good and not evil.
102366: **    May you find forgiveness for yourself and forgive others.
102367: **    May you share freely, never taking more than you give.
102368: **
102369: *************************************************************************
102370: ** This module contains C code that generates VDBE code used to process
102371: ** the WHERE clause of SQL statements.  This module is responsible for
102372: ** generating the code that loops through a table looking for applicable
102373: ** rows.  Indices are selected and used to speed the search when doing
102374: ** so is applicable.  Because this module is responsible for selecting
102375: ** indices, you might also think of this module as the "query optimizer".
102376: */
102377: 
102378: 
102379: /*
102380: ** Trace output macros
102381: */
102382: #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
102383: SQLITE_PRIVATE int sqlite3WhereTrace = 0;
102384: #endif
102385: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
102386: # define WHERETRACE(X)  if(sqlite3WhereTrace) sqlite3DebugPrintf X
102387: #else
102388: # define WHERETRACE(X)
102389: #endif
102390: 
102391: /* Forward reference
102392: */
102393: typedef struct WhereClause WhereClause;
102394: typedef struct WhereMaskSet WhereMaskSet;
102395: typedef struct WhereOrInfo WhereOrInfo;
102396: typedef struct WhereAndInfo WhereAndInfo;
102397: typedef struct WhereCost WhereCost;
102398: 
102399: /*
102400: ** The query generator uses an array of instances of this structure to
102401: ** help it analyze the subexpressions of the WHERE clause.  Each WHERE
102402: ** clause subexpression is separated from the others by AND operators,
102403: ** usually, or sometimes subexpressions separated by OR.
102404: **
102405: ** All WhereTerms are collected into a single WhereClause structure.  
102406: ** The following identity holds:
102407: **
102408: **        WhereTerm.pWC->a[WhereTerm.idx] == WhereTerm
102409: **
102410: ** When a term is of the form:
102411: **
102412: **              X <op> <expr>
102413: **
102414: ** where X is a column name and <op> is one of certain operators,
102415: ** then WhereTerm.leftCursor and WhereTerm.u.leftColumn record the
102416: ** cursor number and column number for X.  WhereTerm.eOperator records
102417: ** the <op> using a bitmask encoding defined by WO_xxx below.  The
102418: ** use of a bitmask encoding for the operator allows us to search
102419: ** quickly for terms that match any of several different operators.
102420: **
102421: ** A WhereTerm might also be two or more subterms connected by OR:
102422: **
102423: **         (t1.X <op> <expr>) OR (t1.Y <op> <expr>) OR ....
102424: **
102425: ** In this second case, wtFlag as the TERM_ORINFO set and eOperator==WO_OR
102426: ** and the WhereTerm.u.pOrInfo field points to auxiliary information that
102427: ** is collected about the
102428: **
102429: ** If a term in the WHERE clause does not match either of the two previous
102430: ** categories, then eOperator==0.  The WhereTerm.pExpr field is still set
102431: ** to the original subexpression content and wtFlags is set up appropriately
102432: ** but no other fields in the WhereTerm object are meaningful.
102433: **
102434: ** When eOperator!=0, prereqRight and prereqAll record sets of cursor numbers,
102435: ** but they do so indirectly.  A single WhereMaskSet structure translates
102436: ** cursor number into bits and the translated bit is stored in the prereq
102437: ** fields.  The translation is used in order to maximize the number of
102438: ** bits that will fit in a Bitmask.  The VDBE cursor numbers might be
102439: ** spread out over the non-negative integers.  For example, the cursor
102440: ** numbers might be 3, 8, 9, 10, 20, 23, 41, and 45.  The WhereMaskSet
102441: ** translates these sparse cursor numbers into consecutive integers
102442: ** beginning with 0 in order to make the best possible use of the available
102443: ** bits in the Bitmask.  So, in the example above, the cursor numbers
102444: ** would be mapped into integers 0 through 7.
102445: **
102446: ** The number of terms in a join is limited by the number of bits
102447: ** in prereqRight and prereqAll.  The default is 64 bits, hence SQLite
102448: ** is only able to process joins with 64 or fewer tables.
102449: */
102450: typedef struct WhereTerm WhereTerm;
102451: struct WhereTerm {
102452:   Expr *pExpr;            /* Pointer to the subexpression that is this term */
102453:   int iParent;            /* Disable pWC->a[iParent] when this term disabled */
102454:   int leftCursor;         /* Cursor number of X in "X <op> <expr>" */
102455:   union {
102456:     int leftColumn;         /* Column number of X in "X <op> <expr>" */
102457:     WhereOrInfo *pOrInfo;   /* Extra information if eOperator==WO_OR */
102458:     WhereAndInfo *pAndInfo; /* Extra information if eOperator==WO_AND */
102459:   } u;
102460:   u16 eOperator;          /* A WO_xx value describing <op> */
102461:   u8 wtFlags;             /* TERM_xxx bit flags.  See below */
102462:   u8 nChild;              /* Number of children that must disable us */
102463:   WhereClause *pWC;       /* The clause this term is part of */
102464:   Bitmask prereqRight;    /* Bitmask of tables used by pExpr->pRight */
102465:   Bitmask prereqAll;      /* Bitmask of tables referenced by pExpr */
102466: };
102467: 
102468: /*
102469: ** Allowed values of WhereTerm.wtFlags
102470: */
102471: #define TERM_DYNAMIC    0x01   /* Need to call sqlite3ExprDelete(db, pExpr) */
102472: #define TERM_VIRTUAL    0x02   /* Added by the optimizer.  Do not code */
102473: #define TERM_CODED      0x04   /* This term is already coded */
102474: #define TERM_COPIED     0x08   /* Has a child */
102475: #define TERM_ORINFO     0x10   /* Need to free the WhereTerm.u.pOrInfo object */
102476: #define TERM_ANDINFO    0x20   /* Need to free the WhereTerm.u.pAndInfo obj */
102477: #define TERM_OR_OK      0x40   /* Used during OR-clause processing */
102478: #ifdef SQLITE_ENABLE_STAT3
102479: #  define TERM_VNULL    0x80   /* Manufactured x>NULL or x<=NULL term */
102480: #else
102481: #  define TERM_VNULL    0x00   /* Disabled if not using stat3 */
102482: #endif
102483: 
102484: /*
102485: ** An instance of the following structure holds all information about a
102486: ** WHERE clause.  Mostly this is a container for one or more WhereTerms.
102487: **
102488: ** Explanation of pOuter:  For a WHERE clause of the form
102489: **
102490: **           a AND ((b AND c) OR (d AND e)) AND f
102491: **
102492: ** There are separate WhereClause objects for the whole clause and for
102493: ** the subclauses "(b AND c)" and "(d AND e)".  The pOuter field of the
102494: ** subclauses points to the WhereClause object for the whole clause.
102495: */
102496: struct WhereClause {
102497:   Parse *pParse;           /* The parser context */
102498:   WhereMaskSet *pMaskSet;  /* Mapping of table cursor numbers to bitmasks */
102499:   Bitmask vmask;           /* Bitmask identifying virtual table cursors */
102500:   WhereClause *pOuter;     /* Outer conjunction */
102501:   u8 op;                   /* Split operator.  TK_AND or TK_OR */
102502:   u16 wctrlFlags;          /* Might include WHERE_AND_ONLY */
102503:   int nTerm;               /* Number of terms */
102504:   int nSlot;               /* Number of entries in a[] */
102505:   WhereTerm *a;            /* Each a[] describes a term of the WHERE cluase */
102506: #if defined(SQLITE_SMALL_STACK)
102507:   WhereTerm aStatic[1];    /* Initial static space for a[] */
102508: #else
102509:   WhereTerm aStatic[8];    /* Initial static space for a[] */
102510: #endif
102511: };
102512: 
102513: /*
102514: ** A WhereTerm with eOperator==WO_OR has its u.pOrInfo pointer set to
102515: ** a dynamically allocated instance of the following structure.
102516: */
102517: struct WhereOrInfo {
102518:   WhereClause wc;          /* Decomposition into subterms */
102519:   Bitmask indexable;       /* Bitmask of all indexable tables in the clause */
102520: };
102521: 
102522: /*
102523: ** A WhereTerm with eOperator==WO_AND has its u.pAndInfo pointer set to
102524: ** a dynamically allocated instance of the following structure.
102525: */
102526: struct WhereAndInfo {
102527:   WhereClause wc;          /* The subexpression broken out */
102528: };
102529: 
102530: /*
102531: ** An instance of the following structure keeps track of a mapping
102532: ** between VDBE cursor numbers and bits of the bitmasks in WhereTerm.
102533: **
102534: ** The VDBE cursor numbers are small integers contained in 
102535: ** SrcList_item.iCursor and Expr.iTable fields.  For any given WHERE 
102536: ** clause, the cursor numbers might not begin with 0 and they might
102537: ** contain gaps in the numbering sequence.  But we want to make maximum
102538: ** use of the bits in our bitmasks.  This structure provides a mapping
102539: ** from the sparse cursor numbers into consecutive integers beginning
102540: ** with 0.
102541: **
102542: ** If WhereMaskSet.ix[A]==B it means that The A-th bit of a Bitmask
102543: ** corresponds VDBE cursor number B.  The A-th bit of a bitmask is 1<<A.
102544: **
102545: ** For example, if the WHERE clause expression used these VDBE
102546: ** cursors:  4, 5, 8, 29, 57, 73.  Then the  WhereMaskSet structure
102547: ** would map those cursor numbers into bits 0 through 5.
102548: **
102549: ** Note that the mapping is not necessarily ordered.  In the example
102550: ** above, the mapping might go like this:  4->3, 5->1, 8->2, 29->0,
102551: ** 57->5, 73->4.  Or one of 719 other combinations might be used. It
102552: ** does not really matter.  What is important is that sparse cursor
102553: ** numbers all get mapped into bit numbers that begin with 0 and contain
102554: ** no gaps.
102555: */
102556: struct WhereMaskSet {
102557:   int n;                        /* Number of assigned cursor values */
102558:   int ix[BMS];                  /* Cursor assigned to each bit */
102559: };
102560: 
102561: /*
102562: ** A WhereCost object records a lookup strategy and the estimated
102563: ** cost of pursuing that strategy.
102564: */
102565: struct WhereCost {
102566:   WherePlan plan;    /* The lookup strategy */
102567:   double rCost;      /* Overall cost of pursuing this search strategy */
102568:   Bitmask used;      /* Bitmask of cursors used by this plan */
102569: };
102570: 
102571: /*
102572: ** Bitmasks for the operators that indices are able to exploit.  An
102573: ** OR-ed combination of these values can be used when searching for
102574: ** terms in the where clause.
102575: */
102576: #define WO_IN     0x001
102577: #define WO_EQ     0x002
102578: #define WO_LT     (WO_EQ<<(TK_LT-TK_EQ))
102579: #define WO_LE     (WO_EQ<<(TK_LE-TK_EQ))
102580: #define WO_GT     (WO_EQ<<(TK_GT-TK_EQ))
102581: #define WO_GE     (WO_EQ<<(TK_GE-TK_EQ))
102582: #define WO_MATCH  0x040
102583: #define WO_ISNULL 0x080
102584: #define WO_OR     0x100       /* Two or more OR-connected terms */
102585: #define WO_AND    0x200       /* Two or more AND-connected terms */
102586: #define WO_NOOP   0x800       /* This term does not restrict search space */
102587: 
102588: #define WO_ALL    0xfff       /* Mask of all possible WO_* values */
102589: #define WO_SINGLE 0x0ff       /* Mask of all non-compound WO_* values */
102590: 
102591: /*
102592: ** Value for wsFlags returned by bestIndex() and stored in
102593: ** WhereLevel.wsFlags.  These flags determine which search
102594: ** strategies are appropriate.
102595: **
102596: ** The least significant 12 bits is reserved as a mask for WO_ values above.
102597: ** The WhereLevel.wsFlags field is usually set to WO_IN|WO_EQ|WO_ISNULL.
102598: ** But if the table is the right table of a left join, WhereLevel.wsFlags
102599: ** is set to WO_IN|WO_EQ.  The WhereLevel.wsFlags field can then be used as
102600: ** the "op" parameter to findTerm when we are resolving equality constraints.
102601: ** ISNULL constraints will then not be used on the right table of a left
102602: ** join.  Tickets #2177 and #2189.
102603: */
102604: #define WHERE_ROWID_EQ     0x00001000  /* rowid=EXPR or rowid IN (...) */
102605: #define WHERE_ROWID_RANGE  0x00002000  /* rowid<EXPR and/or rowid>EXPR */
102606: #define WHERE_COLUMN_EQ    0x00010000  /* x=EXPR or x IN (...) or x IS NULL */
102607: #define WHERE_COLUMN_RANGE 0x00020000  /* x<EXPR and/or x>EXPR */
102608: #define WHERE_COLUMN_IN    0x00040000  /* x IN (...) */
102609: #define WHERE_COLUMN_NULL  0x00080000  /* x IS NULL */
102610: #define WHERE_INDEXED      0x000f0000  /* Anything that uses an index */
102611: #define WHERE_NOT_FULLSCAN 0x100f3000  /* Does not do a full table scan */
102612: #define WHERE_IN_ABLE      0x000f1000  /* Able to support an IN operator */
102613: #define WHERE_TOP_LIMIT    0x00100000  /* x<EXPR or x<=EXPR constraint */
102614: #define WHERE_BTM_LIMIT    0x00200000  /* x>EXPR or x>=EXPR constraint */
102615: #define WHERE_BOTH_LIMIT   0x00300000  /* Both x>EXPR and x<EXPR */
102616: #define WHERE_IDX_ONLY     0x00800000  /* Use index only - omit table */
102617: #define WHERE_ORDERBY      0x01000000  /* Output will appear in correct order */
102618: #define WHERE_REVERSE      0x02000000  /* Scan in reverse order */
102619: #define WHERE_UNIQUE       0x04000000  /* Selects no more than one row */
102620: #define WHERE_VIRTUALTABLE 0x08000000  /* Use virtual-table processing */
102621: #define WHERE_MULTI_OR     0x10000000  /* OR using multiple indices */
102622: #define WHERE_TEMP_INDEX   0x20000000  /* Uses an ephemeral index */
102623: #define WHERE_DISTINCT     0x40000000  /* Correct order for DISTINCT */
102624: 
102625: /*
102626: ** Initialize a preallocated WhereClause structure.
102627: */
102628: static void whereClauseInit(
102629:   WhereClause *pWC,        /* The WhereClause to be initialized */
102630:   Parse *pParse,           /* The parsing context */
102631:   WhereMaskSet *pMaskSet,  /* Mapping from table cursor numbers to bitmasks */
102632:   u16 wctrlFlags           /* Might include WHERE_AND_ONLY */
102633: ){
102634:   pWC->pParse = pParse;
102635:   pWC->pMaskSet = pMaskSet;
102636:   pWC->pOuter = 0;
102637:   pWC->nTerm = 0;
102638:   pWC->nSlot = ArraySize(pWC->aStatic);
102639:   pWC->a = pWC->aStatic;
102640:   pWC->vmask = 0;
102641:   pWC->wctrlFlags = wctrlFlags;
102642: }
102643: 
102644: /* Forward reference */
102645: static void whereClauseClear(WhereClause*);
102646: 
102647: /*
102648: ** Deallocate all memory associated with a WhereOrInfo object.
102649: */
102650: static void whereOrInfoDelete(sqlite3 *db, WhereOrInfo *p){
102651:   whereClauseClear(&p->wc);
102652:   sqlite3DbFree(db, p);
102653: }
102654: 
102655: /*
102656: ** Deallocate all memory associated with a WhereAndInfo object.
102657: */
102658: static void whereAndInfoDelete(sqlite3 *db, WhereAndInfo *p){
102659:   whereClauseClear(&p->wc);
102660:   sqlite3DbFree(db, p);
102661: }
102662: 
102663: /*
102664: ** Deallocate a WhereClause structure.  The WhereClause structure
102665: ** itself is not freed.  This routine is the inverse of whereClauseInit().
102666: */
102667: static void whereClauseClear(WhereClause *pWC){
102668:   int i;
102669:   WhereTerm *a;
102670:   sqlite3 *db = pWC->pParse->db;
102671:   for(i=pWC->nTerm-1, a=pWC->a; i>=0; i--, a++){
102672:     if( a->wtFlags & TERM_DYNAMIC ){
102673:       sqlite3ExprDelete(db, a->pExpr);
102674:     }
102675:     if( a->wtFlags & TERM_ORINFO ){
102676:       whereOrInfoDelete(db, a->u.pOrInfo);
102677:     }else if( a->wtFlags & TERM_ANDINFO ){
102678:       whereAndInfoDelete(db, a->u.pAndInfo);
102679:     }
102680:   }
102681:   if( pWC->a!=pWC->aStatic ){
102682:     sqlite3DbFree(db, pWC->a);
102683:   }
102684: }
102685: 
102686: /*
102687: ** Add a single new WhereTerm entry to the WhereClause object pWC.
102688: ** The new WhereTerm object is constructed from Expr p and with wtFlags.
102689: ** The index in pWC->a[] of the new WhereTerm is returned on success.
102690: ** 0 is returned if the new WhereTerm could not be added due to a memory
102691: ** allocation error.  The memory allocation failure will be recorded in
102692: ** the db->mallocFailed flag so that higher-level functions can detect it.
102693: **
102694: ** This routine will increase the size of the pWC->a[] array as necessary.
102695: **
102696: ** If the wtFlags argument includes TERM_DYNAMIC, then responsibility
102697: ** for freeing the expression p is assumed by the WhereClause object pWC.
102698: ** This is true even if this routine fails to allocate a new WhereTerm.
102699: **
102700: ** WARNING:  This routine might reallocate the space used to store
102701: ** WhereTerms.  All pointers to WhereTerms should be invalidated after
102702: ** calling this routine.  Such pointers may be reinitialized by referencing
102703: ** the pWC->a[] array.
102704: */
102705: static int whereClauseInsert(WhereClause *pWC, Expr *p, u8 wtFlags){
102706:   WhereTerm *pTerm;
102707:   int idx;
102708:   testcase( wtFlags & TERM_VIRTUAL );  /* EV: R-00211-15100 */
102709:   if( pWC->nTerm>=pWC->nSlot ){
102710:     WhereTerm *pOld = pWC->a;
102711:     sqlite3 *db = pWC->pParse->db;
102712:     pWC->a = sqlite3DbMallocRaw(db, sizeof(pWC->a[0])*pWC->nSlot*2 );
102713:     if( pWC->a==0 ){
102714:       if( wtFlags & TERM_DYNAMIC ){
102715:         sqlite3ExprDelete(db, p);
102716:       }
102717:       pWC->a = pOld;
102718:       return 0;
102719:     }
102720:     memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm);
102721:     if( pOld!=pWC->aStatic ){
102722:       sqlite3DbFree(db, pOld);
102723:     }
102724:     pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]);
102725:   }
102726:   pTerm = &pWC->a[idx = pWC->nTerm++];
102727:   pTerm->pExpr = p;
102728:   pTerm->wtFlags = wtFlags;
102729:   pTerm->pWC = pWC;
102730:   pTerm->iParent = -1;
102731:   return idx;
102732: }
102733: 
102734: /*
102735: ** This routine identifies subexpressions in the WHERE clause where
102736: ** each subexpression is separated by the AND operator or some other
102737: ** operator specified in the op parameter.  The WhereClause structure
102738: ** is filled with pointers to subexpressions.  For example:
102739: **
102740: **    WHERE  a=='hello' AND coalesce(b,11)<10 AND (c+12!=d OR c==22)
102741: **           \________/     \_______________/     \________________/
102742: **            slot[0]            slot[1]               slot[2]
102743: **
102744: ** The original WHERE clause in pExpr is unaltered.  All this routine
102745: ** does is make slot[] entries point to substructure within pExpr.
102746: **
102747: ** In the previous sentence and in the diagram, "slot[]" refers to
102748: ** the WhereClause.a[] array.  The slot[] array grows as needed to contain
102749: ** all terms of the WHERE clause.
102750: */
102751: static void whereSplit(WhereClause *pWC, Expr *pExpr, int op){
102752:   pWC->op = (u8)op;
102753:   if( pExpr==0 ) return;
102754:   if( pExpr->op!=op ){
102755:     whereClauseInsert(pWC, pExpr, 0);
102756:   }else{
102757:     whereSplit(pWC, pExpr->pLeft, op);
102758:     whereSplit(pWC, pExpr->pRight, op);
102759:   }
102760: }
102761: 
102762: /*
102763: ** Initialize an expression mask set (a WhereMaskSet object)
102764: */
102765: #define initMaskSet(P)  memset(P, 0, sizeof(*P))
102766: 
102767: /*
102768: ** Return the bitmask for the given cursor number.  Return 0 if
102769: ** iCursor is not in the set.
102770: */
102771: static Bitmask getMask(WhereMaskSet *pMaskSet, int iCursor){
102772:   int i;
102773:   assert( pMaskSet->n<=(int)sizeof(Bitmask)*8 );
102774:   for(i=0; i<pMaskSet->n; i++){
102775:     if( pMaskSet->ix[i]==iCursor ){
102776:       return ((Bitmask)1)<<i;
102777:     }
102778:   }
102779:   return 0;
102780: }
102781: 
102782: /*
102783: ** Create a new mask for cursor iCursor.
102784: **
102785: ** There is one cursor per table in the FROM clause.  The number of
102786: ** tables in the FROM clause is limited by a test early in the
102787: ** sqlite3WhereBegin() routine.  So we know that the pMaskSet->ix[]
102788: ** array will never overflow.
102789: */
102790: static void createMask(WhereMaskSet *pMaskSet, int iCursor){
102791:   assert( pMaskSet->n < ArraySize(pMaskSet->ix) );
102792:   pMaskSet->ix[pMaskSet->n++] = iCursor;
102793: }
102794: 
102795: /*
102796: ** This routine walks (recursively) an expression tree and generates
102797: ** a bitmask indicating which tables are used in that expression
102798: ** tree.
102799: **
102800: ** In order for this routine to work, the calling function must have
102801: ** previously invoked sqlite3ResolveExprNames() on the expression.  See
102802: ** the header comment on that routine for additional information.
102803: ** The sqlite3ResolveExprNames() routines looks for column names and
102804: ** sets their opcodes to TK_COLUMN and their Expr.iTable fields to
102805: ** the VDBE cursor number of the table.  This routine just has to
102806: ** translate the cursor numbers into bitmask values and OR all
102807: ** the bitmasks together.
102808: */
102809: static Bitmask exprListTableUsage(WhereMaskSet*, ExprList*);
102810: static Bitmask exprSelectTableUsage(WhereMaskSet*, Select*);
102811: static Bitmask exprTableUsage(WhereMaskSet *pMaskSet, Expr *p){
102812:   Bitmask mask = 0;
102813:   if( p==0 ) return 0;
102814:   if( p->op==TK_COLUMN ){
102815:     mask = getMask(pMaskSet, p->iTable);
102816:     return mask;
102817:   }
102818:   mask = exprTableUsage(pMaskSet, p->pRight);
102819:   mask |= exprTableUsage(pMaskSet, p->pLeft);
102820:   if( ExprHasProperty(p, EP_xIsSelect) ){
102821:     mask |= exprSelectTableUsage(pMaskSet, p->x.pSelect);
102822:   }else{
102823:     mask |= exprListTableUsage(pMaskSet, p->x.pList);
102824:   }
102825:   return mask;
102826: }
102827: static Bitmask exprListTableUsage(WhereMaskSet *pMaskSet, ExprList *pList){
102828:   int i;
102829:   Bitmask mask = 0;
102830:   if( pList ){
102831:     for(i=0; i<pList->nExpr; i++){
102832:       mask |= exprTableUsage(pMaskSet, pList->a[i].pExpr);
102833:     }
102834:   }
102835:   return mask;
102836: }
102837: static Bitmask exprSelectTableUsage(WhereMaskSet *pMaskSet, Select *pS){
102838:   Bitmask mask = 0;
102839:   while( pS ){
102840:     SrcList *pSrc = pS->pSrc;
102841:     mask |= exprListTableUsage(pMaskSet, pS->pEList);
102842:     mask |= exprListTableUsage(pMaskSet, pS->pGroupBy);
102843:     mask |= exprListTableUsage(pMaskSet, pS->pOrderBy);
102844:     mask |= exprTableUsage(pMaskSet, pS->pWhere);
102845:     mask |= exprTableUsage(pMaskSet, pS->pHaving);
102846:     if( ALWAYS(pSrc!=0) ){
102847:       int i;
102848:       for(i=0; i<pSrc->nSrc; i++){
102849:         mask |= exprSelectTableUsage(pMaskSet, pSrc->a[i].pSelect);
102850:         mask |= exprTableUsage(pMaskSet, pSrc->a[i].pOn);
102851:       }
102852:     }
102853:     pS = pS->pPrior;
102854:   }
102855:   return mask;
102856: }
102857: 
102858: /*
102859: ** Return TRUE if the given operator is one of the operators that is
102860: ** allowed for an indexable WHERE clause term.  The allowed operators are
102861: ** "=", "<", ">", "<=", ">=", and "IN".
102862: **
102863: ** IMPLEMENTATION-OF: R-59926-26393 To be usable by an index a term must be
102864: ** of one of the following forms: column = expression column > expression
102865: ** column >= expression column < expression column <= expression
102866: ** expression = column expression > column expression >= column
102867: ** expression < column expression <= column column IN
102868: ** (expression-list) column IN (subquery) column IS NULL
102869: */
102870: static int allowedOp(int op){
102871:   assert( TK_GT>TK_EQ && TK_GT<TK_GE );
102872:   assert( TK_LT>TK_EQ && TK_LT<TK_GE );
102873:   assert( TK_LE>TK_EQ && TK_LE<TK_GE );
102874:   assert( TK_GE==TK_EQ+4 );
102875:   return op==TK_IN || (op>=TK_EQ && op<=TK_GE) || op==TK_ISNULL;
102876: }
102877: 
102878: /*
102879: ** Swap two objects of type TYPE.
102880: */
102881: #define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;}
102882: 
102883: /*
102884: ** Commute a comparison operator.  Expressions of the form "X op Y"
102885: ** are converted into "Y op X".
102886: **
102887: ** If a collation sequence is associated with either the left or right
102888: ** side of the comparison, it remains associated with the same side after
102889: ** the commutation. So "Y collate NOCASE op X" becomes 
102890: ** "X collate NOCASE op Y". This is because any collation sequence on
102891: ** the left hand side of a comparison overrides any collation sequence 
102892: ** attached to the right. For the same reason the EP_ExpCollate flag
102893: ** is not commuted.
102894: */
102895: static void exprCommute(Parse *pParse, Expr *pExpr){
102896:   u16 expRight = (pExpr->pRight->flags & EP_ExpCollate);
102897:   u16 expLeft = (pExpr->pLeft->flags & EP_ExpCollate);
102898:   assert( allowedOp(pExpr->op) && pExpr->op!=TK_IN );
102899:   pExpr->pRight->pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight);
102900:   pExpr->pLeft->pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
102901:   SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl);
102902:   pExpr->pRight->flags = (pExpr->pRight->flags & ~EP_ExpCollate) | expLeft;
102903:   pExpr->pLeft->flags = (pExpr->pLeft->flags & ~EP_ExpCollate) | expRight;
102904:   SWAP(Expr*,pExpr->pRight,pExpr->pLeft);
102905:   if( pExpr->op>=TK_GT ){
102906:     assert( TK_LT==TK_GT+2 );
102907:     assert( TK_GE==TK_LE+2 );
102908:     assert( TK_GT>TK_EQ );
102909:     assert( TK_GT<TK_LE );
102910:     assert( pExpr->op>=TK_GT && pExpr->op<=TK_GE );
102911:     pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT;
102912:   }
102913: }
102914: 
102915: /*
102916: ** Translate from TK_xx operator to WO_xx bitmask.
102917: */
102918: static u16 operatorMask(int op){
102919:   u16 c;
102920:   assert( allowedOp(op) );
102921:   if( op==TK_IN ){
102922:     c = WO_IN;
102923:   }else if( op==TK_ISNULL ){
102924:     c = WO_ISNULL;
102925:   }else{
102926:     assert( (WO_EQ<<(op-TK_EQ)) < 0x7fff );
102927:     c = (u16)(WO_EQ<<(op-TK_EQ));
102928:   }
102929:   assert( op!=TK_ISNULL || c==WO_ISNULL );
102930:   assert( op!=TK_IN || c==WO_IN );
102931:   assert( op!=TK_EQ || c==WO_EQ );
102932:   assert( op!=TK_LT || c==WO_LT );
102933:   assert( op!=TK_LE || c==WO_LE );
102934:   assert( op!=TK_GT || c==WO_GT );
102935:   assert( op!=TK_GE || c==WO_GE );
102936:   return c;
102937: }
102938: 
102939: /*
102940: ** Search for a term in the WHERE clause that is of the form "X <op> <expr>"
102941: ** where X is a reference to the iColumn of table iCur and <op> is one of
102942: ** the WO_xx operator codes specified by the op parameter.
102943: ** Return a pointer to the term.  Return 0 if not found.
102944: */
102945: static WhereTerm *findTerm(
102946:   WhereClause *pWC,     /* The WHERE clause to be searched */
102947:   int iCur,             /* Cursor number of LHS */
102948:   int iColumn,          /* Column number of LHS */
102949:   Bitmask notReady,     /* RHS must not overlap with this mask */
102950:   u32 op,               /* Mask of WO_xx values describing operator */
102951:   Index *pIdx           /* Must be compatible with this index, if not NULL */
102952: ){
102953:   WhereTerm *pTerm;
102954:   int k;
102955:   assert( iCur>=0 );
102956:   op &= WO_ALL;
102957:   for(; pWC; pWC=pWC->pOuter){
102958:     for(pTerm=pWC->a, k=pWC->nTerm; k; k--, pTerm++){
102959:       if( pTerm->leftCursor==iCur
102960:          && (pTerm->prereqRight & notReady)==0
102961:          && pTerm->u.leftColumn==iColumn
102962:          && (pTerm->eOperator & op)!=0
102963:       ){
102964:         if( iColumn>=0 && pIdx && pTerm->eOperator!=WO_ISNULL ){
102965:           Expr *pX = pTerm->pExpr;
102966:           CollSeq *pColl;
102967:           char idxaff;
102968:           int j;
102969:           Parse *pParse = pWC->pParse;
102970:   
102971:           idxaff = pIdx->pTable->aCol[iColumn].affinity;
102972:           if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue;
102973:   
102974:           /* Figure out the collation sequence required from an index for
102975:           ** it to be useful for optimising expression pX. Store this
102976:           ** value in variable pColl.
102977:           */
102978:           assert(pX->pLeft);
102979:           pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
102980:           assert(pColl || pParse->nErr);
102981:   
102982:           for(j=0; pIdx->aiColumn[j]!=iColumn; j++){
102983:             if( NEVER(j>=pIdx->nColumn) ) return 0;
102984:           }
102985:           if( pColl && sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ) continue;
102986:         }
102987:         return pTerm;
102988:       }
102989:     }
102990:   }
102991:   return 0;
102992: }
102993: 
102994: /* Forward reference */
102995: static void exprAnalyze(SrcList*, WhereClause*, int);
102996: 
102997: /*
102998: ** Call exprAnalyze on all terms in a WHERE clause.  
102999: **
103000: **
103001: */
103002: static void exprAnalyzeAll(
103003:   SrcList *pTabList,       /* the FROM clause */
103004:   WhereClause *pWC         /* the WHERE clause to be analyzed */
103005: ){
103006:   int i;
103007:   for(i=pWC->nTerm-1; i>=0; i--){
103008:     exprAnalyze(pTabList, pWC, i);
103009:   }
103010: }
103011: 
103012: #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
103013: /*
103014: ** Check to see if the given expression is a LIKE or GLOB operator that
103015: ** can be optimized using inequality constraints.  Return TRUE if it is
103016: ** so and false if not.
103017: **
103018: ** In order for the operator to be optimizible, the RHS must be a string
103019: ** literal that does not begin with a wildcard.  
103020: */
103021: static int isLikeOrGlob(
103022:   Parse *pParse,    /* Parsing and code generating context */
103023:   Expr *pExpr,      /* Test this expression */
103024:   Expr **ppPrefix,  /* Pointer to TK_STRING expression with pattern prefix */
103025:   int *pisComplete, /* True if the only wildcard is % in the last character */
103026:   int *pnoCase      /* True if uppercase is equivalent to lowercase */
103027: ){
103028:   const char *z = 0;         /* String on RHS of LIKE operator */
103029:   Expr *pRight, *pLeft;      /* Right and left size of LIKE operator */
103030:   ExprList *pList;           /* List of operands to the LIKE operator */
103031:   int c;                     /* One character in z[] */
103032:   int cnt;                   /* Number of non-wildcard prefix characters */
103033:   char wc[3];                /* Wildcard characters */
103034:   sqlite3 *db = pParse->db;  /* Database connection */
103035:   sqlite3_value *pVal = 0;
103036:   int op;                    /* Opcode of pRight */
103037: 
103038:   if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, wc) ){
103039:     return 0;
103040:   }
103041: #ifdef SQLITE_EBCDIC
103042:   if( *pnoCase ) return 0;
103043: #endif
103044:   pList = pExpr->x.pList;
103045:   pLeft = pList->a[1].pExpr;
103046:   if( pLeft->op!=TK_COLUMN || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT ){
103047:     /* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator must
103048:     ** be the name of an indexed column with TEXT affinity. */
103049:     return 0;
103050:   }
103051:   assert( pLeft->iColumn!=(-1) ); /* Because IPK never has AFF_TEXT */
103052: 
103053:   pRight = pList->a[0].pExpr;
103054:   op = pRight->op;
103055:   if( op==TK_REGISTER ){
103056:     op = pRight->op2;
103057:   }
103058:   if( op==TK_VARIABLE ){
103059:     Vdbe *pReprepare = pParse->pReprepare;
103060:     int iCol = pRight->iColumn;
103061:     pVal = sqlite3VdbeGetValue(pReprepare, iCol, SQLITE_AFF_NONE);
103062:     if( pVal && sqlite3_value_type(pVal)==SQLITE_TEXT ){
103063:       z = (char *)sqlite3_value_text(pVal);
103064:     }
103065:     sqlite3VdbeSetVarmask(pParse->pVdbe, iCol);
103066:     assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER );
103067:   }else if( op==TK_STRING ){
103068:     z = pRight->u.zToken;
103069:   }
103070:   if( z ){
103071:     cnt = 0;
103072:     while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){
103073:       cnt++;
103074:     }
103075:     if( cnt!=0 && 255!=(u8)z[cnt-1] ){
103076:       Expr *pPrefix;
103077:       *pisComplete = c==wc[0] && z[cnt+1]==0;
103078:       pPrefix = sqlite3Expr(db, TK_STRING, z);
103079:       if( pPrefix ) pPrefix->u.zToken[cnt] = 0;
103080:       *ppPrefix = pPrefix;
103081:       if( op==TK_VARIABLE ){
103082:         Vdbe *v = pParse->pVdbe;
103083:         sqlite3VdbeSetVarmask(v, pRight->iColumn);
103084:         if( *pisComplete && pRight->u.zToken[1] ){
103085:           /* If the rhs of the LIKE expression is a variable, and the current
103086:           ** value of the variable means there is no need to invoke the LIKE
103087:           ** function, then no OP_Variable will be added to the program.
103088:           ** This causes problems for the sqlite3_bind_parameter_name()
103089:           ** API. To workaround them, add a dummy OP_Variable here.
103090:           */ 
103091:           int r1 = sqlite3GetTempReg(pParse);
103092:           sqlite3ExprCodeTarget(pParse, pRight, r1);
103093:           sqlite3VdbeChangeP3(v, sqlite3VdbeCurrentAddr(v)-1, 0);
103094:           sqlite3ReleaseTempReg(pParse, r1);
103095:         }
103096:       }
103097:     }else{
103098:       z = 0;
103099:     }
103100:   }
103101: 
103102:   sqlite3ValueFree(pVal);
103103:   return (z!=0);
103104: }
103105: #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
103106: 
103107: 
103108: #ifndef SQLITE_OMIT_VIRTUALTABLE
103109: /*
103110: ** Check to see if the given expression is of the form
103111: **
103112: **         column MATCH expr
103113: **
103114: ** If it is then return TRUE.  If not, return FALSE.
103115: */
103116: static int isMatchOfColumn(
103117:   Expr *pExpr      /* Test this expression */
103118: ){
103119:   ExprList *pList;
103120: 
103121:   if( pExpr->op!=TK_FUNCTION ){
103122:     return 0;
103123:   }
103124:   if( sqlite3StrICmp(pExpr->u.zToken,"match")!=0 ){
103125:     return 0;
103126:   }
103127:   pList = pExpr->x.pList;
103128:   if( pList->nExpr!=2 ){
103129:     return 0;
103130:   }
103131:   if( pList->a[1].pExpr->op != TK_COLUMN ){
103132:     return 0;
103133:   }
103134:   return 1;
103135: }
103136: #endif /* SQLITE_OMIT_VIRTUALTABLE */
103137: 
103138: /*
103139: ** If the pBase expression originated in the ON or USING clause of
103140: ** a join, then transfer the appropriate markings over to derived.
103141: */
103142: static void transferJoinMarkings(Expr *pDerived, Expr *pBase){
103143:   pDerived->flags |= pBase->flags & EP_FromJoin;
103144:   pDerived->iRightJoinTable = pBase->iRightJoinTable;
103145: }
103146: 
103147: #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
103148: /*
103149: ** Analyze a term that consists of two or more OR-connected
103150: ** subterms.  So in:
103151: **
103152: **     ... WHERE  (a=5) AND (b=7 OR c=9 OR d=13) AND (d=13)
103153: **                          ^^^^^^^^^^^^^^^^^^^^
103154: **
103155: ** This routine analyzes terms such as the middle term in the above example.
103156: ** A WhereOrTerm object is computed and attached to the term under
103157: ** analysis, regardless of the outcome of the analysis.  Hence:
103158: **
103159: **     WhereTerm.wtFlags   |=  TERM_ORINFO
103160: **     WhereTerm.u.pOrInfo  =  a dynamically allocated WhereOrTerm object
103161: **
103162: ** The term being analyzed must have two or more of OR-connected subterms.
103163: ** A single subterm might be a set of AND-connected sub-subterms.
103164: ** Examples of terms under analysis:
103165: **
103166: **     (A)     t1.x=t2.y OR t1.x=t2.z OR t1.y=15 OR t1.z=t3.a+5
103167: **     (B)     x=expr1 OR expr2=x OR x=expr3
103168: **     (C)     t1.x=t2.y OR (t1.x=t2.z AND t1.y=15)
103169: **     (D)     x=expr1 OR (y>11 AND y<22 AND z LIKE '*hello*')
103170: **     (E)     (p.a=1 AND q.b=2 AND r.c=3) OR (p.x=4 AND q.y=5 AND r.z=6)
103171: **
103172: ** CASE 1:
103173: **
103174: ** If all subterms are of the form T.C=expr for some single column of C
103175: ** a single table T (as shown in example B above) then create a new virtual
103176: ** term that is an equivalent IN expression.  In other words, if the term
103177: ** being analyzed is:
103178: **
103179: **      x = expr1  OR  expr2 = x  OR  x = expr3
103180: **
103181: ** then create a new virtual term like this:
103182: **
103183: **      x IN (expr1,expr2,expr3)
103184: **
103185: ** CASE 2:
103186: **
103187: ** If all subterms are indexable by a single table T, then set
103188: **
103189: **     WhereTerm.eOperator              =  WO_OR
103190: **     WhereTerm.u.pOrInfo->indexable  |=  the cursor number for table T
103191: **
103192: ** A subterm is "indexable" if it is of the form
103193: ** "T.C <op> <expr>" where C is any column of table T and 
103194: ** <op> is one of "=", "<", "<=", ">", ">=", "IS NULL", or "IN".
103195: ** A subterm is also indexable if it is an AND of two or more
103196: ** subsubterms at least one of which is indexable.  Indexable AND 
103197: ** subterms have their eOperator set to WO_AND and they have
103198: ** u.pAndInfo set to a dynamically allocated WhereAndTerm object.
103199: **
103200: ** From another point of view, "indexable" means that the subterm could
103201: ** potentially be used with an index if an appropriate index exists.
103202: ** This analysis does not consider whether or not the index exists; that
103203: ** is something the bestIndex() routine will determine.  This analysis
103204: ** only looks at whether subterms appropriate for indexing exist.
103205: **
103206: ** All examples A through E above all satisfy case 2.  But if a term
103207: ** also statisfies case 1 (such as B) we know that the optimizer will
103208: ** always prefer case 1, so in that case we pretend that case 2 is not
103209: ** satisfied.
103210: **
103211: ** It might be the case that multiple tables are indexable.  For example,
103212: ** (E) above is indexable on tables P, Q, and R.
103213: **
103214: ** Terms that satisfy case 2 are candidates for lookup by using
103215: ** separate indices to find rowids for each subterm and composing
103216: ** the union of all rowids using a RowSet object.  This is similar
103217: ** to "bitmap indices" in other database engines.
103218: **
103219: ** OTHERWISE:
103220: **
103221: ** If neither case 1 nor case 2 apply, then leave the eOperator set to
103222: ** zero.  This term is not useful for search.
103223: */
103224: static void exprAnalyzeOrTerm(
103225:   SrcList *pSrc,            /* the FROM clause */
103226:   WhereClause *pWC,         /* the complete WHERE clause */
103227:   int idxTerm               /* Index of the OR-term to be analyzed */
103228: ){
103229:   Parse *pParse = pWC->pParse;            /* Parser context */
103230:   sqlite3 *db = pParse->db;               /* Database connection */
103231:   WhereTerm *pTerm = &pWC->a[idxTerm];    /* The term to be analyzed */
103232:   Expr *pExpr = pTerm->pExpr;             /* The expression of the term */
103233:   WhereMaskSet *pMaskSet = pWC->pMaskSet; /* Table use masks */
103234:   int i;                                  /* Loop counters */
103235:   WhereClause *pOrWc;       /* Breakup of pTerm into subterms */
103236:   WhereTerm *pOrTerm;       /* A Sub-term within the pOrWc */
103237:   WhereOrInfo *pOrInfo;     /* Additional information associated with pTerm */
103238:   Bitmask chngToIN;         /* Tables that might satisfy case 1 */
103239:   Bitmask indexable;        /* Tables that are indexable, satisfying case 2 */
103240: 
103241:   /*
103242:   ** Break the OR clause into its separate subterms.  The subterms are
103243:   ** stored in a WhereClause structure containing within the WhereOrInfo
103244:   ** object that is attached to the original OR clause term.
103245:   */
103246:   assert( (pTerm->wtFlags & (TERM_DYNAMIC|TERM_ORINFO|TERM_ANDINFO))==0 );
103247:   assert( pExpr->op==TK_OR );
103248:   pTerm->u.pOrInfo = pOrInfo = sqlite3DbMallocZero(db, sizeof(*pOrInfo));
103249:   if( pOrInfo==0 ) return;
103250:   pTerm->wtFlags |= TERM_ORINFO;
103251:   pOrWc = &pOrInfo->wc;
103252:   whereClauseInit(pOrWc, pWC->pParse, pMaskSet, pWC->wctrlFlags);
103253:   whereSplit(pOrWc, pExpr, TK_OR);
103254:   exprAnalyzeAll(pSrc, pOrWc);
103255:   if( db->mallocFailed ) return;
103256:   assert( pOrWc->nTerm>=2 );
103257: 
103258:   /*
103259:   ** Compute the set of tables that might satisfy cases 1 or 2.
103260:   */
103261:   indexable = ~(Bitmask)0;
103262:   chngToIN = ~(pWC->vmask);
103263:   for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0 && indexable; i--, pOrTerm++){
103264:     if( (pOrTerm->eOperator & WO_SINGLE)==0 ){
103265:       WhereAndInfo *pAndInfo;
103266:       assert( pOrTerm->eOperator==0 );
103267:       assert( (pOrTerm->wtFlags & (TERM_ANDINFO|TERM_ORINFO))==0 );
103268:       chngToIN = 0;
103269:       pAndInfo = sqlite3DbMallocRaw(db, sizeof(*pAndInfo));
103270:       if( pAndInfo ){
103271:         WhereClause *pAndWC;
103272:         WhereTerm *pAndTerm;
103273:         int j;
103274:         Bitmask b = 0;
103275:         pOrTerm->u.pAndInfo = pAndInfo;
103276:         pOrTerm->wtFlags |= TERM_ANDINFO;
103277:         pOrTerm->eOperator = WO_AND;
103278:         pAndWC = &pAndInfo->wc;
103279:         whereClauseInit(pAndWC, pWC->pParse, pMaskSet, pWC->wctrlFlags);
103280:         whereSplit(pAndWC, pOrTerm->pExpr, TK_AND);
103281:         exprAnalyzeAll(pSrc, pAndWC);
103282:         pAndWC->pOuter = pWC;
103283:         testcase( db->mallocFailed );
103284:         if( !db->mallocFailed ){
103285:           for(j=0, pAndTerm=pAndWC->a; j<pAndWC->nTerm; j++, pAndTerm++){
103286:             assert( pAndTerm->pExpr );
103287:             if( allowedOp(pAndTerm->pExpr->op) ){
103288:               b |= getMask(pMaskSet, pAndTerm->leftCursor);
103289:             }
103290:           }
103291:         }
103292:         indexable &= b;
103293:       }
103294:     }else if( pOrTerm->wtFlags & TERM_COPIED ){
103295:       /* Skip this term for now.  We revisit it when we process the
103296:       ** corresponding TERM_VIRTUAL term */
103297:     }else{
103298:       Bitmask b;
103299:       b = getMask(pMaskSet, pOrTerm->leftCursor);
103300:       if( pOrTerm->wtFlags & TERM_VIRTUAL ){
103301:         WhereTerm *pOther = &pOrWc->a[pOrTerm->iParent];
103302:         b |= getMask(pMaskSet, pOther->leftCursor);
103303:       }
103304:       indexable &= b;
103305:       if( pOrTerm->eOperator!=WO_EQ ){
103306:         chngToIN = 0;
103307:       }else{
103308:         chngToIN &= b;
103309:       }
103310:     }
103311:   }
103312: 
103313:   /*
103314:   ** Record the set of tables that satisfy case 2.  The set might be
103315:   ** empty.
103316:   */
103317:   pOrInfo->indexable = indexable;
103318:   pTerm->eOperator = indexable==0 ? 0 : WO_OR;
103319: 
103320:   /*
103321:   ** chngToIN holds a set of tables that *might* satisfy case 1.  But
103322:   ** we have to do some additional checking to see if case 1 really
103323:   ** is satisfied.
103324:   **
103325:   ** chngToIN will hold either 0, 1, or 2 bits.  The 0-bit case means
103326:   ** that there is no possibility of transforming the OR clause into an
103327:   ** IN operator because one or more terms in the OR clause contain
103328:   ** something other than == on a column in the single table.  The 1-bit
103329:   ** case means that every term of the OR clause is of the form
103330:   ** "table.column=expr" for some single table.  The one bit that is set
103331:   ** will correspond to the common table.  We still need to check to make
103332:   ** sure the same column is used on all terms.  The 2-bit case is when
103333:   ** the all terms are of the form "table1.column=table2.column".  It
103334:   ** might be possible to form an IN operator with either table1.column
103335:   ** or table2.column as the LHS if either is common to every term of
103336:   ** the OR clause.
103337:   **
103338:   ** Note that terms of the form "table.column1=table.column2" (the
103339:   ** same table on both sizes of the ==) cannot be optimized.
103340:   */
103341:   if( chngToIN ){
103342:     int okToChngToIN = 0;     /* True if the conversion to IN is valid */
103343:     int iColumn = -1;         /* Column index on lhs of IN operator */
103344:     int iCursor = -1;         /* Table cursor common to all terms */
103345:     int j = 0;                /* Loop counter */
103346: 
103347:     /* Search for a table and column that appears on one side or the
103348:     ** other of the == operator in every subterm.  That table and column
103349:     ** will be recorded in iCursor and iColumn.  There might not be any
103350:     ** such table and column.  Set okToChngToIN if an appropriate table
103351:     ** and column is found but leave okToChngToIN false if not found.
103352:     */
103353:     for(j=0; j<2 && !okToChngToIN; j++){
103354:       pOrTerm = pOrWc->a;
103355:       for(i=pOrWc->nTerm-1; i>=0; i--, pOrTerm++){
103356:         assert( pOrTerm->eOperator==WO_EQ );
103357:         pOrTerm->wtFlags &= ~TERM_OR_OK;
103358:         if( pOrTerm->leftCursor==iCursor ){
103359:           /* This is the 2-bit case and we are on the second iteration and
103360:           ** current term is from the first iteration.  So skip this term. */
103361:           assert( j==1 );
103362:           continue;
103363:         }
103364:         if( (chngToIN & getMask(pMaskSet, pOrTerm->leftCursor))==0 ){
103365:           /* This term must be of the form t1.a==t2.b where t2 is in the
103366:           ** chngToIN set but t1 is not.  This term will be either preceeded
103367:           ** or follwed by an inverted copy (t2.b==t1.a).  Skip this term 
103368:           ** and use its inversion. */
103369:           testcase( pOrTerm->wtFlags & TERM_COPIED );
103370:           testcase( pOrTerm->wtFlags & TERM_VIRTUAL );
103371:           assert( pOrTerm->wtFlags & (TERM_COPIED|TERM_VIRTUAL) );
103372:           continue;
103373:         }
103374:         iColumn = pOrTerm->u.leftColumn;
103375:         iCursor = pOrTerm->leftCursor;
103376:         break;
103377:       }
103378:       if( i<0 ){
103379:         /* No candidate table+column was found.  This can only occur
103380:         ** on the second iteration */
103381:         assert( j==1 );
103382:         assert( (chngToIN&(chngToIN-1))==0 );
103383:         assert( chngToIN==getMask(pMaskSet, iCursor) );
103384:         break;
103385:       }
103386:       testcase( j==1 );
103387: 
103388:       /* We have found a candidate table and column.  Check to see if that
103389:       ** table and column is common to every term in the OR clause */
103390:       okToChngToIN = 1;
103391:       for(; i>=0 && okToChngToIN; i--, pOrTerm++){
103392:         assert( pOrTerm->eOperator==WO_EQ );
103393:         if( pOrTerm->leftCursor!=iCursor ){
103394:           pOrTerm->wtFlags &= ~TERM_OR_OK;
103395:         }else if( pOrTerm->u.leftColumn!=iColumn ){
103396:           okToChngToIN = 0;
103397:         }else{
103398:           int affLeft, affRight;
103399:           /* If the right-hand side is also a column, then the affinities
103400:           ** of both right and left sides must be such that no type
103401:           ** conversions are required on the right.  (Ticket #2249)
103402:           */
103403:           affRight = sqlite3ExprAffinity(pOrTerm->pExpr->pRight);
103404:           affLeft = sqlite3ExprAffinity(pOrTerm->pExpr->pLeft);
103405:           if( affRight!=0 && affRight!=affLeft ){
103406:             okToChngToIN = 0;
103407:           }else{
103408:             pOrTerm->wtFlags |= TERM_OR_OK;
103409:           }
103410:         }
103411:       }
103412:     }
103413: 
103414:     /* At this point, okToChngToIN is true if original pTerm satisfies
103415:     ** case 1.  In that case, construct a new virtual term that is 
103416:     ** pTerm converted into an IN operator.
103417:     **
103418:     ** EV: R-00211-15100
103419:     */
103420:     if( okToChngToIN ){
103421:       Expr *pDup;            /* A transient duplicate expression */
103422:       ExprList *pList = 0;   /* The RHS of the IN operator */
103423:       Expr *pLeft = 0;       /* The LHS of the IN operator */
103424:       Expr *pNew;            /* The complete IN operator */
103425: 
103426:       for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0; i--, pOrTerm++){
103427:         if( (pOrTerm->wtFlags & TERM_OR_OK)==0 ) continue;
103428:         assert( pOrTerm->eOperator==WO_EQ );
103429:         assert( pOrTerm->leftCursor==iCursor );
103430:         assert( pOrTerm->u.leftColumn==iColumn );
103431:         pDup = sqlite3ExprDup(db, pOrTerm->pExpr->pRight, 0);
103432:         pList = sqlite3ExprListAppend(pWC->pParse, pList, pDup);
103433:         pLeft = pOrTerm->pExpr->pLeft;
103434:       }
103435:       assert( pLeft!=0 );
103436:       pDup = sqlite3ExprDup(db, pLeft, 0);
103437:       pNew = sqlite3PExpr(pParse, TK_IN, pDup, 0, 0);
103438:       if( pNew ){
103439:         int idxNew;
103440:         transferJoinMarkings(pNew, pExpr);
103441:         assert( !ExprHasProperty(pNew, EP_xIsSelect) );
103442:         pNew->x.pList = pList;
103443:         idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
103444:         testcase( idxNew==0 );
103445:         exprAnalyze(pSrc, pWC, idxNew);
103446:         pTerm = &pWC->a[idxTerm];
103447:         pWC->a[idxNew].iParent = idxTerm;
103448:         pTerm->nChild = 1;
103449:       }else{
103450:         sqlite3ExprListDelete(db, pList);
103451:       }
103452:       pTerm->eOperator = WO_NOOP;  /* case 1 trumps case 2 */
103453:     }
103454:   }
103455: }
103456: #endif /* !SQLITE_OMIT_OR_OPTIMIZATION && !SQLITE_OMIT_SUBQUERY */
103457: 
103458: 
103459: /*
103460: ** The input to this routine is an WhereTerm structure with only the
103461: ** "pExpr" field filled in.  The job of this routine is to analyze the
103462: ** subexpression and populate all the other fields of the WhereTerm
103463: ** structure.
103464: **
103465: ** If the expression is of the form "<expr> <op> X" it gets commuted
103466: ** to the standard form of "X <op> <expr>".
103467: **
103468: ** If the expression is of the form "X <op> Y" where both X and Y are
103469: ** columns, then the original expression is unchanged and a new virtual
103470: ** term of the form "Y <op> X" is added to the WHERE clause and
103471: ** analyzed separately.  The original term is marked with TERM_COPIED
103472: ** and the new term is marked with TERM_DYNAMIC (because it's pExpr
103473: ** needs to be freed with the WhereClause) and TERM_VIRTUAL (because it
103474: ** is a commuted copy of a prior term.)  The original term has nChild=1
103475: ** and the copy has idxParent set to the index of the original term.
103476: */
103477: static void exprAnalyze(
103478:   SrcList *pSrc,            /* the FROM clause */
103479:   WhereClause *pWC,         /* the WHERE clause */
103480:   int idxTerm               /* Index of the term to be analyzed */
103481: ){
103482:   WhereTerm *pTerm;                /* The term to be analyzed */
103483:   WhereMaskSet *pMaskSet;          /* Set of table index masks */
103484:   Expr *pExpr;                     /* The expression to be analyzed */
103485:   Bitmask prereqLeft;              /* Prerequesites of the pExpr->pLeft */
103486:   Bitmask prereqAll;               /* Prerequesites of pExpr */
103487:   Bitmask extraRight = 0;          /* Extra dependencies on LEFT JOIN */
103488:   Expr *pStr1 = 0;                 /* RHS of LIKE/GLOB operator */
103489:   int isComplete = 0;              /* RHS of LIKE/GLOB ends with wildcard */
103490:   int noCase = 0;                  /* LIKE/GLOB distinguishes case */
103491:   int op;                          /* Top-level operator.  pExpr->op */
103492:   Parse *pParse = pWC->pParse;     /* Parsing context */
103493:   sqlite3 *db = pParse->db;        /* Database connection */
103494: 
103495:   if( db->mallocFailed ){
103496:     return;
103497:   }
103498:   pTerm = &pWC->a[idxTerm];
103499:   pMaskSet = pWC->pMaskSet;
103500:   pExpr = pTerm->pExpr;
103501:   prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft);
103502:   op = pExpr->op;
103503:   if( op==TK_IN ){
103504:     assert( pExpr->pRight==0 );
103505:     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
103506:       pTerm->prereqRight = exprSelectTableUsage(pMaskSet, pExpr->x.pSelect);
103507:     }else{
103508:       pTerm->prereqRight = exprListTableUsage(pMaskSet, pExpr->x.pList);
103509:     }
103510:   }else if( op==TK_ISNULL ){
103511:     pTerm->prereqRight = 0;
103512:   }else{
103513:     pTerm->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight);
103514:   }
103515:   prereqAll = exprTableUsage(pMaskSet, pExpr);
103516:   if( ExprHasProperty(pExpr, EP_FromJoin) ){
103517:     Bitmask x = getMask(pMaskSet, pExpr->iRightJoinTable);
103518:     prereqAll |= x;
103519:     extraRight = x-1;  /* ON clause terms may not be used with an index
103520:                        ** on left table of a LEFT JOIN.  Ticket #3015 */
103521:   }
103522:   pTerm->prereqAll = prereqAll;
103523:   pTerm->leftCursor = -1;
103524:   pTerm->iParent = -1;
103525:   pTerm->eOperator = 0;
103526:   if( allowedOp(op) && (pTerm->prereqRight & prereqLeft)==0 ){
103527:     Expr *pLeft = pExpr->pLeft;
103528:     Expr *pRight = pExpr->pRight;
103529:     if( pLeft->op==TK_COLUMN ){
103530:       pTerm->leftCursor = pLeft->iTable;
103531:       pTerm->u.leftColumn = pLeft->iColumn;
103532:       pTerm->eOperator = operatorMask(op);
103533:     }
103534:     if( pRight && pRight->op==TK_COLUMN ){
103535:       WhereTerm *pNew;
103536:       Expr *pDup;
103537:       if( pTerm->leftCursor>=0 ){
103538:         int idxNew;
103539:         pDup = sqlite3ExprDup(db, pExpr, 0);
103540:         if( db->mallocFailed ){
103541:           sqlite3ExprDelete(db, pDup);
103542:           return;
103543:         }
103544:         idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);
103545:         if( idxNew==0 ) return;
103546:         pNew = &pWC->a[idxNew];
103547:         pNew->iParent = idxTerm;
103548:         pTerm = &pWC->a[idxTerm];
103549:         pTerm->nChild = 1;
103550:         pTerm->wtFlags |= TERM_COPIED;
103551:       }else{
103552:         pDup = pExpr;
103553:         pNew = pTerm;
103554:       }
103555:       exprCommute(pParse, pDup);
103556:       pLeft = pDup->pLeft;
103557:       pNew->leftCursor = pLeft->iTable;
103558:       pNew->u.leftColumn = pLeft->iColumn;
103559:       testcase( (prereqLeft | extraRight) != prereqLeft );
103560:       pNew->prereqRight = prereqLeft | extraRight;
103561:       pNew->prereqAll = prereqAll;
103562:       pNew->eOperator = operatorMask(pDup->op);
103563:     }
103564:   }
103565: 
103566: #ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION
103567:   /* If a term is the BETWEEN operator, create two new virtual terms
103568:   ** that define the range that the BETWEEN implements.  For example:
103569:   **
103570:   **      a BETWEEN b AND c
103571:   **
103572:   ** is converted into:
103573:   **
103574:   **      (a BETWEEN b AND c) AND (a>=b) AND (a<=c)
103575:   **
103576:   ** The two new terms are added onto the end of the WhereClause object.
103577:   ** The new terms are "dynamic" and are children of the original BETWEEN
103578:   ** term.  That means that if the BETWEEN term is coded, the children are
103579:   ** skipped.  Or, if the children are satisfied by an index, the original
103580:   ** BETWEEN term is skipped.
103581:   */
103582:   else if( pExpr->op==TK_BETWEEN && pWC->op==TK_AND ){
103583:     ExprList *pList = pExpr->x.pList;
103584:     int i;
103585:     static const u8 ops[] = {TK_GE, TK_LE};
103586:     assert( pList!=0 );
103587:     assert( pList->nExpr==2 );
103588:     for(i=0; i<2; i++){
103589:       Expr *pNewExpr;
103590:       int idxNew;
103591:       pNewExpr = sqlite3PExpr(pParse, ops[i], 
103592:                              sqlite3ExprDup(db, pExpr->pLeft, 0),
103593:                              sqlite3ExprDup(db, pList->a[i].pExpr, 0), 0);
103594:       idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
103595:       testcase( idxNew==0 );
103596:       exprAnalyze(pSrc, pWC, idxNew);
103597:       pTerm = &pWC->a[idxTerm];
103598:       pWC->a[idxNew].iParent = idxTerm;
103599:     }
103600:     pTerm->nChild = 2;
103601:   }
103602: #endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */
103603: 
103604: #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
103605:   /* Analyze a term that is composed of two or more subterms connected by
103606:   ** an OR operator.
103607:   */
103608:   else if( pExpr->op==TK_OR ){
103609:     assert( pWC->op==TK_AND );
103610:     exprAnalyzeOrTerm(pSrc, pWC, idxTerm);
103611:     pTerm = &pWC->a[idxTerm];
103612:   }
103613: #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
103614: 
103615: #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
103616:   /* Add constraints to reduce the search space on a LIKE or GLOB
103617:   ** operator.
103618:   **
103619:   ** A like pattern of the form "x LIKE 'abc%'" is changed into constraints
103620:   **
103621:   **          x>='abc' AND x<'abd' AND x LIKE 'abc%'
103622:   **
103623:   ** The last character of the prefix "abc" is incremented to form the
103624:   ** termination condition "abd".
103625:   */
103626:   if( pWC->op==TK_AND 
103627:    && isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase)
103628:   ){
103629:     Expr *pLeft;       /* LHS of LIKE/GLOB operator */
103630:     Expr *pStr2;       /* Copy of pStr1 - RHS of LIKE/GLOB operator */
103631:     Expr *pNewExpr1;
103632:     Expr *pNewExpr2;
103633:     int idxNew1;
103634:     int idxNew2;
103635:     CollSeq *pColl;    /* Collating sequence to use */
103636: 
103637:     pLeft = pExpr->x.pList->a[1].pExpr;
103638:     pStr2 = sqlite3ExprDup(db, pStr1, 0);
103639:     if( !db->mallocFailed ){
103640:       u8 c, *pC;       /* Last character before the first wildcard */
103641:       pC = (u8*)&pStr2->u.zToken[sqlite3Strlen30(pStr2->u.zToken)-1];
103642:       c = *pC;
103643:       if( noCase ){
103644:         /* The point is to increment the last character before the first
103645:         ** wildcard.  But if we increment '@', that will push it into the
103646:         ** alphabetic range where case conversions will mess up the 
103647:         ** inequality.  To avoid this, make sure to also run the full
103648:         ** LIKE on all candidate expressions by clearing the isComplete flag
103649:         */
103650:         if( c=='A'-1 ) isComplete = 0;   /* EV: R-64339-08207 */
103651: 
103652: 
103653:         c = sqlite3UpperToLower[c];
103654:       }
103655:       *pC = c + 1;
103656:     }
103657:     pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, noCase ? "NOCASE" : "BINARY",0);
103658:     pNewExpr1 = sqlite3PExpr(pParse, TK_GE, 
103659:                      sqlite3ExprSetColl(sqlite3ExprDup(db,pLeft,0), pColl),
103660:                      pStr1, 0);
103661:     idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC);
103662:     testcase( idxNew1==0 );
103663:     exprAnalyze(pSrc, pWC, idxNew1);
103664:     pNewExpr2 = sqlite3PExpr(pParse, TK_LT,
103665:                      sqlite3ExprSetColl(sqlite3ExprDup(db,pLeft,0), pColl),
103666:                      pStr2, 0);
103667:     idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
103668:     testcase( idxNew2==0 );
103669:     exprAnalyze(pSrc, pWC, idxNew2);
103670:     pTerm = &pWC->a[idxTerm];
103671:     if( isComplete ){
103672:       pWC->a[idxNew1].iParent = idxTerm;
103673:       pWC->a[idxNew2].iParent = idxTerm;
103674:       pTerm->nChild = 2;
103675:     }
103676:   }
103677: #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
103678: 
103679: #ifndef SQLITE_OMIT_VIRTUALTABLE
103680:   /* Add a WO_MATCH auxiliary term to the constraint set if the
103681:   ** current expression is of the form:  column MATCH expr.
103682:   ** This information is used by the xBestIndex methods of
103683:   ** virtual tables.  The native query optimizer does not attempt
103684:   ** to do anything with MATCH functions.
103685:   */
103686:   if( isMatchOfColumn(pExpr) ){
103687:     int idxNew;
103688:     Expr *pRight, *pLeft;
103689:     WhereTerm *pNewTerm;
103690:     Bitmask prereqColumn, prereqExpr;
103691: 
103692:     pRight = pExpr->x.pList->a[0].pExpr;
103693:     pLeft = pExpr->x.pList->a[1].pExpr;
103694:     prereqExpr = exprTableUsage(pMaskSet, pRight);
103695:     prereqColumn = exprTableUsage(pMaskSet, pLeft);
103696:     if( (prereqExpr & prereqColumn)==0 ){
103697:       Expr *pNewExpr;
103698:       pNewExpr = sqlite3PExpr(pParse, TK_MATCH, 
103699:                               0, sqlite3ExprDup(db, pRight, 0), 0);
103700:       idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
103701:       testcase( idxNew==0 );
103702:       pNewTerm = &pWC->a[idxNew];
103703:       pNewTerm->prereqRight = prereqExpr;
103704:       pNewTerm->leftCursor = pLeft->iTable;
103705:       pNewTerm->u.leftColumn = pLeft->iColumn;
103706:       pNewTerm->eOperator = WO_MATCH;
103707:       pNewTerm->iParent = idxTerm;
103708:       pTerm = &pWC->a[idxTerm];
103709:       pTerm->nChild = 1;
103710:       pTerm->wtFlags |= TERM_COPIED;
103711:       pNewTerm->prereqAll = pTerm->prereqAll;
103712:     }
103713:   }
103714: #endif /* SQLITE_OMIT_VIRTUALTABLE */
103715: 
103716: #ifdef SQLITE_ENABLE_STAT3
103717:   /* When sqlite_stat3 histogram data is available an operator of the
103718:   ** form "x IS NOT NULL" can sometimes be evaluated more efficiently
103719:   ** as "x>NULL" if x is not an INTEGER PRIMARY KEY.  So construct a
103720:   ** virtual term of that form.
103721:   **
103722:   ** Note that the virtual term must be tagged with TERM_VNULL.  This
103723:   ** TERM_VNULL tag will suppress the not-null check at the beginning
103724:   ** of the loop.  Without the TERM_VNULL flag, the not-null check at
103725:   ** the start of the loop will prevent any results from being returned.
103726:   */
103727:   if( pExpr->op==TK_NOTNULL
103728:    && pExpr->pLeft->op==TK_COLUMN
103729:    && pExpr->pLeft->iColumn>=0
103730:   ){
103731:     Expr *pNewExpr;
103732:     Expr *pLeft = pExpr->pLeft;
103733:     int idxNew;
103734:     WhereTerm *pNewTerm;
103735: 
103736:     pNewExpr = sqlite3PExpr(pParse, TK_GT,
103737:                             sqlite3ExprDup(db, pLeft, 0),
103738:                             sqlite3PExpr(pParse, TK_NULL, 0, 0, 0), 0);
103739: 
103740:     idxNew = whereClauseInsert(pWC, pNewExpr,
103741:                               TERM_VIRTUAL|TERM_DYNAMIC|TERM_VNULL);
103742:     if( idxNew ){
103743:       pNewTerm = &pWC->a[idxNew];
103744:       pNewTerm->prereqRight = 0;
103745:       pNewTerm->leftCursor = pLeft->iTable;
103746:       pNewTerm->u.leftColumn = pLeft->iColumn;
103747:       pNewTerm->eOperator = WO_GT;
103748:       pNewTerm->iParent = idxTerm;
103749:       pTerm = &pWC->a[idxTerm];
103750:       pTerm->nChild = 1;
103751:       pTerm->wtFlags |= TERM_COPIED;
103752:       pNewTerm->prereqAll = pTerm->prereqAll;
103753:     }
103754:   }
103755: #endif /* SQLITE_ENABLE_STAT */
103756: 
103757:   /* Prevent ON clause terms of a LEFT JOIN from being used to drive
103758:   ** an index for tables to the left of the join.
103759:   */
103760:   pTerm->prereqRight |= extraRight;
103761: }
103762: 
103763: /*
103764: ** Return TRUE if any of the expressions in pList->a[iFirst...] contain
103765: ** a reference to any table other than the iBase table.
103766: */
103767: static int referencesOtherTables(
103768:   ExprList *pList,          /* Search expressions in ths list */
103769:   WhereMaskSet *pMaskSet,   /* Mapping from tables to bitmaps */
103770:   int iFirst,               /* Be searching with the iFirst-th expression */
103771:   int iBase                 /* Ignore references to this table */
103772: ){
103773:   Bitmask allowed = ~getMask(pMaskSet, iBase);
103774:   while( iFirst<pList->nExpr ){
103775:     if( (exprTableUsage(pMaskSet, pList->a[iFirst++].pExpr)&allowed)!=0 ){
103776:       return 1;
103777:     }
103778:   }
103779:   return 0;
103780: }
103781: 
103782: /*
103783: ** This function searches the expression list passed as the second argument
103784: ** for an expression of type TK_COLUMN that refers to the same column and
103785: ** uses the same collation sequence as the iCol'th column of index pIdx.
103786: ** Argument iBase is the cursor number used for the table that pIdx refers
103787: ** to.
103788: **
103789: ** If such an expression is found, its index in pList->a[] is returned. If
103790: ** no expression is found, -1 is returned.
103791: */
103792: static int findIndexCol(
103793:   Parse *pParse,                  /* Parse context */
103794:   ExprList *pList,                /* Expression list to search */
103795:   int iBase,                      /* Cursor for table associated with pIdx */
103796:   Index *pIdx,                    /* Index to match column of */
103797:   int iCol                        /* Column of index to match */
103798: ){
103799:   int i;
103800:   const char *zColl = pIdx->azColl[iCol];
103801: 
103802:   for(i=0; i<pList->nExpr; i++){
103803:     Expr *p = pList->a[i].pExpr;
103804:     if( p->op==TK_COLUMN
103805:      && p->iColumn==pIdx->aiColumn[iCol]
103806:      && p->iTable==iBase
103807:     ){
103808:       CollSeq *pColl = sqlite3ExprCollSeq(pParse, p);
103809:       if( ALWAYS(pColl) && 0==sqlite3StrICmp(pColl->zName, zColl) ){
103810:         return i;
103811:       }
103812:     }
103813:   }
103814: 
103815:   return -1;
103816: }
103817: 
103818: /*
103819: ** This routine determines if pIdx can be used to assist in processing a
103820: ** DISTINCT qualifier. In other words, it tests whether or not using this
103821: ** index for the outer loop guarantees that rows with equal values for
103822: ** all expressions in the pDistinct list are delivered grouped together.
103823: **
103824: ** For example, the query 
103825: **
103826: **   SELECT DISTINCT a, b, c FROM tbl WHERE a = ?
103827: **
103828: ** can benefit from any index on columns "b" and "c".
103829: */
103830: static int isDistinctIndex(
103831:   Parse *pParse,                  /* Parsing context */
103832:   WhereClause *pWC,               /* The WHERE clause */
103833:   Index *pIdx,                    /* The index being considered */
103834:   int base,                       /* Cursor number for the table pIdx is on */
103835:   ExprList *pDistinct,            /* The DISTINCT expressions */
103836:   int nEqCol                      /* Number of index columns with == */
103837: ){
103838:   Bitmask mask = 0;               /* Mask of unaccounted for pDistinct exprs */
103839:   int i;                          /* Iterator variable */
103840: 
103841:   if( pIdx->zName==0 || pDistinct==0 || pDistinct->nExpr>=BMS ) return 0;
103842:   testcase( pDistinct->nExpr==BMS-1 );
103843: 
103844:   /* Loop through all the expressions in the distinct list. If any of them
103845:   ** are not simple column references, return early. Otherwise, test if the
103846:   ** WHERE clause contains a "col=X" clause. If it does, the expression
103847:   ** can be ignored. If it does not, and the column does not belong to the
103848:   ** same table as index pIdx, return early. Finally, if there is no
103849:   ** matching "col=X" expression and the column is on the same table as pIdx,
103850:   ** set the corresponding bit in variable mask.
103851:   */
103852:   for(i=0; i<pDistinct->nExpr; i++){
103853:     WhereTerm *pTerm;
103854:     Expr *p = pDistinct->a[i].pExpr;
103855:     if( p->op!=TK_COLUMN ) return 0;
103856:     pTerm = findTerm(pWC, p->iTable, p->iColumn, ~(Bitmask)0, WO_EQ, 0);
103857:     if( pTerm ){
103858:       Expr *pX = pTerm->pExpr;
103859:       CollSeq *p1 = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
103860:       CollSeq *p2 = sqlite3ExprCollSeq(pParse, p);
103861:       if( p1==p2 ) continue;
103862:     }
103863:     if( p->iTable!=base ) return 0;
103864:     mask |= (((Bitmask)1) << i);
103865:   }
103866: 
103867:   for(i=nEqCol; mask && i<pIdx->nColumn; i++){
103868:     int iExpr = findIndexCol(pParse, pDistinct, base, pIdx, i);
103869:     if( iExpr<0 ) break;
103870:     mask &= ~(((Bitmask)1) << iExpr);
103871:   }
103872: 
103873:   return (mask==0);
103874: }
103875: 
103876: 
103877: /*
103878: ** Return true if the DISTINCT expression-list passed as the third argument
103879: ** is redundant. A DISTINCT list is redundant if the database contains a
103880: ** UNIQUE index that guarantees that the result of the query will be distinct
103881: ** anyway.
103882: */
103883: static int isDistinctRedundant(
103884:   Parse *pParse,
103885:   SrcList *pTabList,
103886:   WhereClause *pWC,
103887:   ExprList *pDistinct
103888: ){
103889:   Table *pTab;
103890:   Index *pIdx;
103891:   int i;                          
103892:   int iBase;
103893: 
103894:   /* If there is more than one table or sub-select in the FROM clause of
103895:   ** this query, then it will not be possible to show that the DISTINCT 
103896:   ** clause is redundant. */
103897:   if( pTabList->nSrc!=1 ) return 0;
103898:   iBase = pTabList->a[0].iCursor;
103899:   pTab = pTabList->a[0].pTab;
103900: 
103901:   /* If any of the expressions is an IPK column on table iBase, then return 
103902:   ** true. Note: The (p->iTable==iBase) part of this test may be false if the
103903:   ** current SELECT is a correlated sub-query.
103904:   */
103905:   for(i=0; i<pDistinct->nExpr; i++){
103906:     Expr *p = pDistinct->a[i].pExpr;
103907:     if( p->op==TK_COLUMN && p->iTable==iBase && p->iColumn<0 ) return 1;
103908:   }
103909: 
103910:   /* Loop through all indices on the table, checking each to see if it makes
103911:   ** the DISTINCT qualifier redundant. It does so if:
103912:   **
103913:   **   1. The index is itself UNIQUE, and
103914:   **
103915:   **   2. All of the columns in the index are either part of the pDistinct
103916:   **      list, or else the WHERE clause contains a term of the form "col=X",
103917:   **      where X is a constant value. The collation sequences of the
103918:   **      comparison and select-list expressions must match those of the index.
103919:   */
103920:   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
103921:     if( pIdx->onError==OE_None ) continue;
103922:     for(i=0; i<pIdx->nColumn; i++){
103923:       int iCol = pIdx->aiColumn[i];
103924:       if( 0==findTerm(pWC, iBase, iCol, ~(Bitmask)0, WO_EQ, pIdx) 
103925:        && 0>findIndexCol(pParse, pDistinct, iBase, pIdx, i)
103926:       ){
103927:         break;
103928:       }
103929:     }
103930:     if( i==pIdx->nColumn ){
103931:       /* This index implies that the DISTINCT qualifier is redundant. */
103932:       return 1;
103933:     }
103934:   }
103935: 
103936:   return 0;
103937: }
103938: 
103939: /*
103940: ** This routine decides if pIdx can be used to satisfy the ORDER BY
103941: ** clause.  If it can, it returns 1.  If pIdx cannot satisfy the
103942: ** ORDER BY clause, this routine returns 0.
103943: **
103944: ** pOrderBy is an ORDER BY clause from a SELECT statement.  pTab is the
103945: ** left-most table in the FROM clause of that same SELECT statement and
103946: ** the table has a cursor number of "base".  pIdx is an index on pTab.
103947: **
103948: ** nEqCol is the number of columns of pIdx that are used as equality
103949: ** constraints.  Any of these columns may be missing from the ORDER BY
103950: ** clause and the match can still be a success.
103951: **
103952: ** All terms of the ORDER BY that match against the index must be either
103953: ** ASC or DESC.  (Terms of the ORDER BY clause past the end of a UNIQUE
103954: ** index do not need to satisfy this constraint.)  The *pbRev value is
103955: ** set to 1 if the ORDER BY clause is all DESC and it is set to 0 if
103956: ** the ORDER BY clause is all ASC.
103957: */
103958: static int isSortingIndex(
103959:   Parse *pParse,          /* Parsing context */
103960:   WhereMaskSet *pMaskSet, /* Mapping from table cursor numbers to bitmaps */
103961:   Index *pIdx,            /* The index we are testing */
103962:   int base,               /* Cursor number for the table to be sorted */
103963:   ExprList *pOrderBy,     /* The ORDER BY clause */
103964:   int nEqCol,             /* Number of index columns with == constraints */
103965:   int wsFlags,            /* Index usages flags */
103966:   int *pbRev              /* Set to 1 if ORDER BY is DESC */
103967: ){
103968:   int i, j;                       /* Loop counters */
103969:   int sortOrder = 0;              /* XOR of index and ORDER BY sort direction */
103970:   int nTerm;                      /* Number of ORDER BY terms */
103971:   struct ExprList_item *pTerm;    /* A term of the ORDER BY clause */
103972:   sqlite3 *db = pParse->db;
103973: 
103974:   if( !pOrderBy ) return 0;
103975:   if( wsFlags & WHERE_COLUMN_IN ) return 0;
103976:   if( pIdx->bUnordered ) return 0;
103977: 
103978:   nTerm = pOrderBy->nExpr;
103979:   assert( nTerm>0 );
103980: 
103981:   /* Argument pIdx must either point to a 'real' named index structure, 
103982:   ** or an index structure allocated on the stack by bestBtreeIndex() to
103983:   ** represent the rowid index that is part of every table.  */
103984:   assert( pIdx->zName || (pIdx->nColumn==1 && pIdx->aiColumn[0]==-1) );
103985: 
103986:   /* Match terms of the ORDER BY clause against columns of
103987:   ** the index.
103988:   **
103989:   ** Note that indices have pIdx->nColumn regular columns plus
103990:   ** one additional column containing the rowid.  The rowid column
103991:   ** of the index is also allowed to match against the ORDER BY
103992:   ** clause.
103993:   */
103994:   for(i=j=0, pTerm=pOrderBy->a; j<nTerm && i<=pIdx->nColumn; i++){
103995:     Expr *pExpr;       /* The expression of the ORDER BY pTerm */
103996:     CollSeq *pColl;    /* The collating sequence of pExpr */
103997:     int termSortOrder; /* Sort order for this term */
103998:     int iColumn;       /* The i-th column of the index.  -1 for rowid */
103999:     int iSortOrder;    /* 1 for DESC, 0 for ASC on the i-th index term */
104000:     const char *zColl; /* Name of the collating sequence for i-th index term */
104001: 
104002:     pExpr = pTerm->pExpr;
104003:     if( pExpr->op!=TK_COLUMN || pExpr->iTable!=base ){
104004:       /* Can not use an index sort on anything that is not a column in the
104005:       ** left-most table of the FROM clause */
104006:       break;
104007:     }
104008:     pColl = sqlite3ExprCollSeq(pParse, pExpr);
104009:     if( !pColl ){
104010:       pColl = db->pDfltColl;
104011:     }
104012:     if( pIdx->zName && i<pIdx->nColumn ){
104013:       iColumn = pIdx->aiColumn[i];
104014:       if( iColumn==pIdx->pTable->iPKey ){
104015:         iColumn = -1;
104016:       }
104017:       iSortOrder = pIdx->aSortOrder[i];
104018:       zColl = pIdx->azColl[i];
104019:     }else{
104020:       iColumn = -1;
104021:       iSortOrder = 0;
104022:       zColl = pColl->zName;
104023:     }
104024:     if( pExpr->iColumn!=iColumn || sqlite3StrICmp(pColl->zName, zColl) ){
104025:       /* Term j of the ORDER BY clause does not match column i of the index */
104026:       if( i<nEqCol ){
104027:         /* If an index column that is constrained by == fails to match an
104028:         ** ORDER BY term, that is OK.  Just ignore that column of the index
104029:         */
104030:         continue;
104031:       }else if( i==pIdx->nColumn ){
104032:         /* Index column i is the rowid.  All other terms match. */
104033:         break;
104034:       }else{
104035:         /* If an index column fails to match and is not constrained by ==
104036:         ** then the index cannot satisfy the ORDER BY constraint.
104037:         */
104038:         return 0;
104039:       }
104040:     }
104041:     assert( pIdx->aSortOrder!=0 || iColumn==-1 );
104042:     assert( pTerm->sortOrder==0 || pTerm->sortOrder==1 );
104043:     assert( iSortOrder==0 || iSortOrder==1 );
104044:     termSortOrder = iSortOrder ^ pTerm->sortOrder;
104045:     if( i>nEqCol ){
104046:       if( termSortOrder!=sortOrder ){
104047:         /* Indices can only be used if all ORDER BY terms past the
104048:         ** equality constraints are all either DESC or ASC. */
104049:         return 0;
104050:       }
104051:     }else{
104052:       sortOrder = termSortOrder;
104053:     }
104054:     j++;
104055:     pTerm++;
104056:     if( iColumn<0 && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
104057:       /* If the indexed column is the primary key and everything matches
104058:       ** so far and none of the ORDER BY terms to the right reference other
104059:       ** tables in the join, then we are assured that the index can be used 
104060:       ** to sort because the primary key is unique and so none of the other
104061:       ** columns will make any difference
104062:       */
104063:       j = nTerm;
104064:     }
104065:   }
104066: 
104067:   *pbRev = sortOrder!=0;
104068:   if( j>=nTerm ){
104069:     /* All terms of the ORDER BY clause are covered by this index so
104070:     ** this index can be used for sorting. */
104071:     return 1;
104072:   }
104073:   if( pIdx->onError!=OE_None && i==pIdx->nColumn
104074:       && (wsFlags & WHERE_COLUMN_NULL)==0
104075:       && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
104076:     /* All terms of this index match some prefix of the ORDER BY clause
104077:     ** and the index is UNIQUE and no terms on the tail of the ORDER BY
104078:     ** clause reference other tables in a join.  If this is all true then
104079:     ** the order by clause is superfluous.  Not that if the matching
104080:     ** condition is IS NULL then the result is not necessarily unique
104081:     ** even on a UNIQUE index, so disallow those cases. */
104082:     return 1;
104083:   }
104084:   return 0;
104085: }
104086: 
104087: /*
104088: ** Prepare a crude estimate of the logarithm of the input value.
104089: ** The results need not be exact.  This is only used for estimating
104090: ** the total cost of performing operations with O(logN) or O(NlogN)
104091: ** complexity.  Because N is just a guess, it is no great tragedy if
104092: ** logN is a little off.
104093: */
104094: static double estLog(double N){
104095:   double logN = 1;
104096:   double x = 10;
104097:   while( N>x ){
104098:     logN += 1;
104099:     x *= 10;
104100:   }
104101:   return logN;
104102: }
104103: 
104104: /*
104105: ** Two routines for printing the content of an sqlite3_index_info
104106: ** structure.  Used for testing and debugging only.  If neither
104107: ** SQLITE_TEST or SQLITE_DEBUG are defined, then these routines
104108: ** are no-ops.
104109: */
104110: #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_DEBUG)
104111: static void TRACE_IDX_INPUTS(sqlite3_index_info *p){
104112:   int i;
104113:   if( !sqlite3WhereTrace ) return;
104114:   for(i=0; i<p->nConstraint; i++){
104115:     sqlite3DebugPrintf("  constraint[%d]: col=%d termid=%d op=%d usabled=%d\n",
104116:        i,
104117:        p->aConstraint[i].iColumn,
104118:        p->aConstraint[i].iTermOffset,
104119:        p->aConstraint[i].op,
104120:        p->aConstraint[i].usable);
104121:   }
104122:   for(i=0; i<p->nOrderBy; i++){
104123:     sqlite3DebugPrintf("  orderby[%d]: col=%d desc=%d\n",
104124:        i,
104125:        p->aOrderBy[i].iColumn,
104126:        p->aOrderBy[i].desc);
104127:   }
104128: }
104129: static void TRACE_IDX_OUTPUTS(sqlite3_index_info *p){
104130:   int i;
104131:   if( !sqlite3WhereTrace ) return;
104132:   for(i=0; i<p->nConstraint; i++){
104133:     sqlite3DebugPrintf("  usage[%d]: argvIdx=%d omit=%d\n",
104134:        i,
104135:        p->aConstraintUsage[i].argvIndex,
104136:        p->aConstraintUsage[i].omit);
104137:   }
104138:   sqlite3DebugPrintf("  idxNum=%d\n", p->idxNum);
104139:   sqlite3DebugPrintf("  idxStr=%s\n", p->idxStr);
104140:   sqlite3DebugPrintf("  orderByConsumed=%d\n", p->orderByConsumed);
104141:   sqlite3DebugPrintf("  estimatedCost=%g\n", p->estimatedCost);
104142: }
104143: #else
104144: #define TRACE_IDX_INPUTS(A)
104145: #define TRACE_IDX_OUTPUTS(A)
104146: #endif
104147: 
104148: /* 
104149: ** Required because bestIndex() is called by bestOrClauseIndex() 
104150: */
104151: static void bestIndex(
104152:     Parse*, WhereClause*, struct SrcList_item*,
104153:     Bitmask, Bitmask, ExprList*, WhereCost*);
104154: 
104155: /*
104156: ** This routine attempts to find an scanning strategy that can be used 
104157: ** to optimize an 'OR' expression that is part of a WHERE clause. 
104158: **
104159: ** The table associated with FROM clause term pSrc may be either a
104160: ** regular B-Tree table or a virtual table.
104161: */
104162: static void bestOrClauseIndex(
104163:   Parse *pParse,              /* The parsing context */
104164:   WhereClause *pWC,           /* The WHERE clause */
104165:   struct SrcList_item *pSrc,  /* The FROM clause term to search */
104166:   Bitmask notReady,           /* Mask of cursors not available for indexing */
104167:   Bitmask notValid,           /* Cursors not available for any purpose */
104168:   ExprList *pOrderBy,         /* The ORDER BY clause */
104169:   WhereCost *pCost            /* Lowest cost query plan */
104170: ){
104171: #ifndef SQLITE_OMIT_OR_OPTIMIZATION
104172:   const int iCur = pSrc->iCursor;   /* The cursor of the table to be accessed */
104173:   const Bitmask maskSrc = getMask(pWC->pMaskSet, iCur);  /* Bitmask for pSrc */
104174:   WhereTerm * const pWCEnd = &pWC->a[pWC->nTerm];        /* End of pWC->a[] */
104175:   WhereTerm *pTerm;                 /* A single term of the WHERE clause */
104176: 
104177:   /* The OR-clause optimization is disallowed if the INDEXED BY or
104178:   ** NOT INDEXED clauses are used or if the WHERE_AND_ONLY bit is set. */
104179:   if( pSrc->notIndexed || pSrc->pIndex!=0 ){
104180:     return;
104181:   }
104182:   if( pWC->wctrlFlags & WHERE_AND_ONLY ){
104183:     return;
104184:   }
104185: 
104186:   /* Search the WHERE clause terms for a usable WO_OR term. */
104187:   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
104188:     if( pTerm->eOperator==WO_OR 
104189:      && ((pTerm->prereqAll & ~maskSrc) & notReady)==0
104190:      && (pTerm->u.pOrInfo->indexable & maskSrc)!=0 
104191:     ){
104192:       WhereClause * const pOrWC = &pTerm->u.pOrInfo->wc;
104193:       WhereTerm * const pOrWCEnd = &pOrWC->a[pOrWC->nTerm];
104194:       WhereTerm *pOrTerm;
104195:       int flags = WHERE_MULTI_OR;
104196:       double rTotal = 0;
104197:       double nRow = 0;
104198:       Bitmask used = 0;
104199: 
104200:       for(pOrTerm=pOrWC->a; pOrTerm<pOrWCEnd; pOrTerm++){
104201:         WhereCost sTermCost;
104202:         WHERETRACE(("... Multi-index OR testing for term %d of %d....\n", 
104203:           (pOrTerm - pOrWC->a), (pTerm - pWC->a)
104204:         ));
104205:         if( pOrTerm->eOperator==WO_AND ){
104206:           WhereClause *pAndWC = &pOrTerm->u.pAndInfo->wc;
104207:           bestIndex(pParse, pAndWC, pSrc, notReady, notValid, 0, &sTermCost);
104208:         }else if( pOrTerm->leftCursor==iCur ){
104209:           WhereClause tempWC;
104210:           tempWC.pParse = pWC->pParse;
104211:           tempWC.pMaskSet = pWC->pMaskSet;
104212:           tempWC.pOuter = pWC;
104213:           tempWC.op = TK_AND;
104214:           tempWC.a = pOrTerm;
104215:           tempWC.wctrlFlags = 0;
104216:           tempWC.nTerm = 1;
104217:           bestIndex(pParse, &tempWC, pSrc, notReady, notValid, 0, &sTermCost);
104218:         }else{
104219:           continue;
104220:         }
104221:         rTotal += sTermCost.rCost;
104222:         nRow += sTermCost.plan.nRow;
104223:         used |= sTermCost.used;
104224:         if( rTotal>=pCost->rCost ) break;
104225:       }
104226: 
104227:       /* If there is an ORDER BY clause, increase the scan cost to account 
104228:       ** for the cost of the sort. */
104229:       if( pOrderBy!=0 ){
104230:         WHERETRACE(("... sorting increases OR cost %.9g to %.9g\n",
104231:                     rTotal, rTotal+nRow*estLog(nRow)));
104232:         rTotal += nRow*estLog(nRow);
104233:       }
104234: 
104235:       /* If the cost of scanning using this OR term for optimization is
104236:       ** less than the current cost stored in pCost, replace the contents
104237:       ** of pCost. */
104238:       WHERETRACE(("... multi-index OR cost=%.9g nrow=%.9g\n", rTotal, nRow));
104239:       if( rTotal<pCost->rCost ){
104240:         pCost->rCost = rTotal;
104241:         pCost->used = used;
104242:         pCost->plan.nRow = nRow;
104243:         pCost->plan.wsFlags = flags;
104244:         pCost->plan.u.pTerm = pTerm;
104245:       }
104246:     }
104247:   }
104248: #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
104249: }
104250: 
104251: #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
104252: /*
104253: ** Return TRUE if the WHERE clause term pTerm is of a form where it
104254: ** could be used with an index to access pSrc, assuming an appropriate
104255: ** index existed.
104256: */
104257: static int termCanDriveIndex(
104258:   WhereTerm *pTerm,              /* WHERE clause term to check */
104259:   struct SrcList_item *pSrc,     /* Table we are trying to access */
104260:   Bitmask notReady               /* Tables in outer loops of the join */
104261: ){
104262:   char aff;
104263:   if( pTerm->leftCursor!=pSrc->iCursor ) return 0;
104264:   if( pTerm->eOperator!=WO_EQ ) return 0;
104265:   if( (pTerm->prereqRight & notReady)!=0 ) return 0;
104266:   aff = pSrc->pTab->aCol[pTerm->u.leftColumn].affinity;
104267:   if( !sqlite3IndexAffinityOk(pTerm->pExpr, aff) ) return 0;
104268:   return 1;
104269: }
104270: #endif
104271: 
104272: #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
104273: /*
104274: ** If the query plan for pSrc specified in pCost is a full table scan
104275: ** and indexing is allows (if there is no NOT INDEXED clause) and it
104276: ** possible to construct a transient index that would perform better
104277: ** than a full table scan even when the cost of constructing the index
104278: ** is taken into account, then alter the query plan to use the
104279: ** transient index.
104280: */
104281: static void bestAutomaticIndex(
104282:   Parse *pParse,              /* The parsing context */
104283:   WhereClause *pWC,           /* The WHERE clause */
104284:   struct SrcList_item *pSrc,  /* The FROM clause term to search */
104285:   Bitmask notReady,           /* Mask of cursors that are not available */
104286:   WhereCost *pCost            /* Lowest cost query plan */
104287: ){
104288:   double nTableRow;           /* Rows in the input table */
104289:   double logN;                /* log(nTableRow) */
104290:   double costTempIdx;         /* per-query cost of the transient index */
104291:   WhereTerm *pTerm;           /* A single term of the WHERE clause */
104292:   WhereTerm *pWCEnd;          /* End of pWC->a[] */
104293:   Table *pTable;              /* Table tht might be indexed */
104294: 
104295:   if( pParse->nQueryLoop<=(double)1 ){
104296:     /* There is no point in building an automatic index for a single scan */
104297:     return;
104298:   }
104299:   if( (pParse->db->flags & SQLITE_AutoIndex)==0 ){
104300:     /* Automatic indices are disabled at run-time */
104301:     return;
104302:   }
104303:   if( (pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)!=0 ){
104304:     /* We already have some kind of index in use for this query. */
104305:     return;
104306:   }
104307:   if( pSrc->notIndexed ){
104308:     /* The NOT INDEXED clause appears in the SQL. */
104309:     return;
104310:   }
104311:   if( pSrc->isCorrelated ){
104312:     /* The source is a correlated sub-query. No point in indexing it. */
104313:     return;
104314:   }
104315: 
104316:   assert( pParse->nQueryLoop >= (double)1 );
104317:   pTable = pSrc->pTab;
104318:   nTableRow = pTable->nRowEst;
104319:   logN = estLog(nTableRow);
104320:   costTempIdx = 2*logN*(nTableRow/pParse->nQueryLoop + 1);
104321:   if( costTempIdx>=pCost->rCost ){
104322:     /* The cost of creating the transient table would be greater than
104323:     ** doing the full table scan */
104324:     return;
104325:   }
104326: 
104327:   /* Search for any equality comparison term */
104328:   pWCEnd = &pWC->a[pWC->nTerm];
104329:   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
104330:     if( termCanDriveIndex(pTerm, pSrc, notReady) ){
104331:       WHERETRACE(("auto-index reduces cost from %.1f to %.1f\n",
104332:                     pCost->rCost, costTempIdx));
104333:       pCost->rCost = costTempIdx;
104334:       pCost->plan.nRow = logN + 1;
104335:       pCost->plan.wsFlags = WHERE_TEMP_INDEX;
104336:       pCost->used = pTerm->prereqRight;
104337:       break;
104338:     }
104339:   }
104340: }
104341: #else
104342: # define bestAutomaticIndex(A,B,C,D,E)  /* no-op */
104343: #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
104344: 
104345: 
104346: #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
104347: /*
104348: ** Generate code to construct the Index object for an automatic index
104349: ** and to set up the WhereLevel object pLevel so that the code generator
104350: ** makes use of the automatic index.
104351: */
104352: static void constructAutomaticIndex(
104353:   Parse *pParse,              /* The parsing context */
104354:   WhereClause *pWC,           /* The WHERE clause */
104355:   struct SrcList_item *pSrc,  /* The FROM clause term to get the next index */
104356:   Bitmask notReady,           /* Mask of cursors that are not available */
104357:   WhereLevel *pLevel          /* Write new index here */
104358: ){
104359:   int nColumn;                /* Number of columns in the constructed index */
104360:   WhereTerm *pTerm;           /* A single term of the WHERE clause */
104361:   WhereTerm *pWCEnd;          /* End of pWC->a[] */
104362:   int nByte;                  /* Byte of memory needed for pIdx */
104363:   Index *pIdx;                /* Object describing the transient index */
104364:   Vdbe *v;                    /* Prepared statement under construction */
104365:   int addrInit;               /* Address of the initialization bypass jump */
104366:   Table *pTable;              /* The table being indexed */
104367:   KeyInfo *pKeyinfo;          /* Key information for the index */   
104368:   int addrTop;                /* Top of the index fill loop */
104369:   int regRecord;              /* Register holding an index record */
104370:   int n;                      /* Column counter */
104371:   int i;                      /* Loop counter */
104372:   int mxBitCol;               /* Maximum column in pSrc->colUsed */
104373:   CollSeq *pColl;             /* Collating sequence to on a column */
104374:   Bitmask idxCols;            /* Bitmap of columns used for indexing */
104375:   Bitmask extraCols;          /* Bitmap of additional columns */
104376: 
104377:   /* Generate code to skip over the creation and initialization of the
104378:   ** transient index on 2nd and subsequent iterations of the loop. */
104379:   v = pParse->pVdbe;
104380:   assert( v!=0 );
104381:   addrInit = sqlite3CodeOnce(pParse);
104382: 
104383:   /* Count the number of columns that will be added to the index
104384:   ** and used to match WHERE clause constraints */
104385:   nColumn = 0;
104386:   pTable = pSrc->pTab;
104387:   pWCEnd = &pWC->a[pWC->nTerm];
104388:   idxCols = 0;
104389:   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
104390:     if( termCanDriveIndex(pTerm, pSrc, notReady) ){
104391:       int iCol = pTerm->u.leftColumn;
104392:       Bitmask cMask = iCol>=BMS ? ((Bitmask)1)<<(BMS-1) : ((Bitmask)1)<<iCol;
104393:       testcase( iCol==BMS );
104394:       testcase( iCol==BMS-1 );
104395:       if( (idxCols & cMask)==0 ){
104396:         nColumn++;
104397:         idxCols |= cMask;
104398:       }
104399:     }
104400:   }
104401:   assert( nColumn>0 );
104402:   pLevel->plan.nEq = nColumn;
104403: 
104404:   /* Count the number of additional columns needed to create a
104405:   ** covering index.  A "covering index" is an index that contains all
104406:   ** columns that are needed by the query.  With a covering index, the
104407:   ** original table never needs to be accessed.  Automatic indices must
104408:   ** be a covering index because the index will not be updated if the
104409:   ** original table changes and the index and table cannot both be used
104410:   ** if they go out of sync.
104411:   */
104412:   extraCols = pSrc->colUsed & (~idxCols | (((Bitmask)1)<<(BMS-1)));
104413:   mxBitCol = (pTable->nCol >= BMS-1) ? BMS-1 : pTable->nCol;
104414:   testcase( pTable->nCol==BMS-1 );
104415:   testcase( pTable->nCol==BMS-2 );
104416:   for(i=0; i<mxBitCol; i++){
104417:     if( extraCols & (((Bitmask)1)<<i) ) nColumn++;
104418:   }
104419:   if( pSrc->colUsed & (((Bitmask)1)<<(BMS-1)) ){
104420:     nColumn += pTable->nCol - BMS + 1;
104421:   }
104422:   pLevel->plan.wsFlags |= WHERE_COLUMN_EQ | WHERE_IDX_ONLY | WO_EQ;
104423: 
104424:   /* Construct the Index object to describe this index */
104425:   nByte = sizeof(Index);
104426:   nByte += nColumn*sizeof(int);     /* Index.aiColumn */
104427:   nByte += nColumn*sizeof(char*);   /* Index.azColl */
104428:   nByte += nColumn;                 /* Index.aSortOrder */
104429:   pIdx = sqlite3DbMallocZero(pParse->db, nByte);
104430:   if( pIdx==0 ) return;
104431:   pLevel->plan.u.pIdx = pIdx;
104432:   pIdx->azColl = (char**)&pIdx[1];
104433:   pIdx->aiColumn = (int*)&pIdx->azColl[nColumn];
104434:   pIdx->aSortOrder = (u8*)&pIdx->aiColumn[nColumn];
104435:   pIdx->zName = "auto-index";
104436:   pIdx->nColumn = nColumn;
104437:   pIdx->pTable = pTable;
104438:   n = 0;
104439:   idxCols = 0;
104440:   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
104441:     if( termCanDriveIndex(pTerm, pSrc, notReady) ){
104442:       int iCol = pTerm->u.leftColumn;
104443:       Bitmask cMask = iCol>=BMS ? ((Bitmask)1)<<(BMS-1) : ((Bitmask)1)<<iCol;
104444:       if( (idxCols & cMask)==0 ){
104445:         Expr *pX = pTerm->pExpr;
104446:         idxCols |= cMask;
104447:         pIdx->aiColumn[n] = pTerm->u.leftColumn;
104448:         pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
104449:         pIdx->azColl[n] = ALWAYS(pColl) ? pColl->zName : "BINARY";
104450:         n++;
104451:       }
104452:     }
104453:   }
104454:   assert( (u32)n==pLevel->plan.nEq );
104455: 
104456:   /* Add additional columns needed to make the automatic index into
104457:   ** a covering index */
104458:   for(i=0; i<mxBitCol; i++){
104459:     if( extraCols & (((Bitmask)1)<<i) ){
104460:       pIdx->aiColumn[n] = i;
104461:       pIdx->azColl[n] = "BINARY";
104462:       n++;
104463:     }
104464:   }
104465:   if( pSrc->colUsed & (((Bitmask)1)<<(BMS-1)) ){
104466:     for(i=BMS-1; i<pTable->nCol; i++){
104467:       pIdx->aiColumn[n] = i;
104468:       pIdx->azColl[n] = "BINARY";
104469:       n++;
104470:     }
104471:   }
104472:   assert( n==nColumn );
104473: 
104474:   /* Create the automatic index */
104475:   pKeyinfo = sqlite3IndexKeyinfo(pParse, pIdx);
104476:   assert( pLevel->iIdxCur>=0 );
104477:   sqlite3VdbeAddOp4(v, OP_OpenAutoindex, pLevel->iIdxCur, nColumn+1, 0,
104478:                     (char*)pKeyinfo, P4_KEYINFO_HANDOFF);
104479:   VdbeComment((v, "for %s", pTable->zName));
104480: 
104481:   /* Fill the automatic index with content */
104482:   addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur);
104483:   regRecord = sqlite3GetTempReg(pParse);
104484:   sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 1);
104485:   sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
104486:   sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
104487:   sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1);
104488:   sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX);
104489:   sqlite3VdbeJumpHere(v, addrTop);
104490:   sqlite3ReleaseTempReg(pParse, regRecord);
104491:   
104492:   /* Jump here when skipping the initialization */
104493:   sqlite3VdbeJumpHere(v, addrInit);
104494: }
104495: #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
104496: 
104497: #ifndef SQLITE_OMIT_VIRTUALTABLE
104498: /*
104499: ** Allocate and populate an sqlite3_index_info structure. It is the 
104500: ** responsibility of the caller to eventually release the structure
104501: ** by passing the pointer returned by this function to sqlite3_free().
104502: */
104503: static sqlite3_index_info *allocateIndexInfo(
104504:   Parse *pParse, 
104505:   WhereClause *pWC,
104506:   struct SrcList_item *pSrc,
104507:   ExprList *pOrderBy
104508: ){
104509:   int i, j;
104510:   int nTerm;
104511:   struct sqlite3_index_constraint *pIdxCons;
104512:   struct sqlite3_index_orderby *pIdxOrderBy;
104513:   struct sqlite3_index_constraint_usage *pUsage;
104514:   WhereTerm *pTerm;
104515:   int nOrderBy;
104516:   sqlite3_index_info *pIdxInfo;
104517: 
104518:   WHERETRACE(("Recomputing index info for %s...\n", pSrc->pTab->zName));
104519: 
104520:   /* Count the number of possible WHERE clause constraints referring
104521:   ** to this virtual table */
104522:   for(i=nTerm=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
104523:     if( pTerm->leftCursor != pSrc->iCursor ) continue;
104524:     assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
104525:     testcase( pTerm->eOperator==WO_IN );
104526:     testcase( pTerm->eOperator==WO_ISNULL );
104527:     if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
104528:     if( pTerm->wtFlags & TERM_VNULL ) continue;
104529:     nTerm++;
104530:   }
104531: 
104532:   /* If the ORDER BY clause contains only columns in the current 
104533:   ** virtual table then allocate space for the aOrderBy part of
104534:   ** the sqlite3_index_info structure.
104535:   */
104536:   nOrderBy = 0;
104537:   if( pOrderBy ){
104538:     for(i=0; i<pOrderBy->nExpr; i++){
104539:       Expr *pExpr = pOrderBy->a[i].pExpr;
104540:       if( pExpr->op!=TK_COLUMN || pExpr->iTable!=pSrc->iCursor ) break;
104541:     }
104542:     if( i==pOrderBy->nExpr ){
104543:       nOrderBy = pOrderBy->nExpr;
104544:     }
104545:   }
104546: 
104547:   /* Allocate the sqlite3_index_info structure
104548:   */
104549:   pIdxInfo = sqlite3DbMallocZero(pParse->db, sizeof(*pIdxInfo)
104550:                            + (sizeof(*pIdxCons) + sizeof(*pUsage))*nTerm
104551:                            + sizeof(*pIdxOrderBy)*nOrderBy );
104552:   if( pIdxInfo==0 ){
104553:     sqlite3ErrorMsg(pParse, "out of memory");
104554:     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
104555:     return 0;
104556:   }
104557: 
104558:   /* Initialize the structure.  The sqlite3_index_info structure contains
104559:   ** many fields that are declared "const" to prevent xBestIndex from
104560:   ** changing them.  We have to do some funky casting in order to
104561:   ** initialize those fields.
104562:   */
104563:   pIdxCons = (struct sqlite3_index_constraint*)&pIdxInfo[1];
104564:   pIdxOrderBy = (struct sqlite3_index_orderby*)&pIdxCons[nTerm];
104565:   pUsage = (struct sqlite3_index_constraint_usage*)&pIdxOrderBy[nOrderBy];
104566:   *(int*)&pIdxInfo->nConstraint = nTerm;
104567:   *(int*)&pIdxInfo->nOrderBy = nOrderBy;
104568:   *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint = pIdxCons;
104569:   *(struct sqlite3_index_orderby**)&pIdxInfo->aOrderBy = pIdxOrderBy;
104570:   *(struct sqlite3_index_constraint_usage**)&pIdxInfo->aConstraintUsage =
104571:                                                                    pUsage;
104572: 
104573:   for(i=j=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
104574:     if( pTerm->leftCursor != pSrc->iCursor ) continue;
104575:     assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
104576:     testcase( pTerm->eOperator==WO_IN );
104577:     testcase( pTerm->eOperator==WO_ISNULL );
104578:     if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
104579:     if( pTerm->wtFlags & TERM_VNULL ) continue;
104580:     pIdxCons[j].iColumn = pTerm->u.leftColumn;
104581:     pIdxCons[j].iTermOffset = i;
104582:     pIdxCons[j].op = (u8)pTerm->eOperator;
104583:     /* The direct assignment in the previous line is possible only because
104584:     ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical.  The
104585:     ** following asserts verify this fact. */
104586:     assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ );
104587:     assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT );
104588:     assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE );
104589:     assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT );
104590:     assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE );
104591:     assert( WO_MATCH==SQLITE_INDEX_CONSTRAINT_MATCH );
104592:     assert( pTerm->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_MATCH) );
104593:     j++;
104594:   }
104595:   for(i=0; i<nOrderBy; i++){
104596:     Expr *pExpr = pOrderBy->a[i].pExpr;
104597:     pIdxOrderBy[i].iColumn = pExpr->iColumn;
104598:     pIdxOrderBy[i].desc = pOrderBy->a[i].sortOrder;
104599:   }
104600: 
104601:   return pIdxInfo;
104602: }
104603: 
104604: /*
104605: ** The table object reference passed as the second argument to this function
104606: ** must represent a virtual table. This function invokes the xBestIndex()
104607: ** method of the virtual table with the sqlite3_index_info pointer passed
104608: ** as the argument.
104609: **
104610: ** If an error occurs, pParse is populated with an error message and a
104611: ** non-zero value is returned. Otherwise, 0 is returned and the output
104612: ** part of the sqlite3_index_info structure is left populated.
104613: **
104614: ** Whether or not an error is returned, it is the responsibility of the
104615: ** caller to eventually free p->idxStr if p->needToFreeIdxStr indicates
104616: ** that this is required.
104617: */
104618: static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){
104619:   sqlite3_vtab *pVtab = sqlite3GetVTable(pParse->db, pTab)->pVtab;
104620:   int i;
104621:   int rc;
104622: 
104623:   WHERETRACE(("xBestIndex for %s\n", pTab->zName));
104624:   TRACE_IDX_INPUTS(p);
104625:   rc = pVtab->pModule->xBestIndex(pVtab, p);
104626:   TRACE_IDX_OUTPUTS(p);
104627: 
104628:   if( rc!=SQLITE_OK ){
104629:     if( rc==SQLITE_NOMEM ){
104630:       pParse->db->mallocFailed = 1;
104631:     }else if( !pVtab->zErrMsg ){
104632:       sqlite3ErrorMsg(pParse, "%s", sqlite3ErrStr(rc));
104633:     }else{
104634:       sqlite3ErrorMsg(pParse, "%s", pVtab->zErrMsg);
104635:     }
104636:   }
104637:   sqlite3_free(pVtab->zErrMsg);
104638:   pVtab->zErrMsg = 0;
104639: 
104640:   for(i=0; i<p->nConstraint; i++){
104641:     if( !p->aConstraint[i].usable && p->aConstraintUsage[i].argvIndex>0 ){
104642:       sqlite3ErrorMsg(pParse, 
104643:           "table %s: xBestIndex returned an invalid plan", pTab->zName);
104644:     }
104645:   }
104646: 
104647:   return pParse->nErr;
104648: }
104649: 
104650: 
104651: /*
104652: ** Compute the best index for a virtual table.
104653: **
104654: ** The best index is computed by the xBestIndex method of the virtual
104655: ** table module.  This routine is really just a wrapper that sets up
104656: ** the sqlite3_index_info structure that is used to communicate with
104657: ** xBestIndex.
104658: **
104659: ** In a join, this routine might be called multiple times for the
104660: ** same virtual table.  The sqlite3_index_info structure is created
104661: ** and initialized on the first invocation and reused on all subsequent
104662: ** invocations.  The sqlite3_index_info structure is also used when
104663: ** code is generated to access the virtual table.  The whereInfoDelete() 
104664: ** routine takes care of freeing the sqlite3_index_info structure after
104665: ** everybody has finished with it.
104666: */
104667: static void bestVirtualIndex(
104668:   Parse *pParse,                  /* The parsing context */
104669:   WhereClause *pWC,               /* The WHERE clause */
104670:   struct SrcList_item *pSrc,      /* The FROM clause term to search */
104671:   Bitmask notReady,               /* Mask of cursors not available for index */
104672:   Bitmask notValid,               /* Cursors not valid for any purpose */
104673:   ExprList *pOrderBy,             /* The order by clause */
104674:   WhereCost *pCost,               /* Lowest cost query plan */
104675:   sqlite3_index_info **ppIdxInfo  /* Index information passed to xBestIndex */
104676: ){
104677:   Table *pTab = pSrc->pTab;
104678:   sqlite3_index_info *pIdxInfo;
104679:   struct sqlite3_index_constraint *pIdxCons;
104680:   struct sqlite3_index_constraint_usage *pUsage;
104681:   WhereTerm *pTerm;
104682:   int i, j;
104683:   int nOrderBy;
104684:   double rCost;
104685: 
104686:   /* Make sure wsFlags is initialized to some sane value. Otherwise, if the 
104687:   ** malloc in allocateIndexInfo() fails and this function returns leaving
104688:   ** wsFlags in an uninitialized state, the caller may behave unpredictably.
104689:   */
104690:   memset(pCost, 0, sizeof(*pCost));
104691:   pCost->plan.wsFlags = WHERE_VIRTUALTABLE;
104692: 
104693:   /* If the sqlite3_index_info structure has not been previously
104694:   ** allocated and initialized, then allocate and initialize it now.
104695:   */
104696:   pIdxInfo = *ppIdxInfo;
104697:   if( pIdxInfo==0 ){
104698:     *ppIdxInfo = pIdxInfo = allocateIndexInfo(pParse, pWC, pSrc, pOrderBy);
104699:   }
104700:   if( pIdxInfo==0 ){
104701:     return;
104702:   }
104703: 
104704:   /* At this point, the sqlite3_index_info structure that pIdxInfo points
104705:   ** to will have been initialized, either during the current invocation or
104706:   ** during some prior invocation.  Now we just have to customize the
104707:   ** details of pIdxInfo for the current invocation and pass it to
104708:   ** xBestIndex.
104709:   */
104710: 
104711:   /* The module name must be defined. Also, by this point there must
104712:   ** be a pointer to an sqlite3_vtab structure. Otherwise
104713:   ** sqlite3ViewGetColumnNames() would have picked up the error. 
104714:   */
104715:   assert( pTab->azModuleArg && pTab->azModuleArg[0] );
104716:   assert( sqlite3GetVTable(pParse->db, pTab) );
104717: 
104718:   /* Set the aConstraint[].usable fields and initialize all 
104719:   ** output variables to zero.
104720:   **
104721:   ** aConstraint[].usable is true for constraints where the right-hand
104722:   ** side contains only references to tables to the left of the current
104723:   ** table.  In other words, if the constraint is of the form:
104724:   **
104725:   **           column = expr
104726:   **
104727:   ** and we are evaluating a join, then the constraint on column is 
104728:   ** only valid if all tables referenced in expr occur to the left
104729:   ** of the table containing column.
104730:   **
104731:   ** The aConstraints[] array contains entries for all constraints
104732:   ** on the current table.  That way we only have to compute it once
104733:   ** even though we might try to pick the best index multiple times.
104734:   ** For each attempt at picking an index, the order of tables in the
104735:   ** join might be different so we have to recompute the usable flag
104736:   ** each time.
104737:   */
104738:   pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint;
104739:   pUsage = pIdxInfo->aConstraintUsage;
104740:   for(i=0; i<pIdxInfo->nConstraint; i++, pIdxCons++){
104741:     j = pIdxCons->iTermOffset;
104742:     pTerm = &pWC->a[j];
104743:     pIdxCons->usable = (pTerm->prereqRight&notReady) ? 0 : 1;
104744:   }
104745:   memset(pUsage, 0, sizeof(pUsage[0])*pIdxInfo->nConstraint);
104746:   if( pIdxInfo->needToFreeIdxStr ){
104747:     sqlite3_free(pIdxInfo->idxStr);
104748:   }
104749:   pIdxInfo->idxStr = 0;
104750:   pIdxInfo->idxNum = 0;
104751:   pIdxInfo->needToFreeIdxStr = 0;
104752:   pIdxInfo->orderByConsumed = 0;
104753:   /* ((double)2) In case of SQLITE_OMIT_FLOATING_POINT... */
104754:   pIdxInfo->estimatedCost = SQLITE_BIG_DBL / ((double)2);
104755:   nOrderBy = pIdxInfo->nOrderBy;
104756:   if( !pOrderBy ){
104757:     pIdxInfo->nOrderBy = 0;
104758:   }
104759: 
104760:   if( vtabBestIndex(pParse, pTab, pIdxInfo) ){
104761:     return;
104762:   }
104763: 
104764:   pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint;
104765:   for(i=0; i<pIdxInfo->nConstraint; i++){
104766:     if( pUsage[i].argvIndex>0 ){
104767:       pCost->used |= pWC->a[pIdxCons[i].iTermOffset].prereqRight;
104768:     }
104769:   }
104770: 
104771:   /* If there is an ORDER BY clause, and the selected virtual table index
104772:   ** does not satisfy it, increase the cost of the scan accordingly. This
104773:   ** matches the processing for non-virtual tables in bestBtreeIndex().
104774:   */
104775:   rCost = pIdxInfo->estimatedCost;
104776:   if( pOrderBy && pIdxInfo->orderByConsumed==0 ){
104777:     rCost += estLog(rCost)*rCost;
104778:   }
104779: 
104780:   /* The cost is not allowed to be larger than SQLITE_BIG_DBL (the
104781:   ** inital value of lowestCost in this loop. If it is, then the
104782:   ** (cost<lowestCost) test below will never be true.
104783:   ** 
104784:   ** Use "(double)2" instead of "2.0" in case OMIT_FLOATING_POINT 
104785:   ** is defined.
104786:   */
104787:   if( (SQLITE_BIG_DBL/((double)2))<rCost ){
104788:     pCost->rCost = (SQLITE_BIG_DBL/((double)2));
104789:   }else{
104790:     pCost->rCost = rCost;
104791:   }
104792:   pCost->plan.u.pVtabIdx = pIdxInfo;
104793:   if( pIdxInfo->orderByConsumed ){
104794:     pCost->plan.wsFlags |= WHERE_ORDERBY;
104795:   }
104796:   pCost->plan.nEq = 0;
104797:   pIdxInfo->nOrderBy = nOrderBy;
104798: 
104799:   /* Try to find a more efficient access pattern by using multiple indexes
104800:   ** to optimize an OR expression within the WHERE clause. 
104801:   */
104802:   bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
104803: }
104804: #endif /* SQLITE_OMIT_VIRTUALTABLE */
104805: 
104806: #ifdef SQLITE_ENABLE_STAT3
104807: /*
104808: ** Estimate the location of a particular key among all keys in an
104809: ** index.  Store the results in aStat as follows:
104810: **
104811: **    aStat[0]      Est. number of rows less than pVal
104812: **    aStat[1]      Est. number of rows equal to pVal
104813: **
104814: ** Return SQLITE_OK on success.
104815: */
104816: static int whereKeyStats(
104817:   Parse *pParse,              /* Database connection */
104818:   Index *pIdx,                /* Index to consider domain of */
104819:   sqlite3_value *pVal,        /* Value to consider */
104820:   int roundUp,                /* Round up if true.  Round down if false */
104821:   tRowcnt *aStat              /* OUT: stats written here */
104822: ){
104823:   tRowcnt n;
104824:   IndexSample *aSample;
104825:   int i, eType;
104826:   int isEq = 0;
104827:   i64 v;
104828:   double r, rS;
104829: 
104830:   assert( roundUp==0 || roundUp==1 );
104831:   assert( pIdx->nSample>0 );
104832:   if( pVal==0 ) return SQLITE_ERROR;
104833:   n = pIdx->aiRowEst[0];
104834:   aSample = pIdx->aSample;
104835:   eType = sqlite3_value_type(pVal);
104836: 
104837:   if( eType==SQLITE_INTEGER ){
104838:     v = sqlite3_value_int64(pVal);
104839:     r = (i64)v;
104840:     for(i=0; i<pIdx->nSample; i++){
104841:       if( aSample[i].eType==SQLITE_NULL ) continue;
104842:       if( aSample[i].eType>=SQLITE_TEXT ) break;
104843:       if( aSample[i].eType==SQLITE_INTEGER ){
104844:         if( aSample[i].u.i>=v ){
104845:           isEq = aSample[i].u.i==v;
104846:           break;
104847:         }
104848:       }else{
104849:         assert( aSample[i].eType==SQLITE_FLOAT );
104850:         if( aSample[i].u.r>=r ){
104851:           isEq = aSample[i].u.r==r;
104852:           break;
104853:         }
104854:       }
104855:     }
104856:   }else if( eType==SQLITE_FLOAT ){
104857:     r = sqlite3_value_double(pVal);
104858:     for(i=0; i<pIdx->nSample; i++){
104859:       if( aSample[i].eType==SQLITE_NULL ) continue;
104860:       if( aSample[i].eType>=SQLITE_TEXT ) break;
104861:       if( aSample[i].eType==SQLITE_FLOAT ){
104862:         rS = aSample[i].u.r;
104863:       }else{
104864:         rS = aSample[i].u.i;
104865:       }
104866:       if( rS>=r ){
104867:         isEq = rS==r;
104868:         break;
104869:       }
104870:     }
104871:   }else if( eType==SQLITE_NULL ){
104872:     i = 0;
104873:     if( aSample[0].eType==SQLITE_NULL ) isEq = 1;
104874:   }else{
104875:     assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB );
104876:     for(i=0; i<pIdx->nSample; i++){
104877:       if( aSample[i].eType==SQLITE_TEXT || aSample[i].eType==SQLITE_BLOB ){
104878:         break;
104879:       }
104880:     }
104881:     if( i<pIdx->nSample ){      
104882:       sqlite3 *db = pParse->db;
104883:       CollSeq *pColl;
104884:       const u8 *z;
104885:       if( eType==SQLITE_BLOB ){
104886:         z = (const u8 *)sqlite3_value_blob(pVal);
104887:         pColl = db->pDfltColl;
104888:         assert( pColl->enc==SQLITE_UTF8 );
104889:       }else{
104890:         pColl = sqlite3GetCollSeq(db, SQLITE_UTF8, 0, *pIdx->azColl);
104891:         if( pColl==0 ){
104892:           sqlite3ErrorMsg(pParse, "no such collation sequence: %s",
104893:                           *pIdx->azColl);
104894:           return SQLITE_ERROR;
104895:         }
104896:         z = (const u8 *)sqlite3ValueText(pVal, pColl->enc);
104897:         if( !z ){
104898:           return SQLITE_NOMEM;
104899:         }
104900:         assert( z && pColl && pColl->xCmp );
104901:       }
104902:       n = sqlite3ValueBytes(pVal, pColl->enc);
104903:   
104904:       for(; i<pIdx->nSample; i++){
104905:         int c;
104906:         int eSampletype = aSample[i].eType;
104907:         if( eSampletype<eType ) continue;
104908:         if( eSampletype!=eType ) break;
104909: #ifndef SQLITE_OMIT_UTF16
104910:         if( pColl->enc!=SQLITE_UTF8 ){
104911:           int nSample;
104912:           char *zSample = sqlite3Utf8to16(
104913:               db, pColl->enc, aSample[i].u.z, aSample[i].nByte, &nSample
104914:           );
104915:           if( !zSample ){
104916:             assert( db->mallocFailed );
104917:             return SQLITE_NOMEM;
104918:           }
104919:           c = pColl->xCmp(pColl->pUser, nSample, zSample, n, z);
104920:           sqlite3DbFree(db, zSample);
104921:         }else
104922: #endif
104923:         {
104924:           c = pColl->xCmp(pColl->pUser, aSample[i].nByte, aSample[i].u.z, n, z);
104925:         }
104926:         if( c>=0 ){
104927:           if( c==0 ) isEq = 1;
104928:           break;
104929:         }
104930:       }
104931:     }
104932:   }
104933: 
104934:   /* At this point, aSample[i] is the first sample that is greater than
104935:   ** or equal to pVal.  Or if i==pIdx->nSample, then all samples are less
104936:   ** than pVal.  If aSample[i]==pVal, then isEq==1.
104937:   */
104938:   if( isEq ){
104939:     assert( i<pIdx->nSample );
104940:     aStat[0] = aSample[i].nLt;
104941:     aStat[1] = aSample[i].nEq;
104942:   }else{
104943:     tRowcnt iLower, iUpper, iGap;
104944:     if( i==0 ){
104945:       iLower = 0;
104946:       iUpper = aSample[0].nLt;
104947:     }else{
104948:       iUpper = i>=pIdx->nSample ? n : aSample[i].nLt;
104949:       iLower = aSample[i-1].nEq + aSample[i-1].nLt;
104950:     }
104951:     aStat[1] = pIdx->avgEq;
104952:     if( iLower>=iUpper ){
104953:       iGap = 0;
104954:     }else{
104955:       iGap = iUpper - iLower;
104956:     }
104957:     if( roundUp ){
104958:       iGap = (iGap*2)/3;
104959:     }else{
104960:       iGap = iGap/3;
104961:     }
104962:     aStat[0] = iLower + iGap;
104963:   }
104964:   return SQLITE_OK;
104965: }
104966: #endif /* SQLITE_ENABLE_STAT3 */
104967: 
104968: /*
104969: ** If expression pExpr represents a literal value, set *pp to point to
104970: ** an sqlite3_value structure containing the same value, with affinity
104971: ** aff applied to it, before returning. It is the responsibility of the 
104972: ** caller to eventually release this structure by passing it to 
104973: ** sqlite3ValueFree().
104974: **
104975: ** If the current parse is a recompile (sqlite3Reprepare()) and pExpr
104976: ** is an SQL variable that currently has a non-NULL value bound to it,
104977: ** create an sqlite3_value structure containing this value, again with
104978: ** affinity aff applied to it, instead.
104979: **
104980: ** If neither of the above apply, set *pp to NULL.
104981: **
104982: ** If an error occurs, return an error code. Otherwise, SQLITE_OK.
104983: */
104984: #ifdef SQLITE_ENABLE_STAT3
104985: static int valueFromExpr(
104986:   Parse *pParse, 
104987:   Expr *pExpr, 
104988:   u8 aff, 
104989:   sqlite3_value **pp
104990: ){
104991:   if( pExpr->op==TK_VARIABLE
104992:    || (pExpr->op==TK_REGISTER && pExpr->op2==TK_VARIABLE)
104993:   ){
104994:     int iVar = pExpr->iColumn;
104995:     sqlite3VdbeSetVarmask(pParse->pVdbe, iVar);
104996:     *pp = sqlite3VdbeGetValue(pParse->pReprepare, iVar, aff);
104997:     return SQLITE_OK;
104998:   }
104999:   return sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, aff, pp);
105000: }
105001: #endif
105002: 
105003: /*
105004: ** This function is used to estimate the number of rows that will be visited
105005: ** by scanning an index for a range of values. The range may have an upper
105006: ** bound, a lower bound, or both. The WHERE clause terms that set the upper
105007: ** and lower bounds are represented by pLower and pUpper respectively. For
105008: ** example, assuming that index p is on t1(a):
105009: **
105010: **   ... FROM t1 WHERE a > ? AND a < ? ...
105011: **                    |_____|   |_____|
105012: **                       |         |
105013: **                     pLower    pUpper
105014: **
105015: ** If either of the upper or lower bound is not present, then NULL is passed in
105016: ** place of the corresponding WhereTerm.
105017: **
105018: ** The nEq parameter is passed the index of the index column subject to the
105019: ** range constraint. Or, equivalently, the number of equality constraints
105020: ** optimized by the proposed index scan. For example, assuming index p is
105021: ** on t1(a, b), and the SQL query is:
105022: **
105023: **   ... FROM t1 WHERE a = ? AND b > ? AND b < ? ...
105024: **
105025: ** then nEq should be passed the value 1 (as the range restricted column,
105026: ** b, is the second left-most column of the index). Or, if the query is:
105027: **
105028: **   ... FROM t1 WHERE a > ? AND a < ? ...
105029: **
105030: ** then nEq should be passed 0.
105031: **
105032: ** The returned value is an integer divisor to reduce the estimated
105033: ** search space.  A return value of 1 means that range constraints are
105034: ** no help at all.  A return value of 2 means range constraints are
105035: ** expected to reduce the search space by half.  And so forth...
105036: **
105037: ** In the absence of sqlite_stat3 ANALYZE data, each range inequality
105038: ** reduces the search space by a factor of 4.  Hence a single constraint (x>?)
105039: ** results in a return of 4 and a range constraint (x>? AND x<?) results
105040: ** in a return of 16.
105041: */
105042: static int whereRangeScanEst(
105043:   Parse *pParse,       /* Parsing & code generating context */
105044:   Index *p,            /* The index containing the range-compared column; "x" */
105045:   int nEq,             /* index into p->aCol[] of the range-compared column */
105046:   WhereTerm *pLower,   /* Lower bound on the range. ex: "x>123" Might be NULL */
105047:   WhereTerm *pUpper,   /* Upper bound on the range. ex: "x<455" Might be NULL */
105048:   double *pRangeDiv   /* OUT: Reduce search space by this divisor */
105049: ){
105050:   int rc = SQLITE_OK;
105051: 
105052: #ifdef SQLITE_ENABLE_STAT3
105053: 
105054:   if( nEq==0 && p->nSample ){
105055:     sqlite3_value *pRangeVal;
105056:     tRowcnt iLower = 0;
105057:     tRowcnt iUpper = p->aiRowEst[0];
105058:     tRowcnt a[2];
105059:     u8 aff = p->pTable->aCol[p->aiColumn[0]].affinity;
105060: 
105061:     if( pLower ){
105062:       Expr *pExpr = pLower->pExpr->pRight;
105063:       rc = valueFromExpr(pParse, pExpr, aff, &pRangeVal);
105064:       assert( pLower->eOperator==WO_GT || pLower->eOperator==WO_GE );
105065:       if( rc==SQLITE_OK
105066:        && whereKeyStats(pParse, p, pRangeVal, 0, a)==SQLITE_OK
105067:       ){
105068:         iLower = a[0];
105069:         if( pLower->eOperator==WO_GT ) iLower += a[1];
105070:       }
105071:       sqlite3ValueFree(pRangeVal);
105072:     }
105073:     if( rc==SQLITE_OK && pUpper ){
105074:       Expr *pExpr = pUpper->pExpr->pRight;
105075:       rc = valueFromExpr(pParse, pExpr, aff, &pRangeVal);
105076:       assert( pUpper->eOperator==WO_LT || pUpper->eOperator==WO_LE );
105077:       if( rc==SQLITE_OK
105078:        && whereKeyStats(pParse, p, pRangeVal, 1, a)==SQLITE_OK
105079:       ){
105080:         iUpper = a[0];
105081:         if( pUpper->eOperator==WO_LE ) iUpper += a[1];
105082:       }
105083:       sqlite3ValueFree(pRangeVal);
105084:     }
105085:     if( rc==SQLITE_OK ){
105086:       if( iUpper<=iLower ){
105087:         *pRangeDiv = (double)p->aiRowEst[0];
105088:       }else{
105089:         *pRangeDiv = (double)p->aiRowEst[0]/(double)(iUpper - iLower);
105090:       }
105091:       WHERETRACE(("range scan regions: %u..%u  div=%g\n",
105092:                   (u32)iLower, (u32)iUpper, *pRangeDiv));
105093:       return SQLITE_OK;
105094:     }
105095:   }
105096: #else
105097:   UNUSED_PARAMETER(pParse);
105098:   UNUSED_PARAMETER(p);
105099:   UNUSED_PARAMETER(nEq);
105100: #endif
105101:   assert( pLower || pUpper );
105102:   *pRangeDiv = (double)1;
105103:   if( pLower && (pLower->wtFlags & TERM_VNULL)==0 ) *pRangeDiv *= (double)4;
105104:   if( pUpper ) *pRangeDiv *= (double)4;
105105:   return rc;
105106: }
105107: 
105108: #ifdef SQLITE_ENABLE_STAT3
105109: /*
105110: ** Estimate the number of rows that will be returned based on
105111: ** an equality constraint x=VALUE and where that VALUE occurs in
105112: ** the histogram data.  This only works when x is the left-most
105113: ** column of an index and sqlite_stat3 histogram data is available
105114: ** for that index.  When pExpr==NULL that means the constraint is
105115: ** "x IS NULL" instead of "x=VALUE".
105116: **
105117: ** Write the estimated row count into *pnRow and return SQLITE_OK. 
105118: ** If unable to make an estimate, leave *pnRow unchanged and return
105119: ** non-zero.
105120: **
105121: ** This routine can fail if it is unable to load a collating sequence
105122: ** required for string comparison, or if unable to allocate memory
105123: ** for a UTF conversion required for comparison.  The error is stored
105124: ** in the pParse structure.
105125: */
105126: static int whereEqualScanEst(
105127:   Parse *pParse,       /* Parsing & code generating context */
105128:   Index *p,            /* The index whose left-most column is pTerm */
105129:   Expr *pExpr,         /* Expression for VALUE in the x=VALUE constraint */
105130:   double *pnRow        /* Write the revised row estimate here */
105131: ){
105132:   sqlite3_value *pRhs = 0;  /* VALUE on right-hand side of pTerm */
105133:   u8 aff;                   /* Column affinity */
105134:   int rc;                   /* Subfunction return code */
105135:   tRowcnt a[2];             /* Statistics */
105136: 
105137:   assert( p->aSample!=0 );
105138:   assert( p->nSample>0 );
105139:   aff = p->pTable->aCol[p->aiColumn[0]].affinity;
105140:   if( pExpr ){
105141:     rc = valueFromExpr(pParse, pExpr, aff, &pRhs);
105142:     if( rc ) goto whereEqualScanEst_cancel;
105143:   }else{
105144:     pRhs = sqlite3ValueNew(pParse->db);
105145:   }
105146:   if( pRhs==0 ) return SQLITE_NOTFOUND;
105147:   rc = whereKeyStats(pParse, p, pRhs, 0, a);
105148:   if( rc==SQLITE_OK ){
105149:     WHERETRACE(("equality scan regions: %d\n", (int)a[1]));
105150:     *pnRow = a[1];
105151:   }
105152: whereEqualScanEst_cancel:
105153:   sqlite3ValueFree(pRhs);
105154:   return rc;
105155: }
105156: #endif /* defined(SQLITE_ENABLE_STAT3) */
105157: 
105158: #ifdef SQLITE_ENABLE_STAT3
105159: /*
105160: ** Estimate the number of rows that will be returned based on
105161: ** an IN constraint where the right-hand side of the IN operator
105162: ** is a list of values.  Example:
105163: **
105164: **        WHERE x IN (1,2,3,4)
105165: **
105166: ** Write the estimated row count into *pnRow and return SQLITE_OK. 
105167: ** If unable to make an estimate, leave *pnRow unchanged and return
105168: ** non-zero.
105169: **
105170: ** This routine can fail if it is unable to load a collating sequence
105171: ** required for string comparison, or if unable to allocate memory
105172: ** for a UTF conversion required for comparison.  The error is stored
105173: ** in the pParse structure.
105174: */
105175: static int whereInScanEst(
105176:   Parse *pParse,       /* Parsing & code generating context */
105177:   Index *p,            /* The index whose left-most column is pTerm */
105178:   ExprList *pList,     /* The value list on the RHS of "x IN (v1,v2,v3,...)" */
105179:   double *pnRow        /* Write the revised row estimate here */
105180: ){
105181:   int rc = SQLITE_OK;         /* Subfunction return code */
105182:   double nEst;                /* Number of rows for a single term */
105183:   double nRowEst = (double)0; /* New estimate of the number of rows */
105184:   int i;                      /* Loop counter */
105185: 
105186:   assert( p->aSample!=0 );
105187:   for(i=0; rc==SQLITE_OK && i<pList->nExpr; i++){
105188:     nEst = p->aiRowEst[0];
105189:     rc = whereEqualScanEst(pParse, p, pList->a[i].pExpr, &nEst);
105190:     nRowEst += nEst;
105191:   }
105192:   if( rc==SQLITE_OK ){
105193:     if( nRowEst > p->aiRowEst[0] ) nRowEst = p->aiRowEst[0];
105194:     *pnRow = nRowEst;
105195:     WHERETRACE(("IN row estimate: est=%g\n", nRowEst));
105196:   }
105197:   return rc;
105198: }
105199: #endif /* defined(SQLITE_ENABLE_STAT3) */
105200: 
105201: 
105202: /*
105203: ** Find the best query plan for accessing a particular table.  Write the
105204: ** best query plan and its cost into the WhereCost object supplied as the
105205: ** last parameter.
105206: **
105207: ** The lowest cost plan wins.  The cost is an estimate of the amount of
105208: ** CPU and disk I/O needed to process the requested result.
105209: ** Factors that influence cost include:
105210: **
105211: **    *  The estimated number of rows that will be retrieved.  (The
105212: **       fewer the better.)
105213: **
105214: **    *  Whether or not sorting must occur.
105215: **
105216: **    *  Whether or not there must be separate lookups in the
105217: **       index and in the main table.
105218: **
105219: ** If there was an INDEXED BY clause (pSrc->pIndex) attached to the table in
105220: ** the SQL statement, then this function only considers plans using the 
105221: ** named index. If no such plan is found, then the returned cost is
105222: ** SQLITE_BIG_DBL. If a plan is found that uses the named index, 
105223: ** then the cost is calculated in the usual way.
105224: **
105225: ** If a NOT INDEXED clause (pSrc->notIndexed!=0) was attached to the table 
105226: ** in the SELECT statement, then no indexes are considered. However, the 
105227: ** selected plan may still take advantage of the built-in rowid primary key
105228: ** index.
105229: */
105230: static void bestBtreeIndex(
105231:   Parse *pParse,              /* The parsing context */
105232:   WhereClause *pWC,           /* The WHERE clause */
105233:   struct SrcList_item *pSrc,  /* The FROM clause term to search */
105234:   Bitmask notReady,           /* Mask of cursors not available for indexing */
105235:   Bitmask notValid,           /* Cursors not available for any purpose */
105236:   ExprList *pOrderBy,         /* The ORDER BY clause */
105237:   ExprList *pDistinct,        /* The select-list if query is DISTINCT */
105238:   WhereCost *pCost            /* Lowest cost query plan */
105239: ){
105240:   int iCur = pSrc->iCursor;   /* The cursor of the table to be accessed */
105241:   Index *pProbe;              /* An index we are evaluating */
105242:   Index *pIdx;                /* Copy of pProbe, or zero for IPK index */
105243:   int eqTermMask;             /* Current mask of valid equality operators */
105244:   int idxEqTermMask;          /* Index mask of valid equality operators */
105245:   Index sPk;                  /* A fake index object for the primary key */
105246:   tRowcnt aiRowEstPk[2];      /* The aiRowEst[] value for the sPk index */
105247:   int aiColumnPk = -1;        /* The aColumn[] value for the sPk index */
105248:   int wsFlagMask;             /* Allowed flags in pCost->plan.wsFlag */
105249: 
105250:   /* Initialize the cost to a worst-case value */
105251:   memset(pCost, 0, sizeof(*pCost));
105252:   pCost->rCost = SQLITE_BIG_DBL;
105253: 
105254:   /* If the pSrc table is the right table of a LEFT JOIN then we may not
105255:   ** use an index to satisfy IS NULL constraints on that table.  This is
105256:   ** because columns might end up being NULL if the table does not match -
105257:   ** a circumstance which the index cannot help us discover.  Ticket #2177.
105258:   */
105259:   if( pSrc->jointype & JT_LEFT ){
105260:     idxEqTermMask = WO_EQ|WO_IN;
105261:   }else{
105262:     idxEqTermMask = WO_EQ|WO_IN|WO_ISNULL;
105263:   }
105264: 
105265:   if( pSrc->pIndex ){
105266:     /* An INDEXED BY clause specifies a particular index to use */
105267:     pIdx = pProbe = pSrc->pIndex;
105268:     wsFlagMask = ~(WHERE_ROWID_EQ|WHERE_ROWID_RANGE);
105269:     eqTermMask = idxEqTermMask;
105270:   }else{
105271:     /* There is no INDEXED BY clause.  Create a fake Index object in local
105272:     ** variable sPk to represent the rowid primary key index.  Make this
105273:     ** fake index the first in a chain of Index objects with all of the real
105274:     ** indices to follow */
105275:     Index *pFirst;                  /* First of real indices on the table */
105276:     memset(&sPk, 0, sizeof(Index));
105277:     sPk.nColumn = 1;
105278:     sPk.aiColumn = &aiColumnPk;
105279:     sPk.aiRowEst = aiRowEstPk;
105280:     sPk.onError = OE_Replace;
105281:     sPk.pTable = pSrc->pTab;
105282:     aiRowEstPk[0] = pSrc->pTab->nRowEst;
105283:     aiRowEstPk[1] = 1;
105284:     pFirst = pSrc->pTab->pIndex;
105285:     if( pSrc->notIndexed==0 ){
105286:       /* The real indices of the table are only considered if the
105287:       ** NOT INDEXED qualifier is omitted from the FROM clause */
105288:       sPk.pNext = pFirst;
105289:     }
105290:     pProbe = &sPk;
105291:     wsFlagMask = ~(
105292:         WHERE_COLUMN_IN|WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_RANGE
105293:     );
105294:     eqTermMask = WO_EQ|WO_IN;
105295:     pIdx = 0;
105296:   }
105297: 
105298:   /* Loop over all indices looking for the best one to use
105299:   */
105300:   for(; pProbe; pIdx=pProbe=pProbe->pNext){
105301:     const tRowcnt * const aiRowEst = pProbe->aiRowEst;
105302:     double cost;                /* Cost of using pProbe */
105303:     double nRow;                /* Estimated number of rows in result set */
105304:     double log10N = (double)1;  /* base-10 logarithm of nRow (inexact) */
105305:     int rev;                    /* True to scan in reverse order */
105306:     int wsFlags = 0;
105307:     Bitmask used = 0;
105308: 
105309:     /* The following variables are populated based on the properties of
105310:     ** index being evaluated. They are then used to determine the expected
105311:     ** cost and number of rows returned.
105312:     **
105313:     **  nEq: 
105314:     **    Number of equality terms that can be implemented using the index.
105315:     **    In other words, the number of initial fields in the index that
105316:     **    are used in == or IN or NOT NULL constraints of the WHERE clause.
105317:     **
105318:     **  nInMul:  
105319:     **    The "in-multiplier". This is an estimate of how many seek operations 
105320:     **    SQLite must perform on the index in question. For example, if the 
105321:     **    WHERE clause is:
105322:     **
105323:     **      WHERE a IN (1, 2, 3) AND b IN (4, 5, 6)
105324:     **
105325:     **    SQLite must perform 9 lookups on an index on (a, b), so nInMul is 
105326:     **    set to 9. Given the same schema and either of the following WHERE 
105327:     **    clauses:
105328:     **
105329:     **      WHERE a =  1
105330:     **      WHERE a >= 2
105331:     **
105332:     **    nInMul is set to 1.
105333:     **
105334:     **    If there exists a WHERE term of the form "x IN (SELECT ...)", then 
105335:     **    the sub-select is assumed to return 25 rows for the purposes of 
105336:     **    determining nInMul.
105337:     **
105338:     **  bInEst:  
105339:     **    Set to true if there was at least one "x IN (SELECT ...)" term used 
105340:     **    in determining the value of nInMul.  Note that the RHS of the
105341:     **    IN operator must be a SELECT, not a value list, for this variable
105342:     **    to be true.
105343:     **
105344:     **  rangeDiv:
105345:     **    An estimate of a divisor by which to reduce the search space due
105346:     **    to inequality constraints.  In the absence of sqlite_stat3 ANALYZE
105347:     **    data, a single inequality reduces the search space to 1/4rd its
105348:     **    original size (rangeDiv==4).  Two inequalities reduce the search
105349:     **    space to 1/16th of its original size (rangeDiv==16).
105350:     **
105351:     **  bSort:   
105352:     **    Boolean. True if there is an ORDER BY clause that will require an 
105353:     **    external sort (i.e. scanning the index being evaluated will not 
105354:     **    correctly order records).
105355:     **
105356:     **  bLookup: 
105357:     **    Boolean. True if a table lookup is required for each index entry
105358:     **    visited.  In other words, true if this is not a covering index.
105359:     **    This is always false for the rowid primary key index of a table.
105360:     **    For other indexes, it is true unless all the columns of the table
105361:     **    used by the SELECT statement are present in the index (such an
105362:     **    index is sometimes described as a covering index).
105363:     **    For example, given the index on (a, b), the second of the following 
105364:     **    two queries requires table b-tree lookups in order to find the value
105365:     **    of column c, but the first does not because columns a and b are
105366:     **    both available in the index.
105367:     **
105368:     **             SELECT a, b    FROM tbl WHERE a = 1;
105369:     **             SELECT a, b, c FROM tbl WHERE a = 1;
105370:     */
105371:     int nEq;                      /* Number of == or IN terms matching index */
105372:     int bInEst = 0;               /* True if "x IN (SELECT...)" seen */
105373:     int nInMul = 1;               /* Number of distinct equalities to lookup */
105374:     double rangeDiv = (double)1;  /* Estimated reduction in search space */
105375:     int nBound = 0;               /* Number of range constraints seen */
105376:     int bSort = !!pOrderBy;       /* True if external sort required */
105377:     int bDist = !!pDistinct;      /* True if index cannot help with DISTINCT */
105378:     int bLookup = 0;              /* True if not a covering index */
105379:     WhereTerm *pTerm;             /* A single term of the WHERE clause */
105380: #ifdef SQLITE_ENABLE_STAT3
105381:     WhereTerm *pFirstTerm = 0;    /* First term matching the index */
105382: #endif
105383: 
105384:     /* Determine the values of nEq and nInMul */
105385:     for(nEq=0; nEq<pProbe->nColumn; nEq++){
105386:       int j = pProbe->aiColumn[nEq];
105387:       pTerm = findTerm(pWC, iCur, j, notReady, eqTermMask, pIdx);
105388:       if( pTerm==0 ) break;
105389:       wsFlags |= (WHERE_COLUMN_EQ|WHERE_ROWID_EQ);
105390:       testcase( pTerm->pWC!=pWC );
105391:       if( pTerm->eOperator & WO_IN ){
105392:         Expr *pExpr = pTerm->pExpr;
105393:         wsFlags |= WHERE_COLUMN_IN;
105394:         if( ExprHasProperty(pExpr, EP_xIsSelect) ){
105395:           /* "x IN (SELECT ...)":  Assume the SELECT returns 25 rows */
105396:           nInMul *= 25;
105397:           bInEst = 1;
105398:         }else if( ALWAYS(pExpr->x.pList && pExpr->x.pList->nExpr) ){
105399:           /* "x IN (value, value, ...)" */
105400:           nInMul *= pExpr->x.pList->nExpr;
105401:         }
105402:       }else if( pTerm->eOperator & WO_ISNULL ){
105403:         wsFlags |= WHERE_COLUMN_NULL;
105404:       }
105405: #ifdef SQLITE_ENABLE_STAT3
105406:       if( nEq==0 && pProbe->aSample ) pFirstTerm = pTerm;
105407: #endif
105408:       used |= pTerm->prereqRight;
105409:     }
105410:  
105411:     /* If the index being considered is UNIQUE, and there is an equality 
105412:     ** constraint for all columns in the index, then this search will find
105413:     ** at most a single row. In this case set the WHERE_UNIQUE flag to 
105414:     ** indicate this to the caller.
105415:     **
105416:     ** Otherwise, if the search may find more than one row, test to see if
105417:     ** there is a range constraint on indexed column (nEq+1) that can be 
105418:     ** optimized using the index. 
105419:     */
105420:     if( nEq==pProbe->nColumn && pProbe->onError!=OE_None ){
105421:       testcase( wsFlags & WHERE_COLUMN_IN );
105422:       testcase( wsFlags & WHERE_COLUMN_NULL );
105423:       if( (wsFlags & (WHERE_COLUMN_IN|WHERE_COLUMN_NULL))==0 ){
105424:         wsFlags |= WHERE_UNIQUE;
105425:       }
105426:     }else if( pProbe->bUnordered==0 ){
105427:       int j = (nEq==pProbe->nColumn ? -1 : pProbe->aiColumn[nEq]);
105428:       if( findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE|WO_GT|WO_GE, pIdx) ){
105429:         WhereTerm *pTop = findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE, pIdx);
105430:         WhereTerm *pBtm = findTerm(pWC, iCur, j, notReady, WO_GT|WO_GE, pIdx);
105431:         whereRangeScanEst(pParse, pProbe, nEq, pBtm, pTop, &rangeDiv);
105432:         if( pTop ){
105433:           nBound = 1;
105434:           wsFlags |= WHERE_TOP_LIMIT;
105435:           used |= pTop->prereqRight;
105436:           testcase( pTop->pWC!=pWC );
105437:         }
105438:         if( pBtm ){
105439:           nBound++;
105440:           wsFlags |= WHERE_BTM_LIMIT;
105441:           used |= pBtm->prereqRight;
105442:           testcase( pBtm->pWC!=pWC );
105443:         }
105444:         wsFlags |= (WHERE_COLUMN_RANGE|WHERE_ROWID_RANGE);
105445:       }
105446:     }
105447: 
105448:     /* If there is an ORDER BY clause and the index being considered will
105449:     ** naturally scan rows in the required order, set the appropriate flags
105450:     ** in wsFlags. Otherwise, if there is an ORDER BY clause but the index
105451:     ** will scan rows in a different order, set the bSort variable.  */
105452:     if( isSortingIndex(
105453:           pParse, pWC->pMaskSet, pProbe, iCur, pOrderBy, nEq, wsFlags, &rev)
105454:     ){
105455:       bSort = 0;
105456:       wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_ORDERBY;
105457:       wsFlags |= (rev ? WHERE_REVERSE : 0);
105458:     }
105459: 
105460:     /* If there is a DISTINCT qualifier and this index will scan rows in
105461:     ** order of the DISTINCT expressions, clear bDist and set the appropriate
105462:     ** flags in wsFlags. */
105463:     if( isDistinctIndex(pParse, pWC, pProbe, iCur, pDistinct, nEq) ){
105464:       bDist = 0;
105465:       wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_DISTINCT;
105466:     }
105467: 
105468:     /* If currently calculating the cost of using an index (not the IPK
105469:     ** index), determine if all required column data may be obtained without 
105470:     ** using the main table (i.e. if the index is a covering
105471:     ** index for this query). If it is, set the WHERE_IDX_ONLY flag in
105472:     ** wsFlags. Otherwise, set the bLookup variable to true.  */
105473:     if( pIdx && wsFlags ){
105474:       Bitmask m = pSrc->colUsed;
105475:       int j;
105476:       for(j=0; j<pIdx->nColumn; j++){
105477:         int x = pIdx->aiColumn[j];
105478:         if( x<BMS-1 ){
105479:           m &= ~(((Bitmask)1)<<x);
105480:         }
105481:       }
105482:       if( m==0 ){
105483:         wsFlags |= WHERE_IDX_ONLY;
105484:       }else{
105485:         bLookup = 1;
105486:       }
105487:     }
105488: 
105489:     /*
105490:     ** Estimate the number of rows of output.  For an "x IN (SELECT...)"
105491:     ** constraint, do not let the estimate exceed half the rows in the table.
105492:     */
105493:     nRow = (double)(aiRowEst[nEq] * nInMul);
105494:     if( bInEst && nRow*2>aiRowEst[0] ){
105495:       nRow = aiRowEst[0]/2;
105496:       nInMul = (int)(nRow / aiRowEst[nEq]);
105497:     }
105498: 
105499: #ifdef SQLITE_ENABLE_STAT3
105500:     /* If the constraint is of the form x=VALUE or x IN (E1,E2,...)
105501:     ** and we do not think that values of x are unique and if histogram
105502:     ** data is available for column x, then it might be possible
105503:     ** to get a better estimate on the number of rows based on
105504:     ** VALUE and how common that value is according to the histogram.
105505:     */
105506:     if( nRow>(double)1 && nEq==1 && pFirstTerm!=0 && aiRowEst[1]>1 ){
105507:       assert( (pFirstTerm->eOperator & (WO_EQ|WO_ISNULL|WO_IN))!=0 );
105508:       if( pFirstTerm->eOperator & (WO_EQ|WO_ISNULL) ){
105509:         testcase( pFirstTerm->eOperator==WO_EQ );
105510:         testcase( pFirstTerm->eOperator==WO_ISNULL );
105511:         whereEqualScanEst(pParse, pProbe, pFirstTerm->pExpr->pRight, &nRow);
105512:       }else if( bInEst==0 ){
105513:         assert( pFirstTerm->eOperator==WO_IN );
105514:         whereInScanEst(pParse, pProbe, pFirstTerm->pExpr->x.pList, &nRow);
105515:       }
105516:     }
105517: #endif /* SQLITE_ENABLE_STAT3 */
105518: 
105519:     /* Adjust the number of output rows and downward to reflect rows
105520:     ** that are excluded by range constraints.
105521:     */
105522:     nRow = nRow/rangeDiv;
105523:     if( nRow<1 ) nRow = 1;
105524: 
105525:     /* Experiments run on real SQLite databases show that the time needed
105526:     ** to do a binary search to locate a row in a table or index is roughly
105527:     ** log10(N) times the time to move from one row to the next row within
105528:     ** a table or index.  The actual times can vary, with the size of
105529:     ** records being an important factor.  Both moves and searches are
105530:     ** slower with larger records, presumably because fewer records fit
105531:     ** on one page and hence more pages have to be fetched.
105532:     **
105533:     ** The ANALYZE command and the sqlite_stat1 and sqlite_stat3 tables do
105534:     ** not give us data on the relative sizes of table and index records.
105535:     ** So this computation assumes table records are about twice as big
105536:     ** as index records
105537:     */
105538:     if( (wsFlags & WHERE_NOT_FULLSCAN)==0 ){
105539:       /* The cost of a full table scan is a number of move operations equal
105540:       ** to the number of rows in the table.
105541:       **
105542:       ** We add an additional 4x penalty to full table scans.  This causes
105543:       ** the cost function to err on the side of choosing an index over
105544:       ** choosing a full scan.  This 4x full-scan penalty is an arguable
105545:       ** decision and one which we expect to revisit in the future.  But
105546:       ** it seems to be working well enough at the moment.
105547:       */
105548:       cost = aiRowEst[0]*4;
105549:     }else{
105550:       log10N = estLog(aiRowEst[0]);
105551:       cost = nRow;
105552:       if( pIdx ){
105553:         if( bLookup ){
105554:           /* For an index lookup followed by a table lookup:
105555:           **    nInMul index searches to find the start of each index range
105556:           **  + nRow steps through the index
105557:           **  + nRow table searches to lookup the table entry using the rowid
105558:           */
105559:           cost += (nInMul + nRow)*log10N;
105560:         }else{
105561:           /* For a covering index:
105562:           **     nInMul index searches to find the initial entry 
105563:           **   + nRow steps through the index
105564:           */
105565:           cost += nInMul*log10N;
105566:         }
105567:       }else{
105568:         /* For a rowid primary key lookup:
105569:         **    nInMult table searches to find the initial entry for each range
105570:         **  + nRow steps through the table
105571:         */
105572:         cost += nInMul*log10N;
105573:       }
105574:     }
105575: 
105576:     /* Add in the estimated cost of sorting the result.  Actual experimental
105577:     ** measurements of sorting performance in SQLite show that sorting time
105578:     ** adds C*N*log10(N) to the cost, where N is the number of rows to be 
105579:     ** sorted and C is a factor between 1.95 and 4.3.  We will split the
105580:     ** difference and select C of 3.0.
105581:     */
105582:     if( bSort ){
105583:       cost += nRow*estLog(nRow)*3;
105584:     }
105585:     if( bDist ){
105586:       cost += nRow*estLog(nRow)*3;
105587:     }
105588: 
105589:     /**** Cost of using this index has now been computed ****/
105590: 
105591:     /* If there are additional constraints on this table that cannot
105592:     ** be used with the current index, but which might lower the number
105593:     ** of output rows, adjust the nRow value accordingly.  This only 
105594:     ** matters if the current index is the least costly, so do not bother
105595:     ** with this step if we already know this index will not be chosen.
105596:     ** Also, never reduce the output row count below 2 using this step.
105597:     **
105598:     ** It is critical that the notValid mask be used here instead of
105599:     ** the notReady mask.  When computing an "optimal" index, the notReady
105600:     ** mask will only have one bit set - the bit for the current table.
105601:     ** The notValid mask, on the other hand, always has all bits set for
105602:     ** tables that are not in outer loops.  If notReady is used here instead
105603:     ** of notValid, then a optimal index that depends on inner joins loops
105604:     ** might be selected even when there exists an optimal index that has
105605:     ** no such dependency.
105606:     */
105607:     if( nRow>2 && cost<=pCost->rCost ){
105608:       int k;                       /* Loop counter */
105609:       int nSkipEq = nEq;           /* Number of == constraints to skip */
105610:       int nSkipRange = nBound;     /* Number of < constraints to skip */
105611:       Bitmask thisTab;             /* Bitmap for pSrc */
105612: 
105613:       thisTab = getMask(pWC->pMaskSet, iCur);
105614:       for(pTerm=pWC->a, k=pWC->nTerm; nRow>2 && k; k--, pTerm++){
105615:         if( pTerm->wtFlags & TERM_VIRTUAL ) continue;
105616:         if( (pTerm->prereqAll & notValid)!=thisTab ) continue;
105617:         if( pTerm->eOperator & (WO_EQ|WO_IN|WO_ISNULL) ){
105618:           if( nSkipEq ){
105619:             /* Ignore the first nEq equality matches since the index
105620:             ** has already accounted for these */
105621:             nSkipEq--;
105622:           }else{
105623:             /* Assume each additional equality match reduces the result
105624:             ** set size by a factor of 10 */
105625:             nRow /= 10;
105626:           }
105627:         }else if( pTerm->eOperator & (WO_LT|WO_LE|WO_GT|WO_GE) ){
105628:           if( nSkipRange ){
105629:             /* Ignore the first nSkipRange range constraints since the index
105630:             ** has already accounted for these */
105631:             nSkipRange--;
105632:           }else{
105633:             /* Assume each additional range constraint reduces the result
105634:             ** set size by a factor of 3.  Indexed range constraints reduce
105635:             ** the search space by a larger factor: 4.  We make indexed range
105636:             ** more selective intentionally because of the subjective 
105637:             ** observation that indexed range constraints really are more
105638:             ** selective in practice, on average. */
105639:             nRow /= 3;
105640:           }
105641:         }else if( pTerm->eOperator!=WO_NOOP ){
105642:           /* Any other expression lowers the output row count by half */
105643:           nRow /= 2;
105644:         }
105645:       }
105646:       if( nRow<2 ) nRow = 2;
105647:     }
105648: 
105649: 
105650:     WHERETRACE((
105651:       "%s(%s): nEq=%d nInMul=%d rangeDiv=%d bSort=%d bLookup=%d wsFlags=0x%x\n"
105652:       "         notReady=0x%llx log10N=%.1f nRow=%.1f cost=%.1f used=0x%llx\n",
105653:       pSrc->pTab->zName, (pIdx ? pIdx->zName : "ipk"), 
105654:       nEq, nInMul, (int)rangeDiv, bSort, bLookup, wsFlags,
105655:       notReady, log10N, nRow, cost, used
105656:     ));
105657: 
105658:     /* If this index is the best we have seen so far, then record this
105659:     ** index and its cost in the pCost structure.
105660:     */
105661:     if( (!pIdx || wsFlags)
105662:      && (cost<pCost->rCost || (cost<=pCost->rCost && nRow<pCost->plan.nRow))
105663:     ){
105664:       pCost->rCost = cost;
105665:       pCost->used = used;
105666:       pCost->plan.nRow = nRow;
105667:       pCost->plan.wsFlags = (wsFlags&wsFlagMask);
105668:       pCost->plan.nEq = nEq;
105669:       pCost->plan.u.pIdx = pIdx;
105670:     }
105671: 
105672:     /* If there was an INDEXED BY clause, then only that one index is
105673:     ** considered. */
105674:     if( pSrc->pIndex ) break;
105675: 
105676:     /* Reset masks for the next index in the loop */
105677:     wsFlagMask = ~(WHERE_ROWID_EQ|WHERE_ROWID_RANGE);
105678:     eqTermMask = idxEqTermMask;
105679:   }
105680: 
105681:   /* If there is no ORDER BY clause and the SQLITE_ReverseOrder flag
105682:   ** is set, then reverse the order that the index will be scanned
105683:   ** in. This is used for application testing, to help find cases
105684:   ** where application behaviour depends on the (undefined) order that
105685:   ** SQLite outputs rows in in the absence of an ORDER BY clause.  */
105686:   if( !pOrderBy && pParse->db->flags & SQLITE_ReverseOrder ){
105687:     pCost->plan.wsFlags |= WHERE_REVERSE;
105688:   }
105689: 
105690:   assert( pOrderBy || (pCost->plan.wsFlags&WHERE_ORDERBY)==0 );
105691:   assert( pCost->plan.u.pIdx==0 || (pCost->plan.wsFlags&WHERE_ROWID_EQ)==0 );
105692:   assert( pSrc->pIndex==0 
105693:        || pCost->plan.u.pIdx==0 
105694:        || pCost->plan.u.pIdx==pSrc->pIndex 
105695:   );
105696: 
105697:   WHERETRACE(("best index is: %s\n", 
105698:     ((pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ? "none" : 
105699:          pCost->plan.u.pIdx ? pCost->plan.u.pIdx->zName : "ipk")
105700:   ));
105701:   
105702:   bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
105703:   bestAutomaticIndex(pParse, pWC, pSrc, notReady, pCost);
105704:   pCost->plan.wsFlags |= eqTermMask;
105705: }
105706: 
105707: /*
105708: ** Find the query plan for accessing table pSrc->pTab. Write the
105709: ** best query plan and its cost into the WhereCost object supplied 
105710: ** as the last parameter. This function may calculate the cost of
105711: ** both real and virtual table scans.
105712: */
105713: static void bestIndex(
105714:   Parse *pParse,              /* The parsing context */
105715:   WhereClause *pWC,           /* The WHERE clause */
105716:   struct SrcList_item *pSrc,  /* The FROM clause term to search */
105717:   Bitmask notReady,           /* Mask of cursors not available for indexing */
105718:   Bitmask notValid,           /* Cursors not available for any purpose */
105719:   ExprList *pOrderBy,         /* The ORDER BY clause */
105720:   WhereCost *pCost            /* Lowest cost query plan */
105721: ){
105722: #ifndef SQLITE_OMIT_VIRTUALTABLE
105723:   if( IsVirtual(pSrc->pTab) ){
105724:     sqlite3_index_info *p = 0;
105725:     bestVirtualIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost,&p);
105726:     if( p->needToFreeIdxStr ){
105727:       sqlite3_free(p->idxStr);
105728:     }
105729:     sqlite3DbFree(pParse->db, p);
105730:   }else
105731: #endif
105732:   {
105733:     bestBtreeIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, 0, pCost);
105734:   }
105735: }
105736: 
105737: /*
105738: ** Disable a term in the WHERE clause.  Except, do not disable the term
105739: ** if it controls a LEFT OUTER JOIN and it did not originate in the ON
105740: ** or USING clause of that join.
105741: **
105742: ** Consider the term t2.z='ok' in the following queries:
105743: **
105744: **   (1)  SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x WHERE t2.z='ok'
105745: **   (2)  SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x AND t2.z='ok'
105746: **   (3)  SELECT * FROM t1, t2 WHERE t1.a=t2.x AND t2.z='ok'
105747: **
105748: ** The t2.z='ok' is disabled in the in (2) because it originates
105749: ** in the ON clause.  The term is disabled in (3) because it is not part
105750: ** of a LEFT OUTER JOIN.  In (1), the term is not disabled.
105751: **
105752: ** IMPLEMENTATION-OF: R-24597-58655 No tests are done for terms that are
105753: ** completely satisfied by indices.
105754: **
105755: ** Disabling a term causes that term to not be tested in the inner loop
105756: ** of the join.  Disabling is an optimization.  When terms are satisfied
105757: ** by indices, we disable them to prevent redundant tests in the inner
105758: ** loop.  We would get the correct results if nothing were ever disabled,
105759: ** but joins might run a little slower.  The trick is to disable as much
105760: ** as we can without disabling too much.  If we disabled in (1), we'd get
105761: ** the wrong answer.  See ticket #813.
105762: */
105763: static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
105764:   if( pTerm
105765:       && (pTerm->wtFlags & TERM_CODED)==0
105766:       && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin))
105767:   ){
105768:     pTerm->wtFlags |= TERM_CODED;
105769:     if( pTerm->iParent>=0 ){
105770:       WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent];
105771:       if( (--pOther->nChild)==0 ){
105772:         disableTerm(pLevel, pOther);
105773:       }
105774:     }
105775:   }
105776: }
105777: 
105778: /*
105779: ** Code an OP_Affinity opcode to apply the column affinity string zAff
105780: ** to the n registers starting at base. 
105781: **
105782: ** As an optimization, SQLITE_AFF_NONE entries (which are no-ops) at the
105783: ** beginning and end of zAff are ignored.  If all entries in zAff are
105784: ** SQLITE_AFF_NONE, then no code gets generated.
105785: **
105786: ** This routine makes its own copy of zAff so that the caller is free
105787: ** to modify zAff after this routine returns.
105788: */
105789: static void codeApplyAffinity(Parse *pParse, int base, int n, char *zAff){
105790:   Vdbe *v = pParse->pVdbe;
105791:   if( zAff==0 ){
105792:     assert( pParse->db->mallocFailed );
105793:     return;
105794:   }
105795:   assert( v!=0 );
105796: 
105797:   /* Adjust base and n to skip over SQLITE_AFF_NONE entries at the beginning
105798:   ** and end of the affinity string.
105799:   */
105800:   while( n>0 && zAff[0]==SQLITE_AFF_NONE ){
105801:     n--;
105802:     base++;
105803:     zAff++;
105804:   }
105805:   while( n>1 && zAff[n-1]==SQLITE_AFF_NONE ){
105806:     n--;
105807:   }
105808: 
105809:   /* Code the OP_Affinity opcode if there is anything left to do. */
105810:   if( n>0 ){
105811:     sqlite3VdbeAddOp2(v, OP_Affinity, base, n);
105812:     sqlite3VdbeChangeP4(v, -1, zAff, n);
105813:     sqlite3ExprCacheAffinityChange(pParse, base, n);
105814:   }
105815: }
105816: 
105817: 
105818: /*
105819: ** Generate code for a single equality term of the WHERE clause.  An equality
105820: ** term can be either X=expr or X IN (...).   pTerm is the term to be 
105821: ** coded.
105822: **
105823: ** The current value for the constraint is left in register iReg.
105824: **
105825: ** For a constraint of the form X=expr, the expression is evaluated and its
105826: ** result is left on the stack.  For constraints of the form X IN (...)
105827: ** this routine sets up a loop that will iterate over all values of X.
105828: */
105829: static int codeEqualityTerm(
105830:   Parse *pParse,      /* The parsing context */
105831:   WhereTerm *pTerm,   /* The term of the WHERE clause to be coded */
105832:   WhereLevel *pLevel, /* When level of the FROM clause we are working on */
105833:   int iTarget         /* Attempt to leave results in this register */
105834: ){
105835:   Expr *pX = pTerm->pExpr;
105836:   Vdbe *v = pParse->pVdbe;
105837:   int iReg;                  /* Register holding results */
105838: 
105839:   assert( iTarget>0 );
105840:   if( pX->op==TK_EQ ){
105841:     iReg = sqlite3ExprCodeTarget(pParse, pX->pRight, iTarget);
105842:   }else if( pX->op==TK_ISNULL ){
105843:     iReg = iTarget;
105844:     sqlite3VdbeAddOp2(v, OP_Null, 0, iReg);
105845: #ifndef SQLITE_OMIT_SUBQUERY
105846:   }else{
105847:     int eType;
105848:     int iTab;
105849:     struct InLoop *pIn;
105850: 
105851:     assert( pX->op==TK_IN );
105852:     iReg = iTarget;
105853:     eType = sqlite3FindInIndex(pParse, pX, 0);
105854:     iTab = pX->iTable;
105855:     sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0);
105856:     assert( pLevel->plan.wsFlags & WHERE_IN_ABLE );
105857:     if( pLevel->u.in.nIn==0 ){
105858:       pLevel->addrNxt = sqlite3VdbeMakeLabel(v);
105859:     }
105860:     pLevel->u.in.nIn++;
105861:     pLevel->u.in.aInLoop =
105862:        sqlite3DbReallocOrFree(pParse->db, pLevel->u.in.aInLoop,
105863:                               sizeof(pLevel->u.in.aInLoop[0])*pLevel->u.in.nIn);
105864:     pIn = pLevel->u.in.aInLoop;
105865:     if( pIn ){
105866:       pIn += pLevel->u.in.nIn - 1;
105867:       pIn->iCur = iTab;
105868:       if( eType==IN_INDEX_ROWID ){
105869:         pIn->addrInTop = sqlite3VdbeAddOp2(v, OP_Rowid, iTab, iReg);
105870:       }else{
105871:         pIn->addrInTop = sqlite3VdbeAddOp3(v, OP_Column, iTab, 0, iReg);
105872:       }
105873:       sqlite3VdbeAddOp1(v, OP_IsNull, iReg);
105874:     }else{
105875:       pLevel->u.in.nIn = 0;
105876:     }
105877: #endif
105878:   }
105879:   disableTerm(pLevel, pTerm);
105880:   return iReg;
105881: }
105882: 
105883: /*
105884: ** Generate code that will evaluate all == and IN constraints for an
105885: ** index.
105886: **
105887: ** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c).
105888: ** Suppose the WHERE clause is this:  a==5 AND b IN (1,2,3) AND c>5 AND c<10
105889: ** The index has as many as three equality constraints, but in this
105890: ** example, the third "c" value is an inequality.  So only two 
105891: ** constraints are coded.  This routine will generate code to evaluate
105892: ** a==5 and b IN (1,2,3).  The current values for a and b will be stored
105893: ** in consecutive registers and the index of the first register is returned.
105894: **
105895: ** In the example above nEq==2.  But this subroutine works for any value
105896: ** of nEq including 0.  If nEq==0, this routine is nearly a no-op.
105897: ** The only thing it does is allocate the pLevel->iMem memory cell and
105898: ** compute the affinity string.
105899: **
105900: ** This routine always allocates at least one memory cell and returns
105901: ** the index of that memory cell. The code that
105902: ** calls this routine will use that memory cell to store the termination
105903: ** key value of the loop.  If one or more IN operators appear, then
105904: ** this routine allocates an additional nEq memory cells for internal
105905: ** use.
105906: **
105907: ** Before returning, *pzAff is set to point to a buffer containing a
105908: ** copy of the column affinity string of the index allocated using
105909: ** sqlite3DbMalloc(). Except, entries in the copy of the string associated
105910: ** with equality constraints that use NONE affinity are set to
105911: ** SQLITE_AFF_NONE. This is to deal with SQL such as the following:
105912: **
105913: **   CREATE TABLE t1(a TEXT PRIMARY KEY, b);
105914: **   SELECT ... FROM t1 AS t2, t1 WHERE t1.a = t2.b;
105915: **
105916: ** In the example above, the index on t1(a) has TEXT affinity. But since
105917: ** the right hand side of the equality constraint (t2.b) has NONE affinity,
105918: ** no conversion should be attempted before using a t2.b value as part of
105919: ** a key to search the index. Hence the first byte in the returned affinity
105920: ** string in this example would be set to SQLITE_AFF_NONE.
105921: */
105922: static int codeAllEqualityTerms(
105923:   Parse *pParse,        /* Parsing context */
105924:   WhereLevel *pLevel,   /* Which nested loop of the FROM we are coding */
105925:   WhereClause *pWC,     /* The WHERE clause */
105926:   Bitmask notReady,     /* Which parts of FROM have not yet been coded */
105927:   int nExtraReg,        /* Number of extra registers to allocate */
105928:   char **pzAff          /* OUT: Set to point to affinity string */
105929: ){
105930:   int nEq = pLevel->plan.nEq;   /* The number of == or IN constraints to code */
105931:   Vdbe *v = pParse->pVdbe;      /* The vm under construction */
105932:   Index *pIdx;                  /* The index being used for this loop */
105933:   int iCur = pLevel->iTabCur;   /* The cursor of the table */
105934:   WhereTerm *pTerm;             /* A single constraint term */
105935:   int j;                        /* Loop counter */
105936:   int regBase;                  /* Base register */
105937:   int nReg;                     /* Number of registers to allocate */
105938:   char *zAff;                   /* Affinity string to return */
105939: 
105940:   /* This module is only called on query plans that use an index. */
105941:   assert( pLevel->plan.wsFlags & WHERE_INDEXED );
105942:   pIdx = pLevel->plan.u.pIdx;
105943: 
105944:   /* Figure out how many memory cells we will need then allocate them.
105945:   */
105946:   regBase = pParse->nMem + 1;
105947:   nReg = pLevel->plan.nEq + nExtraReg;
105948:   pParse->nMem += nReg;
105949: 
105950:   zAff = sqlite3DbStrDup(pParse->db, sqlite3IndexAffinityStr(v, pIdx));
105951:   if( !zAff ){
105952:     pParse->db->mallocFailed = 1;
105953:   }
105954: 
105955:   /* Evaluate the equality constraints
105956:   */
105957:   assert( pIdx->nColumn>=nEq );
105958:   for(j=0; j<nEq; j++){
105959:     int r1;
105960:     int k = pIdx->aiColumn[j];
105961:     pTerm = findTerm(pWC, iCur, k, notReady, pLevel->plan.wsFlags, pIdx);
105962:     if( NEVER(pTerm==0) ) break;
105963:     /* The following true for indices with redundant columns. 
105964:     ** Ex: CREATE INDEX i1 ON t1(a,b,a); SELECT * FROM t1 WHERE a=0 AND b=0; */
105965:     testcase( (pTerm->wtFlags & TERM_CODED)!=0 );
105966:     testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
105967:     r1 = codeEqualityTerm(pParse, pTerm, pLevel, regBase+j);
105968:     if( r1!=regBase+j ){
105969:       if( nReg==1 ){
105970:         sqlite3ReleaseTempReg(pParse, regBase);
105971:         regBase = r1;
105972:       }else{
105973:         sqlite3VdbeAddOp2(v, OP_SCopy, r1, regBase+j);
105974:       }
105975:     }
105976:     testcase( pTerm->eOperator & WO_ISNULL );
105977:     testcase( pTerm->eOperator & WO_IN );
105978:     if( (pTerm->eOperator & (WO_ISNULL|WO_IN))==0 ){
105979:       Expr *pRight = pTerm->pExpr->pRight;
105980:       sqlite3ExprCodeIsNullJump(v, pRight, regBase+j, pLevel->addrBrk);
105981:       if( zAff ){
105982:         if( sqlite3CompareAffinity(pRight, zAff[j])==SQLITE_AFF_NONE ){
105983:           zAff[j] = SQLITE_AFF_NONE;
105984:         }
105985:         if( sqlite3ExprNeedsNoAffinityChange(pRight, zAff[j]) ){
105986:           zAff[j] = SQLITE_AFF_NONE;
105987:         }
105988:       }
105989:     }
105990:   }
105991:   *pzAff = zAff;
105992:   return regBase;
105993: }
105994: 
105995: #ifndef SQLITE_OMIT_EXPLAIN
105996: /*
105997: ** This routine is a helper for explainIndexRange() below
105998: **
105999: ** pStr holds the text of an expression that we are building up one term
106000: ** at a time.  This routine adds a new term to the end of the expression.
106001: ** Terms are separated by AND so add the "AND" text for second and subsequent
106002: ** terms only.
106003: */
106004: static void explainAppendTerm(
106005:   StrAccum *pStr,             /* The text expression being built */
106006:   int iTerm,                  /* Index of this term.  First is zero */
106007:   const char *zColumn,        /* Name of the column */
106008:   const char *zOp             /* Name of the operator */
106009: ){
106010:   if( iTerm ) sqlite3StrAccumAppend(pStr, " AND ", 5);
106011:   sqlite3StrAccumAppend(pStr, zColumn, -1);
106012:   sqlite3StrAccumAppend(pStr, zOp, 1);
106013:   sqlite3StrAccumAppend(pStr, "?", 1);
106014: }
106015: 
106016: /*
106017: ** Argument pLevel describes a strategy for scanning table pTab. This 
106018: ** function returns a pointer to a string buffer containing a description
106019: ** of the subset of table rows scanned by the strategy in the form of an
106020: ** SQL expression. Or, if all rows are scanned, NULL is returned.
106021: **
106022: ** For example, if the query:
106023: **
106024: **   SELECT * FROM t1 WHERE a=1 AND b>2;
106025: **
106026: ** is run and there is an index on (a, b), then this function returns a
106027: ** string similar to:
106028: **
106029: **   "a=? AND b>?"
106030: **
106031: ** The returned pointer points to memory obtained from sqlite3DbMalloc().
106032: ** It is the responsibility of the caller to free the buffer when it is
106033: ** no longer required.
106034: */
106035: static char *explainIndexRange(sqlite3 *db, WhereLevel *pLevel, Table *pTab){
106036:   WherePlan *pPlan = &pLevel->plan;
106037:   Index *pIndex = pPlan->u.pIdx;
106038:   int nEq = pPlan->nEq;
106039:   int i, j;
106040:   Column *aCol = pTab->aCol;
106041:   int *aiColumn = pIndex->aiColumn;
106042:   StrAccum txt;
106043: 
106044:   if( nEq==0 && (pPlan->wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ){
106045:     return 0;
106046:   }
106047:   sqlite3StrAccumInit(&txt, 0, 0, SQLITE_MAX_LENGTH);
106048:   txt.db = db;
106049:   sqlite3StrAccumAppend(&txt, " (", 2);
106050:   for(i=0; i<nEq; i++){
106051:     explainAppendTerm(&txt, i, aCol[aiColumn[i]].zName, "=");
106052:   }
106053: 
106054:   j = i;
106055:   if( pPlan->wsFlags&WHERE_BTM_LIMIT ){
106056:     char *z = (j==pIndex->nColumn ) ? "rowid" : aCol[aiColumn[j]].zName;
106057:     explainAppendTerm(&txt, i++, z, ">");
106058:   }
106059:   if( pPlan->wsFlags&WHERE_TOP_LIMIT ){
106060:     char *z = (j==pIndex->nColumn ) ? "rowid" : aCol[aiColumn[j]].zName;
106061:     explainAppendTerm(&txt, i, z, "<");
106062:   }
106063:   sqlite3StrAccumAppend(&txt, ")", 1);
106064:   return sqlite3StrAccumFinish(&txt);
106065: }
106066: 
106067: /*
106068: ** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN
106069: ** command. If the query being compiled is an EXPLAIN QUERY PLAN, a single
106070: ** record is added to the output to describe the table scan strategy in 
106071: ** pLevel.
106072: */
106073: static void explainOneScan(
106074:   Parse *pParse,                  /* Parse context */
106075:   SrcList *pTabList,              /* Table list this loop refers to */
106076:   WhereLevel *pLevel,             /* Scan to write OP_Explain opcode for */
106077:   int iLevel,                     /* Value for "level" column of output */
106078:   int iFrom,                      /* Value for "from" column of output */
106079:   u16 wctrlFlags                  /* Flags passed to sqlite3WhereBegin() */
106080: ){
106081:   if( pParse->explain==2 ){
106082:     u32 flags = pLevel->plan.wsFlags;
106083:     struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
106084:     Vdbe *v = pParse->pVdbe;      /* VM being constructed */
106085:     sqlite3 *db = pParse->db;     /* Database handle */
106086:     char *zMsg;                   /* Text to add to EQP output */
106087:     sqlite3_int64 nRow;           /* Expected number of rows visited by scan */
106088:     int iId = pParse->iSelectId;  /* Select id (left-most output column) */
106089:     int isSearch;                 /* True for a SEARCH. False for SCAN. */
106090: 
106091:     if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return;
106092: 
106093:     isSearch = (pLevel->plan.nEq>0)
106094:              || (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0
106095:              || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX));
106096: 
106097:     zMsg = sqlite3MPrintf(db, "%s", isSearch?"SEARCH":"SCAN");
106098:     if( pItem->pSelect ){
106099:       zMsg = sqlite3MAppendf(db, zMsg, "%s SUBQUERY %d", zMsg,pItem->iSelectId);
106100:     }else{
106101:       zMsg = sqlite3MAppendf(db, zMsg, "%s TABLE %s", zMsg, pItem->zName);
106102:     }
106103: 
106104:     if( pItem->zAlias ){
106105:       zMsg = sqlite3MAppendf(db, zMsg, "%s AS %s", zMsg, pItem->zAlias);
106106:     }
106107:     if( (flags & WHERE_INDEXED)!=0 ){
106108:       char *zWhere = explainIndexRange(db, pLevel, pItem->pTab);
106109:       zMsg = sqlite3MAppendf(db, zMsg, "%s USING %s%sINDEX%s%s%s", zMsg, 
106110:           ((flags & WHERE_TEMP_INDEX)?"AUTOMATIC ":""),
106111:           ((flags & WHERE_IDX_ONLY)?"COVERING ":""),
106112:           ((flags & WHERE_TEMP_INDEX)?"":" "),
106113:           ((flags & WHERE_TEMP_INDEX)?"": pLevel->plan.u.pIdx->zName),
106114:           zWhere
106115:       );
106116:       sqlite3DbFree(db, zWhere);
106117:     }else if( flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
106118:       zMsg = sqlite3MAppendf(db, zMsg, "%s USING INTEGER PRIMARY KEY", zMsg);
106119: 
106120:       if( flags&WHERE_ROWID_EQ ){
106121:         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid=?)", zMsg);
106122:       }else if( (flags&WHERE_BOTH_LIMIT)==WHERE_BOTH_LIMIT ){
106123:         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>? AND rowid<?)", zMsg);
106124:       }else if( flags&WHERE_BTM_LIMIT ){
106125:         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>?)", zMsg);
106126:       }else if( flags&WHERE_TOP_LIMIT ){
106127:         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid<?)", zMsg);
106128:       }
106129:     }
106130: #ifndef SQLITE_OMIT_VIRTUALTABLE
106131:     else if( (flags & WHERE_VIRTUALTABLE)!=0 ){
106132:       sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx;
106133:       zMsg = sqlite3MAppendf(db, zMsg, "%s VIRTUAL TABLE INDEX %d:%s", zMsg,
106134:                   pVtabIdx->idxNum, pVtabIdx->idxStr);
106135:     }
106136: #endif
106137:     if( wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX) ){
106138:       testcase( wctrlFlags & WHERE_ORDERBY_MIN );
106139:       nRow = 1;
106140:     }else{
106141:       nRow = (sqlite3_int64)pLevel->plan.nRow;
106142:     }
106143:     zMsg = sqlite3MAppendf(db, zMsg, "%s (~%lld rows)", zMsg, nRow);
106144:     sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg, P4_DYNAMIC);
106145:   }
106146: }
106147: #else
106148: # define explainOneScan(u,v,w,x,y,z)
106149: #endif /* SQLITE_OMIT_EXPLAIN */
106150: 
106151: 
106152: /*
106153: ** Generate code for the start of the iLevel-th loop in the WHERE clause
106154: ** implementation described by pWInfo.
106155: */
106156: static Bitmask codeOneLoopStart(
106157:   WhereInfo *pWInfo,   /* Complete information about the WHERE clause */
106158:   int iLevel,          /* Which level of pWInfo->a[] should be coded */
106159:   u16 wctrlFlags,      /* One of the WHERE_* flags defined in sqliteInt.h */
106160:   Bitmask notReady,    /* Which tables are currently available */
106161:   Expr *pWhere         /* Complete WHERE clause */
106162: ){
106163:   int j, k;            /* Loop counters */
106164:   int iCur;            /* The VDBE cursor for the table */
106165:   int addrNxt;         /* Where to jump to continue with the next IN case */
106166:   int omitTable;       /* True if we use the index only */
106167:   int bRev;            /* True if we need to scan in reverse order */
106168:   WhereLevel *pLevel;  /* The where level to be coded */
106169:   WhereClause *pWC;    /* Decomposition of the entire WHERE clause */
106170:   WhereTerm *pTerm;               /* A WHERE clause term */
106171:   Parse *pParse;                  /* Parsing context */
106172:   Vdbe *v;                        /* The prepared stmt under constructions */
106173:   struct SrcList_item *pTabItem;  /* FROM clause term being coded */
106174:   int addrBrk;                    /* Jump here to break out of the loop */
106175:   int addrCont;                   /* Jump here to continue with next cycle */
106176:   int iRowidReg = 0;        /* Rowid is stored in this register, if not zero */
106177:   int iReleaseReg = 0;      /* Temp register to free before returning */
106178: 
106179:   pParse = pWInfo->pParse;
106180:   v = pParse->pVdbe;
106181:   pWC = pWInfo->pWC;
106182:   pLevel = &pWInfo->a[iLevel];
106183:   pTabItem = &pWInfo->pTabList->a[pLevel->iFrom];
106184:   iCur = pTabItem->iCursor;
106185:   bRev = (pLevel->plan.wsFlags & WHERE_REVERSE)!=0;
106186:   omitTable = (pLevel->plan.wsFlags & WHERE_IDX_ONLY)!=0 
106187:            && (wctrlFlags & WHERE_FORCE_TABLE)==0;
106188: 
106189:   /* Create labels for the "break" and "continue" instructions
106190:   ** for the current loop.  Jump to addrBrk to break out of a loop.
106191:   ** Jump to cont to go immediately to the next iteration of the
106192:   ** loop.
106193:   **
106194:   ** When there is an IN operator, we also have a "addrNxt" label that
106195:   ** means to continue with the next IN value combination.  When
106196:   ** there are no IN operators in the constraints, the "addrNxt" label
106197:   ** is the same as "addrBrk".
106198:   */
106199:   addrBrk = pLevel->addrBrk = pLevel->addrNxt = sqlite3VdbeMakeLabel(v);
106200:   addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(v);
106201: 
106202:   /* If this is the right table of a LEFT OUTER JOIN, allocate and
106203:   ** initialize a memory cell that records if this table matches any
106204:   ** row of the left table of the join.
106205:   */
106206:   if( pLevel->iFrom>0 && (pTabItem[0].jointype & JT_LEFT)!=0 ){
106207:     pLevel->iLeftJoin = ++pParse->nMem;
106208:     sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin);
106209:     VdbeComment((v, "init LEFT JOIN no-match flag"));
106210:   }
106211: 
106212: #ifndef SQLITE_OMIT_VIRTUALTABLE
106213:   if(  (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){
106214:     /* Case 0:  The table is a virtual-table.  Use the VFilter and VNext
106215:     **          to access the data.
106216:     */
106217:     int iReg;   /* P3 Value for OP_VFilter */
106218:     sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx;
106219:     int nConstraint = pVtabIdx->nConstraint;
106220:     struct sqlite3_index_constraint_usage *aUsage =
106221:                                                 pVtabIdx->aConstraintUsage;
106222:     const struct sqlite3_index_constraint *aConstraint =
106223:                                                 pVtabIdx->aConstraint;
106224: 
106225:     sqlite3ExprCachePush(pParse);
106226:     iReg = sqlite3GetTempRange(pParse, nConstraint+2);
106227:     for(j=1; j<=nConstraint; j++){
106228:       for(k=0; k<nConstraint; k++){
106229:         if( aUsage[k].argvIndex==j ){
106230:           int iTerm = aConstraint[k].iTermOffset;
106231:           sqlite3ExprCode(pParse, pWC->a[iTerm].pExpr->pRight, iReg+j+1);
106232:           break;
106233:         }
106234:       }
106235:       if( k==nConstraint ) break;
106236:     }
106237:     sqlite3VdbeAddOp2(v, OP_Integer, pVtabIdx->idxNum, iReg);
106238:     sqlite3VdbeAddOp2(v, OP_Integer, j-1, iReg+1);
106239:     sqlite3VdbeAddOp4(v, OP_VFilter, iCur, addrBrk, iReg, pVtabIdx->idxStr,
106240:                       pVtabIdx->needToFreeIdxStr ? P4_MPRINTF : P4_STATIC);
106241:     pVtabIdx->needToFreeIdxStr = 0;
106242:     for(j=0; j<nConstraint; j++){
106243:       if( aUsage[j].omit ){
106244:         int iTerm = aConstraint[j].iTermOffset;
106245:         disableTerm(pLevel, &pWC->a[iTerm]);
106246:       }
106247:     }
106248:     pLevel->op = OP_VNext;
106249:     pLevel->p1 = iCur;
106250:     pLevel->p2 = sqlite3VdbeCurrentAddr(v);
106251:     sqlite3ReleaseTempRange(pParse, iReg, nConstraint+2);
106252:     sqlite3ExprCachePop(pParse, 1);
106253:   }else
106254: #endif /* SQLITE_OMIT_VIRTUALTABLE */
106255: 
106256:   if( pLevel->plan.wsFlags & WHERE_ROWID_EQ ){
106257:     /* Case 1:  We can directly reference a single row using an
106258:     **          equality comparison against the ROWID field.  Or
106259:     **          we reference multiple rows using a "rowid IN (...)"
106260:     **          construct.
106261:     */
106262:     iReleaseReg = sqlite3GetTempReg(pParse);
106263:     pTerm = findTerm(pWC, iCur, -1, notReady, WO_EQ|WO_IN, 0);
106264:     assert( pTerm!=0 );
106265:     assert( pTerm->pExpr!=0 );
106266:     assert( pTerm->leftCursor==iCur );
106267:     assert( omitTable==0 );
106268:     testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
106269:     iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, iReleaseReg);
106270:     addrNxt = pLevel->addrNxt;
106271:     sqlite3VdbeAddOp2(v, OP_MustBeInt, iRowidReg, addrNxt);
106272:     sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addrNxt, iRowidReg);
106273:     sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
106274:     VdbeComment((v, "pk"));
106275:     pLevel->op = OP_Noop;
106276:   }else if( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ){
106277:     /* Case 2:  We have an inequality comparison against the ROWID field.
106278:     */
106279:     int testOp = OP_Noop;
106280:     int start;
106281:     int memEndValue = 0;
106282:     WhereTerm *pStart, *pEnd;
106283: 
106284:     assert( omitTable==0 );
106285:     pStart = findTerm(pWC, iCur, -1, notReady, WO_GT|WO_GE, 0);
106286:     pEnd = findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE, 0);
106287:     if( bRev ){
106288:       pTerm = pStart;
106289:       pStart = pEnd;
106290:       pEnd = pTerm;
106291:     }
106292:     if( pStart ){
106293:       Expr *pX;             /* The expression that defines the start bound */
106294:       int r1, rTemp;        /* Registers for holding the start boundary */
106295: 
106296:       /* The following constant maps TK_xx codes into corresponding 
106297:       ** seek opcodes.  It depends on a particular ordering of TK_xx
106298:       */
106299:       const u8 aMoveOp[] = {
106300:            /* TK_GT */  OP_SeekGt,
106301:            /* TK_LE */  OP_SeekLe,
106302:            /* TK_LT */  OP_SeekLt,
106303:            /* TK_GE */  OP_SeekGe
106304:       };
106305:       assert( TK_LE==TK_GT+1 );      /* Make sure the ordering.. */
106306:       assert( TK_LT==TK_GT+2 );      /*  ... of the TK_xx values... */
106307:       assert( TK_GE==TK_GT+3 );      /*  ... is correcct. */
106308: 
106309:       testcase( pStart->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
106310:       pX = pStart->pExpr;
106311:       assert( pX!=0 );
106312:       assert( pStart->leftCursor==iCur );
106313:       r1 = sqlite3ExprCodeTemp(pParse, pX->pRight, &rTemp);
106314:       sqlite3VdbeAddOp3(v, aMoveOp[pX->op-TK_GT], iCur, addrBrk, r1);
106315:       VdbeComment((v, "pk"));
106316:       sqlite3ExprCacheAffinityChange(pParse, r1, 1);
106317:       sqlite3ReleaseTempReg(pParse, rTemp);
106318:       disableTerm(pLevel, pStart);
106319:     }else{
106320:       sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrBrk);
106321:     }
106322:     if( pEnd ){
106323:       Expr *pX;
106324:       pX = pEnd->pExpr;
106325:       assert( pX!=0 );
106326:       assert( pEnd->leftCursor==iCur );
106327:       testcase( pEnd->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
106328:       memEndValue = ++pParse->nMem;
106329:       sqlite3ExprCode(pParse, pX->pRight, memEndValue);
106330:       if( pX->op==TK_LT || pX->op==TK_GT ){
106331:         testOp = bRev ? OP_Le : OP_Ge;
106332:       }else{
106333:         testOp = bRev ? OP_Lt : OP_Gt;
106334:       }
106335:       disableTerm(pLevel, pEnd);
106336:     }
106337:     start = sqlite3VdbeCurrentAddr(v);
106338:     pLevel->op = bRev ? OP_Prev : OP_Next;
106339:     pLevel->p1 = iCur;
106340:     pLevel->p2 = start;
106341:     if( pStart==0 && pEnd==0 ){
106342:       pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
106343:     }else{
106344:       assert( pLevel->p5==0 );
106345:     }
106346:     if( testOp!=OP_Noop ){
106347:       iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse);
106348:       sqlite3VdbeAddOp2(v, OP_Rowid, iCur, iRowidReg);
106349:       sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
106350:       sqlite3VdbeAddOp3(v, testOp, memEndValue, addrBrk, iRowidReg);
106351:       sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC | SQLITE_JUMPIFNULL);
106352:     }
106353:   }else if( pLevel->plan.wsFlags & (WHERE_COLUMN_RANGE|WHERE_COLUMN_EQ) ){
106354:     /* Case 3: A scan using an index.
106355:     **
106356:     **         The WHERE clause may contain zero or more equality 
106357:     **         terms ("==" or "IN" operators) that refer to the N
106358:     **         left-most columns of the index. It may also contain
106359:     **         inequality constraints (>, <, >= or <=) on the indexed
106360:     **         column that immediately follows the N equalities. Only 
106361:     **         the right-most column can be an inequality - the rest must
106362:     **         use the "==" and "IN" operators. For example, if the 
106363:     **         index is on (x,y,z), then the following clauses are all 
106364:     **         optimized:
106365:     **
106366:     **            x=5
106367:     **            x=5 AND y=10
106368:     **            x=5 AND y<10
106369:     **            x=5 AND y>5 AND y<10
106370:     **            x=5 AND y=5 AND z<=10
106371:     **
106372:     **         The z<10 term of the following cannot be used, only
106373:     **         the x=5 term:
106374:     **
106375:     **            x=5 AND z<10
106376:     **
106377:     **         N may be zero if there are inequality constraints.
106378:     **         If there are no inequality constraints, then N is at
106379:     **         least one.
106380:     **
106381:     **         This case is also used when there are no WHERE clause
106382:     **         constraints but an index is selected anyway, in order
106383:     **         to force the output order to conform to an ORDER BY.
106384:     */  
106385:     static const u8 aStartOp[] = {
106386:       0,
106387:       0,
106388:       OP_Rewind,           /* 2: (!start_constraints && startEq &&  !bRev) */
106389:       OP_Last,             /* 3: (!start_constraints && startEq &&   bRev) */
106390:       OP_SeekGt,           /* 4: (start_constraints  && !startEq && !bRev) */
106391:       OP_SeekLt,           /* 5: (start_constraints  && !startEq &&  bRev) */
106392:       OP_SeekGe,           /* 6: (start_constraints  &&  startEq && !bRev) */
106393:       OP_SeekLe            /* 7: (start_constraints  &&  startEq &&  bRev) */
106394:     };
106395:     static const u8 aEndOp[] = {
106396:       OP_Noop,             /* 0: (!end_constraints) */
106397:       OP_IdxGE,            /* 1: (end_constraints && !bRev) */
106398:       OP_IdxLT             /* 2: (end_constraints && bRev) */
106399:     };
106400:     int nEq = pLevel->plan.nEq;  /* Number of == or IN terms */
106401:     int isMinQuery = 0;          /* If this is an optimized SELECT min(x).. */
106402:     int regBase;                 /* Base register holding constraint values */
106403:     int r1;                      /* Temp register */
106404:     WhereTerm *pRangeStart = 0;  /* Inequality constraint at range start */
106405:     WhereTerm *pRangeEnd = 0;    /* Inequality constraint at range end */
106406:     int startEq;                 /* True if range start uses ==, >= or <= */
106407:     int endEq;                   /* True if range end uses ==, >= or <= */
106408:     int start_constraints;       /* Start of range is constrained */
106409:     int nConstraint;             /* Number of constraint terms */
106410:     Index *pIdx;                 /* The index we will be using */
106411:     int iIdxCur;                 /* The VDBE cursor for the index */
106412:     int nExtraReg = 0;           /* Number of extra registers needed */
106413:     int op;                      /* Instruction opcode */
106414:     char *zStartAff;             /* Affinity for start of range constraint */
106415:     char *zEndAff;               /* Affinity for end of range constraint */
106416: 
106417:     pIdx = pLevel->plan.u.pIdx;
106418:     iIdxCur = pLevel->iIdxCur;
106419:     k = (nEq==pIdx->nColumn ? -1 : pIdx->aiColumn[nEq]);
106420: 
106421:     /* If this loop satisfies a sort order (pOrderBy) request that 
106422:     ** was passed to this function to implement a "SELECT min(x) ..." 
106423:     ** query, then the caller will only allow the loop to run for
106424:     ** a single iteration. This means that the first row returned
106425:     ** should not have a NULL value stored in 'x'. If column 'x' is
106426:     ** the first one after the nEq equality constraints in the index,
106427:     ** this requires some special handling.
106428:     */
106429:     if( (wctrlFlags&WHERE_ORDERBY_MIN)!=0
106430:      && (pLevel->plan.wsFlags&WHERE_ORDERBY)
106431:      && (pIdx->nColumn>nEq)
106432:     ){
106433:       /* assert( pOrderBy->nExpr==1 ); */
106434:       /* assert( pOrderBy->a[0].pExpr->iColumn==pIdx->aiColumn[nEq] ); */
106435:       isMinQuery = 1;
106436:       nExtraReg = 1;
106437:     }
106438: 
106439:     /* Find any inequality constraint terms for the start and end 
106440:     ** of the range. 
106441:     */
106442:     if( pLevel->plan.wsFlags & WHERE_TOP_LIMIT ){
106443:       pRangeEnd = findTerm(pWC, iCur, k, notReady, (WO_LT|WO_LE), pIdx);
106444:       nExtraReg = 1;
106445:     }
106446:     if( pLevel->plan.wsFlags & WHERE_BTM_LIMIT ){
106447:       pRangeStart = findTerm(pWC, iCur, k, notReady, (WO_GT|WO_GE), pIdx);
106448:       nExtraReg = 1;
106449:     }
106450: 
106451:     /* Generate code to evaluate all constraint terms using == or IN
106452:     ** and store the values of those terms in an array of registers
106453:     ** starting at regBase.
106454:     */
106455:     regBase = codeAllEqualityTerms(
106456:         pParse, pLevel, pWC, notReady, nExtraReg, &zStartAff
106457:     );
106458:     zEndAff = sqlite3DbStrDup(pParse->db, zStartAff);
106459:     addrNxt = pLevel->addrNxt;
106460: 
106461:     /* If we are doing a reverse order scan on an ascending index, or
106462:     ** a forward order scan on a descending index, interchange the 
106463:     ** start and end terms (pRangeStart and pRangeEnd).
106464:     */
106465:     if( (nEq<pIdx->nColumn && bRev==(pIdx->aSortOrder[nEq]==SQLITE_SO_ASC))
106466:      || (bRev && pIdx->nColumn==nEq)
106467:     ){
106468:       SWAP(WhereTerm *, pRangeEnd, pRangeStart);
106469:     }
106470: 
106471:     testcase( pRangeStart && pRangeStart->eOperator & WO_LE );
106472:     testcase( pRangeStart && pRangeStart->eOperator & WO_GE );
106473:     testcase( pRangeEnd && pRangeEnd->eOperator & WO_LE );
106474:     testcase( pRangeEnd && pRangeEnd->eOperator & WO_GE );
106475:     startEq = !pRangeStart || pRangeStart->eOperator & (WO_LE|WO_GE);
106476:     endEq =   !pRangeEnd || pRangeEnd->eOperator & (WO_LE|WO_GE);
106477:     start_constraints = pRangeStart || nEq>0;
106478: 
106479:     /* Seek the index cursor to the start of the range. */
106480:     nConstraint = nEq;
106481:     if( pRangeStart ){
106482:       Expr *pRight = pRangeStart->pExpr->pRight;
106483:       sqlite3ExprCode(pParse, pRight, regBase+nEq);
106484:       if( (pRangeStart->wtFlags & TERM_VNULL)==0 ){
106485:         sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt);
106486:       }
106487:       if( zStartAff ){
106488:         if( sqlite3CompareAffinity(pRight, zStartAff[nEq])==SQLITE_AFF_NONE){
106489:           /* Since the comparison is to be performed with no conversions
106490:           ** applied to the operands, set the affinity to apply to pRight to 
106491:           ** SQLITE_AFF_NONE.  */
106492:           zStartAff[nEq] = SQLITE_AFF_NONE;
106493:         }
106494:         if( sqlite3ExprNeedsNoAffinityChange(pRight, zStartAff[nEq]) ){
106495:           zStartAff[nEq] = SQLITE_AFF_NONE;
106496:         }
106497:       }  
106498:       nConstraint++;
106499:       testcase( pRangeStart->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
106500:     }else if( isMinQuery ){
106501:       sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
106502:       nConstraint++;
106503:       startEq = 0;
106504:       start_constraints = 1;
106505:     }
106506:     codeApplyAffinity(pParse, regBase, nConstraint, zStartAff);
106507:     op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev];
106508:     assert( op!=0 );
106509:     testcase( op==OP_Rewind );
106510:     testcase( op==OP_Last );
106511:     testcase( op==OP_SeekGt );
106512:     testcase( op==OP_SeekGe );
106513:     testcase( op==OP_SeekLe );
106514:     testcase( op==OP_SeekLt );
106515:     sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint);
106516: 
106517:     /* Load the value for the inequality constraint at the end of the
106518:     ** range (if any).
106519:     */
106520:     nConstraint = nEq;
106521:     if( pRangeEnd ){
106522:       Expr *pRight = pRangeEnd->pExpr->pRight;
106523:       sqlite3ExprCacheRemove(pParse, regBase+nEq, 1);
106524:       sqlite3ExprCode(pParse, pRight, regBase+nEq);
106525:       if( (pRangeEnd->wtFlags & TERM_VNULL)==0 ){
106526:         sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt);
106527:       }
106528:       if( zEndAff ){
106529:         if( sqlite3CompareAffinity(pRight, zEndAff[nEq])==SQLITE_AFF_NONE){
106530:           /* Since the comparison is to be performed with no conversions
106531:           ** applied to the operands, set the affinity to apply to pRight to 
106532:           ** SQLITE_AFF_NONE.  */
106533:           zEndAff[nEq] = SQLITE_AFF_NONE;
106534:         }
106535:         if( sqlite3ExprNeedsNoAffinityChange(pRight, zEndAff[nEq]) ){
106536:           zEndAff[nEq] = SQLITE_AFF_NONE;
106537:         }
106538:       }  
106539:       codeApplyAffinity(pParse, regBase, nEq+1, zEndAff);
106540:       nConstraint++;
106541:       testcase( pRangeEnd->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
106542:     }
106543:     sqlite3DbFree(pParse->db, zStartAff);
106544:     sqlite3DbFree(pParse->db, zEndAff);
106545: 
106546:     /* Top of the loop body */
106547:     pLevel->p2 = sqlite3VdbeCurrentAddr(v);
106548: 
106549:     /* Check if the index cursor is past the end of the range. */
106550:     op = aEndOp[(pRangeEnd || nEq) * (1 + bRev)];
106551:     testcase( op==OP_Noop );
106552:     testcase( op==OP_IdxGE );
106553:     testcase( op==OP_IdxLT );
106554:     if( op!=OP_Noop ){
106555:       sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint);
106556:       sqlite3VdbeChangeP5(v, endEq!=bRev ?1:0);
106557:     }
106558: 
106559:     /* If there are inequality constraints, check that the value
106560:     ** of the table column that the inequality contrains is not NULL.
106561:     ** If it is, jump to the next iteration of the loop.
106562:     */
106563:     r1 = sqlite3GetTempReg(pParse);
106564:     testcase( pLevel->plan.wsFlags & WHERE_BTM_LIMIT );
106565:     testcase( pLevel->plan.wsFlags & WHERE_TOP_LIMIT );
106566:     if( (pLevel->plan.wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 ){
106567:       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, nEq, r1);
106568:       sqlite3VdbeAddOp2(v, OP_IsNull, r1, addrCont);
106569:     }
106570:     sqlite3ReleaseTempReg(pParse, r1);
106571: 
106572:     /* Seek the table cursor, if required */
106573:     disableTerm(pLevel, pRangeStart);
106574:     disableTerm(pLevel, pRangeEnd);
106575:     if( !omitTable ){
106576:       iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse);
106577:       sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, iRowidReg);
106578:       sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
106579:       sqlite3VdbeAddOp2(v, OP_Seek, iCur, iRowidReg);  /* Deferred seek */
106580:     }
106581: 
106582:     /* Record the instruction used to terminate the loop. Disable 
106583:     ** WHERE clause terms made redundant by the index range scan.
106584:     */
106585:     if( pLevel->plan.wsFlags & WHERE_UNIQUE ){
106586:       pLevel->op = OP_Noop;
106587:     }else if( bRev ){
106588:       pLevel->op = OP_Prev;
106589:     }else{
106590:       pLevel->op = OP_Next;
106591:     }
106592:     pLevel->p1 = iIdxCur;
106593:   }else
106594: 
106595: #ifndef SQLITE_OMIT_OR_OPTIMIZATION
106596:   if( pLevel->plan.wsFlags & WHERE_MULTI_OR ){
106597:     /* Case 4:  Two or more separately indexed terms connected by OR
106598:     **
106599:     ** Example:
106600:     **
106601:     **   CREATE TABLE t1(a,b,c,d);
106602:     **   CREATE INDEX i1 ON t1(a);
106603:     **   CREATE INDEX i2 ON t1(b);
106604:     **   CREATE INDEX i3 ON t1(c);
106605:     **
106606:     **   SELECT * FROM t1 WHERE a=5 OR b=7 OR (c=11 AND d=13)
106607:     **
106608:     ** In the example, there are three indexed terms connected by OR.
106609:     ** The top of the loop looks like this:
106610:     **
106611:     **          Null       1                # Zero the rowset in reg 1
106612:     **
106613:     ** Then, for each indexed term, the following. The arguments to
106614:     ** RowSetTest are such that the rowid of the current row is inserted
106615:     ** into the RowSet. If it is already present, control skips the
106616:     ** Gosub opcode and jumps straight to the code generated by WhereEnd().
106617:     **
106618:     **        sqlite3WhereBegin(<term>)
106619:     **          RowSetTest                  # Insert rowid into rowset
106620:     **          Gosub      2 A
106621:     **        sqlite3WhereEnd()
106622:     **
106623:     ** Following the above, code to terminate the loop. Label A, the target
106624:     ** of the Gosub above, jumps to the instruction right after the Goto.
106625:     **
106626:     **          Null       1                # Zero the rowset in reg 1
106627:     **          Goto       B                # The loop is finished.
106628:     **
106629:     **       A: <loop body>                 # Return data, whatever.
106630:     **
106631:     **          Return     2                # Jump back to the Gosub
106632:     **
106633:     **       B: <after the loop>
106634:     **
106635:     */
106636:     WhereClause *pOrWc;    /* The OR-clause broken out into subterms */
106637:     SrcList *pOrTab;       /* Shortened table list or OR-clause generation */
106638: 
106639:     int regReturn = ++pParse->nMem;           /* Register used with OP_Gosub */
106640:     int regRowset = 0;                        /* Register for RowSet object */
106641:     int regRowid = 0;                         /* Register holding rowid */
106642:     int iLoopBody = sqlite3VdbeMakeLabel(v);  /* Start of loop body */
106643:     int iRetInit;                             /* Address of regReturn init */
106644:     int untestedTerms = 0;             /* Some terms not completely tested */
106645:     int ii;                            /* Loop counter */
106646:     Expr *pAndExpr = 0;                /* An ".. AND (...)" expression */
106647:    
106648:     pTerm = pLevel->plan.u.pTerm;
106649:     assert( pTerm!=0 );
106650:     assert( pTerm->eOperator==WO_OR );
106651:     assert( (pTerm->wtFlags & TERM_ORINFO)!=0 );
106652:     pOrWc = &pTerm->u.pOrInfo->wc;
106653:     pLevel->op = OP_Return;
106654:     pLevel->p1 = regReturn;
106655: 
106656:     /* Set up a new SrcList ni pOrTab containing the table being scanned
106657:     ** by this loop in the a[0] slot and all notReady tables in a[1..] slots.
106658:     ** This becomes the SrcList in the recursive call to sqlite3WhereBegin().
106659:     */
106660:     if( pWInfo->nLevel>1 ){
106661:       int nNotReady;                 /* The number of notReady tables */
106662:       struct SrcList_item *origSrc;     /* Original list of tables */
106663:       nNotReady = pWInfo->nLevel - iLevel - 1;
106664:       pOrTab = sqlite3StackAllocRaw(pParse->db,
106665:                             sizeof(*pOrTab)+ nNotReady*sizeof(pOrTab->a[0]));
106666:       if( pOrTab==0 ) return notReady;
106667:       pOrTab->nAlloc = (i16)(nNotReady + 1);
106668:       pOrTab->nSrc = pOrTab->nAlloc;
106669:       memcpy(pOrTab->a, pTabItem, sizeof(*pTabItem));
106670:       origSrc = pWInfo->pTabList->a;
106671:       for(k=1; k<=nNotReady; k++){
106672:         memcpy(&pOrTab->a[k], &origSrc[pLevel[k].iFrom], sizeof(pOrTab->a[k]));
106673:       }
106674:     }else{
106675:       pOrTab = pWInfo->pTabList;
106676:     }
106677: 
106678:     /* Initialize the rowset register to contain NULL. An SQL NULL is 
106679:     ** equivalent to an empty rowset.
106680:     **
106681:     ** Also initialize regReturn to contain the address of the instruction 
106682:     ** immediately following the OP_Return at the bottom of the loop. This
106683:     ** is required in a few obscure LEFT JOIN cases where control jumps
106684:     ** over the top of the loop into the body of it. In this case the 
106685:     ** correct response for the end-of-loop code (the OP_Return) is to 
106686:     ** fall through to the next instruction, just as an OP_Next does if
106687:     ** called on an uninitialized cursor.
106688:     */
106689:     if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){
106690:       regRowset = ++pParse->nMem;
106691:       regRowid = ++pParse->nMem;
106692:       sqlite3VdbeAddOp2(v, OP_Null, 0, regRowset);
106693:     }
106694:     iRetInit = sqlite3VdbeAddOp2(v, OP_Integer, 0, regReturn);
106695: 
106696:     /* If the original WHERE clause is z of the form:  (x1 OR x2 OR ...) AND y
106697:     ** Then for every term xN, evaluate as the subexpression: xN AND z
106698:     ** That way, terms in y that are factored into the disjunction will
106699:     ** be picked up by the recursive calls to sqlite3WhereBegin() below.
106700:     */
106701:     if( pWC->nTerm>1 ){
106702:       pAndExpr = sqlite3ExprAlloc(pParse->db, TK_AND, 0, 0);
106703:       pAndExpr->pRight = pWhere;
106704:     }
106705: 
106706:     for(ii=0; ii<pOrWc->nTerm; ii++){
106707:       WhereTerm *pOrTerm = &pOrWc->a[ii];
106708:       if( pOrTerm->leftCursor==iCur || pOrTerm->eOperator==WO_AND ){
106709:         WhereInfo *pSubWInfo;          /* Info for single OR-term scan */
106710:         Expr *pOrExpr = pOrTerm->pExpr;
106711:         if( pAndExpr ){
106712:           pAndExpr->pLeft = pOrExpr;
106713:           pOrExpr = pAndExpr;
106714:         }
106715:         /* Loop through table entries that match term pOrTerm. */
106716:         pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0,
106717:                         WHERE_OMIT_OPEN_CLOSE | WHERE_AND_ONLY |
106718:                         WHERE_FORCE_TABLE | WHERE_ONETABLE_ONLY);
106719:         if( pSubWInfo ){
106720:           explainOneScan(
106721:               pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0
106722:           );
106723:           if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){
106724:             int iSet = ((ii==pOrWc->nTerm-1)?-1:ii);
106725:             int r;
106726:             r = sqlite3ExprCodeGetColumn(pParse, pTabItem->pTab, -1, iCur, 
106727:                                          regRowid);
106728:             sqlite3VdbeAddOp4Int(v, OP_RowSetTest, regRowset,
106729:                                  sqlite3VdbeCurrentAddr(v)+2, r, iSet);
106730:           }
106731:           sqlite3VdbeAddOp2(v, OP_Gosub, regReturn, iLoopBody);
106732: 
106733:           /* The pSubWInfo->untestedTerms flag means that this OR term
106734:           ** contained one or more AND term from a notReady table.  The
106735:           ** terms from the notReady table could not be tested and will
106736:           ** need to be tested later.
106737:           */
106738:           if( pSubWInfo->untestedTerms ) untestedTerms = 1;
106739: 
106740:           /* Finish the loop through table entries that match term pOrTerm. */
106741:           sqlite3WhereEnd(pSubWInfo);
106742:         }
106743:       }
106744:     }
106745:     sqlite3DbFree(pParse->db, pAndExpr);
106746:     sqlite3VdbeChangeP1(v, iRetInit, sqlite3VdbeCurrentAddr(v));
106747:     sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrBrk);
106748:     sqlite3VdbeResolveLabel(v, iLoopBody);
106749: 
106750:     if( pWInfo->nLevel>1 ) sqlite3StackFree(pParse->db, pOrTab);
106751:     if( !untestedTerms ) disableTerm(pLevel, pTerm);
106752:   }else
106753: #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
106754: 
106755:   {
106756:     /* Case 5:  There is no usable index.  We must do a complete
106757:     **          scan of the entire table.
106758:     */
106759:     static const u8 aStep[] = { OP_Next, OP_Prev };
106760:     static const u8 aStart[] = { OP_Rewind, OP_Last };
106761:     assert( bRev==0 || bRev==1 );
106762:     assert( omitTable==0 );
106763:     pLevel->op = aStep[bRev];
106764:     pLevel->p1 = iCur;
106765:     pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk);
106766:     pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
106767:   }
106768:   notReady &= ~getMask(pWC->pMaskSet, iCur);
106769: 
106770:   /* Insert code to test every subexpression that can be completely
106771:   ** computed using the current set of tables.
106772:   **
106773:   ** IMPLEMENTATION-OF: R-49525-50935 Terms that cannot be satisfied through
106774:   ** the use of indices become tests that are evaluated against each row of
106775:   ** the relevant input tables.
106776:   */
106777:   for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){
106778:     Expr *pE;
106779:     testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* IMP: R-30575-11662 */
106780:     testcase( pTerm->wtFlags & TERM_CODED );
106781:     if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue;
106782:     if( (pTerm->prereqAll & notReady)!=0 ){
106783:       testcase( pWInfo->untestedTerms==0
106784:                && (pWInfo->wctrlFlags & WHERE_ONETABLE_ONLY)!=0 );
106785:       pWInfo->untestedTerms = 1;
106786:       continue;
106787:     }
106788:     pE = pTerm->pExpr;
106789:     assert( pE!=0 );
106790:     if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){
106791:       continue;
106792:     }
106793:     sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL);
106794:     pTerm->wtFlags |= TERM_CODED;
106795:   }
106796: 
106797:   /* For a LEFT OUTER JOIN, generate code that will record the fact that
106798:   ** at least one row of the right table has matched the left table.  
106799:   */
106800:   if( pLevel->iLeftJoin ){
106801:     pLevel->addrFirst = sqlite3VdbeCurrentAddr(v);
106802:     sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin);
106803:     VdbeComment((v, "record LEFT JOIN hit"));
106804:     sqlite3ExprCacheClear(pParse);
106805:     for(pTerm=pWC->a, j=0; j<pWC->nTerm; j++, pTerm++){
106806:       testcase( pTerm->wtFlags & TERM_VIRTUAL );  /* IMP: R-30575-11662 */
106807:       testcase( pTerm->wtFlags & TERM_CODED );
106808:       if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue;
106809:       if( (pTerm->prereqAll & notReady)!=0 ){
106810:         assert( pWInfo->untestedTerms );
106811:         continue;
106812:       }
106813:       assert( pTerm->pExpr );
106814:       sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL);
106815:       pTerm->wtFlags |= TERM_CODED;
106816:     }
106817:   }
106818:   sqlite3ReleaseTempReg(pParse, iReleaseReg);
106819: 
106820:   return notReady;
106821: }
106822: 
106823: #if defined(SQLITE_TEST)
106824: /*
106825: ** The following variable holds a text description of query plan generated
106826: ** by the most recent call to sqlite3WhereBegin().  Each call to WhereBegin
106827: ** overwrites the previous.  This information is used for testing and
106828: ** analysis only.
106829: */
106830: SQLITE_API char sqlite3_query_plan[BMS*2*40];  /* Text of the join */
106831: static int nQPlan = 0;              /* Next free slow in _query_plan[] */
106832: 
106833: #endif /* SQLITE_TEST */
106834: 
106835: 
106836: /*
106837: ** Free a WhereInfo structure
106838: */
106839: static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){
106840:   if( ALWAYS(pWInfo) ){
106841:     int i;
106842:     for(i=0; i<pWInfo->nLevel; i++){
106843:       sqlite3_index_info *pInfo = pWInfo->a[i].pIdxInfo;
106844:       if( pInfo ){
106845:         /* assert( pInfo->needToFreeIdxStr==0 || db->mallocFailed ); */
106846:         if( pInfo->needToFreeIdxStr ){
106847:           sqlite3_free(pInfo->idxStr);
106848:         }
106849:         sqlite3DbFree(db, pInfo);
106850:       }
106851:       if( pWInfo->a[i].plan.wsFlags & WHERE_TEMP_INDEX ){
106852:         Index *pIdx = pWInfo->a[i].plan.u.pIdx;
106853:         if( pIdx ){
106854:           sqlite3DbFree(db, pIdx->zColAff);
106855:           sqlite3DbFree(db, pIdx);
106856:         }
106857:       }
106858:     }
106859:     whereClauseClear(pWInfo->pWC);
106860:     sqlite3DbFree(db, pWInfo);
106861:   }
106862: }
106863: 
106864: 
106865: /*
106866: ** Generate the beginning of the loop used for WHERE clause processing.
106867: ** The return value is a pointer to an opaque structure that contains
106868: ** information needed to terminate the loop.  Later, the calling routine
106869: ** should invoke sqlite3WhereEnd() with the return value of this function
106870: ** in order to complete the WHERE clause processing.
106871: **
106872: ** If an error occurs, this routine returns NULL.
106873: **
106874: ** The basic idea is to do a nested loop, one loop for each table in
106875: ** the FROM clause of a select.  (INSERT and UPDATE statements are the
106876: ** same as a SELECT with only a single table in the FROM clause.)  For
106877: ** example, if the SQL is this:
106878: **
106879: **       SELECT * FROM t1, t2, t3 WHERE ...;
106880: **
106881: ** Then the code generated is conceptually like the following:
106882: **
106883: **      foreach row1 in t1 do       \    Code generated
106884: **        foreach row2 in t2 do      |-- by sqlite3WhereBegin()
106885: **          foreach row3 in t3 do   /
106886: **            ...
106887: **          end                     \    Code generated
106888: **        end                        |-- by sqlite3WhereEnd()
106889: **      end                         /
106890: **
106891: ** Note that the loops might not be nested in the order in which they
106892: ** appear in the FROM clause if a different order is better able to make
106893: ** use of indices.  Note also that when the IN operator appears in
106894: ** the WHERE clause, it might result in additional nested loops for
106895: ** scanning through all values on the right-hand side of the IN.
106896: **
106897: ** There are Btree cursors associated with each table.  t1 uses cursor
106898: ** number pTabList->a[0].iCursor.  t2 uses the cursor pTabList->a[1].iCursor.
106899: ** And so forth.  This routine generates code to open those VDBE cursors
106900: ** and sqlite3WhereEnd() generates the code to close them.
106901: **
106902: ** The code that sqlite3WhereBegin() generates leaves the cursors named
106903: ** in pTabList pointing at their appropriate entries.  The [...] code
106904: ** can use OP_Column and OP_Rowid opcodes on these cursors to extract
106905: ** data from the various tables of the loop.
106906: **
106907: ** If the WHERE clause is empty, the foreach loops must each scan their
106908: ** entire tables.  Thus a three-way join is an O(N^3) operation.  But if
106909: ** the tables have indices and there are terms in the WHERE clause that
106910: ** refer to those indices, a complete table scan can be avoided and the
106911: ** code will run much faster.  Most of the work of this routine is checking
106912: ** to see if there are indices that can be used to speed up the loop.
106913: **
106914: ** Terms of the WHERE clause are also used to limit which rows actually
106915: ** make it to the "..." in the middle of the loop.  After each "foreach",
106916: ** terms of the WHERE clause that use only terms in that loop and outer
106917: ** loops are evaluated and if false a jump is made around all subsequent
106918: ** inner loops (or around the "..." if the test occurs within the inner-
106919: ** most loop)
106920: **
106921: ** OUTER JOINS
106922: **
106923: ** An outer join of tables t1 and t2 is conceptally coded as follows:
106924: **
106925: **    foreach row1 in t1 do
106926: **      flag = 0
106927: **      foreach row2 in t2 do
106928: **        start:
106929: **          ...
106930: **          flag = 1
106931: **      end
106932: **      if flag==0 then
106933: **        move the row2 cursor to a null row
106934: **        goto start
106935: **      fi
106936: **    end
106937: **
106938: ** ORDER BY CLAUSE PROCESSING
106939: **
106940: ** *ppOrderBy is a pointer to the ORDER BY clause of a SELECT statement,
106941: ** if there is one.  If there is no ORDER BY clause or if this routine
106942: ** is called from an UPDATE or DELETE statement, then ppOrderBy is NULL.
106943: **
106944: ** If an index can be used so that the natural output order of the table
106945: ** scan is correct for the ORDER BY clause, then that index is used and
106946: ** *ppOrderBy is set to NULL.  This is an optimization that prevents an
106947: ** unnecessary sort of the result set if an index appropriate for the
106948: ** ORDER BY clause already exists.
106949: **
106950: ** If the where clause loops cannot be arranged to provide the correct
106951: ** output order, then the *ppOrderBy is unchanged.
106952: */
106953: SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
106954:   Parse *pParse,        /* The parser context */
106955:   SrcList *pTabList,    /* A list of all tables to be scanned */
106956:   Expr *pWhere,         /* The WHERE clause */
106957:   ExprList **ppOrderBy, /* An ORDER BY clause, or NULL */
106958:   ExprList *pDistinct,  /* The select-list for DISTINCT queries - or NULL */
106959:   u16 wctrlFlags        /* One of the WHERE_* flags defined in sqliteInt.h */
106960: ){
106961:   int i;                     /* Loop counter */
106962:   int nByteWInfo;            /* Num. bytes allocated for WhereInfo struct */
106963:   int nTabList;              /* Number of elements in pTabList */
106964:   WhereInfo *pWInfo;         /* Will become the return value of this function */
106965:   Vdbe *v = pParse->pVdbe;   /* The virtual database engine */
106966:   Bitmask notReady;          /* Cursors that are not yet positioned */
106967:   WhereMaskSet *pMaskSet;    /* The expression mask set */
106968:   WhereClause *pWC;               /* Decomposition of the WHERE clause */
106969:   struct SrcList_item *pTabItem;  /* A single entry from pTabList */
106970:   WhereLevel *pLevel;             /* A single level in the pWInfo list */
106971:   int iFrom;                      /* First unused FROM clause element */
106972:   int andFlags;              /* AND-ed combination of all pWC->a[].wtFlags */
106973:   sqlite3 *db;               /* Database connection */
106974: 
106975:   /* The number of tables in the FROM clause is limited by the number of
106976:   ** bits in a Bitmask 
106977:   */
106978:   testcase( pTabList->nSrc==BMS );
106979:   if( pTabList->nSrc>BMS ){
106980:     sqlite3ErrorMsg(pParse, "at most %d tables in a join", BMS);
106981:     return 0;
106982:   }
106983: 
106984:   /* This function normally generates a nested loop for all tables in 
106985:   ** pTabList.  But if the WHERE_ONETABLE_ONLY flag is set, then we should
106986:   ** only generate code for the first table in pTabList and assume that
106987:   ** any cursors associated with subsequent tables are uninitialized.
106988:   */
106989:   nTabList = (wctrlFlags & WHERE_ONETABLE_ONLY) ? 1 : pTabList->nSrc;
106990: 
106991:   /* Allocate and initialize the WhereInfo structure that will become the
106992:   ** return value. A single allocation is used to store the WhereInfo
106993:   ** struct, the contents of WhereInfo.a[], the WhereClause structure
106994:   ** and the WhereMaskSet structure. Since WhereClause contains an 8-byte
106995:   ** field (type Bitmask) it must be aligned on an 8-byte boundary on
106996:   ** some architectures. Hence the ROUND8() below.
106997:   */
106998:   db = pParse->db;
106999:   nByteWInfo = ROUND8(sizeof(WhereInfo)+(nTabList-1)*sizeof(WhereLevel));
107000:   pWInfo = sqlite3DbMallocZero(db, 
107001:       nByteWInfo + 
107002:       sizeof(WhereClause) +
107003:       sizeof(WhereMaskSet)
107004:   );
107005:   if( db->mallocFailed ){
107006:     sqlite3DbFree(db, pWInfo);
107007:     pWInfo = 0;
107008:     goto whereBeginError;
107009:   }
107010:   pWInfo->nLevel = nTabList;
107011:   pWInfo->pParse = pParse;
107012:   pWInfo->pTabList = pTabList;
107013:   pWInfo->iBreak = sqlite3VdbeMakeLabel(v);
107014:   pWInfo->pWC = pWC = (WhereClause *)&((u8 *)pWInfo)[nByteWInfo];
107015:   pWInfo->wctrlFlags = wctrlFlags;
107016:   pWInfo->savedNQueryLoop = pParse->nQueryLoop;
107017:   pMaskSet = (WhereMaskSet*)&pWC[1];
107018: 
107019:   /* Disable the DISTINCT optimization if SQLITE_DistinctOpt is set via
107020:   ** sqlite3_test_ctrl(SQLITE_TESTCTRL_OPTIMIZATIONS,...) */
107021:   if( db->flags & SQLITE_DistinctOpt ) pDistinct = 0;
107022: 
107023:   /* Split the WHERE clause into separate subexpressions where each
107024:   ** subexpression is separated by an AND operator.
107025:   */
107026:   initMaskSet(pMaskSet);
107027:   whereClauseInit(pWC, pParse, pMaskSet, wctrlFlags);
107028:   sqlite3ExprCodeConstants(pParse, pWhere);
107029:   whereSplit(pWC, pWhere, TK_AND);   /* IMP: R-15842-53296 */
107030:     
107031:   /* Special case: a WHERE clause that is constant.  Evaluate the
107032:   ** expression and either jump over all of the code or fall thru.
107033:   */
107034:   if( pWhere && (nTabList==0 || sqlite3ExprIsConstantNotJoin(pWhere)) ){
107035:     sqlite3ExprIfFalse(pParse, pWhere, pWInfo->iBreak, SQLITE_JUMPIFNULL);
107036:     pWhere = 0;
107037:   }
107038: 
107039:   /* Assign a bit from the bitmask to every term in the FROM clause.
107040:   **
107041:   ** When assigning bitmask values to FROM clause cursors, it must be
107042:   ** the case that if X is the bitmask for the N-th FROM clause term then
107043:   ** the bitmask for all FROM clause terms to the left of the N-th term
107044:   ** is (X-1).   An expression from the ON clause of a LEFT JOIN can use
107045:   ** its Expr.iRightJoinTable value to find the bitmask of the right table
107046:   ** of the join.  Subtracting one from the right table bitmask gives a
107047:   ** bitmask for all tables to the left of the join.  Knowing the bitmask
107048:   ** for all tables to the left of a left join is important.  Ticket #3015.
107049:   **
107050:   ** Configure the WhereClause.vmask variable so that bits that correspond
107051:   ** to virtual table cursors are set. This is used to selectively disable 
107052:   ** the OR-to-IN transformation in exprAnalyzeOrTerm(). It is not helpful 
107053:   ** with virtual tables.
107054:   **
107055:   ** Note that bitmasks are created for all pTabList->nSrc tables in
107056:   ** pTabList, not just the first nTabList tables.  nTabList is normally
107057:   ** equal to pTabList->nSrc but might be shortened to 1 if the
107058:   ** WHERE_ONETABLE_ONLY flag is set.
107059:   */
107060:   assert( pWC->vmask==0 && pMaskSet->n==0 );
107061:   for(i=0; i<pTabList->nSrc; i++){
107062:     createMask(pMaskSet, pTabList->a[i].iCursor);
107063: #ifndef SQLITE_OMIT_VIRTUALTABLE
107064:     if( ALWAYS(pTabList->a[i].pTab) && IsVirtual(pTabList->a[i].pTab) ){
107065:       pWC->vmask |= ((Bitmask)1 << i);
107066:     }
107067: #endif
107068:   }
107069: #ifndef NDEBUG
107070:   {
107071:     Bitmask toTheLeft = 0;
107072:     for(i=0; i<pTabList->nSrc; i++){
107073:       Bitmask m = getMask(pMaskSet, pTabList->a[i].iCursor);
107074:       assert( (m-1)==toTheLeft );
107075:       toTheLeft |= m;
107076:     }
107077:   }
107078: #endif
107079: 
107080:   /* Analyze all of the subexpressions.  Note that exprAnalyze() might
107081:   ** add new virtual terms onto the end of the WHERE clause.  We do not
107082:   ** want to analyze these virtual terms, so start analyzing at the end
107083:   ** and work forward so that the added virtual terms are never processed.
107084:   */
107085:   exprAnalyzeAll(pTabList, pWC);
107086:   if( db->mallocFailed ){
107087:     goto whereBeginError;
107088:   }
107089: 
107090:   /* Check if the DISTINCT qualifier, if there is one, is redundant. 
107091:   ** If it is, then set pDistinct to NULL and WhereInfo.eDistinct to
107092:   ** WHERE_DISTINCT_UNIQUE to tell the caller to ignore the DISTINCT.
107093:   */
107094:   if( pDistinct && isDistinctRedundant(pParse, pTabList, pWC, pDistinct) ){
107095:     pDistinct = 0;
107096:     pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE;
107097:   }
107098: 
107099:   /* Chose the best index to use for each table in the FROM clause.
107100:   **
107101:   ** This loop fills in the following fields:
107102:   **
107103:   **   pWInfo->a[].pIdx      The index to use for this level of the loop.
107104:   **   pWInfo->a[].wsFlags   WHERE_xxx flags associated with pIdx
107105:   **   pWInfo->a[].nEq       The number of == and IN constraints
107106:   **   pWInfo->a[].iFrom     Which term of the FROM clause is being coded
107107:   **   pWInfo->a[].iTabCur   The VDBE cursor for the database table
107108:   **   pWInfo->a[].iIdxCur   The VDBE cursor for the index
107109:   **   pWInfo->a[].pTerm     When wsFlags==WO_OR, the OR-clause term
107110:   **
107111:   ** This loop also figures out the nesting order of tables in the FROM
107112:   ** clause.
107113:   */
107114:   notReady = ~(Bitmask)0;
107115:   andFlags = ~0;
107116:   WHERETRACE(("*** Optimizer Start ***\n"));
107117:   for(i=iFrom=0, pLevel=pWInfo->a; i<nTabList; i++, pLevel++){
107118:     WhereCost bestPlan;         /* Most efficient plan seen so far */
107119:     Index *pIdx;                /* Index for FROM table at pTabItem */
107120:     int j;                      /* For looping over FROM tables */
107121:     int bestJ = -1;             /* The value of j */
107122:     Bitmask m;                  /* Bitmask value for j or bestJ */
107123:     int isOptimal;              /* Iterator for optimal/non-optimal search */
107124:     int nUnconstrained;         /* Number tables without INDEXED BY */
107125:     Bitmask notIndexed;         /* Mask of tables that cannot use an index */
107126: 
107127:     memset(&bestPlan, 0, sizeof(bestPlan));
107128:     bestPlan.rCost = SQLITE_BIG_DBL;
107129:     WHERETRACE(("*** Begin search for loop %d ***\n", i));
107130: 
107131:     /* Loop through the remaining entries in the FROM clause to find the
107132:     ** next nested loop. The loop tests all FROM clause entries
107133:     ** either once or twice. 
107134:     **
107135:     ** The first test is always performed if there are two or more entries
107136:     ** remaining and never performed if there is only one FROM clause entry
107137:     ** to choose from.  The first test looks for an "optimal" scan.  In
107138:     ** this context an optimal scan is one that uses the same strategy
107139:     ** for the given FROM clause entry as would be selected if the entry
107140:     ** were used as the innermost nested loop.  In other words, a table
107141:     ** is chosen such that the cost of running that table cannot be reduced
107142:     ** by waiting for other tables to run first.  This "optimal" test works
107143:     ** by first assuming that the FROM clause is on the inner loop and finding
107144:     ** its query plan, then checking to see if that query plan uses any
107145:     ** other FROM clause terms that are notReady.  If no notReady terms are
107146:     ** used then the "optimal" query plan works.
107147:     **
107148:     ** Note that the WhereCost.nRow parameter for an optimal scan might
107149:     ** not be as small as it would be if the table really were the innermost
107150:     ** join.  The nRow value can be reduced by WHERE clause constraints
107151:     ** that do not use indices.  But this nRow reduction only happens if the
107152:     ** table really is the innermost join.  
107153:     **
107154:     ** The second loop iteration is only performed if no optimal scan
107155:     ** strategies were found by the first iteration. This second iteration
107156:     ** is used to search for the lowest cost scan overall.
107157:     **
107158:     ** Previous versions of SQLite performed only the second iteration -
107159:     ** the next outermost loop was always that with the lowest overall
107160:     ** cost. However, this meant that SQLite could select the wrong plan
107161:     ** for scripts such as the following:
107162:     **   
107163:     **   CREATE TABLE t1(a, b); 
107164:     **   CREATE TABLE t2(c, d);
107165:     **   SELECT * FROM t2, t1 WHERE t2.rowid = t1.a;
107166:     **
107167:     ** The best strategy is to iterate through table t1 first. However it
107168:     ** is not possible to determine this with a simple greedy algorithm.
107169:     ** Since the cost of a linear scan through table t2 is the same 
107170:     ** as the cost of a linear scan through table t1, a simple greedy 
107171:     ** algorithm may choose to use t2 for the outer loop, which is a much
107172:     ** costlier approach.
107173:     */
107174:     nUnconstrained = 0;
107175:     notIndexed = 0;
107176:     for(isOptimal=(iFrom<nTabList-1); isOptimal>=0 && bestJ<0; isOptimal--){
107177:       Bitmask mask;             /* Mask of tables not yet ready */
107178:       for(j=iFrom, pTabItem=&pTabList->a[j]; j<nTabList; j++, pTabItem++){
107179:         int doNotReorder;    /* True if this table should not be reordered */
107180:         WhereCost sCost;     /* Cost information from best[Virtual]Index() */
107181:         ExprList *pOrderBy;  /* ORDER BY clause for index to optimize */
107182:         ExprList *pDist;     /* DISTINCT clause for index to optimize */
107183:   
107184:         doNotReorder =  (pTabItem->jointype & (JT_LEFT|JT_CROSS))!=0;
107185:         if( j!=iFrom && doNotReorder ) break;
107186:         m = getMask(pMaskSet, pTabItem->iCursor);
107187:         if( (m & notReady)==0 ){
107188:           if( j==iFrom ) iFrom++;
107189:           continue;
107190:         }
107191:         mask = (isOptimal ? m : notReady);
107192:         pOrderBy = ((i==0 && ppOrderBy )?*ppOrderBy:0);
107193:         pDist = (i==0 ? pDistinct : 0);
107194:         if( pTabItem->pIndex==0 ) nUnconstrained++;
107195:   
107196:         WHERETRACE(("=== trying table %d with isOptimal=%d ===\n",
107197:                     j, isOptimal));
107198:         assert( pTabItem->pTab );
107199: #ifndef SQLITE_OMIT_VIRTUALTABLE
107200:         if( IsVirtual(pTabItem->pTab) ){
107201:           sqlite3_index_info **pp = &pWInfo->a[j].pIdxInfo;
107202:           bestVirtualIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
107203:                            &sCost, pp);
107204:         }else 
107205: #endif
107206:         {
107207:           bestBtreeIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
107208:               pDist, &sCost);
107209:         }
107210:         assert( isOptimal || (sCost.used&notReady)==0 );
107211: 
107212:         /* If an INDEXED BY clause is present, then the plan must use that
107213:         ** index if it uses any index at all */
107214:         assert( pTabItem->pIndex==0 
107215:                   || (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0
107216:                   || sCost.plan.u.pIdx==pTabItem->pIndex );
107217: 
107218:         if( isOptimal && (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){
107219:           notIndexed |= m;
107220:         }
107221: 
107222:         /* Conditions under which this table becomes the best so far:
107223:         **
107224:         **   (1) The table must not depend on other tables that have not
107225:         **       yet run.
107226:         **
107227:         **   (2) A full-table-scan plan cannot supercede indexed plan unless
107228:         **       the full-table-scan is an "optimal" plan as defined above.
107229:         **
107230:         **   (3) All tables have an INDEXED BY clause or this table lacks an
107231:         **       INDEXED BY clause or this table uses the specific
107232:         **       index specified by its INDEXED BY clause.  This rule ensures
107233:         **       that a best-so-far is always selected even if an impossible
107234:         **       combination of INDEXED BY clauses are given.  The error
107235:         **       will be detected and relayed back to the application later.
107236:         **       The NEVER() comes about because rule (2) above prevents
107237:         **       An indexable full-table-scan from reaching rule (3).
107238:         **
107239:         **   (4) The plan cost must be lower than prior plans or else the
107240:         **       cost must be the same and the number of rows must be lower.
107241:         */
107242:         if( (sCost.used&notReady)==0                       /* (1) */
107243:             && (bestJ<0 || (notIndexed&m)!=0               /* (2) */
107244:                 || (bestPlan.plan.wsFlags & WHERE_NOT_FULLSCAN)==0
107245:                 || (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0)
107246:             && (nUnconstrained==0 || pTabItem->pIndex==0   /* (3) */
107247:                 || NEVER((sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0))
107248:             && (bestJ<0 || sCost.rCost<bestPlan.rCost      /* (4) */
107249:                 || (sCost.rCost<=bestPlan.rCost 
107250:                  && sCost.plan.nRow<bestPlan.plan.nRow))
107251:         ){
107252:           WHERETRACE(("=== table %d is best so far"
107253:                       " with cost=%g and nRow=%g\n",
107254:                       j, sCost.rCost, sCost.plan.nRow));
107255:           bestPlan = sCost;
107256:           bestJ = j;
107257:         }
107258:         if( doNotReorder ) break;
107259:       }
107260:     }
107261:     assert( bestJ>=0 );
107262:     assert( notReady & getMask(pMaskSet, pTabList->a[bestJ].iCursor) );
107263:     WHERETRACE(("*** Optimizer selects table %d for loop %d"
107264:                 " with cost=%g and nRow=%g\n",
107265:                 bestJ, pLevel-pWInfo->a, bestPlan.rCost, bestPlan.plan.nRow));
107266:     /* The ALWAYS() that follows was added to hush up clang scan-build */
107267:     if( (bestPlan.plan.wsFlags & WHERE_ORDERBY)!=0 && ALWAYS(ppOrderBy) ){
107268:       *ppOrderBy = 0;
107269:     }
107270:     if( (bestPlan.plan.wsFlags & WHERE_DISTINCT)!=0 ){
107271:       assert( pWInfo->eDistinct==0 );
107272:       pWInfo->eDistinct = WHERE_DISTINCT_ORDERED;
107273:     }
107274:     andFlags &= bestPlan.plan.wsFlags;
107275:     pLevel->plan = bestPlan.plan;
107276:     testcase( bestPlan.plan.wsFlags & WHERE_INDEXED );
107277:     testcase( bestPlan.plan.wsFlags & WHERE_TEMP_INDEX );
107278:     if( bestPlan.plan.wsFlags & (WHERE_INDEXED|WHERE_TEMP_INDEX) ){
107279:       pLevel->iIdxCur = pParse->nTab++;
107280:     }else{
107281:       pLevel->iIdxCur = -1;
107282:     }
107283:     notReady &= ~getMask(pMaskSet, pTabList->a[bestJ].iCursor);
107284:     pLevel->iFrom = (u8)bestJ;
107285:     if( bestPlan.plan.nRow>=(double)1 ){
107286:       pParse->nQueryLoop *= bestPlan.plan.nRow;
107287:     }
107288: 
107289:     /* Check that if the table scanned by this loop iteration had an
107290:     ** INDEXED BY clause attached to it, that the named index is being
107291:     ** used for the scan. If not, then query compilation has failed.
107292:     ** Return an error.
107293:     */
107294:     pIdx = pTabList->a[bestJ].pIndex;
107295:     if( pIdx ){
107296:       if( (bestPlan.plan.wsFlags & WHERE_INDEXED)==0 ){
107297:         sqlite3ErrorMsg(pParse, "cannot use index: %s", pIdx->zName);
107298:         goto whereBeginError;
107299:       }else{
107300:         /* If an INDEXED BY clause is used, the bestIndex() function is
107301:         ** guaranteed to find the index specified in the INDEXED BY clause
107302:         ** if it find an index at all. */
107303:         assert( bestPlan.plan.u.pIdx==pIdx );
107304:       }
107305:     }
107306:   }
107307:   WHERETRACE(("*** Optimizer Finished ***\n"));
107308:   if( pParse->nErr || db->mallocFailed ){
107309:     goto whereBeginError;
107310:   }
107311: 
107312:   /* If the total query only selects a single row, then the ORDER BY
107313:   ** clause is irrelevant.
107314:   */
107315:   if( (andFlags & WHERE_UNIQUE)!=0 && ppOrderBy ){
107316:     *ppOrderBy = 0;
107317:   }
107318: 
107319:   /* If the caller is an UPDATE or DELETE statement that is requesting
107320:   ** to use a one-pass algorithm, determine if this is appropriate.
107321:   ** The one-pass algorithm only works if the WHERE clause constraints
107322:   ** the statement to update a single row.
107323:   */
107324:   assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 );
107325:   if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 && (andFlags & WHERE_UNIQUE)!=0 ){
107326:     pWInfo->okOnePass = 1;
107327:     pWInfo->a[0].plan.wsFlags &= ~WHERE_IDX_ONLY;
107328:   }
107329: 
107330:   /* Open all tables in the pTabList and any indices selected for
107331:   ** searching those tables.
107332:   */
107333:   sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */
107334:   notReady = ~(Bitmask)0;
107335:   pWInfo->nRowOut = (double)1;
107336:   for(i=0, pLevel=pWInfo->a; i<nTabList; i++, pLevel++){
107337:     Table *pTab;     /* Table to open */
107338:     int iDb;         /* Index of database containing table/index */
107339: 
107340:     pTabItem = &pTabList->a[pLevel->iFrom];
107341:     pTab = pTabItem->pTab;
107342:     pLevel->iTabCur = pTabItem->iCursor;
107343:     pWInfo->nRowOut *= pLevel->plan.nRow;
107344:     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
107345:     if( (pTab->tabFlags & TF_Ephemeral)!=0 || pTab->pSelect ){
107346:       /* Do nothing */
107347:     }else
107348: #ifndef SQLITE_OMIT_VIRTUALTABLE
107349:     if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){
107350:       const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
107351:       int iCur = pTabItem->iCursor;
107352:       sqlite3VdbeAddOp4(v, OP_VOpen, iCur, 0, 0, pVTab, P4_VTAB);
107353:     }else
107354: #endif
107355:     if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
107356:          && (wctrlFlags & WHERE_OMIT_OPEN_CLOSE)==0 ){
107357:       int op = pWInfo->okOnePass ? OP_OpenWrite : OP_OpenRead;
107358:       sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, op);
107359:       testcase( pTab->nCol==BMS-1 );
107360:       testcase( pTab->nCol==BMS );
107361:       if( !pWInfo->okOnePass && pTab->nCol<BMS ){
107362:         Bitmask b = pTabItem->colUsed;
107363:         int n = 0;
107364:         for(; b; b=b>>1, n++){}
107365:         sqlite3VdbeChangeP4(v, sqlite3VdbeCurrentAddr(v)-1, 
107366:                             SQLITE_INT_TO_PTR(n), P4_INT32);
107367:         assert( n<=pTab->nCol );
107368:       }
107369:     }else{
107370:       sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
107371:     }
107372: #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
107373:     if( (pLevel->plan.wsFlags & WHERE_TEMP_INDEX)!=0 ){
107374:       constructAutomaticIndex(pParse, pWC, pTabItem, notReady, pLevel);
107375:     }else
107376: #endif
107377:     if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){
107378:       Index *pIx = pLevel->plan.u.pIdx;
107379:       KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIx);
107380:       int iIdxCur = pLevel->iIdxCur;
107381:       assert( pIx->pSchema==pTab->pSchema );
107382:       assert( iIdxCur>=0 );
107383:       sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIx->tnum, iDb,
107384:                         (char*)pKey, P4_KEYINFO_HANDOFF);
107385:       VdbeComment((v, "%s", pIx->zName));
107386:     }
107387:     sqlite3CodeVerifySchema(pParse, iDb);
107388:     notReady &= ~getMask(pWC->pMaskSet, pTabItem->iCursor);
107389:   }
107390:   pWInfo->iTop = sqlite3VdbeCurrentAddr(v);
107391:   if( db->mallocFailed ) goto whereBeginError;
107392: 
107393:   /* Generate the code to do the search.  Each iteration of the for
107394:   ** loop below generates code for a single nested loop of the VM
107395:   ** program.
107396:   */
107397:   notReady = ~(Bitmask)0;
107398:   for(i=0; i<nTabList; i++){
107399:     pLevel = &pWInfo->a[i];
107400:     explainOneScan(pParse, pTabList, pLevel, i, pLevel->iFrom, wctrlFlags);
107401:     notReady = codeOneLoopStart(pWInfo, i, wctrlFlags, notReady, pWhere);
107402:     pWInfo->iContinue = pLevel->addrCont;
107403:   }
107404: 
107405: #ifdef SQLITE_TEST  /* For testing and debugging use only */
107406:   /* Record in the query plan information about the current table
107407:   ** and the index used to access it (if any).  If the table itself
107408:   ** is not used, its name is just '{}'.  If no index is used
107409:   ** the index is listed as "{}".  If the primary key is used the
107410:   ** index name is '*'.
107411:   */
107412:   for(i=0; i<nTabList; i++){
107413:     char *z;
107414:     int n;
107415:     pLevel = &pWInfo->a[i];
107416:     pTabItem = &pTabList->a[pLevel->iFrom];
107417:     z = pTabItem->zAlias;
107418:     if( z==0 ) z = pTabItem->pTab->zName;
107419:     n = sqlite3Strlen30(z);
107420:     if( n+nQPlan < sizeof(sqlite3_query_plan)-10 ){
107421:       if( pLevel->plan.wsFlags & WHERE_IDX_ONLY ){
107422:         memcpy(&sqlite3_query_plan[nQPlan], "{}", 2);
107423:         nQPlan += 2;
107424:       }else{
107425:         memcpy(&sqlite3_query_plan[nQPlan], z, n);
107426:         nQPlan += n;
107427:       }
107428:       sqlite3_query_plan[nQPlan++] = ' ';
107429:     }
107430:     testcase( pLevel->plan.wsFlags & WHERE_ROWID_EQ );
107431:     testcase( pLevel->plan.wsFlags & WHERE_ROWID_RANGE );
107432:     if( pLevel->plan.wsFlags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
107433:       memcpy(&sqlite3_query_plan[nQPlan], "* ", 2);
107434:       nQPlan += 2;
107435:     }else if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){
107436:       n = sqlite3Strlen30(pLevel->plan.u.pIdx->zName);
107437:       if( n+nQPlan < sizeof(sqlite3_query_plan)-2 ){
107438:         memcpy(&sqlite3_query_plan[nQPlan], pLevel->plan.u.pIdx->zName, n);
107439:         nQPlan += n;
107440:         sqlite3_query_plan[nQPlan++] = ' ';
107441:       }
107442:     }else{
107443:       memcpy(&sqlite3_query_plan[nQPlan], "{} ", 3);
107444:       nQPlan += 3;
107445:     }
107446:   }
107447:   while( nQPlan>0 && sqlite3_query_plan[nQPlan-1]==' ' ){
107448:     sqlite3_query_plan[--nQPlan] = 0;
107449:   }
107450:   sqlite3_query_plan[nQPlan] = 0;
107451:   nQPlan = 0;
107452: #endif /* SQLITE_TEST // Testing and debugging use only */
107453: 
107454:   /* Record the continuation address in the WhereInfo structure.  Then
107455:   ** clean up and return.
107456:   */
107457:   return pWInfo;
107458: 
107459:   /* Jump here if malloc fails */
107460: whereBeginError:
107461:   if( pWInfo ){
107462:     pParse->nQueryLoop = pWInfo->savedNQueryLoop;
107463:     whereInfoFree(db, pWInfo);
107464:   }
107465:   return 0;
107466: }
107467: 
107468: /*
107469: ** Generate the end of the WHERE loop.  See comments on 
107470: ** sqlite3WhereBegin() for additional information.
107471: */
107472: SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
107473:   Parse *pParse = pWInfo->pParse;
107474:   Vdbe *v = pParse->pVdbe;
107475:   int i;
107476:   WhereLevel *pLevel;
107477:   SrcList *pTabList = pWInfo->pTabList;
107478:   sqlite3 *db = pParse->db;
107479: 
107480:   /* Generate loop termination code.
107481:   */
107482:   sqlite3ExprCacheClear(pParse);
107483:   for(i=pWInfo->nLevel-1; i>=0; i--){
107484:     pLevel = &pWInfo->a[i];
107485:     sqlite3VdbeResolveLabel(v, pLevel->addrCont);
107486:     if( pLevel->op!=OP_Noop ){
107487:       sqlite3VdbeAddOp2(v, pLevel->op, pLevel->p1, pLevel->p2);
107488:       sqlite3VdbeChangeP5(v, pLevel->p5);
107489:     }
107490:     if( pLevel->plan.wsFlags & WHERE_IN_ABLE && pLevel->u.in.nIn>0 ){
107491:       struct InLoop *pIn;
107492:       int j;
107493:       sqlite3VdbeResolveLabel(v, pLevel->addrNxt);
107494:       for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){
107495:         sqlite3VdbeJumpHere(v, pIn->addrInTop+1);
107496:         sqlite3VdbeAddOp2(v, OP_Next, pIn->iCur, pIn->addrInTop);
107497:         sqlite3VdbeJumpHere(v, pIn->addrInTop-1);
107498:       }
107499:       sqlite3DbFree(db, pLevel->u.in.aInLoop);
107500:     }
107501:     sqlite3VdbeResolveLabel(v, pLevel->addrBrk);
107502:     if( pLevel->iLeftJoin ){
107503:       int addr;
107504:       addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin);
107505:       assert( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
107506:            || (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 );
107507:       if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0 ){
107508:         sqlite3VdbeAddOp1(v, OP_NullRow, pTabList->a[i].iCursor);
107509:       }
107510:       if( pLevel->iIdxCur>=0 ){
107511:         sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur);
107512:       }
107513:       if( pLevel->op==OP_Return ){
107514:         sqlite3VdbeAddOp2(v, OP_Gosub, pLevel->p1, pLevel->addrFirst);
107515:       }else{
107516:         sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrFirst);
107517:       }
107518:       sqlite3VdbeJumpHere(v, addr);
107519:     }
107520:   }
107521: 
107522:   /* The "break" point is here, just past the end of the outer loop.
107523:   ** Set it.
107524:   */
107525:   sqlite3VdbeResolveLabel(v, pWInfo->iBreak);
107526: 
107527:   /* Close all of the cursors that were opened by sqlite3WhereBegin.
107528:   */
107529:   assert( pWInfo->nLevel==1 || pWInfo->nLevel==pTabList->nSrc );
107530:   for(i=0, pLevel=pWInfo->a; i<pWInfo->nLevel; i++, pLevel++){
107531:     struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom];
107532:     Table *pTab = pTabItem->pTab;
107533:     assert( pTab!=0 );
107534:     if( (pTab->tabFlags & TF_Ephemeral)==0
107535:      && pTab->pSelect==0
107536:      && (pWInfo->wctrlFlags & WHERE_OMIT_OPEN_CLOSE)==0
107537:     ){
107538:       int ws = pLevel->plan.wsFlags;
107539:       if( !pWInfo->okOnePass && (ws & WHERE_IDX_ONLY)==0 ){
107540:         sqlite3VdbeAddOp1(v, OP_Close, pTabItem->iCursor);
107541:       }
107542:       if( (ws & WHERE_INDEXED)!=0 && (ws & WHERE_TEMP_INDEX)==0 ){
107543:         sqlite3VdbeAddOp1(v, OP_Close, pLevel->iIdxCur);
107544:       }
107545:     }
107546: 
107547:     /* If this scan uses an index, make code substitutions to read data
107548:     ** from the index in preference to the table. Sometimes, this means
107549:     ** the table need never be read from. This is a performance boost,
107550:     ** as the vdbe level waits until the table is read before actually
107551:     ** seeking the table cursor to the record corresponding to the current
107552:     ** position in the index.
107553:     ** 
107554:     ** Calls to the code generator in between sqlite3WhereBegin and
107555:     ** sqlite3WhereEnd will have created code that references the table
107556:     ** directly.  This loop scans all that code looking for opcodes
107557:     ** that reference the table and converts them into opcodes that
107558:     ** reference the index.
107559:     */
107560:     if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 && !db->mallocFailed){
107561:       int k, j, last;
107562:       VdbeOp *pOp;
107563:       Index *pIdx = pLevel->plan.u.pIdx;
107564: 
107565:       assert( pIdx!=0 );
107566:       pOp = sqlite3VdbeGetOp(v, pWInfo->iTop);
107567:       last = sqlite3VdbeCurrentAddr(v);
107568:       for(k=pWInfo->iTop; k<last; k++, pOp++){
107569:         if( pOp->p1!=pLevel->iTabCur ) continue;
107570:         if( pOp->opcode==OP_Column ){
107571:           for(j=0; j<pIdx->nColumn; j++){
107572:             if( pOp->p2==pIdx->aiColumn[j] ){
107573:               pOp->p2 = j;
107574:               pOp->p1 = pLevel->iIdxCur;
107575:               break;
107576:             }
107577:           }
107578:           assert( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
107579:                || j<pIdx->nColumn );
107580:         }else if( pOp->opcode==OP_Rowid ){
107581:           pOp->p1 = pLevel->iIdxCur;
107582:           pOp->opcode = OP_IdxRowid;
107583:         }
107584:       }
107585:     }
107586:   }
107587: 
107588:   /* Final cleanup
107589:   */
107590:   pParse->nQueryLoop = pWInfo->savedNQueryLoop;
107591:   whereInfoFree(db, pWInfo);
107592:   return;
107593: }
107594: 
107595: /************** End of where.c ***********************************************/
107596: /************** Begin file parse.c *******************************************/
107597: /* Driver template for the LEMON parser generator.
107598: ** The author disclaims copyright to this source code.
107599: **
107600: ** This version of "lempar.c" is modified, slightly, for use by SQLite.
107601: ** The only modifications are the addition of a couple of NEVER()
107602: ** macros to disable tests that are needed in the case of a general
107603: ** LALR(1) grammar but which are always false in the
107604: ** specific grammar used by SQLite.
107605: */
107606: /* First off, code is included that follows the "include" declaration
107607: ** in the input grammar file. */
107608: /* #include <stdio.h> */
107609: 
107610: 
107611: /*
107612: ** Disable all error recovery processing in the parser push-down
107613: ** automaton.
107614: */
107615: #define YYNOERRORRECOVERY 1
107616: 
107617: /*
107618: ** Make yytestcase() the same as testcase()
107619: */
107620: #define yytestcase(X) testcase(X)
107621: 
107622: /*
107623: ** An instance of this structure holds information about the
107624: ** LIMIT clause of a SELECT statement.
107625: */
107626: struct LimitVal {
107627:   Expr *pLimit;    /* The LIMIT expression.  NULL if there is no limit */
107628:   Expr *pOffset;   /* The OFFSET expression.  NULL if there is none */
107629: };
107630: 
107631: /*
107632: ** An instance of this structure is used to store the LIKE,
107633: ** GLOB, NOT LIKE, and NOT GLOB operators.
107634: */
107635: struct LikeOp {
107636:   Token eOperator;  /* "like" or "glob" or "regexp" */
107637:   int not;         /* True if the NOT keyword is present */
107638: };
107639: 
107640: /*
107641: ** An instance of the following structure describes the event of a
107642: ** TRIGGER.  "a" is the event type, one of TK_UPDATE, TK_INSERT,
107643: ** TK_DELETE, or TK_INSTEAD.  If the event is of the form
107644: **
107645: **      UPDATE ON (a,b,c)
107646: **
107647: ** Then the "b" IdList records the list "a,b,c".
107648: */
107649: struct TrigEvent { int a; IdList * b; };
107650: 
107651: /*
107652: ** An instance of this structure holds the ATTACH key and the key type.
107653: */
107654: struct AttachKey { int type;  Token key; };
107655: 
107656: 
107657:   /* This is a utility routine used to set the ExprSpan.zStart and
107658:   ** ExprSpan.zEnd values of pOut so that the span covers the complete
107659:   ** range of text beginning with pStart and going to the end of pEnd.
107660:   */
107661:   static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){
107662:     pOut->zStart = pStart->z;
107663:     pOut->zEnd = &pEnd->z[pEnd->n];
107664:   }
107665: 
107666:   /* Construct a new Expr object from a single identifier.  Use the
107667:   ** new Expr to populate pOut.  Set the span of pOut to be the identifier
107668:   ** that created the expression.
107669:   */
107670:   static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token *pValue){
107671:     pOut->pExpr = sqlite3PExpr(pParse, op, 0, 0, pValue);
107672:     pOut->zStart = pValue->z;
107673:     pOut->zEnd = &pValue->z[pValue->n];
107674:   }
107675: 
107676:   /* This routine constructs a binary expression node out of two ExprSpan
107677:   ** objects and uses the result to populate a new ExprSpan object.
107678:   */
107679:   static void spanBinaryExpr(
107680:     ExprSpan *pOut,     /* Write the result here */
107681:     Parse *pParse,      /* The parsing context.  Errors accumulate here */
107682:     int op,             /* The binary operation */
107683:     ExprSpan *pLeft,    /* The left operand */
107684:     ExprSpan *pRight    /* The right operand */
107685:   ){
107686:     pOut->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr, 0);
107687:     pOut->zStart = pLeft->zStart;
107688:     pOut->zEnd = pRight->zEnd;
107689:   }
107690: 
107691:   /* Construct an expression node for a unary postfix operator
107692:   */
107693:   static void spanUnaryPostfix(
107694:     ExprSpan *pOut,        /* Write the new expression node here */
107695:     Parse *pParse,         /* Parsing context to record errors */
107696:     int op,                /* The operator */
107697:     ExprSpan *pOperand,    /* The operand */
107698:     Token *pPostOp         /* The operand token for setting the span */
107699:   ){
107700:     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
107701:     pOut->zStart = pOperand->zStart;
107702:     pOut->zEnd = &pPostOp->z[pPostOp->n];
107703:   }                           
107704: 
107705:   /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
107706:   ** unary TK_ISNULL or TK_NOTNULL expression. */
107707:   static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
107708:     sqlite3 *db = pParse->db;
107709:     if( db->mallocFailed==0 && pY->op==TK_NULL ){
107710:       pA->op = (u8)op;
107711:       sqlite3ExprDelete(db, pA->pRight);
107712:       pA->pRight = 0;
107713:     }
107714:   }
107715: 
107716:   /* Construct an expression node for a unary prefix operator
107717:   */
107718:   static void spanUnaryPrefix(
107719:     ExprSpan *pOut,        /* Write the new expression node here */
107720:     Parse *pParse,         /* Parsing context to record errors */
107721:     int op,                /* The operator */
107722:     ExprSpan *pOperand,    /* The operand */
107723:     Token *pPreOp         /* The operand token for setting the span */
107724:   ){
107725:     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
107726:     pOut->zStart = pPreOp->z;
107727:     pOut->zEnd = pOperand->zEnd;
107728:   }
107729: /* Next is all token values, in a form suitable for use by makeheaders.
107730: ** This section will be null unless lemon is run with the -m switch.
107731: */
107732: /* 
107733: ** These constants (all generated automatically by the parser generator)
107734: ** specify the various kinds of tokens (terminals) that the parser
107735: ** understands. 
107736: **
107737: ** Each symbol here is a terminal symbol in the grammar.
107738: */
107739: /* Make sure the INTERFACE macro is defined.
107740: */
107741: #ifndef INTERFACE
107742: # define INTERFACE 1
107743: #endif
107744: /* The next thing included is series of defines which control
107745: ** various aspects of the generated parser.
107746: **    YYCODETYPE         is the data type used for storing terminal
107747: **                       and nonterminal numbers.  "unsigned char" is
107748: **                       used if there are fewer than 250 terminals
107749: **                       and nonterminals.  "int" is used otherwise.
107750: **    YYNOCODE           is a number of type YYCODETYPE which corresponds
107751: **                       to no legal terminal or nonterminal number.  This
107752: **                       number is used to fill in empty slots of the hash 
107753: **                       table.
107754: **    YYFALLBACK         If defined, this indicates that one or more tokens
107755: **                       have fall-back values which should be used if the
107756: **                       original value of the token will not parse.
107757: **    YYACTIONTYPE       is the data type used for storing terminal
107758: **                       and nonterminal numbers.  "unsigned char" is
107759: **                       used if there are fewer than 250 rules and
107760: **                       states combined.  "int" is used otherwise.
107761: **    sqlite3ParserTOKENTYPE     is the data type used for minor tokens given 
107762: **                       directly to the parser from the tokenizer.
107763: **    YYMINORTYPE        is the data type used for all minor tokens.
107764: **                       This is typically a union of many types, one of
107765: **                       which is sqlite3ParserTOKENTYPE.  The entry in the union
107766: **                       for base tokens is called "yy0".
107767: **    YYSTACKDEPTH       is the maximum depth of the parser's stack.  If
107768: **                       zero the stack is dynamically sized using realloc()
107769: **    sqlite3ParserARG_SDECL     A static variable declaration for the %extra_argument
107770: **    sqlite3ParserARG_PDECL     A parameter declaration for the %extra_argument
107771: **    sqlite3ParserARG_STORE     Code to store %extra_argument into yypParser
107772: **    sqlite3ParserARG_FETCH     Code to extract %extra_argument from yypParser
107773: **    YYNSTATE           the combined number of states.
107774: **    YYNRULE            the number of rules in the grammar
107775: **    YYERRORSYMBOL      is the code number of the error symbol.  If not
107776: **                       defined, then do no error processing.
107777: */
107778: #define YYCODETYPE unsigned char
107779: #define YYNOCODE 253
107780: #define YYACTIONTYPE unsigned short int
107781: #define YYWILDCARD 67
107782: #define sqlite3ParserTOKENTYPE Token
107783: typedef union {
107784:   int yyinit;
107785:   sqlite3ParserTOKENTYPE yy0;
107786:   int yy4;
107787:   struct TrigEvent yy90;
107788:   ExprSpan yy118;
107789:   TriggerStep* yy203;
107790:   u8 yy210;
107791:   struct {int value; int mask;} yy215;
107792:   SrcList* yy259;
107793:   struct LimitVal yy292;
107794:   Expr* yy314;
107795:   ExprList* yy322;
107796:   struct LikeOp yy342;
107797:   IdList* yy384;
107798:   Select* yy387;
107799: } YYMINORTYPE;
107800: #ifndef YYSTACKDEPTH
107801: #define YYSTACKDEPTH 100
107802: #endif
107803: #define sqlite3ParserARG_SDECL Parse *pParse;
107804: #define sqlite3ParserARG_PDECL ,Parse *pParse
107805: #define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse
107806: #define sqlite3ParserARG_STORE yypParser->pParse = pParse
107807: #define YYNSTATE 630
107808: #define YYNRULE 329
107809: #define YYFALLBACK 1
107810: #define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
107811: #define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
107812: #define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
107813: 
107814: /* The yyzerominor constant is used to initialize instances of
107815: ** YYMINORTYPE objects to zero. */
107816: static const YYMINORTYPE yyzerominor = { 0 };
107817: 
107818: /* Define the yytestcase() macro to be a no-op if is not already defined
107819: ** otherwise.
107820: **
107821: ** Applications can choose to define yytestcase() in the %include section
107822: ** to a macro that can assist in verifying code coverage.  For production
107823: ** code the yytestcase() macro should be turned off.  But it is useful
107824: ** for testing.
107825: */
107826: #ifndef yytestcase
107827: # define yytestcase(X)
107828: #endif
107829: 
107830: 
107831: /* Next are the tables used to determine what action to take based on the
107832: ** current state and lookahead token.  These tables are used to implement
107833: ** functions that take a state number and lookahead value and return an
107834: ** action integer.  
107835: **
107836: ** Suppose the action integer is N.  Then the action is determined as
107837: ** follows
107838: **
107839: **   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
107840: **                                      token onto the stack and goto state N.
107841: **
107842: **   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
107843: **
107844: **   N == YYNSTATE+YYNRULE              A syntax error has occurred.
107845: **
107846: **   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
107847: **
107848: **   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
107849: **                                      slots in the yy_action[] table.
107850: **
107851: ** The action table is constructed as a single large table named yy_action[].
107852: ** Given state S and lookahead X, the action is computed as
107853: **
107854: **      yy_action[ yy_shift_ofst[S] + X ]
107855: **
107856: ** If the index value yy_shift_ofst[S]+X is out of range or if the value
107857: ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
107858: ** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
107859: ** and that yy_default[S] should be used instead.  
107860: **
107861: ** The formula above is for computing the action when the lookahead is
107862: ** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
107863: ** a reduce action) then the yy_reduce_ofst[] array is used in place of
107864: ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
107865: ** YY_SHIFT_USE_DFLT.
107866: **
107867: ** The following are the tables generated in this section:
107868: **
107869: **  yy_action[]        A single table containing all actions.
107870: **  yy_lookahead[]     A table containing the lookahead for each entry in
107871: **                     yy_action.  Used to detect hash collisions.
107872: **  yy_shift_ofst[]    For each state, the offset into yy_action for
107873: **                     shifting terminals.
107874: **  yy_reduce_ofst[]   For each state, the offset into yy_action for
107875: **                     shifting non-terminals after a reduce.
107876: **  yy_default[]       Default action for each state.
107877: */
107878: #define YY_ACTTAB_COUNT (1557)
107879: static const YYACTIONTYPE yy_action[] = {
107880:  /*     0 */   313,  960,  186,  419,    2,  172,  627,  597,   55,   55,
107881:  /*    10 */    55,   55,   48,   53,   53,   53,   53,   52,   52,   51,
107882:  /*    20 */    51,   51,   50,  238,  302,  283,  623,  622,  516,  515,
107883:  /*    30 */   590,  584,   55,   55,   55,   55,  282,   53,   53,   53,
107884:  /*    40 */    53,   52,   52,   51,   51,   51,   50,  238,    6,   56,
107885:  /*    50 */    57,   47,  582,  581,  583,  583,   54,   54,   55,   55,
107886:  /*    60 */    55,   55,  608,   53,   53,   53,   53,   52,   52,   51,
107887:  /*    70 */    51,   51,   50,  238,  313,  597,  409,  330,  579,  579,
107888:  /*    80 */    32,   53,   53,   53,   53,   52,   52,   51,   51,   51,
107889:  /*    90 */    50,  238,  330,  217,  620,  619,  166,  411,  624,  382,
107890:  /*   100 */   379,  378,    7,  491,  590,  584,  200,  199,  198,   58,
107891:  /*   110 */   377,  300,  414,  621,  481,   66,  623,  622,  621,  580,
107892:  /*   120 */   254,  601,   94,   56,   57,   47,  582,  581,  583,  583,
107893:  /*   130 */    54,   54,   55,   55,   55,   55,  671,   53,   53,   53,
107894:  /*   140 */    53,   52,   52,   51,   51,   51,   50,  238,  313,  532,
107895:  /*   150 */   226,  506,  507,  133,  177,  139,  284,  385,  279,  384,
107896:  /*   160 */   169,  197,  342,  398,  251,  226,  253,  275,  388,  167,
107897:  /*   170 */   139,  284,  385,  279,  384,  169,  570,  236,  590,  584,
107898:  /*   180 */   672,  240,  275,  157,  620,  619,  554,  437,   51,   51,
107899:  /*   190 */    51,   50,  238,  343,  439,  553,  438,   56,   57,   47,
107900:  /*   200 */   582,  581,  583,  583,   54,   54,   55,   55,   55,   55,
107901:  /*   210 */   465,   53,   53,   53,   53,   52,   52,   51,   51,   51,
107902:  /*   220 */    50,  238,  313,  390,   52,   52,   51,   51,   51,   50,
107903:  /*   230 */   238,  391,  166,  491,  566,  382,  379,  378,  409,  440,
107904:  /*   240 */   579,  579,  252,  440,  607,   66,  377,  513,  621,   49,
107905:  /*   250 */    46,  147,  590,  584,  621,   16,  466,  189,  621,  441,
107906:  /*   260 */   442,  673,  526,  441,  340,  577,  595,   64,  194,  482,
107907:  /*   270 */   434,   56,   57,   47,  582,  581,  583,  583,   54,   54,
107908:  /*   280 */    55,   55,   55,   55,   30,   53,   53,   53,   53,   52,
107909:  /*   290 */    52,   51,   51,   51,   50,  238,  313,  593,  593,  593,
107910:  /*   300 */   387,  578,  606,  493,  259,  351,  258,  411,    1,  623,
107911:  /*   310 */   622,  496,  623,  622,   65,  240,  623,  622,  597,  443,
107912:  /*   320 */   237,  239,  414,  341,  237,  602,  590,  584,   18,  603,
107913:  /*   330 */   166,  601,   87,  382,  379,  378,   67,  623,  622,   38,
107914:  /*   340 */   623,  622,  176,  270,  377,   56,   57,   47,  582,  581,
107915:  /*   350 */   583,  583,   54,   54,   55,   55,   55,   55,  175,   53,
107916:  /*   360 */    53,   53,   53,   52,   52,   51,   51,   51,   50,  238,
107917:  /*   370 */   313,  396,  233,  411,  531,  565,  317,  620,  619,   44,
107918:  /*   380 */   620,  619,  240,  206,  620,  619,  597,  266,  414,  268,
107919:  /*   390 */   409,  597,  579,  579,  352,  184,  505,  601,   73,  533,
107920:  /*   400 */   590,  584,  466,  548,  190,  620,  619,  576,  620,  619,
107921:  /*   410 */   547,  383,  551,   35,  332,  575,  574,  600,  504,   56,
107922:  /*   420 */    57,   47,  582,  581,  583,  583,   54,   54,   55,   55,
107923:  /*   430 */    55,   55,  567,   53,   53,   53,   53,   52,   52,   51,
107924:  /*   440 */    51,   51,   50,  238,  313,  411,  561,  561,  528,  364,
107925:  /*   450 */   259,  351,  258,  183,  361,  549,  524,  374,  411,  597,
107926:  /*   460 */   414,  240,  560,  560,  409,  604,  579,  579,  328,  601,
107927:  /*   470 */    93,  623,  622,  414,  590,  584,  237,  564,  559,  559,
107928:  /*   480 */   520,  402,  601,   87,  409,  210,  579,  579,  168,  421,
107929:  /*   490 */   950,  519,  950,   56,   57,   47,  582,  581,  583,  583,
107930:  /*   500 */    54,   54,   55,   55,   55,   55,  192,   53,   53,   53,
107931:  /*   510 */    53,   52,   52,   51,   51,   51,   50,  238,  313,  600,
107932:  /*   520 */   293,  563,  511,  234,  357,  146,  475,  475,  367,  411,
107933:  /*   530 */   562,  411,  358,  542,  425,  171,  411,  215,  144,  620,
107934:  /*   540 */   619,  544,  318,  353,  414,  203,  414,  275,  590,  584,
107935:  /*   550 */   549,  414,  174,  601,   94,  601,   79,  558,  471,   61,
107936:  /*   560 */   601,   79,  421,  949,  350,  949,   34,   56,   57,   47,
107937:  /*   570 */   582,  581,  583,  583,   54,   54,   55,   55,   55,   55,
107938:  /*   580 */   535,   53,   53,   53,   53,   52,   52,   51,   51,   51,
107939:  /*   590 */    50,  238,  313,  307,  424,  394,  272,   49,   46,  147,
107940:  /*   600 */   349,  322,    4,  411,  491,  312,  321,  425,  568,  492,
107941:  /*   610 */   216,  264,  407,  575,  574,  429,   66,  549,  414,  621,
107942:  /*   620 */   540,  602,  590,  584,   13,  603,  621,  601,   72,   12,
107943:  /*   630 */   618,  617,  616,  202,  210,  621,  546,  469,  422,  319,
107944:  /*   640 */   148,   56,   57,   47,  582,  581,  583,  583,   54,   54,
107945:  /*   650 */    55,   55,   55,   55,  338,   53,   53,   53,   53,   52,
107946:  /*   660 */    52,   51,   51,   51,   50,  238,  313,  600,  600,  411,
107947:  /*   670 */    39,   21,   37,  170,  237,  875,  411,  572,  572,  201,
107948:  /*   680 */   144,  473,  538,  331,  414,  474,  143,  146,  630,  628,
107949:  /*   690 */   334,  414,  353,  601,   68,  168,  590,  584,  132,  365,
107950:  /*   700 */   601,   96,  307,  423,  530,  336,   49,   46,  147,  568,
107951:  /*   710 */   406,  216,  549,  360,  529,   56,   57,   47,  582,  581,
107952:  /*   720 */   583,  583,   54,   54,   55,   55,   55,   55,  411,   53,
107953:  /*   730 */    53,   53,   53,   52,   52,   51,   51,   51,   50,  238,
107954:  /*   740 */   313,  411,  605,  414,  484,  510,  172,  422,  597,  318,
107955:  /*   750 */   496,  485,  601,   99,  411,  142,  414,  411,  231,  411,
107956:  /*   760 */   540,  411,  359,  629,    2,  601,   97,  426,  308,  414,
107957:  /*   770 */   590,  584,  414,   20,  414,  621,  414,  621,  601,  106,
107958:  /*   780 */   503,  601,  105,  601,  108,  601,  109,  204,   28,   56,
107959:  /*   790 */    57,   47,  582,  581,  583,  583,   54,   54,   55,   55,
107960:  /*   800 */    55,   55,  411,   53,   53,   53,   53,   52,   52,   51,
107961:  /*   810 */    51,   51,   50,  238,  313,  411,  597,  414,  411,  276,
107962:  /*   820 */   214,  600,  411,  366,  213,  381,  601,  134,  274,  500,
107963:  /*   830 */   414,  167,  130,  414,  621,  411,  354,  414,  376,  601,
107964:  /*   840 */   135,  129,  601,  100,  590,  584,  601,  104,  522,  521,
107965:  /*   850 */   414,  621,  224,  273,  600,  167,  327,  282,  600,  601,
107966:  /*   860 */   103,  468,  521,   56,   57,   47,  582,  581,  583,  583,
107967:  /*   870 */    54,   54,   55,   55,   55,   55,  411,   53,   53,   53,
107968:  /*   880 */    53,   52,   52,   51,   51,   51,   50,  238,  313,  411,
107969:  /*   890 */    27,  414,  411,  375,  276,  167,  359,  544,   50,  238,
107970:  /*   900 */   601,   95,  128,  223,  414,  411,  165,  414,  411,  621,
107971:  /*   910 */   411,  621,  612,  601,  102,  372,  601,   76,  590,  584,
107972:  /*   920 */   414,  570,  236,  414,  470,  414,  167,  621,  188,  601,
107973:  /*   930 */    98,  225,  601,  138,  601,  137,  232,   56,   45,   47,
107974:  /*   940 */   582,  581,  583,  583,   54,   54,   55,   55,   55,   55,
107975:  /*   950 */   411,   53,   53,   53,   53,   52,   52,   51,   51,   51,
107976:  /*   960 */    50,  238,  313,  276,  276,  414,  411,  276,  544,  459,
107977:  /*   970 */   359,  171,  209,  479,  601,  136,  628,  334,  621,  621,
107978:  /*   980 */   125,  414,  621,  368,  411,  621,  257,  540,  589,  588,
107979:  /*   990 */   601,   75,  590,  584,  458,  446,   23,   23,  124,  414,
107980:  /*  1000 */   326,  325,  621,  427,  324,  309,  600,  288,  601,   92,
107981:  /*  1010 */   586,  585,   57,   47,  582,  581,  583,  583,   54,   54,
107982:  /*  1020 */    55,   55,   55,   55,  411,   53,   53,   53,   53,   52,
107983:  /*  1030 */    52,   51,   51,   51,   50,  238,  313,  587,  411,  414,
107984:  /*  1040 */   411,  207,  611,  476,  171,  472,  160,  123,  601,   91,
107985:  /*  1050 */   323,  261,   15,  414,  464,  414,  411,  621,  411,  354,
107986:  /*  1060 */   222,  411,  601,   74,  601,   90,  590,  584,  159,  264,
107987:  /*  1070 */   158,  414,  461,  414,  621,  600,  414,  121,  120,   25,
107988:  /*  1080 */   601,   89,  601,  101,  621,  601,   88,   47,  582,  581,
107989:  /*  1090 */   583,  583,   54,   54,   55,   55,   55,   55,  544,   53,
107990:  /*  1100 */    53,   53,   53,   52,   52,   51,   51,   51,   50,  238,
107991:  /*  1110 */    43,  405,  263,    3,  610,  264,  140,  415,  622,   24,
107992:  /*  1120 */   410,   11,  456,  594,  118,  155,  219,  452,  408,  621,
107993:  /*  1130 */   621,  621,  156,   43,  405,  621,    3,  286,  621,  113,
107994:  /*  1140 */   415,  622,  111,  445,  411,  400,  557,  403,  545,   10,
107995:  /*  1150 */   411,  408,  264,  110,  205,  436,  541,  566,  453,  414,
107996:  /*  1160 */   621,  621,   63,  621,  435,  414,  411,  621,  601,   94,
107997:  /*  1170 */   403,  621,  411,  337,  601,   86,  150,   40,   41,  534,
107998:  /*  1180 */   566,  414,  242,  264,   42,  413,  412,  414,  600,  595,
107999:  /*  1190 */   601,   85,  191,  333,  107,  451,  601,   84,  621,  539,
108000:  /*  1200 */    40,   41,  420,  230,  411,  149,  316,   42,  413,  412,
108001:  /*  1210 */   398,  127,  595,  315,  621,  399,  278,  625,  181,  414,
108002:  /*  1220 */   593,  593,  593,  592,  591,   14,  450,  411,  601,   71,
108003:  /*  1230 */   240,  621,   43,  405,  264,    3,  615,  180,  264,  415,
108004:  /*  1240 */   622,  614,  414,  593,  593,  593,  592,  591,   14,  621,
108005:  /*  1250 */   408,  601,   70,  621,  417,   33,  405,  613,    3,  411,
108006:  /*  1260 */   264,  411,  415,  622,  418,  626,  178,  509,    8,  403,
108007:  /*  1270 */   241,  416,  126,  408,  414,  621,  414,  449,  208,  566,
108008:  /*  1280 */   240,  221,  621,  601,   83,  601,   82,  599,  297,  277,
108009:  /*  1290 */   296,   30,  403,   31,  395,  264,  295,  397,  489,   40,
108010:  /*  1300 */    41,  411,  566,  220,  621,  294,   42,  413,  412,  271,
108011:  /*  1310 */   621,  595,  600,  621,   59,   60,  414,  269,  267,  623,
108012:  /*  1320 */   622,   36,   40,   41,  621,  601,   81,  598,  235,   42,
108013:  /*  1330 */   413,  412,  621,  621,  595,  265,  344,  411,  248,  556,
108014:  /*  1340 */   173,  185,  593,  593,  593,  592,  591,   14,  218,   29,
108015:  /*  1350 */   621,  543,  414,  305,  304,  303,  179,  301,  411,  566,
108016:  /*  1360 */   454,  601,   80,  289,  335,  593,  593,  593,  592,  591,
108017:  /*  1370 */    14,  411,  287,  414,  151,  392,  246,  260,  411,  196,
108018:  /*  1380 */   195,  523,  601,   69,  411,  245,  414,  526,  537,  285,
108019:  /*  1390 */   389,  595,  621,  414,  536,  601,   17,  362,  153,  414,
108020:  /*  1400 */   466,  463,  601,   78,  154,  414,  462,  152,  601,   77,
108021:  /*  1410 */   355,  255,  621,  455,  601,    9,  621,  386,  444,  517,
108022:  /*  1420 */   247,  621,  593,  593,  593,  621,  621,  244,  621,  243,
108023:  /*  1430 */   430,  518,  292,  621,  329,  621,  145,  393,  280,  513,
108024:  /*  1440 */   291,  131,  621,  514,  621,  621,  311,  621,  259,  346,
108025:  /*  1450 */   249,  621,  621,  229,  314,  621,  228,  512,  227,  240,
108026:  /*  1460 */   494,  488,  310,  164,  487,  486,  373,  480,  163,  262,
108027:  /*  1470 */   369,  371,  162,   26,  212,  478,  477,  161,  141,  363,
108028:  /*  1480 */   467,  122,  339,  187,  119,  348,  347,  117,  116,  115,
108029:  /*  1490 */   114,  112,  182,  457,  320,   22,  433,  432,  448,   19,
108030:  /*  1500 */   609,  431,  428,   62,  193,  596,  573,  298,  555,  552,
108031:  /*  1510 */   571,  404,  290,  380,  498,  510,  495,  306,  281,  499,
108032:  /*  1520 */   250,    5,  497,  460,  345,  447,  569,  550,  238,  299,
108033:  /*  1530 */   527,  525,  508,  961,  502,  501,  961,  401,  961,  211,
108034:  /*  1540 */   490,  356,  256,  961,  483,  961,  961,  961,  961,  961,
108035:  /*  1550 */   961,  961,  961,  961,  961,  961,  370,
108036: };
108037: static const YYCODETYPE yy_lookahead[] = {
108038:  /*     0 */    19,  142,  143,  144,  145,   24,    1,   26,   77,   78,
108039:  /*    10 */    79,   80,   81,   82,   83,   84,   85,   86,   87,   88,
108040:  /*    20 */    89,   90,   91,   92,   15,   98,   26,   27,    7,    8,
108041:  /*    30 */    49,   50,   77,   78,   79,   80,  109,   82,   83,   84,
108042:  /*    40 */    85,   86,   87,   88,   89,   90,   91,   92,   22,   68,
108043:  /*    50 */    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
108044:  /*    60 */    79,   80,   23,   82,   83,   84,   85,   86,   87,   88,
108045:  /*    70 */    89,   90,   91,   92,   19,   94,  112,   19,  114,  115,
108046:  /*    80 */    25,   82,   83,   84,   85,   86,   87,   88,   89,   90,
108047:  /*    90 */    91,   92,   19,   22,   94,   95,   96,  150,  150,   99,
108048:  /*   100 */   100,  101,   76,  150,   49,   50,  105,  106,  107,   54,
108049:  /*   110 */   110,  158,  165,  165,  161,  162,   26,   27,  165,  113,
108050:  /*   120 */    16,  174,  175,   68,   69,   70,   71,   72,   73,   74,
108051:  /*   130 */    75,   76,   77,   78,   79,   80,  118,   82,   83,   84,
108052:  /*   140 */    85,   86,   87,   88,   89,   90,   91,   92,   19,   23,
108053:  /*   150 */    92,   97,   98,   24,   96,   97,   98,   99,  100,  101,
108054:  /*   160 */   102,   25,   97,  216,   60,   92,   62,  109,  221,   25,
108055:  /*   170 */    97,   98,   99,  100,  101,  102,   86,   87,   49,   50,
108056:  /*   180 */   118,  116,  109,   25,   94,   95,   32,   97,   88,   89,
108057:  /*   190 */    90,   91,   92,  128,  104,   41,  106,   68,   69,   70,
108058:  /*   200 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
108059:  /*   210 */    11,   82,   83,   84,   85,   86,   87,   88,   89,   90,
108060:  /*   220 */    91,   92,   19,   19,   86,   87,   88,   89,   90,   91,
108061:  /*   230 */    92,   27,   96,  150,   66,   99,  100,  101,  112,  150,
108062:  /*   240 */   114,  115,  138,  150,  161,  162,  110,  103,  165,  222,
108063:  /*   250 */   223,  224,   49,   50,  165,   22,   57,   24,  165,  170,
108064:  /*   260 */   171,  118,   94,  170,  171,   23,   98,   25,  185,  186,
108065:  /*   270 */   243,   68,   69,   70,   71,   72,   73,   74,   75,   76,
108066:  /*   280 */    77,   78,   79,   80,  126,   82,   83,   84,   85,   86,
108067:  /*   290 */    87,   88,   89,   90,   91,   92,   19,  129,  130,  131,
108068:  /*   300 */    88,   23,  172,  173,  105,  106,  107,  150,   22,   26,
108069:  /*   310 */    27,  181,   26,   27,   22,  116,   26,   27,   26,  230,
108070:  /*   320 */   231,  197,  165,  230,  231,  113,   49,   50,  204,  117,
108071:  /*   330 */    96,  174,  175,   99,  100,  101,   22,   26,   27,  136,
108072:  /*   340 */    26,   27,  118,   16,  110,   68,   69,   70,   71,   72,
108073:  /*   350 */    73,   74,   75,   76,   77,   78,   79,   80,  118,   82,
108074:  /*   360 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
108075:  /*   370 */    19,  214,  215,  150,   23,   23,  155,   94,   95,   22,
108076:  /*   380 */    94,   95,  116,  160,   94,   95,   94,   60,  165,   62,
108077:  /*   390 */   112,   26,  114,  115,  128,   23,   36,  174,  175,   88,
108078:  /*   400 */    49,   50,   57,  120,   22,   94,   95,   23,   94,   95,
108079:  /*   410 */   120,   51,   25,  136,  169,  170,  171,  194,   58,   68,
108080:  /*   420 */    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
108081:  /*   430 */    79,   80,   23,   82,   83,   84,   85,   86,   87,   88,
108082:  /*   440 */    89,   90,   91,   92,   19,  150,   12,   12,   23,  228,
108083:  /*   450 */   105,  106,  107,   23,  233,   25,  165,   19,  150,   94,
108084:  /*   460 */   165,  116,   28,   28,  112,  174,  114,  115,  108,  174,
108085:  /*   470 */   175,   26,   27,  165,   49,   50,  231,   11,   44,   44,
108086:  /*   480 */    46,   46,  174,  175,  112,  160,  114,  115,   50,   22,
108087:  /*   490 */    23,   57,   25,   68,   69,   70,   71,   72,   73,   74,
108088:  /*   500 */    75,   76,   77,   78,   79,   80,  119,   82,   83,   84,
108089:  /*   510 */    85,   86,   87,   88,   89,   90,   91,   92,   19,  194,
108090:  /*   520 */   225,   23,   23,  215,   19,   95,  105,  106,  107,  150,
108091:  /*   530 */    23,  150,   27,   23,   67,   25,  150,  206,  207,   94,
108092:  /*   540 */    95,  166,  104,  218,  165,   22,  165,  109,   49,   50,
108093:  /*   550 */   120,  165,   25,  174,  175,  174,  175,   23,   21,  234,
108094:  /*   560 */   174,  175,   22,   23,  239,   25,   25,   68,   69,   70,
108095:  /*   570 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
108096:  /*   580 */   205,   82,   83,   84,   85,   86,   87,   88,   89,   90,
108097:  /*   590 */    91,   92,   19,   22,   23,  216,   23,  222,  223,  224,
108098:  /*   600 */    63,  220,   35,  150,  150,  163,  220,   67,  166,  167,
108099:  /*   610 */   168,  150,  169,  170,  171,  161,  162,   25,  165,  165,
108100:  /*   620 */   150,  113,   49,   50,   25,  117,  165,  174,  175,   35,
108101:  /*   630 */     7,    8,    9,  160,  160,  165,  120,  100,   67,  247,
108102:  /*   640 */   248,   68,   69,   70,   71,   72,   73,   74,   75,   76,
108103:  /*   650 */    77,   78,   79,   80,  193,   82,   83,   84,   85,   86,
108104:  /*   660 */    87,   88,   89,   90,   91,   92,   19,  194,  194,  150,
108105:  /*   670 */   135,   24,  137,   35,  231,  138,  150,  129,  130,  206,
108106:  /*   680 */   207,   30,   27,  213,  165,   34,  118,   95,    0,    1,
108107:  /*   690 */     2,  165,  218,  174,  175,   50,   49,   50,   22,   48,
108108:  /*   700 */   174,  175,   22,   23,   23,  244,  222,  223,  224,  166,
108109:  /*   710 */   167,  168,  120,  239,   23,   68,   69,   70,   71,   72,
108110:  /*   720 */    73,   74,   75,   76,   77,   78,   79,   80,  150,   82,
108111:  /*   730 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
108112:  /*   740 */    19,  150,  173,  165,  181,  182,   24,   67,   26,  104,
108113:  /*   750 */   181,  188,  174,  175,  150,   39,  165,  150,   52,  150,
108114:  /*   760 */   150,  150,  150,  144,  145,  174,  175,  249,  250,  165,
108115:  /*   770 */    49,   50,  165,   52,  165,  165,  165,  165,  174,  175,
108116:  /*   780 */    29,  174,  175,  174,  175,  174,  175,  160,   22,   68,
108117:  /*   790 */    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
108118:  /*   800 */    79,   80,  150,   82,   83,   84,   85,   86,   87,   88,
108119:  /*   810 */    89,   90,   91,   92,   19,  150,   94,  165,  150,  150,
108120:  /*   820 */   160,  194,  150,  213,  160,   52,  174,  175,   23,   23,
108121:  /*   830 */   165,   25,   22,  165,  165,  150,  150,  165,   52,  174,
108122:  /*   840 */   175,   22,  174,  175,   49,   50,  174,  175,  190,  191,
108123:  /*   850 */   165,  165,  240,   23,  194,   25,  187,  109,  194,  174,
108124:  /*   860 */   175,  190,  191,   68,   69,   70,   71,   72,   73,   74,
108125:  /*   870 */    75,   76,   77,   78,   79,   80,  150,   82,   83,   84,
108126:  /*   880 */    85,   86,   87,   88,   89,   90,   91,   92,   19,  150,
108127:  /*   890 */    22,  165,  150,   23,  150,   25,  150,  166,   91,   92,
108128:  /*   900 */   174,  175,   22,  217,  165,  150,  102,  165,  150,  165,
108129:  /*   910 */   150,  165,  150,  174,  175,   19,  174,  175,   49,   50,
108130:  /*   920 */   165,   86,   87,  165,   23,  165,   25,  165,   24,  174,
108131:  /*   930 */   175,  187,  174,  175,  174,  175,  205,   68,   69,   70,
108132:  /*   940 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
108133:  /*   950 */   150,   82,   83,   84,   85,   86,   87,   88,   89,   90,
108134:  /*   960 */    91,   92,   19,  150,  150,  165,  150,  150,  166,   23,
108135:  /*   970 */   150,   25,  160,   20,  174,  175,    1,    2,  165,  165,
108136:  /*   980 */   104,  165,  165,   43,  150,  165,  240,  150,   49,   50,
108137:  /*   990 */   174,  175,   49,   50,   23,   23,   25,   25,   53,  165,
108138:  /*  1000 */   187,  187,  165,   23,  187,   25,  194,  205,  174,  175,
108139:  /*  1010 */    71,   72,   69,   70,   71,   72,   73,   74,   75,   76,
108140:  /*  1020 */    77,   78,   79,   80,  150,   82,   83,   84,   85,   86,
108141:  /*  1030 */    87,   88,   89,   90,   91,   92,   19,   98,  150,  165,
108142:  /*  1040 */   150,  160,  150,   59,   25,   53,  104,   22,  174,  175,
108143:  /*  1050 */   213,  138,    5,  165,    1,  165,  150,  165,  150,  150,
108144:  /*  1060 */   240,  150,  174,  175,  174,  175,   49,   50,  118,  150,
108145:  /*  1070 */    35,  165,   27,  165,  165,  194,  165,  108,  127,   76,
108146:  /*  1080 */   174,  175,  174,  175,  165,  174,  175,   70,   71,   72,
108147:  /*  1090 */    73,   74,   75,   76,   77,   78,   79,   80,  166,   82,
108148:  /*  1100 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
108149:  /*  1110 */    19,   20,  193,   22,  150,  150,  150,   26,   27,   76,
108150:  /*  1120 */   150,   22,    1,  150,  119,  121,  217,   20,   37,  165,
108151:  /*  1130 */   165,  165,   16,   19,   20,  165,   22,  205,  165,  119,
108152:  /*  1140 */    26,   27,  108,  128,  150,  150,  150,   56,  150,   22,
108153:  /*  1150 */   150,   37,  150,  127,  160,   23,  150,   66,  193,  165,
108154:  /*  1160 */   165,  165,   16,  165,   23,  165,  150,  165,  174,  175,
108155:  /*  1170 */    56,  165,  150,   65,  174,  175,   15,   86,   87,   88,
108156:  /*  1180 */    66,  165,  140,  150,   93,   94,   95,  165,  194,   98,
108157:  /*  1190 */   174,  175,   22,    3,  164,  193,  174,  175,  165,  150,
108158:  /*  1200 */    86,   87,    4,  180,  150,  248,  251,   93,   94,   95,
108159:  /*  1210 */   216,  180,   98,  251,  165,  221,  150,  149,    6,  165,
108160:  /*  1220 */   129,  130,  131,  132,  133,  134,  193,  150,  174,  175,
108161:  /*  1230 */   116,  165,   19,   20,  150,   22,  149,  151,  150,   26,
108162:  /*  1240 */    27,  149,  165,  129,  130,  131,  132,  133,  134,  165,
108163:  /*  1250 */    37,  174,  175,  165,  149,   19,   20,   13,   22,  150,
108164:  /*  1260 */   150,  150,   26,   27,  146,  147,  151,  150,   25,   56,
108165:  /*  1270 */   152,  159,  154,   37,  165,  165,  165,  193,  160,   66,
108166:  /*  1280 */   116,  193,  165,  174,  175,  174,  175,  194,  199,  150,
108167:  /*  1290 */   200,  126,   56,  124,  123,  150,  201,  122,  150,   86,
108168:  /*  1300 */    87,  150,   66,  193,  165,  202,   93,   94,   95,  150,
108169:  /*  1310 */   165,   98,  194,  165,  125,   22,  165,  150,  150,   26,
108170:  /*  1320 */    27,  135,   86,   87,  165,  174,  175,  203,  226,   93,
108171:  /*  1330 */    94,   95,  165,  165,   98,  150,  218,  150,  193,  157,
108172:  /*  1340 */   118,  157,  129,  130,  131,  132,  133,  134,    5,  104,
108173:  /*  1350 */   165,  211,  165,   10,   11,   12,   13,   14,  150,   66,
108174:  /*  1360 */    17,  174,  175,  210,  246,  129,  130,  131,  132,  133,
108175:  /*  1370 */   134,  150,  210,  165,   31,  121,   33,  150,  150,   86,
108176:  /*  1380 */    87,  176,  174,  175,  150,   42,  165,   94,  211,  210,
108177:  /*  1390 */   150,   98,  165,  165,  211,  174,  175,  150,   55,  165,
108178:  /*  1400 */    57,  150,  174,  175,   61,  165,  150,   64,  174,  175,
108179:  /*  1410 */   150,  150,  165,  150,  174,  175,  165,  104,  150,  184,
108180:  /*  1420 */   150,  165,  129,  130,  131,  165,  165,  150,  165,  150,
108181:  /*  1430 */   150,  176,  150,  165,   47,  165,  150,  150,  176,  103,
108182:  /*  1440 */   150,   22,  165,  178,  165,  165,  179,  165,  105,  106,
108183:  /*  1450 */   107,  165,  165,  229,  111,  165,   92,  176,  229,  116,
108184:  /*  1460 */   184,  176,  179,  156,  176,  176,   18,  157,  156,  237,
108185:  /*  1470 */    45,  157,  156,  135,  157,  157,  238,  156,   68,  157,
108186:  /*  1480 */   189,  189,  139,  219,   22,  157,   18,  192,  192,  192,
108187:  /*  1490 */   192,  189,  219,  199,  157,  242,   40,  157,  199,  242,
108188:  /*  1500 */   153,  157,   38,  245,  196,  166,  232,  198,  177,  177,
108189:  /*  1510 */   232,  227,  209,  178,  166,  182,  166,  148,  177,  177,
108190:  /*  1520 */   209,  196,  177,  199,  209,  199,  166,  208,   92,  195,
108191:  /*  1530 */   174,  174,  183,  252,  183,  183,  252,  191,  252,  235,
108192:  /*  1540 */   186,  241,  241,  252,  186,  252,  252,  252,  252,  252,
108193:  /*  1550 */   252,  252,  252,  252,  252,  252,  236,
108194: };
108195: #define YY_SHIFT_USE_DFLT (-74)
108196: #define YY_SHIFT_COUNT (418)
108197: #define YY_SHIFT_MIN   (-73)
108198: #define YY_SHIFT_MAX   (1468)
108199: static const short yy_shift_ofst[] = {
108200:  /*     0 */   975, 1114, 1343, 1114, 1213, 1213,   90,   90,    0,  -19,
108201:  /*    10 */  1213, 1213, 1213, 1213, 1213,  345,  445,  721, 1091, 1213,
108202:  /*    20 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
108203:  /*    30 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
108204:  /*    40 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1236, 1213, 1213,
108205:  /*    50 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
108206:  /*    60 */  1213,  199,  445,  445,  835,  835,  365, 1164,   55,  647,
108207:  /*    70 */   573,  499,  425,  351,  277,  203,  129,  795,  795,  795,
108208:  /*    80 */   795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
108209:  /*    90 */   795,  795,  795,  795,  795,  869,  795,  943, 1017, 1017,
108210:  /*   100 */   -69,  -45,  -45,  -45,  -45,  -45,   -1,   58,  138,  100,
108211:  /*   110 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
108212:  /*   120 */   445,  445,  445,  445,  445,  445,  537,  438,  445,  445,
108213:  /*   130 */   445,  445,  445,  365,  807, 1436,  -74,  -74,  -74, 1293,
108214:  /*   140 */    73,  434,  434,  311,  314,  290,  283,  286,  540,  467,
108215:  /*   150 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
108216:  /*   160 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
108217:  /*   170 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
108218:  /*   180 */   445,  445,   65,  722,  722,  722,  688,  266, 1164, 1164,
108219:  /*   190 */  1164,  -74,  -74,  -74,  136,  168,  168,  234,  360,  360,
108220:  /*   200 */   360,  430,  372,  435,  352,  278,  126,  -36,  -36,  -36,
108221:  /*   210 */   -36,  421,  651,  -36,  -36,  592,  292,  212,  623,  158,
108222:  /*   220 */   204,  204,  505,  158,  505,  144,  365,  154,  365,  154,
108223:  /*   230 */   645,  154,  204,  154,  154,  535,  548,  548,  365,  387,
108224:  /*   240 */   508,  233, 1464, 1222, 1222, 1456, 1456, 1222, 1462, 1410,
108225:  /*   250 */  1165, 1468, 1468, 1468, 1468, 1222, 1165, 1462, 1410, 1410,
108226:  /*   260 */  1222, 1448, 1338, 1425, 1222, 1222, 1448, 1222, 1448, 1222,
108227:  /*   270 */  1448, 1419, 1313, 1313, 1313, 1387, 1364, 1364, 1419, 1313,
108228:  /*   280 */  1336, 1313, 1387, 1313, 1313, 1254, 1245, 1254, 1245, 1254,
108229:  /*   290 */  1245, 1222, 1222, 1186, 1189, 1175, 1169, 1171, 1165, 1164,
108230:  /*   300 */  1243, 1244, 1244, 1212, 1212, 1212, 1212,  -74,  -74,  -74,
108231:  /*   310 */   -74,  -74,  -74,  939,  104,  680,  571,  327,    1,  980,
108232:  /*   320 */    26,  972,  971,  946,  901,  870,  830,  806,   54,   21,
108233:  /*   330 */   -73,  510,  242, 1198, 1190, 1170, 1042, 1161, 1108, 1146,
108234:  /*   340 */  1141, 1132, 1015, 1127, 1026, 1034, 1020, 1107, 1004, 1116,
108235:  /*   350 */  1121, 1005, 1099,  951, 1043, 1003,  969, 1045, 1035,  950,
108236:  /*   360 */  1053, 1047, 1025,  942,  913,  992, 1019,  945,  984,  940,
108237:  /*   370 */   876,  904,  953,  896,  748,  804,  880,  786,  868,  819,
108238:  /*   380 */   805,  810,  773,  751,  766,  706,  716,  691,  681,  568,
108239:  /*   390 */   655,  638,  676,  516,  541,  594,  599,  567,  541,  534,
108240:  /*   400 */   507,  527,  498,  523,  466,  382,  409,  384,  357,    6,
108241:  /*   410 */   240,  224,  143,   62,   18,   71,   39,    9,    5,
108242: };
108243: #define YY_REDUCE_USE_DFLT (-142)
108244: #define YY_REDUCE_COUNT (312)
108245: #define YY_REDUCE_MIN   (-141)
108246: #define YY_REDUCE_MAX   (1369)
108247: static const short yy_reduce_ofst[] = {
108248:  /*     0 */  -141,  994, 1118,  223,  157,  -53,   93,   89,   83,  375,
108249:  /*    10 */   386,  381,  379,  308,  295,  325,  -47,   27, 1240, 1234,
108250:  /*    20 */  1228, 1221, 1208, 1187, 1151, 1111, 1109, 1077, 1054, 1022,
108251:  /*    30 */  1016, 1000,  911,  908,  906,  890,  888,  874,  834,  816,
108252:  /*    40 */   800,  760,  758,  755,  742,  739,  726,  685,  672,  668,
108253:  /*    50 */   665,  652,  611,  609,  607,  604,  591,  578,  526,  519,
108254:  /*    60 */   453,  474,  454,  461,  443,  245,  442,  473,  484,  484,
108255:  /*    70 */   484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
108256:  /*    80 */   484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
108257:  /*    90 */   484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
108258:  /*   100 */   484,  484,  484,  484,  484,  484,  484,  130,  484,  484,
108259:  /*   110 */  1145,  909, 1110, 1088, 1084, 1033, 1002,  965,  820,  837,
108260:  /*   120 */   746,  686,  612,  817,  610,  919,  221,  563,  814,  813,
108261:  /*   130 */   744,  669,  470,  543,  484,  484,  484,  484,  484,  291,
108262:  /*   140 */   569,  671,  658,  970, 1290, 1287, 1286, 1282,  518,  518,
108263:  /*   150 */  1280, 1279, 1277, 1270, 1268, 1263, 1261, 1260, 1256, 1251,
108264:  /*   160 */  1247, 1227, 1185, 1168, 1167, 1159, 1148, 1139, 1117, 1066,
108265:  /*   170 */  1049, 1006,  998,  996,  995,  973,  970,  966,  964,  892,
108266:  /*   180 */   762,  -52,  881,  932,  802,  731,  619,  812,  664,  660,
108267:  /*   190 */   627,  392,  331,  124, 1358, 1357, 1356, 1354, 1352, 1351,
108268:  /*   200 */  1349, 1319, 1334, 1346, 1334, 1334, 1334, 1334, 1334, 1334,
108269:  /*   210 */  1334, 1320, 1304, 1334, 1334, 1319, 1360, 1325, 1369, 1326,
108270:  /*   220 */  1315, 1311, 1301, 1324, 1300, 1335, 1350, 1345, 1348, 1342,
108271:  /*   230 */  1333, 1341, 1303, 1332, 1331, 1284, 1278, 1274, 1339, 1309,
108272:  /*   240 */  1308, 1347, 1258, 1344, 1340, 1257, 1253, 1337, 1273, 1302,
108273:  /*   250 */  1299, 1298, 1297, 1296, 1295, 1328, 1294, 1264, 1292, 1291,
108274:  /*   260 */  1322, 1321, 1238, 1232, 1318, 1317, 1316, 1314, 1312, 1310,
108275:  /*   270 */  1307, 1283, 1289, 1288, 1285, 1276, 1229, 1224, 1267, 1281,
108276:  /*   280 */  1265, 1262, 1235, 1255, 1205, 1183, 1179, 1177, 1162, 1140,
108277:  /*   290 */  1153, 1184, 1182, 1102, 1124, 1103, 1095, 1090, 1089, 1093,
108278:  /*   300 */  1112, 1115, 1086, 1105, 1092, 1087, 1068,  962,  955,  957,
108279:  /*   310 */  1031, 1023, 1030,
108280: };
108281: static const YYACTIONTYPE yy_default[] = {
108282:  /*     0 */   635,  870,  959,  959,  959,  870,  899,  899,  959,  759,
108283:  /*    10 */   959,  959,  959,  959,  868,  959,  959,  933,  959,  959,
108284:  /*    20 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108285:  /*    30 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108286:  /*    40 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108287:  /*    50 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108288:  /*    60 */   959,  959,  959,  959,  899,  899,  674,  763,  794,  959,
108289:  /*    70 */   959,  959,  959,  959,  959,  959,  959,  932,  934,  809,
108290:  /*    80 */   808,  802,  801,  912,  774,  799,  792,  785,  796,  871,
108291:  /*    90 */   864,  865,  863,  867,  872,  959,  795,  831,  848,  830,
108292:  /*   100 */   842,  847,  854,  846,  843,  833,  832,  666,  834,  835,
108293:  /*   110 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108294:  /*   120 */   959,  959,  959,  959,  959,  959,  661,  728,  959,  959,
108295:  /*   130 */   959,  959,  959,  959,  836,  837,  851,  850,  849,  959,
108296:  /*   140 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108297:  /*   150 */   959,  939,  937,  959,  883,  959,  959,  959,  959,  959,
108298:  /*   160 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108299:  /*   170 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108300:  /*   180 */   959,  641,  959,  759,  759,  759,  635,  959,  959,  959,
108301:  /*   190 */   959,  951,  763,  753,  719,  959,  959,  959,  959,  959,
108302:  /*   200 */   959,  959,  959,  959,  959,  959,  959,  804,  742,  922,
108303:  /*   210 */   924,  959,  905,  740,  663,  761,  676,  751,  643,  798,
108304:  /*   220 */   776,  776,  917,  798,  917,  700,  959,  788,  959,  788,
108305:  /*   230 */   697,  788,  776,  788,  788,  866,  959,  959,  959,  760,
108306:  /*   240 */   751,  959,  944,  767,  767,  936,  936,  767,  810,  732,
108307:  /*   250 */   798,  739,  739,  739,  739,  767,  798,  810,  732,  732,
108308:  /*   260 */   767,  658,  911,  909,  767,  767,  658,  767,  658,  767,
108309:  /*   270 */   658,  876,  730,  730,  730,  715,  880,  880,  876,  730,
108310:  /*   280 */   700,  730,  715,  730,  730,  780,  775,  780,  775,  780,
108311:  /*   290 */   775,  767,  767,  959,  793,  781,  791,  789,  798,  959,
108312:  /*   300 */   718,  651,  651,  640,  640,  640,  640,  956,  956,  951,
108313:  /*   310 */   702,  702,  684,  959,  959,  959,  959,  959,  959,  959,
108314:  /*   320 */   885,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108315:  /*   330 */   959,  959,  959,  959,  636,  946,  959,  959,  943,  959,
108316:  /*   340 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108317:  /*   350 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  915,
108318:  /*   360 */   959,  959,  959,  959,  959,  959,  908,  907,  959,  959,
108319:  /*   370 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108320:  /*   380 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
108321:  /*   390 */   959,  959,  959,  959,  790,  959,  782,  959,  869,  959,
108322:  /*   400 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  745,
108323:  /*   410 */   819,  959,  818,  822,  817,  668,  959,  649,  959,  632,
108324:  /*   420 */   637,  955,  958,  957,  954,  953,  952,  947,  945,  942,
108325:  /*   430 */   941,  940,  938,  935,  931,  889,  887,  894,  893,  892,
108326:  /*   440 */   891,  890,  888,  886,  884,  805,  803,  800,  797,  930,
108327:  /*   450 */   882,  741,  738,  737,  657,  948,  914,  923,  921,  811,
108328:  /*   460 */   920,  919,  918,  916,  913,  900,  807,  806,  733,  874,
108329:  /*   470 */   873,  660,  904,  903,  902,  906,  910,  901,  769,  659,
108330:  /*   480 */   656,  665,  722,  721,  729,  727,  726,  725,  724,  723,
108331:  /*   490 */   720,  667,  675,  686,  714,  699,  698,  879,  881,  878,
108332:  /*   500 */   877,  707,  706,  712,  711,  710,  709,  708,  705,  704,
108333:  /*   510 */   703,  696,  695,  701,  694,  717,  716,  713,  693,  736,
108334:  /*   520 */   735,  734,  731,  692,  691,  690,  822,  689,  688,  828,
108335:  /*   530 */   827,  815,  858,  756,  755,  754,  766,  765,  778,  777,
108336:  /*   540 */   813,  812,  779,  764,  758,  757,  773,  772,  771,  770,
108337:  /*   550 */   762,  752,  784,  787,  786,  783,  860,  768,  857,  929,
108338:  /*   560 */   928,  927,  926,  925,  862,  861,  829,  826,  679,  680,
108339:  /*   570 */   898,  896,  897,  895,  682,  681,  678,  677,  859,  747,
108340:  /*   580 */   746,  855,  852,  844,  840,  856,  853,  845,  841,  839,
108341:  /*   590 */   838,  824,  823,  821,  820,  816,  825,  670,  748,  744,
108342:  /*   600 */   743,  814,  750,  749,  687,  685,  683,  664,  662,  655,
108343:  /*   610 */   653,  652,  654,  650,  648,  647,  646,  645,  644,  673,
108344:  /*   620 */   672,  671,  669,  668,  642,  639,  638,  634,  633,  631,
108345: };
108346: 
108347: /* The next table maps tokens into fallback tokens.  If a construct
108348: ** like the following:
108349: ** 
108350: **      %fallback ID X Y Z.
108351: **
108352: ** appears in the grammar, then ID becomes a fallback token for X, Y,
108353: ** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
108354: ** but it does not parse, the type of the token is changed to ID and
108355: ** the parse is retried before an error is thrown.
108356: */
108357: #ifdef YYFALLBACK
108358: static const YYCODETYPE yyFallback[] = {
108359:     0,  /*          $ => nothing */
108360:     0,  /*       SEMI => nothing */
108361:    26,  /*    EXPLAIN => ID */
108362:    26,  /*      QUERY => ID */
108363:    26,  /*       PLAN => ID */
108364:    26,  /*      BEGIN => ID */
108365:     0,  /* TRANSACTION => nothing */
108366:    26,  /*   DEFERRED => ID */
108367:    26,  /*  IMMEDIATE => ID */
108368:    26,  /*  EXCLUSIVE => ID */
108369:     0,  /*     COMMIT => nothing */
108370:    26,  /*        END => ID */
108371:    26,  /*   ROLLBACK => ID */
108372:    26,  /*  SAVEPOINT => ID */
108373:    26,  /*    RELEASE => ID */
108374:     0,  /*         TO => nothing */
108375:     0,  /*      TABLE => nothing */
108376:     0,  /*     CREATE => nothing */
108377:    26,  /*         IF => ID */
108378:     0,  /*        NOT => nothing */
108379:     0,  /*     EXISTS => nothing */
108380:    26,  /*       TEMP => ID */
108381:     0,  /*         LP => nothing */
108382:     0,  /*         RP => nothing */
108383:     0,  /*         AS => nothing */
108384:     0,  /*      COMMA => nothing */
108385:     0,  /*         ID => nothing */
108386:     0,  /*    INDEXED => nothing */
108387:    26,  /*      ABORT => ID */
108388:    26,  /*     ACTION => ID */
108389:    26,  /*      AFTER => ID */
108390:    26,  /*    ANALYZE => ID */
108391:    26,  /*        ASC => ID */
108392:    26,  /*     ATTACH => ID */
108393:    26,  /*     BEFORE => ID */
108394:    26,  /*         BY => ID */
108395:    26,  /*    CASCADE => ID */
108396:    26,  /*       CAST => ID */
108397:    26,  /*   COLUMNKW => ID */
108398:    26,  /*   CONFLICT => ID */
108399:    26,  /*   DATABASE => ID */
108400:    26,  /*       DESC => ID */
108401:    26,  /*     DETACH => ID */
108402:    26,  /*       EACH => ID */
108403:    26,  /*       FAIL => ID */
108404:    26,  /*        FOR => ID */
108405:    26,  /*     IGNORE => ID */
108406:    26,  /*  INITIALLY => ID */
108407:    26,  /*    INSTEAD => ID */
108408:    26,  /*    LIKE_KW => ID */
108409:    26,  /*      MATCH => ID */
108410:    26,  /*         NO => ID */
108411:    26,  /*        KEY => ID */
108412:    26,  /*         OF => ID */
108413:    26,  /*     OFFSET => ID */
108414:    26,  /*     PRAGMA => ID */
108415:    26,  /*      RAISE => ID */
108416:    26,  /*    REPLACE => ID */
108417:    26,  /*   RESTRICT => ID */
108418:    26,  /*        ROW => ID */
108419:    26,  /*    TRIGGER => ID */
108420:    26,  /*     VACUUM => ID */
108421:    26,  /*       VIEW => ID */
108422:    26,  /*    VIRTUAL => ID */
108423:    26,  /*    REINDEX => ID */
108424:    26,  /*     RENAME => ID */
108425:    26,  /*   CTIME_KW => ID */
108426: };
108427: #endif /* YYFALLBACK */
108428: 
108429: /* The following structure represents a single element of the
108430: ** parser's stack.  Information stored includes:
108431: **
108432: **   +  The state number for the parser at this level of the stack.
108433: **
108434: **   +  The value of the token stored at this level of the stack.
108435: **      (In other words, the "major" token.)
108436: **
108437: **   +  The semantic value stored at this level of the stack.  This is
108438: **      the information used by the action routines in the grammar.
108439: **      It is sometimes called the "minor" token.
108440: */
108441: struct yyStackEntry {
108442:   YYACTIONTYPE stateno;  /* The state-number */
108443:   YYCODETYPE major;      /* The major token value.  This is the code
108444:                          ** number for the token at this stack level */
108445:   YYMINORTYPE minor;     /* The user-supplied minor token value.  This
108446:                          ** is the value of the token  */
108447: };
108448: typedef struct yyStackEntry yyStackEntry;
108449: 
108450: /* The state of the parser is completely contained in an instance of
108451: ** the following structure */
108452: struct yyParser {
108453:   int yyidx;                    /* Index of top element in stack */
108454: #ifdef YYTRACKMAXSTACKDEPTH
108455:   int yyidxMax;                 /* Maximum value of yyidx */
108456: #endif
108457:   int yyerrcnt;                 /* Shifts left before out of the error */
108458:   sqlite3ParserARG_SDECL                /* A place to hold %extra_argument */
108459: #if YYSTACKDEPTH<=0
108460:   int yystksz;                  /* Current side of the stack */
108461:   yyStackEntry *yystack;        /* The parser's stack */
108462: #else
108463:   yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
108464: #endif
108465: };
108466: typedef struct yyParser yyParser;
108467: 
108468: #ifndef NDEBUG
108469: /* #include <stdio.h> */
108470: static FILE *yyTraceFILE = 0;
108471: static char *yyTracePrompt = 0;
108472: #endif /* NDEBUG */
108473: 
108474: #ifndef NDEBUG
108475: /* 
108476: ** Turn parser tracing on by giving a stream to which to write the trace
108477: ** and a prompt to preface each trace message.  Tracing is turned off
108478: ** by making either argument NULL 
108479: **
108480: ** Inputs:
108481: ** <ul>
108482: ** <li> A FILE* to which trace output should be written.
108483: **      If NULL, then tracing is turned off.
108484: ** <li> A prefix string written at the beginning of every
108485: **      line of trace output.  If NULL, then tracing is
108486: **      turned off.
108487: ** </ul>
108488: **
108489: ** Outputs:
108490: ** None.
108491: */
108492: SQLITE_PRIVATE void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){
108493:   yyTraceFILE = TraceFILE;
108494:   yyTracePrompt = zTracePrompt;
108495:   if( yyTraceFILE==0 ) yyTracePrompt = 0;
108496:   else if( yyTracePrompt==0 ) yyTraceFILE = 0;
108497: }
108498: #endif /* NDEBUG */
108499: 
108500: #ifndef NDEBUG
108501: /* For tracing shifts, the names of all terminals and nonterminals
108502: ** are required.  The following table supplies these names */
108503: static const char *const yyTokenName[] = { 
108504:   "$",             "SEMI",          "EXPLAIN",       "QUERY",       
108505:   "PLAN",          "BEGIN",         "TRANSACTION",   "DEFERRED",    
108506:   "IMMEDIATE",     "EXCLUSIVE",     "COMMIT",        "END",         
108507:   "ROLLBACK",      "SAVEPOINT",     "RELEASE",       "TO",          
108508:   "TABLE",         "CREATE",        "IF",            "NOT",         
108509:   "EXISTS",        "TEMP",          "LP",            "RP",          
108510:   "AS",            "COMMA",         "ID",            "INDEXED",     
108511:   "ABORT",         "ACTION",        "AFTER",         "ANALYZE",     
108512:   "ASC",           "ATTACH",        "BEFORE",        "BY",          
108513:   "CASCADE",       "CAST",          "COLUMNKW",      "CONFLICT",    
108514:   "DATABASE",      "DESC",          "DETACH",        "EACH",        
108515:   "FAIL",          "FOR",           "IGNORE",        "INITIALLY",   
108516:   "INSTEAD",       "LIKE_KW",       "MATCH",         "NO",          
108517:   "KEY",           "OF",            "OFFSET",        "PRAGMA",      
108518:   "RAISE",         "REPLACE",       "RESTRICT",      "ROW",         
108519:   "TRIGGER",       "VACUUM",        "VIEW",          "VIRTUAL",     
108520:   "REINDEX",       "RENAME",        "CTIME_KW",      "ANY",         
108521:   "OR",            "AND",           "IS",            "BETWEEN",     
108522:   "IN",            "ISNULL",        "NOTNULL",       "NE",          
108523:   "EQ",            "GT",            "LE",            "LT",          
108524:   "GE",            "ESCAPE",        "BITAND",        "BITOR",       
108525:   "LSHIFT",        "RSHIFT",        "PLUS",          "MINUS",       
108526:   "STAR",          "SLASH",         "REM",           "CONCAT",      
108527:   "COLLATE",       "BITNOT",        "STRING",        "JOIN_KW",     
108528:   "CONSTRAINT",    "DEFAULT",       "NULL",          "PRIMARY",     
108529:   "UNIQUE",        "CHECK",         "REFERENCES",    "AUTOINCR",    
108530:   "ON",            "INSERT",        "DELETE",        "UPDATE",      
108531:   "SET",           "DEFERRABLE",    "FOREIGN",       "DROP",        
108532:   "UNION",         "ALL",           "EXCEPT",        "INTERSECT",   
108533:   "SELECT",        "DISTINCT",      "DOT",           "FROM",        
108534:   "JOIN",          "USING",         "ORDER",         "GROUP",       
108535:   "HAVING",        "LIMIT",         "WHERE",         "INTO",        
108536:   "VALUES",        "INTEGER",       "FLOAT",         "BLOB",        
108537:   "REGISTER",      "VARIABLE",      "CASE",          "WHEN",        
108538:   "THEN",          "ELSE",          "INDEX",         "ALTER",       
108539:   "ADD",           "error",         "input",         "cmdlist",     
108540:   "ecmd",          "explain",       "cmdx",          "cmd",         
108541:   "transtype",     "trans_opt",     "nm",            "savepoint_opt",
108542:   "create_table",  "create_table_args",  "createkw",      "temp",        
108543:   "ifnotexists",   "dbnm",          "columnlist",    "conslist_opt",
108544:   "select",        "column",        "columnid",      "type",        
108545:   "carglist",      "id",            "ids",           "typetoken",   
108546:   "typename",      "signed",        "plus_num",      "minus_num",   
108547:   "carg",          "ccons",         "term",          "expr",        
108548:   "onconf",        "sortorder",     "autoinc",       "idxlist_opt", 
108549:   "refargs",       "defer_subclause",  "refarg",        "refact",      
108550:   "init_deferred_pred_opt",  "conslist",      "tcons",         "idxlist",     
108551:   "defer_subclause_opt",  "orconf",        "resolvetype",   "raisetype",   
108552:   "ifexists",      "fullname",      "oneselect",     "multiselect_op",
108553:   "distinct",      "selcollist",    "from",          "where_opt",   
108554:   "groupby_opt",   "having_opt",    "orderby_opt",   "limit_opt",   
108555:   "sclp",          "as",            "seltablist",    "stl_prefix",  
108556:   "joinop",        "indexed_opt",   "on_opt",        "using_opt",   
108557:   "joinop2",       "inscollist",    "sortlist",      "sortitem",    
108558:   "nexprlist",     "setlist",       "insert_cmd",    "inscollist_opt",
108559:   "itemlist",      "exprlist",      "likeop",        "between_op",  
108560:   "in_op",         "case_operand",  "case_exprlist",  "case_else",   
108561:   "uniqueflag",    "collate",       "nmnum",         "plus_opt",    
108562:   "number",        "trigger_decl",  "trigger_cmd_list",  "trigger_time",
108563:   "trigger_event",  "foreach_clause",  "when_clause",   "trigger_cmd", 
108564:   "trnm",          "tridxby",       "database_kw_opt",  "key_opt",     
108565:   "add_column_fullname",  "kwcolumn_opt",  "create_vtab",   "vtabarglist", 
108566:   "vtabarg",       "vtabargtoken",  "lp",            "anylist",     
108567: };
108568: #endif /* NDEBUG */
108569: 
108570: #ifndef NDEBUG
108571: /* For tracing reduce actions, the names of all rules are required.
108572: */
108573: static const char *const yyRuleName[] = {
108574:  /*   0 */ "input ::= cmdlist",
108575:  /*   1 */ "cmdlist ::= cmdlist ecmd",
108576:  /*   2 */ "cmdlist ::= ecmd",
108577:  /*   3 */ "ecmd ::= SEMI",
108578:  /*   4 */ "ecmd ::= explain cmdx SEMI",
108579:  /*   5 */ "explain ::=",
108580:  /*   6 */ "explain ::= EXPLAIN",
108581:  /*   7 */ "explain ::= EXPLAIN QUERY PLAN",
108582:  /*   8 */ "cmdx ::= cmd",
108583:  /*   9 */ "cmd ::= BEGIN transtype trans_opt",
108584:  /*  10 */ "trans_opt ::=",
108585:  /*  11 */ "trans_opt ::= TRANSACTION",
108586:  /*  12 */ "trans_opt ::= TRANSACTION nm",
108587:  /*  13 */ "transtype ::=",
108588:  /*  14 */ "transtype ::= DEFERRED",
108589:  /*  15 */ "transtype ::= IMMEDIATE",
108590:  /*  16 */ "transtype ::= EXCLUSIVE",
108591:  /*  17 */ "cmd ::= COMMIT trans_opt",
108592:  /*  18 */ "cmd ::= END trans_opt",
108593:  /*  19 */ "cmd ::= ROLLBACK trans_opt",
108594:  /*  20 */ "savepoint_opt ::= SAVEPOINT",
108595:  /*  21 */ "savepoint_opt ::=",
108596:  /*  22 */ "cmd ::= SAVEPOINT nm",
108597:  /*  23 */ "cmd ::= RELEASE savepoint_opt nm",
108598:  /*  24 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm",
108599:  /*  25 */ "cmd ::= create_table create_table_args",
108600:  /*  26 */ "create_table ::= createkw temp TABLE ifnotexists nm dbnm",
108601:  /*  27 */ "createkw ::= CREATE",
108602:  /*  28 */ "ifnotexists ::=",
108603:  /*  29 */ "ifnotexists ::= IF NOT EXISTS",
108604:  /*  30 */ "temp ::= TEMP",
108605:  /*  31 */ "temp ::=",
108606:  /*  32 */ "create_table_args ::= LP columnlist conslist_opt RP",
108607:  /*  33 */ "create_table_args ::= AS select",
108608:  /*  34 */ "columnlist ::= columnlist COMMA column",
108609:  /*  35 */ "columnlist ::= column",
108610:  /*  36 */ "column ::= columnid type carglist",
108611:  /*  37 */ "columnid ::= nm",
108612:  /*  38 */ "id ::= ID",
108613:  /*  39 */ "id ::= INDEXED",
108614:  /*  40 */ "ids ::= ID|STRING",
108615:  /*  41 */ "nm ::= id",
108616:  /*  42 */ "nm ::= STRING",
108617:  /*  43 */ "nm ::= JOIN_KW",
108618:  /*  44 */ "type ::=",
108619:  /*  45 */ "type ::= typetoken",
108620:  /*  46 */ "typetoken ::= typename",
108621:  /*  47 */ "typetoken ::= typename LP signed RP",
108622:  /*  48 */ "typetoken ::= typename LP signed COMMA signed RP",
108623:  /*  49 */ "typename ::= ids",
108624:  /*  50 */ "typename ::= typename ids",
108625:  /*  51 */ "signed ::= plus_num",
108626:  /*  52 */ "signed ::= minus_num",
108627:  /*  53 */ "carglist ::= carglist carg",
108628:  /*  54 */ "carglist ::=",
108629:  /*  55 */ "carg ::= CONSTRAINT nm ccons",
108630:  /*  56 */ "carg ::= ccons",
108631:  /*  57 */ "ccons ::= DEFAULT term",
108632:  /*  58 */ "ccons ::= DEFAULT LP expr RP",
108633:  /*  59 */ "ccons ::= DEFAULT PLUS term",
108634:  /*  60 */ "ccons ::= DEFAULT MINUS term",
108635:  /*  61 */ "ccons ::= DEFAULT id",
108636:  /*  62 */ "ccons ::= NULL onconf",
108637:  /*  63 */ "ccons ::= NOT NULL onconf",
108638:  /*  64 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
108639:  /*  65 */ "ccons ::= UNIQUE onconf",
108640:  /*  66 */ "ccons ::= CHECK LP expr RP",
108641:  /*  67 */ "ccons ::= REFERENCES nm idxlist_opt refargs",
108642:  /*  68 */ "ccons ::= defer_subclause",
108643:  /*  69 */ "ccons ::= COLLATE ids",
108644:  /*  70 */ "autoinc ::=",
108645:  /*  71 */ "autoinc ::= AUTOINCR",
108646:  /*  72 */ "refargs ::=",
108647:  /*  73 */ "refargs ::= refargs refarg",
108648:  /*  74 */ "refarg ::= MATCH nm",
108649:  /*  75 */ "refarg ::= ON INSERT refact",
108650:  /*  76 */ "refarg ::= ON DELETE refact",
108651:  /*  77 */ "refarg ::= ON UPDATE refact",
108652:  /*  78 */ "refact ::= SET NULL",
108653:  /*  79 */ "refact ::= SET DEFAULT",
108654:  /*  80 */ "refact ::= CASCADE",
108655:  /*  81 */ "refact ::= RESTRICT",
108656:  /*  82 */ "refact ::= NO ACTION",
108657:  /*  83 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
108658:  /*  84 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
108659:  /*  85 */ "init_deferred_pred_opt ::=",
108660:  /*  86 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
108661:  /*  87 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
108662:  /*  88 */ "conslist_opt ::=",
108663:  /*  89 */ "conslist_opt ::= COMMA conslist",
108664:  /*  90 */ "conslist ::= conslist COMMA tcons",
108665:  /*  91 */ "conslist ::= conslist tcons",
108666:  /*  92 */ "conslist ::= tcons",
108667:  /*  93 */ "tcons ::= CONSTRAINT nm",
108668:  /*  94 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf",
108669:  /*  95 */ "tcons ::= UNIQUE LP idxlist RP onconf",
108670:  /*  96 */ "tcons ::= CHECK LP expr RP onconf",
108671:  /*  97 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt",
108672:  /*  98 */ "defer_subclause_opt ::=",
108673:  /*  99 */ "defer_subclause_opt ::= defer_subclause",
108674:  /* 100 */ "onconf ::=",
108675:  /* 101 */ "onconf ::= ON CONFLICT resolvetype",
108676:  /* 102 */ "orconf ::=",
108677:  /* 103 */ "orconf ::= OR resolvetype",
108678:  /* 104 */ "resolvetype ::= raisetype",
108679:  /* 105 */ "resolvetype ::= IGNORE",
108680:  /* 106 */ "resolvetype ::= REPLACE",
108681:  /* 107 */ "cmd ::= DROP TABLE ifexists fullname",
108682:  /* 108 */ "ifexists ::= IF EXISTS",
108683:  /* 109 */ "ifexists ::=",
108684:  /* 110 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select",
108685:  /* 111 */ "cmd ::= DROP VIEW ifexists fullname",
108686:  /* 112 */ "cmd ::= select",
108687:  /* 113 */ "select ::= oneselect",
108688:  /* 114 */ "select ::= select multiselect_op oneselect",
108689:  /* 115 */ "multiselect_op ::= UNION",
108690:  /* 116 */ "multiselect_op ::= UNION ALL",
108691:  /* 117 */ "multiselect_op ::= EXCEPT|INTERSECT",
108692:  /* 118 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
108693:  /* 119 */ "distinct ::= DISTINCT",
108694:  /* 120 */ "distinct ::= ALL",
108695:  /* 121 */ "distinct ::=",
108696:  /* 122 */ "sclp ::= selcollist COMMA",
108697:  /* 123 */ "sclp ::=",
108698:  /* 124 */ "selcollist ::= sclp expr as",
108699:  /* 125 */ "selcollist ::= sclp STAR",
108700:  /* 126 */ "selcollist ::= sclp nm DOT STAR",
108701:  /* 127 */ "as ::= AS nm",
108702:  /* 128 */ "as ::= ids",
108703:  /* 129 */ "as ::=",
108704:  /* 130 */ "from ::=",
108705:  /* 131 */ "from ::= FROM seltablist",
108706:  /* 132 */ "stl_prefix ::= seltablist joinop",
108707:  /* 133 */ "stl_prefix ::=",
108708:  /* 134 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt",
108709:  /* 135 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt",
108710:  /* 136 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt",
108711:  /* 137 */ "dbnm ::=",
108712:  /* 138 */ "dbnm ::= DOT nm",
108713:  /* 139 */ "fullname ::= nm dbnm",
108714:  /* 140 */ "joinop ::= COMMA|JOIN",
108715:  /* 141 */ "joinop ::= JOIN_KW JOIN",
108716:  /* 142 */ "joinop ::= JOIN_KW nm JOIN",
108717:  /* 143 */ "joinop ::= JOIN_KW nm nm JOIN",
108718:  /* 144 */ "on_opt ::= ON expr",
108719:  /* 145 */ "on_opt ::=",
108720:  /* 146 */ "indexed_opt ::=",
108721:  /* 147 */ "indexed_opt ::= INDEXED BY nm",
108722:  /* 148 */ "indexed_opt ::= NOT INDEXED",
108723:  /* 149 */ "using_opt ::= USING LP inscollist RP",
108724:  /* 150 */ "using_opt ::=",
108725:  /* 151 */ "orderby_opt ::=",
108726:  /* 152 */ "orderby_opt ::= ORDER BY sortlist",
108727:  /* 153 */ "sortlist ::= sortlist COMMA sortitem sortorder",
108728:  /* 154 */ "sortlist ::= sortitem sortorder",
108729:  /* 155 */ "sortitem ::= expr",
108730:  /* 156 */ "sortorder ::= ASC",
108731:  /* 157 */ "sortorder ::= DESC",
108732:  /* 158 */ "sortorder ::=",
108733:  /* 159 */ "groupby_opt ::=",
108734:  /* 160 */ "groupby_opt ::= GROUP BY nexprlist",
108735:  /* 161 */ "having_opt ::=",
108736:  /* 162 */ "having_opt ::= HAVING expr",
108737:  /* 163 */ "limit_opt ::=",
108738:  /* 164 */ "limit_opt ::= LIMIT expr",
108739:  /* 165 */ "limit_opt ::= LIMIT expr OFFSET expr",
108740:  /* 166 */ "limit_opt ::= LIMIT expr COMMA expr",
108741:  /* 167 */ "cmd ::= DELETE FROM fullname indexed_opt where_opt",
108742:  /* 168 */ "where_opt ::=",
108743:  /* 169 */ "where_opt ::= WHERE expr",
108744:  /* 170 */ "cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt",
108745:  /* 171 */ "setlist ::= setlist COMMA nm EQ expr",
108746:  /* 172 */ "setlist ::= nm EQ expr",
108747:  /* 173 */ "cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP",
108748:  /* 174 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select",
108749:  /* 175 */ "cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES",
108750:  /* 176 */ "insert_cmd ::= INSERT orconf",
108751:  /* 177 */ "insert_cmd ::= REPLACE",
108752:  /* 178 */ "itemlist ::= itemlist COMMA expr",
108753:  /* 179 */ "itemlist ::= expr",
108754:  /* 180 */ "inscollist_opt ::=",
108755:  /* 181 */ "inscollist_opt ::= LP inscollist RP",
108756:  /* 182 */ "inscollist ::= inscollist COMMA nm",
108757:  /* 183 */ "inscollist ::= nm",
108758:  /* 184 */ "expr ::= term",
108759:  /* 185 */ "expr ::= LP expr RP",
108760:  /* 186 */ "term ::= NULL",
108761:  /* 187 */ "expr ::= id",
108762:  /* 188 */ "expr ::= JOIN_KW",
108763:  /* 189 */ "expr ::= nm DOT nm",
108764:  /* 190 */ "expr ::= nm DOT nm DOT nm",
108765:  /* 191 */ "term ::= INTEGER|FLOAT|BLOB",
108766:  /* 192 */ "term ::= STRING",
108767:  /* 193 */ "expr ::= REGISTER",
108768:  /* 194 */ "expr ::= VARIABLE",
108769:  /* 195 */ "expr ::= expr COLLATE ids",
108770:  /* 196 */ "expr ::= CAST LP expr AS typetoken RP",
108771:  /* 197 */ "expr ::= ID LP distinct exprlist RP",
108772:  /* 198 */ "expr ::= ID LP STAR RP",
108773:  /* 199 */ "term ::= CTIME_KW",
108774:  /* 200 */ "expr ::= expr AND expr",
108775:  /* 201 */ "expr ::= expr OR expr",
108776:  /* 202 */ "expr ::= expr LT|GT|GE|LE expr",
108777:  /* 203 */ "expr ::= expr EQ|NE expr",
108778:  /* 204 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
108779:  /* 205 */ "expr ::= expr PLUS|MINUS expr",
108780:  /* 206 */ "expr ::= expr STAR|SLASH|REM expr",
108781:  /* 207 */ "expr ::= expr CONCAT expr",
108782:  /* 208 */ "likeop ::= LIKE_KW",
108783:  /* 209 */ "likeop ::= NOT LIKE_KW",
108784:  /* 210 */ "likeop ::= MATCH",
108785:  /* 211 */ "likeop ::= NOT MATCH",
108786:  /* 212 */ "expr ::= expr likeop expr",
108787:  /* 213 */ "expr ::= expr likeop expr ESCAPE expr",
108788:  /* 214 */ "expr ::= expr ISNULL|NOTNULL",
108789:  /* 215 */ "expr ::= expr NOT NULL",
108790:  /* 216 */ "expr ::= expr IS expr",
108791:  /* 217 */ "expr ::= expr IS NOT expr",
108792:  /* 218 */ "expr ::= NOT expr",
108793:  /* 219 */ "expr ::= BITNOT expr",
108794:  /* 220 */ "expr ::= MINUS expr",
108795:  /* 221 */ "expr ::= PLUS expr",
108796:  /* 222 */ "between_op ::= BETWEEN",
108797:  /* 223 */ "between_op ::= NOT BETWEEN",
108798:  /* 224 */ "expr ::= expr between_op expr AND expr",
108799:  /* 225 */ "in_op ::= IN",
108800:  /* 226 */ "in_op ::= NOT IN",
108801:  /* 227 */ "expr ::= expr in_op LP exprlist RP",
108802:  /* 228 */ "expr ::= LP select RP",
108803:  /* 229 */ "expr ::= expr in_op LP select RP",
108804:  /* 230 */ "expr ::= expr in_op nm dbnm",
108805:  /* 231 */ "expr ::= EXISTS LP select RP",
108806:  /* 232 */ "expr ::= CASE case_operand case_exprlist case_else END",
108807:  /* 233 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
108808:  /* 234 */ "case_exprlist ::= WHEN expr THEN expr",
108809:  /* 235 */ "case_else ::= ELSE expr",
108810:  /* 236 */ "case_else ::=",
108811:  /* 237 */ "case_operand ::= expr",
108812:  /* 238 */ "case_operand ::=",
108813:  /* 239 */ "exprlist ::= nexprlist",
108814:  /* 240 */ "exprlist ::=",
108815:  /* 241 */ "nexprlist ::= nexprlist COMMA expr",
108816:  /* 242 */ "nexprlist ::= expr",
108817:  /* 243 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP",
108818:  /* 244 */ "uniqueflag ::= UNIQUE",
108819:  /* 245 */ "uniqueflag ::=",
108820:  /* 246 */ "idxlist_opt ::=",
108821:  /* 247 */ "idxlist_opt ::= LP idxlist RP",
108822:  /* 248 */ "idxlist ::= idxlist COMMA nm collate sortorder",
108823:  /* 249 */ "idxlist ::= nm collate sortorder",
108824:  /* 250 */ "collate ::=",
108825:  /* 251 */ "collate ::= COLLATE ids",
108826:  /* 252 */ "cmd ::= DROP INDEX ifexists fullname",
108827:  /* 253 */ "cmd ::= VACUUM",
108828:  /* 254 */ "cmd ::= VACUUM nm",
108829:  /* 255 */ "cmd ::= PRAGMA nm dbnm",
108830:  /* 256 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
108831:  /* 257 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
108832:  /* 258 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
108833:  /* 259 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
108834:  /* 260 */ "nmnum ::= plus_num",
108835:  /* 261 */ "nmnum ::= nm",
108836:  /* 262 */ "nmnum ::= ON",
108837:  /* 263 */ "nmnum ::= DELETE",
108838:  /* 264 */ "nmnum ::= DEFAULT",
108839:  /* 265 */ "plus_num ::= plus_opt number",
108840:  /* 266 */ "minus_num ::= MINUS number",
108841:  /* 267 */ "number ::= INTEGER|FLOAT",
108842:  /* 268 */ "plus_opt ::= PLUS",
108843:  /* 269 */ "plus_opt ::=",
108844:  /* 270 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
108845:  /* 271 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
108846:  /* 272 */ "trigger_time ::= BEFORE",
108847:  /* 273 */ "trigger_time ::= AFTER",
108848:  /* 274 */ "trigger_time ::= INSTEAD OF",
108849:  /* 275 */ "trigger_time ::=",
108850:  /* 276 */ "trigger_event ::= DELETE|INSERT",
108851:  /* 277 */ "trigger_event ::= UPDATE",
108852:  /* 278 */ "trigger_event ::= UPDATE OF inscollist",
108853:  /* 279 */ "foreach_clause ::=",
108854:  /* 280 */ "foreach_clause ::= FOR EACH ROW",
108855:  /* 281 */ "when_clause ::=",
108856:  /* 282 */ "when_clause ::= WHEN expr",
108857:  /* 283 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
108858:  /* 284 */ "trigger_cmd_list ::= trigger_cmd SEMI",
108859:  /* 285 */ "trnm ::= nm",
108860:  /* 286 */ "trnm ::= nm DOT nm",
108861:  /* 287 */ "tridxby ::=",
108862:  /* 288 */ "tridxby ::= INDEXED BY nm",
108863:  /* 289 */ "tridxby ::= NOT INDEXED",
108864:  /* 290 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt",
108865:  /* 291 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt VALUES LP itemlist RP",
108866:  /* 292 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select",
108867:  /* 293 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt",
108868:  /* 294 */ "trigger_cmd ::= select",
108869:  /* 295 */ "expr ::= RAISE LP IGNORE RP",
108870:  /* 296 */ "expr ::= RAISE LP raisetype COMMA nm RP",
108871:  /* 297 */ "raisetype ::= ROLLBACK",
108872:  /* 298 */ "raisetype ::= ABORT",
108873:  /* 299 */ "raisetype ::= FAIL",
108874:  /* 300 */ "cmd ::= DROP TRIGGER ifexists fullname",
108875:  /* 301 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
108876:  /* 302 */ "cmd ::= DETACH database_kw_opt expr",
108877:  /* 303 */ "key_opt ::=",
108878:  /* 304 */ "key_opt ::= KEY expr",
108879:  /* 305 */ "database_kw_opt ::= DATABASE",
108880:  /* 306 */ "database_kw_opt ::=",
108881:  /* 307 */ "cmd ::= REINDEX",
108882:  /* 308 */ "cmd ::= REINDEX nm dbnm",
108883:  /* 309 */ "cmd ::= ANALYZE",
108884:  /* 310 */ "cmd ::= ANALYZE nm dbnm",
108885:  /* 311 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
108886:  /* 312 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column",
108887:  /* 313 */ "add_column_fullname ::= fullname",
108888:  /* 314 */ "kwcolumn_opt ::=",
108889:  /* 315 */ "kwcolumn_opt ::= COLUMNKW",
108890:  /* 316 */ "cmd ::= create_vtab",
108891:  /* 317 */ "cmd ::= create_vtab LP vtabarglist RP",
108892:  /* 318 */ "create_vtab ::= createkw VIRTUAL TABLE nm dbnm USING nm",
108893:  /* 319 */ "vtabarglist ::= vtabarg",
108894:  /* 320 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
108895:  /* 321 */ "vtabarg ::=",
108896:  /* 322 */ "vtabarg ::= vtabarg vtabargtoken",
108897:  /* 323 */ "vtabargtoken ::= ANY",
108898:  /* 324 */ "vtabargtoken ::= lp anylist RP",
108899:  /* 325 */ "lp ::= LP",
108900:  /* 326 */ "anylist ::=",
108901:  /* 327 */ "anylist ::= anylist LP anylist RP",
108902:  /* 328 */ "anylist ::= anylist ANY",
108903: };
108904: #endif /* NDEBUG */
108905: 
108906: 
108907: #if YYSTACKDEPTH<=0
108908: /*
108909: ** Try to increase the size of the parser stack.
108910: */
108911: static void yyGrowStack(yyParser *p){
108912:   int newSize;
108913:   yyStackEntry *pNew;
108914: 
108915:   newSize = p->yystksz*2 + 100;
108916:   pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
108917:   if( pNew ){
108918:     p->yystack = pNew;
108919:     p->yystksz = newSize;
108920: #ifndef NDEBUG
108921:     if( yyTraceFILE ){
108922:       fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
108923:               yyTracePrompt, p->yystksz);
108924:     }
108925: #endif
108926:   }
108927: }
108928: #endif
108929: 
108930: /* 
108931: ** This function allocates a new parser.
108932: ** The only argument is a pointer to a function which works like
108933: ** malloc.
108934: **
108935: ** Inputs:
108936: ** A pointer to the function used to allocate memory.
108937: **
108938: ** Outputs:
108939: ** A pointer to a parser.  This pointer is used in subsequent calls
108940: ** to sqlite3Parser and sqlite3ParserFree.
108941: */
108942: SQLITE_PRIVATE void *sqlite3ParserAlloc(void *(*mallocProc)(size_t)){
108943:   yyParser *pParser;
108944:   pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
108945:   if( pParser ){
108946:     pParser->yyidx = -1;
108947: #ifdef YYTRACKMAXSTACKDEPTH
108948:     pParser->yyidxMax = 0;
108949: #endif
108950: #if YYSTACKDEPTH<=0
108951:     pParser->yystack = NULL;
108952:     pParser->yystksz = 0;
108953:     yyGrowStack(pParser);
108954: #endif
108955:   }
108956:   return pParser;
108957: }
108958: 
108959: /* The following function deletes the value associated with a
108960: ** symbol.  The symbol can be either a terminal or nonterminal.
108961: ** "yymajor" is the symbol code, and "yypminor" is a pointer to
108962: ** the value.
108963: */
108964: static void yy_destructor(
108965:   yyParser *yypParser,    /* The parser */
108966:   YYCODETYPE yymajor,     /* Type code for object to destroy */
108967:   YYMINORTYPE *yypminor   /* The object to be destroyed */
108968: ){
108969:   sqlite3ParserARG_FETCH;
108970:   switch( yymajor ){
108971:     /* Here is inserted the actions which take place when a
108972:     ** terminal or non-terminal is destroyed.  This can happen
108973:     ** when the symbol is popped from the stack during a
108974:     ** reduce or during error processing or when a parser is 
108975:     ** being destroyed before it is finished parsing.
108976:     **
108977:     ** Note: during a reduce, the only symbols destroyed are those
108978:     ** which appear on the RHS of the rule, but which are not used
108979:     ** inside the C code.
108980:     */
108981:     case 160: /* select */
108982:     case 194: /* oneselect */
108983: {
108984: sqlite3SelectDelete(pParse->db, (yypminor->yy387));
108985: }
108986:       break;
108987:     case 174: /* term */
108988:     case 175: /* expr */
108989: {
108990: sqlite3ExprDelete(pParse->db, (yypminor->yy118).pExpr);
108991: }
108992:       break;
108993:     case 179: /* idxlist_opt */
108994:     case 187: /* idxlist */
108995:     case 197: /* selcollist */
108996:     case 200: /* groupby_opt */
108997:     case 202: /* orderby_opt */
108998:     case 204: /* sclp */
108999:     case 214: /* sortlist */
109000:     case 216: /* nexprlist */
109001:     case 217: /* setlist */
109002:     case 220: /* itemlist */
109003:     case 221: /* exprlist */
109004:     case 226: /* case_exprlist */
109005: {
109006: sqlite3ExprListDelete(pParse->db, (yypminor->yy322));
109007: }
109008:       break;
109009:     case 193: /* fullname */
109010:     case 198: /* from */
109011:     case 206: /* seltablist */
109012:     case 207: /* stl_prefix */
109013: {
109014: sqlite3SrcListDelete(pParse->db, (yypminor->yy259));
109015: }
109016:       break;
109017:     case 199: /* where_opt */
109018:     case 201: /* having_opt */
109019:     case 210: /* on_opt */
109020:     case 215: /* sortitem */
109021:     case 225: /* case_operand */
109022:     case 227: /* case_else */
109023:     case 238: /* when_clause */
109024:     case 243: /* key_opt */
109025: {
109026: sqlite3ExprDelete(pParse->db, (yypminor->yy314));
109027: }
109028:       break;
109029:     case 211: /* using_opt */
109030:     case 213: /* inscollist */
109031:     case 219: /* inscollist_opt */
109032: {
109033: sqlite3IdListDelete(pParse->db, (yypminor->yy384));
109034: }
109035:       break;
109036:     case 234: /* trigger_cmd_list */
109037:     case 239: /* trigger_cmd */
109038: {
109039: sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy203));
109040: }
109041:       break;
109042:     case 236: /* trigger_event */
109043: {
109044: sqlite3IdListDelete(pParse->db, (yypminor->yy90).b);
109045: }
109046:       break;
109047:     default:  break;   /* If no destructor action specified: do nothing */
109048:   }
109049: }
109050: 
109051: /*
109052: ** Pop the parser's stack once.
109053: **
109054: ** If there is a destructor routine associated with the token which
109055: ** is popped from the stack, then call it.
109056: **
109057: ** Return the major token number for the symbol popped.
109058: */
109059: static int yy_pop_parser_stack(yyParser *pParser){
109060:   YYCODETYPE yymajor;
109061:   yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
109062: 
109063:   /* There is no mechanism by which the parser stack can be popped below
109064:   ** empty in SQLite.  */
109065:   if( NEVER(pParser->yyidx<0) ) return 0;
109066: #ifndef NDEBUG
109067:   if( yyTraceFILE && pParser->yyidx>=0 ){
109068:     fprintf(yyTraceFILE,"%sPopping %s\n",
109069:       yyTracePrompt,
109070:       yyTokenName[yytos->major]);
109071:   }
109072: #endif
109073:   yymajor = yytos->major;
109074:   yy_destructor(pParser, yymajor, &yytos->minor);
109075:   pParser->yyidx--;
109076:   return yymajor;
109077: }
109078: 
109079: /* 
109080: ** Deallocate and destroy a parser.  Destructors are all called for
109081: ** all stack elements before shutting the parser down.
109082: **
109083: ** Inputs:
109084: ** <ul>
109085: ** <li>  A pointer to the parser.  This should be a pointer
109086: **       obtained from sqlite3ParserAlloc.
109087: ** <li>  A pointer to a function used to reclaim memory obtained
109088: **       from malloc.
109089: ** </ul>
109090: */
109091: SQLITE_PRIVATE void sqlite3ParserFree(
109092:   void *p,                    /* The parser to be deleted */
109093:   void (*freeProc)(void*)     /* Function used to reclaim memory */
109094: ){
109095:   yyParser *pParser = (yyParser*)p;
109096:   /* In SQLite, we never try to destroy a parser that was not successfully
109097:   ** created in the first place. */
109098:   if( NEVER(pParser==0) ) return;
109099:   while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
109100: #if YYSTACKDEPTH<=0
109101:   free(pParser->yystack);
109102: #endif
109103:   (*freeProc)((void*)pParser);
109104: }
109105: 
109106: /*
109107: ** Return the peak depth of the stack for a parser.
109108: */
109109: #ifdef YYTRACKMAXSTACKDEPTH
109110: SQLITE_PRIVATE int sqlite3ParserStackPeak(void *p){
109111:   yyParser *pParser = (yyParser*)p;
109112:   return pParser->yyidxMax;
109113: }
109114: #endif
109115: 
109116: /*
109117: ** Find the appropriate action for a parser given the terminal
109118: ** look-ahead token iLookAhead.
109119: **
109120: ** If the look-ahead token is YYNOCODE, then check to see if the action is
109121: ** independent of the look-ahead.  If it is, return the action, otherwise
109122: ** return YY_NO_ACTION.
109123: */
109124: static int yy_find_shift_action(
109125:   yyParser *pParser,        /* The parser */
109126:   YYCODETYPE iLookAhead     /* The look-ahead token */
109127: ){
109128:   int i;
109129:   int stateno = pParser->yystack[pParser->yyidx].stateno;
109130:  
109131:   if( stateno>YY_SHIFT_COUNT
109132:    || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
109133:     return yy_default[stateno];
109134:   }
109135:   assert( iLookAhead!=YYNOCODE );
109136:   i += iLookAhead;
109137:   if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
109138:     if( iLookAhead>0 ){
109139: #ifdef YYFALLBACK
109140:       YYCODETYPE iFallback;            /* Fallback token */
109141:       if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
109142:              && (iFallback = yyFallback[iLookAhead])!=0 ){
109143: #ifndef NDEBUG
109144:         if( yyTraceFILE ){
109145:           fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
109146:              yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
109147:         }
109148: #endif
109149:         return yy_find_shift_action(pParser, iFallback);
109150:       }
109151: #endif
109152: #ifdef YYWILDCARD
109153:       {
109154:         int j = i - iLookAhead + YYWILDCARD;
109155:         if( 
109156: #if YY_SHIFT_MIN+YYWILDCARD<0
109157:           j>=0 &&
109158: #endif
109159: #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
109160:           j<YY_ACTTAB_COUNT &&
109161: #endif
109162:           yy_lookahead[j]==YYWILDCARD
109163:         ){
109164: #ifndef NDEBUG
109165:           if( yyTraceFILE ){
109166:             fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
109167:                yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
109168:           }
109169: #endif /* NDEBUG */
109170:           return yy_action[j];
109171:         }
109172:       }
109173: #endif /* YYWILDCARD */
109174:     }
109175:     return yy_default[stateno];
109176:   }else{
109177:     return yy_action[i];
109178:   }
109179: }
109180: 
109181: /*
109182: ** Find the appropriate action for a parser given the non-terminal
109183: ** look-ahead token iLookAhead.
109184: **
109185: ** If the look-ahead token is YYNOCODE, then check to see if the action is
109186: ** independent of the look-ahead.  If it is, return the action, otherwise
109187: ** return YY_NO_ACTION.
109188: */
109189: static int yy_find_reduce_action(
109190:   int stateno,              /* Current state number */
109191:   YYCODETYPE iLookAhead     /* The look-ahead token */
109192: ){
109193:   int i;
109194: #ifdef YYERRORSYMBOL
109195:   if( stateno>YY_REDUCE_COUNT ){
109196:     return yy_default[stateno];
109197:   }
109198: #else
109199:   assert( stateno<=YY_REDUCE_COUNT );
109200: #endif
109201:   i = yy_reduce_ofst[stateno];
109202:   assert( i!=YY_REDUCE_USE_DFLT );
109203:   assert( iLookAhead!=YYNOCODE );
109204:   i += iLookAhead;
109205: #ifdef YYERRORSYMBOL
109206:   if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
109207:     return yy_default[stateno];
109208:   }
109209: #else
109210:   assert( i>=0 && i<YY_ACTTAB_COUNT );
109211:   assert( yy_lookahead[i]==iLookAhead );
109212: #endif
109213:   return yy_action[i];
109214: }
109215: 
109216: /*
109217: ** The following routine is called if the stack overflows.
109218: */
109219: static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
109220:    sqlite3ParserARG_FETCH;
109221:    yypParser->yyidx--;
109222: #ifndef NDEBUG
109223:    if( yyTraceFILE ){
109224:      fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
109225:    }
109226: #endif
109227:    while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
109228:    /* Here code is inserted which will execute if the parser
109229:    ** stack every overflows */
109230: 
109231:   UNUSED_PARAMETER(yypMinor); /* Silence some compiler warnings */
109232:   sqlite3ErrorMsg(pParse, "parser stack overflow");
109233:    sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */
109234: }
109235: 
109236: /*
109237: ** Perform a shift action.
109238: */
109239: static void yy_shift(
109240:   yyParser *yypParser,          /* The parser to be shifted */
109241:   int yyNewState,               /* The new state to shift in */
109242:   int yyMajor,                  /* The major token to shift in */
109243:   YYMINORTYPE *yypMinor         /* Pointer to the minor token to shift in */
109244: ){
109245:   yyStackEntry *yytos;
109246:   yypParser->yyidx++;
109247: #ifdef YYTRACKMAXSTACKDEPTH
109248:   if( yypParser->yyidx>yypParser->yyidxMax ){
109249:     yypParser->yyidxMax = yypParser->yyidx;
109250:   }
109251: #endif
109252: #if YYSTACKDEPTH>0 
109253:   if( yypParser->yyidx>=YYSTACKDEPTH ){
109254:     yyStackOverflow(yypParser, yypMinor);
109255:     return;
109256:   }
109257: #else
109258:   if( yypParser->yyidx>=yypParser->yystksz ){
109259:     yyGrowStack(yypParser);
109260:     if( yypParser->yyidx>=yypParser->yystksz ){
109261:       yyStackOverflow(yypParser, yypMinor);
109262:       return;
109263:     }
109264:   }
109265: #endif
109266:   yytos = &yypParser->yystack[yypParser->yyidx];
109267:   yytos->stateno = (YYACTIONTYPE)yyNewState;
109268:   yytos->major = (YYCODETYPE)yyMajor;
109269:   yytos->minor = *yypMinor;
109270: #ifndef NDEBUG
109271:   if( yyTraceFILE && yypParser->yyidx>0 ){
109272:     int i;
109273:     fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
109274:     fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
109275:     for(i=1; i<=yypParser->yyidx; i++)
109276:       fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
109277:     fprintf(yyTraceFILE,"\n");
109278:   }
109279: #endif
109280: }
109281: 
109282: /* The following table contains information about every rule that
109283: ** is used during the reduce.
109284: */
109285: static const struct {
109286:   YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
109287:   unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
109288: } yyRuleInfo[] = {
109289:   { 142, 1 },
109290:   { 143, 2 },
109291:   { 143, 1 },
109292:   { 144, 1 },
109293:   { 144, 3 },
109294:   { 145, 0 },
109295:   { 145, 1 },
109296:   { 145, 3 },
109297:   { 146, 1 },
109298:   { 147, 3 },
109299:   { 149, 0 },
109300:   { 149, 1 },
109301:   { 149, 2 },
109302:   { 148, 0 },
109303:   { 148, 1 },
109304:   { 148, 1 },
109305:   { 148, 1 },
109306:   { 147, 2 },
109307:   { 147, 2 },
109308:   { 147, 2 },
109309:   { 151, 1 },
109310:   { 151, 0 },
109311:   { 147, 2 },
109312:   { 147, 3 },
109313:   { 147, 5 },
109314:   { 147, 2 },
109315:   { 152, 6 },
109316:   { 154, 1 },
109317:   { 156, 0 },
109318:   { 156, 3 },
109319:   { 155, 1 },
109320:   { 155, 0 },
109321:   { 153, 4 },
109322:   { 153, 2 },
109323:   { 158, 3 },
109324:   { 158, 1 },
109325:   { 161, 3 },
109326:   { 162, 1 },
109327:   { 165, 1 },
109328:   { 165, 1 },
109329:   { 166, 1 },
109330:   { 150, 1 },
109331:   { 150, 1 },
109332:   { 150, 1 },
109333:   { 163, 0 },
109334:   { 163, 1 },
109335:   { 167, 1 },
109336:   { 167, 4 },
109337:   { 167, 6 },
109338:   { 168, 1 },
109339:   { 168, 2 },
109340:   { 169, 1 },
109341:   { 169, 1 },
109342:   { 164, 2 },
109343:   { 164, 0 },
109344:   { 172, 3 },
109345:   { 172, 1 },
109346:   { 173, 2 },
109347:   { 173, 4 },
109348:   { 173, 3 },
109349:   { 173, 3 },
109350:   { 173, 2 },
109351:   { 173, 2 },
109352:   { 173, 3 },
109353:   { 173, 5 },
109354:   { 173, 2 },
109355:   { 173, 4 },
109356:   { 173, 4 },
109357:   { 173, 1 },
109358:   { 173, 2 },
109359:   { 178, 0 },
109360:   { 178, 1 },
109361:   { 180, 0 },
109362:   { 180, 2 },
109363:   { 182, 2 },
109364:   { 182, 3 },
109365:   { 182, 3 },
109366:   { 182, 3 },
109367:   { 183, 2 },
109368:   { 183, 2 },
109369:   { 183, 1 },
109370:   { 183, 1 },
109371:   { 183, 2 },
109372:   { 181, 3 },
109373:   { 181, 2 },
109374:   { 184, 0 },
109375:   { 184, 2 },
109376:   { 184, 2 },
109377:   { 159, 0 },
109378:   { 159, 2 },
109379:   { 185, 3 },
109380:   { 185, 2 },
109381:   { 185, 1 },
109382:   { 186, 2 },
109383:   { 186, 7 },
109384:   { 186, 5 },
109385:   { 186, 5 },
109386:   { 186, 10 },
109387:   { 188, 0 },
109388:   { 188, 1 },
109389:   { 176, 0 },
109390:   { 176, 3 },
109391:   { 189, 0 },
109392:   { 189, 2 },
109393:   { 190, 1 },
109394:   { 190, 1 },
109395:   { 190, 1 },
109396:   { 147, 4 },
109397:   { 192, 2 },
109398:   { 192, 0 },
109399:   { 147, 8 },
109400:   { 147, 4 },
109401:   { 147, 1 },
109402:   { 160, 1 },
109403:   { 160, 3 },
109404:   { 195, 1 },
109405:   { 195, 2 },
109406:   { 195, 1 },
109407:   { 194, 9 },
109408:   { 196, 1 },
109409:   { 196, 1 },
109410:   { 196, 0 },
109411:   { 204, 2 },
109412:   { 204, 0 },
109413:   { 197, 3 },
109414:   { 197, 2 },
109415:   { 197, 4 },
109416:   { 205, 2 },
109417:   { 205, 1 },
109418:   { 205, 0 },
109419:   { 198, 0 },
109420:   { 198, 2 },
109421:   { 207, 2 },
109422:   { 207, 0 },
109423:   { 206, 7 },
109424:   { 206, 7 },
109425:   { 206, 7 },
109426:   { 157, 0 },
109427:   { 157, 2 },
109428:   { 193, 2 },
109429:   { 208, 1 },
109430:   { 208, 2 },
109431:   { 208, 3 },
109432:   { 208, 4 },
109433:   { 210, 2 },
109434:   { 210, 0 },
109435:   { 209, 0 },
109436:   { 209, 3 },
109437:   { 209, 2 },
109438:   { 211, 4 },
109439:   { 211, 0 },
109440:   { 202, 0 },
109441:   { 202, 3 },
109442:   { 214, 4 },
109443:   { 214, 2 },
109444:   { 215, 1 },
109445:   { 177, 1 },
109446:   { 177, 1 },
109447:   { 177, 0 },
109448:   { 200, 0 },
109449:   { 200, 3 },
109450:   { 201, 0 },
109451:   { 201, 2 },
109452:   { 203, 0 },
109453:   { 203, 2 },
109454:   { 203, 4 },
109455:   { 203, 4 },
109456:   { 147, 5 },
109457:   { 199, 0 },
109458:   { 199, 2 },
109459:   { 147, 7 },
109460:   { 217, 5 },
109461:   { 217, 3 },
109462:   { 147, 8 },
109463:   { 147, 5 },
109464:   { 147, 6 },
109465:   { 218, 2 },
109466:   { 218, 1 },
109467:   { 220, 3 },
109468:   { 220, 1 },
109469:   { 219, 0 },
109470:   { 219, 3 },
109471:   { 213, 3 },
109472:   { 213, 1 },
109473:   { 175, 1 },
109474:   { 175, 3 },
109475:   { 174, 1 },
109476:   { 175, 1 },
109477:   { 175, 1 },
109478:   { 175, 3 },
109479:   { 175, 5 },
109480:   { 174, 1 },
109481:   { 174, 1 },
109482:   { 175, 1 },
109483:   { 175, 1 },
109484:   { 175, 3 },
109485:   { 175, 6 },
109486:   { 175, 5 },
109487:   { 175, 4 },
109488:   { 174, 1 },
109489:   { 175, 3 },
109490:   { 175, 3 },
109491:   { 175, 3 },
109492:   { 175, 3 },
109493:   { 175, 3 },
109494:   { 175, 3 },
109495:   { 175, 3 },
109496:   { 175, 3 },
109497:   { 222, 1 },
109498:   { 222, 2 },
109499:   { 222, 1 },
109500:   { 222, 2 },
109501:   { 175, 3 },
109502:   { 175, 5 },
109503:   { 175, 2 },
109504:   { 175, 3 },
109505:   { 175, 3 },
109506:   { 175, 4 },
109507:   { 175, 2 },
109508:   { 175, 2 },
109509:   { 175, 2 },
109510:   { 175, 2 },
109511:   { 223, 1 },
109512:   { 223, 2 },
109513:   { 175, 5 },
109514:   { 224, 1 },
109515:   { 224, 2 },
109516:   { 175, 5 },
109517:   { 175, 3 },
109518:   { 175, 5 },
109519:   { 175, 4 },
109520:   { 175, 4 },
109521:   { 175, 5 },
109522:   { 226, 5 },
109523:   { 226, 4 },
109524:   { 227, 2 },
109525:   { 227, 0 },
109526:   { 225, 1 },
109527:   { 225, 0 },
109528:   { 221, 1 },
109529:   { 221, 0 },
109530:   { 216, 3 },
109531:   { 216, 1 },
109532:   { 147, 11 },
109533:   { 228, 1 },
109534:   { 228, 0 },
109535:   { 179, 0 },
109536:   { 179, 3 },
109537:   { 187, 5 },
109538:   { 187, 3 },
109539:   { 229, 0 },
109540:   { 229, 2 },
109541:   { 147, 4 },
109542:   { 147, 1 },
109543:   { 147, 2 },
109544:   { 147, 3 },
109545:   { 147, 5 },
109546:   { 147, 6 },
109547:   { 147, 5 },
109548:   { 147, 6 },
109549:   { 230, 1 },
109550:   { 230, 1 },
109551:   { 230, 1 },
109552:   { 230, 1 },
109553:   { 230, 1 },
109554:   { 170, 2 },
109555:   { 171, 2 },
109556:   { 232, 1 },
109557:   { 231, 1 },
109558:   { 231, 0 },
109559:   { 147, 5 },
109560:   { 233, 11 },
109561:   { 235, 1 },
109562:   { 235, 1 },
109563:   { 235, 2 },
109564:   { 235, 0 },
109565:   { 236, 1 },
109566:   { 236, 1 },
109567:   { 236, 3 },
109568:   { 237, 0 },
109569:   { 237, 3 },
109570:   { 238, 0 },
109571:   { 238, 2 },
109572:   { 234, 3 },
109573:   { 234, 2 },
109574:   { 240, 1 },
109575:   { 240, 3 },
109576:   { 241, 0 },
109577:   { 241, 3 },
109578:   { 241, 2 },
109579:   { 239, 7 },
109580:   { 239, 8 },
109581:   { 239, 5 },
109582:   { 239, 5 },
109583:   { 239, 1 },
109584:   { 175, 4 },
109585:   { 175, 6 },
109586:   { 191, 1 },
109587:   { 191, 1 },
109588:   { 191, 1 },
109589:   { 147, 4 },
109590:   { 147, 6 },
109591:   { 147, 3 },
109592:   { 243, 0 },
109593:   { 243, 2 },
109594:   { 242, 1 },
109595:   { 242, 0 },
109596:   { 147, 1 },
109597:   { 147, 3 },
109598:   { 147, 1 },
109599:   { 147, 3 },
109600:   { 147, 6 },
109601:   { 147, 6 },
109602:   { 244, 1 },
109603:   { 245, 0 },
109604:   { 245, 1 },
109605:   { 147, 1 },
109606:   { 147, 4 },
109607:   { 246, 7 },
109608:   { 247, 1 },
109609:   { 247, 3 },
109610:   { 248, 0 },
109611:   { 248, 2 },
109612:   { 249, 1 },
109613:   { 249, 3 },
109614:   { 250, 1 },
109615:   { 251, 0 },
109616:   { 251, 4 },
109617:   { 251, 2 },
109618: };
109619: 
109620: static void yy_accept(yyParser*);  /* Forward Declaration */
109621: 
109622: /*
109623: ** Perform a reduce action and the shift that must immediately
109624: ** follow the reduce.
109625: */
109626: static void yy_reduce(
109627:   yyParser *yypParser,         /* The parser */
109628:   int yyruleno                 /* Number of the rule by which to reduce */
109629: ){
109630:   int yygoto;                     /* The next state */
109631:   int yyact;                      /* The next action */
109632:   YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
109633:   yyStackEntry *yymsp;            /* The top of the parser's stack */
109634:   int yysize;                     /* Amount to pop the stack */
109635:   sqlite3ParserARG_FETCH;
109636:   yymsp = &yypParser->yystack[yypParser->yyidx];
109637: #ifndef NDEBUG
109638:   if( yyTraceFILE && yyruleno>=0 
109639:         && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
109640:     fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
109641:       yyRuleName[yyruleno]);
109642:   }
109643: #endif /* NDEBUG */
109644: 
109645:   /* Silence complaints from purify about yygotominor being uninitialized
109646:   ** in some cases when it is copied into the stack after the following
109647:   ** switch.  yygotominor is uninitialized when a rule reduces that does
109648:   ** not set the value of its left-hand side nonterminal.  Leaving the
109649:   ** value of the nonterminal uninitialized is utterly harmless as long
109650:   ** as the value is never used.  So really the only thing this code
109651:   ** accomplishes is to quieten purify.  
109652:   **
109653:   ** 2007-01-16:  The wireshark project (www.wireshark.org) reports that
109654:   ** without this code, their parser segfaults.  I'm not sure what there
109655:   ** parser is doing to make this happen.  This is the second bug report
109656:   ** from wireshark this week.  Clearly they are stressing Lemon in ways
109657:   ** that it has not been previously stressed...  (SQLite ticket #2172)
109658:   */
109659:   /*memset(&yygotominor, 0, sizeof(yygotominor));*/
109660:   yygotominor = yyzerominor;
109661: 
109662: 
109663:   switch( yyruleno ){
109664:   /* Beginning here are the reduction cases.  A typical example
109665:   ** follows:
109666:   **   case 0:
109667:   **  #line <lineno> <grammarfile>
109668:   **     { ... }           // User supplied code
109669:   **  #line <lineno> <thisfile>
109670:   **     break;
109671:   */
109672:       case 5: /* explain ::= */
109673: { sqlite3BeginParse(pParse, 0); }
109674:         break;
109675:       case 6: /* explain ::= EXPLAIN */
109676: { sqlite3BeginParse(pParse, 1); }
109677:         break;
109678:       case 7: /* explain ::= EXPLAIN QUERY PLAN */
109679: { sqlite3BeginParse(pParse, 2); }
109680:         break;
109681:       case 8: /* cmdx ::= cmd */
109682: { sqlite3FinishCoding(pParse); }
109683:         break;
109684:       case 9: /* cmd ::= BEGIN transtype trans_opt */
109685: {sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy4);}
109686:         break;
109687:       case 13: /* transtype ::= */
109688: {yygotominor.yy4 = TK_DEFERRED;}
109689:         break;
109690:       case 14: /* transtype ::= DEFERRED */
109691:       case 15: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==15);
109692:       case 16: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==16);
109693:       case 115: /* multiselect_op ::= UNION */ yytestcase(yyruleno==115);
109694:       case 117: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==117);
109695: {yygotominor.yy4 = yymsp[0].major;}
109696:         break;
109697:       case 17: /* cmd ::= COMMIT trans_opt */
109698:       case 18: /* cmd ::= END trans_opt */ yytestcase(yyruleno==18);
109699: {sqlite3CommitTransaction(pParse);}
109700:         break;
109701:       case 19: /* cmd ::= ROLLBACK trans_opt */
109702: {sqlite3RollbackTransaction(pParse);}
109703:         break;
109704:       case 22: /* cmd ::= SAVEPOINT nm */
109705: {
109706:   sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0);
109707: }
109708:         break;
109709:       case 23: /* cmd ::= RELEASE savepoint_opt nm */
109710: {
109711:   sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0);
109712: }
109713:         break;
109714:       case 24: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
109715: {
109716:   sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0);
109717: }
109718:         break;
109719:       case 26: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */
109720: {
109721:    sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy4,0,0,yymsp[-2].minor.yy4);
109722: }
109723:         break;
109724:       case 27: /* createkw ::= CREATE */
109725: {
109726:   pParse->db->lookaside.bEnabled = 0;
109727:   yygotominor.yy0 = yymsp[0].minor.yy0;
109728: }
109729:         break;
109730:       case 28: /* ifnotexists ::= */
109731:       case 31: /* temp ::= */ yytestcase(yyruleno==31);
109732:       case 70: /* autoinc ::= */ yytestcase(yyruleno==70);
109733:       case 83: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ yytestcase(yyruleno==83);
109734:       case 85: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==85);
109735:       case 87: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ yytestcase(yyruleno==87);
109736:       case 98: /* defer_subclause_opt ::= */ yytestcase(yyruleno==98);
109737:       case 109: /* ifexists ::= */ yytestcase(yyruleno==109);
109738:       case 120: /* distinct ::= ALL */ yytestcase(yyruleno==120);
109739:       case 121: /* distinct ::= */ yytestcase(yyruleno==121);
109740:       case 222: /* between_op ::= BETWEEN */ yytestcase(yyruleno==222);
109741:       case 225: /* in_op ::= IN */ yytestcase(yyruleno==225);
109742: {yygotominor.yy4 = 0;}
109743:         break;
109744:       case 29: /* ifnotexists ::= IF NOT EXISTS */
109745:       case 30: /* temp ::= TEMP */ yytestcase(yyruleno==30);
109746:       case 71: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==71);
109747:       case 86: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ yytestcase(yyruleno==86);
109748:       case 108: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==108);
109749:       case 119: /* distinct ::= DISTINCT */ yytestcase(yyruleno==119);
109750:       case 223: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==223);
109751:       case 226: /* in_op ::= NOT IN */ yytestcase(yyruleno==226);
109752: {yygotominor.yy4 = 1;}
109753:         break;
109754:       case 32: /* create_table_args ::= LP columnlist conslist_opt RP */
109755: {
109756:   sqlite3EndTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0);
109757: }
109758:         break;
109759:       case 33: /* create_table_args ::= AS select */
109760: {
109761:   sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy387);
109762:   sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387);
109763: }
109764:         break;
109765:       case 36: /* column ::= columnid type carglist */
109766: {
109767:   yygotominor.yy0.z = yymsp[-2].minor.yy0.z;
109768:   yygotominor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-2].minor.yy0.z) + pParse->sLastToken.n;
109769: }
109770:         break;
109771:       case 37: /* columnid ::= nm */
109772: {
109773:   sqlite3AddColumn(pParse,&yymsp[0].minor.yy0);
109774:   yygotominor.yy0 = yymsp[0].minor.yy0;
109775: }
109776:         break;
109777:       case 38: /* id ::= ID */
109778:       case 39: /* id ::= INDEXED */ yytestcase(yyruleno==39);
109779:       case 40: /* ids ::= ID|STRING */ yytestcase(yyruleno==40);
109780:       case 41: /* nm ::= id */ yytestcase(yyruleno==41);
109781:       case 42: /* nm ::= STRING */ yytestcase(yyruleno==42);
109782:       case 43: /* nm ::= JOIN_KW */ yytestcase(yyruleno==43);
109783:       case 46: /* typetoken ::= typename */ yytestcase(yyruleno==46);
109784:       case 49: /* typename ::= ids */ yytestcase(yyruleno==49);
109785:       case 127: /* as ::= AS nm */ yytestcase(yyruleno==127);
109786:       case 128: /* as ::= ids */ yytestcase(yyruleno==128);
109787:       case 138: /* dbnm ::= DOT nm */ yytestcase(yyruleno==138);
109788:       case 147: /* indexed_opt ::= INDEXED BY nm */ yytestcase(yyruleno==147);
109789:       case 251: /* collate ::= COLLATE ids */ yytestcase(yyruleno==251);
109790:       case 260: /* nmnum ::= plus_num */ yytestcase(yyruleno==260);
109791:       case 261: /* nmnum ::= nm */ yytestcase(yyruleno==261);
109792:       case 262: /* nmnum ::= ON */ yytestcase(yyruleno==262);
109793:       case 263: /* nmnum ::= DELETE */ yytestcase(yyruleno==263);
109794:       case 264: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==264);
109795:       case 265: /* plus_num ::= plus_opt number */ yytestcase(yyruleno==265);
109796:       case 266: /* minus_num ::= MINUS number */ yytestcase(yyruleno==266);
109797:       case 267: /* number ::= INTEGER|FLOAT */ yytestcase(yyruleno==267);
109798:       case 285: /* trnm ::= nm */ yytestcase(yyruleno==285);
109799: {yygotominor.yy0 = yymsp[0].minor.yy0;}
109800:         break;
109801:       case 45: /* type ::= typetoken */
109802: {sqlite3AddColumnType(pParse,&yymsp[0].minor.yy0);}
109803:         break;
109804:       case 47: /* typetoken ::= typename LP signed RP */
109805: {
109806:   yygotominor.yy0.z = yymsp[-3].minor.yy0.z;
109807:   yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z);
109808: }
109809:         break;
109810:       case 48: /* typetoken ::= typename LP signed COMMA signed RP */
109811: {
109812:   yygotominor.yy0.z = yymsp[-5].minor.yy0.z;
109813:   yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z);
109814: }
109815:         break;
109816:       case 50: /* typename ::= typename ids */
109817: {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);}
109818:         break;
109819:       case 57: /* ccons ::= DEFAULT term */
109820:       case 59: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==59);
109821: {sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy118);}
109822:         break;
109823:       case 58: /* ccons ::= DEFAULT LP expr RP */
109824: {sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy118);}
109825:         break;
109826:       case 60: /* ccons ::= DEFAULT MINUS term */
109827: {
109828:   ExprSpan v;
109829:   v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy118.pExpr, 0, 0);
109830:   v.zStart = yymsp[-1].minor.yy0.z;
109831:   v.zEnd = yymsp[0].minor.yy118.zEnd;
109832:   sqlite3AddDefaultValue(pParse,&v);
109833: }
109834:         break;
109835:       case 61: /* ccons ::= DEFAULT id */
109836: {
109837:   ExprSpan v;
109838:   spanExpr(&v, pParse, TK_STRING, &yymsp[0].minor.yy0);
109839:   sqlite3AddDefaultValue(pParse,&v);
109840: }
109841:         break;
109842:       case 63: /* ccons ::= NOT NULL onconf */
109843: {sqlite3AddNotNull(pParse, yymsp[0].minor.yy4);}
109844:         break;
109845:       case 64: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
109846: {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy4,yymsp[0].minor.yy4,yymsp[-2].minor.yy4);}
109847:         break;
109848:       case 65: /* ccons ::= UNIQUE onconf */
109849: {sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy4,0,0,0,0);}
109850:         break;
109851:       case 66: /* ccons ::= CHECK LP expr RP */
109852: {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy118.pExpr);}
109853:         break;
109854:       case 67: /* ccons ::= REFERENCES nm idxlist_opt refargs */
109855: {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy322,yymsp[0].minor.yy4);}
109856:         break;
109857:       case 68: /* ccons ::= defer_subclause */
109858: {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy4);}
109859:         break;
109860:       case 69: /* ccons ::= COLLATE ids */
109861: {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
109862:         break;
109863:       case 72: /* refargs ::= */
109864: { yygotominor.yy4 = OE_None*0x0101; /* EV: R-19803-45884 */}
109865:         break;
109866:       case 73: /* refargs ::= refargs refarg */
109867: { yygotominor.yy4 = (yymsp[-1].minor.yy4 & ~yymsp[0].minor.yy215.mask) | yymsp[0].minor.yy215.value; }
109868:         break;
109869:       case 74: /* refarg ::= MATCH nm */
109870:       case 75: /* refarg ::= ON INSERT refact */ yytestcase(yyruleno==75);
109871: { yygotominor.yy215.value = 0;     yygotominor.yy215.mask = 0x000000; }
109872:         break;
109873:       case 76: /* refarg ::= ON DELETE refact */
109874: { yygotominor.yy215.value = yymsp[0].minor.yy4;     yygotominor.yy215.mask = 0x0000ff; }
109875:         break;
109876:       case 77: /* refarg ::= ON UPDATE refact */
109877: { yygotominor.yy215.value = yymsp[0].minor.yy4<<8;  yygotominor.yy215.mask = 0x00ff00; }
109878:         break;
109879:       case 78: /* refact ::= SET NULL */
109880: { yygotominor.yy4 = OE_SetNull;  /* EV: R-33326-45252 */}
109881:         break;
109882:       case 79: /* refact ::= SET DEFAULT */
109883: { yygotominor.yy4 = OE_SetDflt;  /* EV: R-33326-45252 */}
109884:         break;
109885:       case 80: /* refact ::= CASCADE */
109886: { yygotominor.yy4 = OE_Cascade;  /* EV: R-33326-45252 */}
109887:         break;
109888:       case 81: /* refact ::= RESTRICT */
109889: { yygotominor.yy4 = OE_Restrict; /* EV: R-33326-45252 */}
109890:         break;
109891:       case 82: /* refact ::= NO ACTION */
109892: { yygotominor.yy4 = OE_None;     /* EV: R-33326-45252 */}
109893:         break;
109894:       case 84: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
109895:       case 99: /* defer_subclause_opt ::= defer_subclause */ yytestcase(yyruleno==99);
109896:       case 101: /* onconf ::= ON CONFLICT resolvetype */ yytestcase(yyruleno==101);
109897:       case 104: /* resolvetype ::= raisetype */ yytestcase(yyruleno==104);
109898: {yygotominor.yy4 = yymsp[0].minor.yy4;}
109899:         break;
109900:       case 88: /* conslist_opt ::= */
109901: {yygotominor.yy0.n = 0; yygotominor.yy0.z = 0;}
109902:         break;
109903:       case 89: /* conslist_opt ::= COMMA conslist */
109904: {yygotominor.yy0 = yymsp[-1].minor.yy0;}
109905:         break;
109906:       case 94: /* tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf */
109907: {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy322,yymsp[0].minor.yy4,yymsp[-2].minor.yy4,0);}
109908:         break;
109909:       case 95: /* tcons ::= UNIQUE LP idxlist RP onconf */
109910: {sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy322,yymsp[0].minor.yy4,0,0,0,0);}
109911:         break;
109912:       case 96: /* tcons ::= CHECK LP expr RP onconf */
109913: {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy118.pExpr);}
109914:         break;
109915:       case 97: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt */
109916: {
109917:     sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy322, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy4);
109918:     sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy4);
109919: }
109920:         break;
109921:       case 100: /* onconf ::= */
109922: {yygotominor.yy4 = OE_Default;}
109923:         break;
109924:       case 102: /* orconf ::= */
109925: {yygotominor.yy210 = OE_Default;}
109926:         break;
109927:       case 103: /* orconf ::= OR resolvetype */
109928: {yygotominor.yy210 = (u8)yymsp[0].minor.yy4;}
109929:         break;
109930:       case 105: /* resolvetype ::= IGNORE */
109931: {yygotominor.yy4 = OE_Ignore;}
109932:         break;
109933:       case 106: /* resolvetype ::= REPLACE */
109934: {yygotominor.yy4 = OE_Replace;}
109935:         break;
109936:       case 107: /* cmd ::= DROP TABLE ifexists fullname */
109937: {
109938:   sqlite3DropTable(pParse, yymsp[0].minor.yy259, 0, yymsp[-1].minor.yy4);
109939: }
109940:         break;
109941:       case 110: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select */
109942: {
109943:   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);
109944: }
109945:         break;
109946:       case 111: /* cmd ::= DROP VIEW ifexists fullname */
109947: {
109948:   sqlite3DropTable(pParse, yymsp[0].minor.yy259, 1, yymsp[-1].minor.yy4);
109949: }
109950:         break;
109951:       case 112: /* cmd ::= select */
109952: {
109953:   SelectDest dest = {SRT_Output, 0, 0, 0, 0};
109954:   sqlite3Select(pParse, yymsp[0].minor.yy387, &dest);
109955:   sqlite3ExplainBegin(pParse->pVdbe);
109956:   sqlite3ExplainSelect(pParse->pVdbe, yymsp[0].minor.yy387);
109957:   sqlite3ExplainFinish(pParse->pVdbe);
109958:   sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387);
109959: }
109960:         break;
109961:       case 113: /* select ::= oneselect */
109962: {yygotominor.yy387 = yymsp[0].minor.yy387;}
109963:         break;
109964:       case 114: /* select ::= select multiselect_op oneselect */
109965: {
109966:   if( yymsp[0].minor.yy387 ){
109967:     yymsp[0].minor.yy387->op = (u8)yymsp[-1].minor.yy4;
109968:     yymsp[0].minor.yy387->pPrior = yymsp[-2].minor.yy387;
109969:   }else{
109970:     sqlite3SelectDelete(pParse->db, yymsp[-2].minor.yy387);
109971:   }
109972:   yygotominor.yy387 = yymsp[0].minor.yy387;
109973: }
109974:         break;
109975:       case 116: /* multiselect_op ::= UNION ALL */
109976: {yygotominor.yy4 = TK_ALL;}
109977:         break;
109978:       case 118: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
109979: {
109980:   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);
109981: }
109982:         break;
109983:       case 122: /* sclp ::= selcollist COMMA */
109984:       case 247: /* idxlist_opt ::= LP idxlist RP */ yytestcase(yyruleno==247);
109985: {yygotominor.yy322 = yymsp[-1].minor.yy322;}
109986:         break;
109987:       case 123: /* sclp ::= */
109988:       case 151: /* orderby_opt ::= */ yytestcase(yyruleno==151);
109989:       case 159: /* groupby_opt ::= */ yytestcase(yyruleno==159);
109990:       case 240: /* exprlist ::= */ yytestcase(yyruleno==240);
109991:       case 246: /* idxlist_opt ::= */ yytestcase(yyruleno==246);
109992: {yygotominor.yy322 = 0;}
109993:         break;
109994:       case 124: /* selcollist ::= sclp expr as */
109995: {
109996:    yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy322, yymsp[-1].minor.yy118.pExpr);
109997:    if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[0].minor.yy0, 1);
109998:    sqlite3ExprListSetSpan(pParse,yygotominor.yy322,&yymsp[-1].minor.yy118);
109999: }
110000:         break;
110001:       case 125: /* selcollist ::= sclp STAR */
110002: {
110003:   Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0);
110004:   yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy322, p);
110005: }
110006:         break;
110007:       case 126: /* selcollist ::= sclp nm DOT STAR */
110008: {
110009:   Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &yymsp[0].minor.yy0);
110010:   Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
110011:   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
110012:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322, pDot);
110013: }
110014:         break;
110015:       case 129: /* as ::= */
110016: {yygotominor.yy0.n = 0;}
110017:         break;
110018:       case 130: /* from ::= */
110019: {yygotominor.yy259 = sqlite3DbMallocZero(pParse->db, sizeof(*yygotominor.yy259));}
110020:         break;
110021:       case 131: /* from ::= FROM seltablist */
110022: {
110023:   yygotominor.yy259 = yymsp[0].minor.yy259;
110024:   sqlite3SrcListShiftJoinType(yygotominor.yy259);
110025: }
110026:         break;
110027:       case 132: /* stl_prefix ::= seltablist joinop */
110028: {
110029:    yygotominor.yy259 = yymsp[-1].minor.yy259;
110030:    if( ALWAYS(yygotominor.yy259 && yygotominor.yy259->nSrc>0) ) yygotominor.yy259->a[yygotominor.yy259->nSrc-1].jointype = (u8)yymsp[0].minor.yy4;
110031: }
110032:         break;
110033:       case 133: /* stl_prefix ::= */
110034: {yygotominor.yy259 = 0;}
110035:         break;
110036:       case 134: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
110037: {
110038:   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);
110039:   sqlite3SrcListIndexedBy(pParse, yygotominor.yy259, &yymsp[-2].minor.yy0);
110040: }
110041:         break;
110042:       case 135: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
110043: {
110044:     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);
110045:   }
110046:         break;
110047:       case 136: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
110048: {
110049:     if( yymsp[-6].minor.yy259==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy314==0 && yymsp[0].minor.yy384==0 ){
110050:       yygotominor.yy259 = yymsp[-4].minor.yy259;
110051:     }else{
110052:       Select *pSubquery;
110053:       sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy259);
110054:       pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy259,0,0,0,0,0,0,0);
110055:       yygotominor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
110056:     }
110057:   }
110058:         break;
110059:       case 137: /* dbnm ::= */
110060:       case 146: /* indexed_opt ::= */ yytestcase(yyruleno==146);
110061: {yygotominor.yy0.z=0; yygotominor.yy0.n=0;}
110062:         break;
110063:       case 139: /* fullname ::= nm dbnm */
110064: {yygotominor.yy259 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
110065:         break;
110066:       case 140: /* joinop ::= COMMA|JOIN */
110067: { yygotominor.yy4 = JT_INNER; }
110068:         break;
110069:       case 141: /* joinop ::= JOIN_KW JOIN */
110070: { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); }
110071:         break;
110072:       case 142: /* joinop ::= JOIN_KW nm JOIN */
110073: { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); }
110074:         break;
110075:       case 143: /* joinop ::= JOIN_KW nm nm JOIN */
110076: { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); }
110077:         break;
110078:       case 144: /* on_opt ::= ON expr */
110079:       case 155: /* sortitem ::= expr */ yytestcase(yyruleno==155);
110080:       case 162: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==162);
110081:       case 169: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==169);
110082:       case 235: /* case_else ::= ELSE expr */ yytestcase(yyruleno==235);
110083:       case 237: /* case_operand ::= expr */ yytestcase(yyruleno==237);
110084: {yygotominor.yy314 = yymsp[0].minor.yy118.pExpr;}
110085:         break;
110086:       case 145: /* on_opt ::= */
110087:       case 161: /* having_opt ::= */ yytestcase(yyruleno==161);
110088:       case 168: /* where_opt ::= */ yytestcase(yyruleno==168);
110089:       case 236: /* case_else ::= */ yytestcase(yyruleno==236);
110090:       case 238: /* case_operand ::= */ yytestcase(yyruleno==238);
110091: {yygotominor.yy314 = 0;}
110092:         break;
110093:       case 148: /* indexed_opt ::= NOT INDEXED */
110094: {yygotominor.yy0.z=0; yygotominor.yy0.n=1;}
110095:         break;
110096:       case 149: /* using_opt ::= USING LP inscollist RP */
110097:       case 181: /* inscollist_opt ::= LP inscollist RP */ yytestcase(yyruleno==181);
110098: {yygotominor.yy384 = yymsp[-1].minor.yy384;}
110099:         break;
110100:       case 150: /* using_opt ::= */
110101:       case 180: /* inscollist_opt ::= */ yytestcase(yyruleno==180);
110102: {yygotominor.yy384 = 0;}
110103:         break;
110104:       case 152: /* orderby_opt ::= ORDER BY sortlist */
110105:       case 160: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==160);
110106:       case 239: /* exprlist ::= nexprlist */ yytestcase(yyruleno==239);
110107: {yygotominor.yy322 = yymsp[0].minor.yy322;}
110108:         break;
110109:       case 153: /* sortlist ::= sortlist COMMA sortitem sortorder */
110110: {
110111:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322,yymsp[-1].minor.yy314);
110112:   if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
110113: }
110114:         break;
110115:       case 154: /* sortlist ::= sortitem sortorder */
110116: {
110117:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy314);
110118:   if( yygotominor.yy322 && ALWAYS(yygotominor.yy322->a) ) yygotominor.yy322->a[0].sortOrder = (u8)yymsp[0].minor.yy4;
110119: }
110120:         break;
110121:       case 156: /* sortorder ::= ASC */
110122:       case 158: /* sortorder ::= */ yytestcase(yyruleno==158);
110123: {yygotominor.yy4 = SQLITE_SO_ASC;}
110124:         break;
110125:       case 157: /* sortorder ::= DESC */
110126: {yygotominor.yy4 = SQLITE_SO_DESC;}
110127:         break;
110128:       case 163: /* limit_opt ::= */
110129: {yygotominor.yy292.pLimit = 0; yygotominor.yy292.pOffset = 0;}
110130:         break;
110131:       case 164: /* limit_opt ::= LIMIT expr */
110132: {yygotominor.yy292.pLimit = yymsp[0].minor.yy118.pExpr; yygotominor.yy292.pOffset = 0;}
110133:         break;
110134:       case 165: /* limit_opt ::= LIMIT expr OFFSET expr */
110135: {yygotominor.yy292.pLimit = yymsp[-2].minor.yy118.pExpr; yygotominor.yy292.pOffset = yymsp[0].minor.yy118.pExpr;}
110136:         break;
110137:       case 166: /* limit_opt ::= LIMIT expr COMMA expr */
110138: {yygotominor.yy292.pOffset = yymsp[-2].minor.yy118.pExpr; yygotominor.yy292.pLimit = yymsp[0].minor.yy118.pExpr;}
110139:         break;
110140:       case 167: /* cmd ::= DELETE FROM fullname indexed_opt where_opt */
110141: {
110142:   sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy259, &yymsp[-1].minor.yy0);
110143:   sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy259,yymsp[0].minor.yy314);
110144: }
110145:         break;
110146:       case 170: /* cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt */
110147: {
110148:   sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy259, &yymsp[-3].minor.yy0);
110149:   sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy322,"set list"); 
110150:   sqlite3Update(pParse,yymsp[-4].minor.yy259,yymsp[-1].minor.yy322,yymsp[0].minor.yy314,yymsp[-5].minor.yy210);
110151: }
110152:         break;
110153:       case 171: /* setlist ::= setlist COMMA nm EQ expr */
110154: {
110155:   yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[0].minor.yy118.pExpr);
110156:   sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
110157: }
110158:         break;
110159:       case 172: /* setlist ::= nm EQ expr */
110160: {
110161:   yygotominor.yy322 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy118.pExpr);
110162:   sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
110163: }
110164:         break;
110165:       case 173: /* cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP */
110166: {sqlite3Insert(pParse, yymsp[-5].minor.yy259, yymsp[-1].minor.yy322, 0, yymsp[-4].minor.yy384, yymsp[-7].minor.yy210);}
110167:         break;
110168:       case 174: /* cmd ::= insert_cmd INTO fullname inscollist_opt select */
110169: {sqlite3Insert(pParse, yymsp[-2].minor.yy259, 0, yymsp[0].minor.yy387, yymsp[-1].minor.yy384, yymsp[-4].minor.yy210);}
110170:         break;
110171:       case 175: /* cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES */
110172: {sqlite3Insert(pParse, yymsp[-3].minor.yy259, 0, 0, yymsp[-2].minor.yy384, yymsp[-5].minor.yy210);}
110173:         break;
110174:       case 176: /* insert_cmd ::= INSERT orconf */
110175: {yygotominor.yy210 = yymsp[0].minor.yy210;}
110176:         break;
110177:       case 177: /* insert_cmd ::= REPLACE */
110178: {yygotominor.yy210 = OE_Replace;}
110179:         break;
110180:       case 178: /* itemlist ::= itemlist COMMA expr */
110181:       case 241: /* nexprlist ::= nexprlist COMMA expr */ yytestcase(yyruleno==241);
110182: {yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[0].minor.yy118.pExpr);}
110183:         break;
110184:       case 179: /* itemlist ::= expr */
110185:       case 242: /* nexprlist ::= expr */ yytestcase(yyruleno==242);
110186: {yygotominor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy118.pExpr);}
110187:         break;
110188:       case 182: /* inscollist ::= inscollist COMMA nm */
110189: {yygotominor.yy384 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy384,&yymsp[0].minor.yy0);}
110190:         break;
110191:       case 183: /* inscollist ::= nm */
110192: {yygotominor.yy384 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0);}
110193:         break;
110194:       case 184: /* expr ::= term */
110195: {yygotominor.yy118 = yymsp[0].minor.yy118;}
110196:         break;
110197:       case 185: /* expr ::= LP expr RP */
110198: {yygotominor.yy118.pExpr = yymsp[-1].minor.yy118.pExpr; spanSet(&yygotominor.yy118,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);}
110199:         break;
110200:       case 186: /* term ::= NULL */
110201:       case 191: /* term ::= INTEGER|FLOAT|BLOB */ yytestcase(yyruleno==191);
110202:       case 192: /* term ::= STRING */ yytestcase(yyruleno==192);
110203: {spanExpr(&yygotominor.yy118, pParse, yymsp[0].major, &yymsp[0].minor.yy0);}
110204:         break;
110205:       case 187: /* expr ::= id */
110206:       case 188: /* expr ::= JOIN_KW */ yytestcase(yyruleno==188);
110207: {spanExpr(&yygotominor.yy118, pParse, TK_ID, &yymsp[0].minor.yy0);}
110208:         break;
110209:       case 189: /* expr ::= nm DOT nm */
110210: {
110211:   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
110212:   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0);
110213:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0);
110214:   spanSet(&yygotominor.yy118,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
110215: }
110216:         break;
110217:       case 190: /* expr ::= nm DOT nm DOT nm */
110218: {
110219:   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-4].minor.yy0);
110220:   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
110221:   Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0);
110222:   Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0);
110223:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0);
110224:   spanSet(&yygotominor.yy118,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
110225: }
110226:         break;
110227:       case 193: /* expr ::= REGISTER */
110228: {
110229:   /* When doing a nested parse, one can include terms in an expression
110230:   ** that look like this:   #1 #2 ...  These terms refer to registers
110231:   ** in the virtual machine.  #N is the N-th register. */
110232:   if( pParse->nested==0 ){
110233:     sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &yymsp[0].minor.yy0);
110234:     yygotominor.yy118.pExpr = 0;
110235:   }else{
110236:     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &yymsp[0].minor.yy0);
110237:     if( yygotominor.yy118.pExpr ) sqlite3GetInt32(&yymsp[0].minor.yy0.z[1], &yygotominor.yy118.pExpr->iTable);
110238:   }
110239:   spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
110240: }
110241:         break;
110242:       case 194: /* expr ::= VARIABLE */
110243: {
110244:   spanExpr(&yygotominor.yy118, pParse, TK_VARIABLE, &yymsp[0].minor.yy0);
110245:   sqlite3ExprAssignVarNumber(pParse, yygotominor.yy118.pExpr);
110246:   spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
110247: }
110248:         break;
110249:       case 195: /* expr ::= expr COLLATE ids */
110250: {
110251:   yygotominor.yy118.pExpr = sqlite3ExprSetCollByToken(pParse, yymsp[-2].minor.yy118.pExpr, &yymsp[0].minor.yy0);
110252:   yygotominor.yy118.zStart = yymsp[-2].minor.yy118.zStart;
110253:   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110254: }
110255:         break;
110256:       case 196: /* expr ::= CAST LP expr AS typetoken RP */
110257: {
110258:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_CAST, yymsp[-3].minor.yy118.pExpr, 0, &yymsp[-1].minor.yy0);
110259:   spanSet(&yygotominor.yy118,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0);
110260: }
110261:         break;
110262:       case 197: /* expr ::= ID LP distinct exprlist RP */
110263: {
110264:   if( yymsp[-1].minor.yy322 && yymsp[-1].minor.yy322->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
110265:     sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0);
110266:   }
110267:   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0);
110268:   spanSet(&yygotominor.yy118,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
110269:   if( yymsp[-2].minor.yy4 && yygotominor.yy118.pExpr ){
110270:     yygotominor.yy118.pExpr->flags |= EP_Distinct;
110271:   }
110272: }
110273:         break;
110274:       case 198: /* expr ::= ID LP STAR RP */
110275: {
110276:   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0);
110277:   spanSet(&yygotominor.yy118,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
110278: }
110279:         break;
110280:       case 199: /* term ::= CTIME_KW */
110281: {
110282:   /* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are
110283:   ** treated as functions that return constants */
110284:   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, 0,&yymsp[0].minor.yy0);
110285:   if( yygotominor.yy118.pExpr ){
110286:     yygotominor.yy118.pExpr->op = TK_CONST_FUNC;  
110287:   }
110288:   spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
110289: }
110290:         break;
110291:       case 200: /* expr ::= expr AND expr */
110292:       case 201: /* expr ::= expr OR expr */ yytestcase(yyruleno==201);
110293:       case 202: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==202);
110294:       case 203: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==203);
110295:       case 204: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==204);
110296:       case 205: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==205);
110297:       case 206: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==206);
110298:       case 207: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==207);
110299: {spanBinaryExpr(&yygotominor.yy118,pParse,yymsp[-1].major,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy118);}
110300:         break;
110301:       case 208: /* likeop ::= LIKE_KW */
110302:       case 210: /* likeop ::= MATCH */ yytestcase(yyruleno==210);
110303: {yygotominor.yy342.eOperator = yymsp[0].minor.yy0; yygotominor.yy342.not = 0;}
110304:         break;
110305:       case 209: /* likeop ::= NOT LIKE_KW */
110306:       case 211: /* likeop ::= NOT MATCH */ yytestcase(yyruleno==211);
110307: {yygotominor.yy342.eOperator = yymsp[0].minor.yy0; yygotominor.yy342.not = 1;}
110308:         break;
110309:       case 212: /* expr ::= expr likeop expr */
110310: {
110311:   ExprList *pList;
110312:   pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy118.pExpr);
110313:   pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy118.pExpr);
110314:   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy342.eOperator);
110315:   if( yymsp[-1].minor.yy342.not ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110316:   yygotominor.yy118.zStart = yymsp[-2].minor.yy118.zStart;
110317:   yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
110318:   if( yygotominor.yy118.pExpr ) yygotominor.yy118.pExpr->flags |= EP_InfixFunc;
110319: }
110320:         break;
110321:       case 213: /* expr ::= expr likeop expr ESCAPE expr */
110322: {
110323:   ExprList *pList;
110324:   pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
110325:   pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy118.pExpr);
110326:   pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy118.pExpr);
110327:   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy342.eOperator);
110328:   if( yymsp[-3].minor.yy342.not ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110329:   yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
110330:   yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
110331:   if( yygotominor.yy118.pExpr ) yygotominor.yy118.pExpr->flags |= EP_InfixFunc;
110332: }
110333:         break;
110334:       case 214: /* expr ::= expr ISNULL|NOTNULL */
110335: {spanUnaryPostfix(&yygotominor.yy118,pParse,yymsp[0].major,&yymsp[-1].minor.yy118,&yymsp[0].minor.yy0);}
110336:         break;
110337:       case 215: /* expr ::= expr NOT NULL */
110338: {spanUnaryPostfix(&yygotominor.yy118,pParse,TK_NOTNULL,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
110339:         break;
110340:       case 216: /* expr ::= expr IS expr */
110341: {
110342:   spanBinaryExpr(&yygotominor.yy118,pParse,TK_IS,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy118);
110343:   binaryToUnaryIfNull(pParse, yymsp[0].minor.yy118.pExpr, yygotominor.yy118.pExpr, TK_ISNULL);
110344: }
110345:         break;
110346:       case 217: /* expr ::= expr IS NOT expr */
110347: {
110348:   spanBinaryExpr(&yygotominor.yy118,pParse,TK_ISNOT,&yymsp[-3].minor.yy118,&yymsp[0].minor.yy118);
110349:   binaryToUnaryIfNull(pParse, yymsp[0].minor.yy118.pExpr, yygotominor.yy118.pExpr, TK_NOTNULL);
110350: }
110351:         break;
110352:       case 218: /* expr ::= NOT expr */
110353:       case 219: /* expr ::= BITNOT expr */ yytestcase(yyruleno==219);
110354: {spanUnaryPrefix(&yygotominor.yy118,pParse,yymsp[-1].major,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
110355:         break;
110356:       case 220: /* expr ::= MINUS expr */
110357: {spanUnaryPrefix(&yygotominor.yy118,pParse,TK_UMINUS,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
110358:         break;
110359:       case 221: /* expr ::= PLUS expr */
110360: {spanUnaryPrefix(&yygotominor.yy118,pParse,TK_UPLUS,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
110361:         break;
110362:       case 224: /* expr ::= expr between_op expr AND expr */
110363: {
110364:   ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
110365:   pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy118.pExpr);
110366:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy118.pExpr, 0, 0);
110367:   if( yygotominor.yy118.pExpr ){
110368:     yygotominor.yy118.pExpr->x.pList = pList;
110369:   }else{
110370:     sqlite3ExprListDelete(pParse->db, pList);
110371:   } 
110372:   if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110373:   yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
110374:   yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
110375: }
110376:         break;
110377:       case 227: /* expr ::= expr in_op LP exprlist RP */
110378: {
110379:     if( yymsp[-1].minor.yy322==0 ){
110380:       /* Expressions of the form
110381:       **
110382:       **      expr1 IN ()
110383:       **      expr1 NOT IN ()
110384:       **
110385:       ** simplify to constants 0 (false) and 1 (true), respectively,
110386:       ** regardless of the value of expr1.
110387:       */
110388:       yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[yymsp[-3].minor.yy4]);
110389:       sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy118.pExpr);
110390:     }else{
110391:       yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy118.pExpr, 0, 0);
110392:       if( yygotominor.yy118.pExpr ){
110393:         yygotominor.yy118.pExpr->x.pList = yymsp[-1].minor.yy322;
110394:         sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
110395:       }else{
110396:         sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
110397:       }
110398:       if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110399:     }
110400:     yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
110401:     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110402:   }
110403:         break;
110404:       case 228: /* expr ::= LP select RP */
110405: {
110406:     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0);
110407:     if( yygotominor.yy118.pExpr ){
110408:       yygotominor.yy118.pExpr->x.pSelect = yymsp[-1].minor.yy387;
110409:       ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
110410:       sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
110411:     }else{
110412:       sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
110413:     }
110414:     yygotominor.yy118.zStart = yymsp[-2].minor.yy0.z;
110415:     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110416:   }
110417:         break;
110418:       case 229: /* expr ::= expr in_op LP select RP */
110419: {
110420:     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy118.pExpr, 0, 0);
110421:     if( yygotominor.yy118.pExpr ){
110422:       yygotominor.yy118.pExpr->x.pSelect = yymsp[-1].minor.yy387;
110423:       ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
110424:       sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
110425:     }else{
110426:       sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
110427:     }
110428:     if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110429:     yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
110430:     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110431:   }
110432:         break;
110433:       case 230: /* expr ::= expr in_op nm dbnm */
110434: {
110435:     SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);
110436:     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-3].minor.yy118.pExpr, 0, 0);
110437:     if( yygotominor.yy118.pExpr ){
110438:       yygotominor.yy118.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
110439:       ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
110440:       sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
110441:     }else{
110442:       sqlite3SrcListDelete(pParse->db, pSrc);
110443:     }
110444:     if( yymsp[-2].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110445:     yygotominor.yy118.zStart = yymsp[-3].minor.yy118.zStart;
110446:     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];
110447:   }
110448:         break;
110449:       case 231: /* expr ::= EXISTS LP select RP */
110450: {
110451:     Expr *p = yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0);
110452:     if( p ){
110453:       p->x.pSelect = yymsp[-1].minor.yy387;
110454:       ExprSetProperty(p, EP_xIsSelect);
110455:       sqlite3ExprSetHeight(pParse, p);
110456:     }else{
110457:       sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
110458:     }
110459:     yygotominor.yy118.zStart = yymsp[-3].minor.yy0.z;
110460:     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110461:   }
110462:         break;
110463:       case 232: /* expr ::= CASE case_operand case_exprlist case_else END */
110464: {
110465:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy314, yymsp[-1].minor.yy314, 0);
110466:   if( yygotominor.yy118.pExpr ){
110467:     yygotominor.yy118.pExpr->x.pList = yymsp[-2].minor.yy322;
110468:     sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
110469:   }else{
110470:     sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy322);
110471:   }
110472:   yygotominor.yy118.zStart = yymsp[-4].minor.yy0.z;
110473:   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110474: }
110475:         break;
110476:       case 233: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
110477: {
110478:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[-2].minor.yy118.pExpr);
110479:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yygotominor.yy322, yymsp[0].minor.yy118.pExpr);
110480: }
110481:         break;
110482:       case 234: /* case_exprlist ::= WHEN expr THEN expr */
110483: {
110484:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
110485:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yygotominor.yy322, yymsp[0].minor.yy118.pExpr);
110486: }
110487:         break;
110488:       case 243: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP */
110489: {
110490:   sqlite3CreateIndex(pParse, &yymsp[-6].minor.yy0, &yymsp[-5].minor.yy0, 
110491:                      sqlite3SrcListAppend(pParse->db,0,&yymsp[-3].minor.yy0,0), yymsp[-1].minor.yy322, yymsp[-9].minor.yy4,
110492:                       &yymsp[-10].minor.yy0, &yymsp[0].minor.yy0, SQLITE_SO_ASC, yymsp[-7].minor.yy4);
110493: }
110494:         break;
110495:       case 244: /* uniqueflag ::= UNIQUE */
110496:       case 298: /* raisetype ::= ABORT */ yytestcase(yyruleno==298);
110497: {yygotominor.yy4 = OE_Abort;}
110498:         break;
110499:       case 245: /* uniqueflag ::= */
110500: {yygotominor.yy4 = OE_None;}
110501:         break;
110502:       case 248: /* idxlist ::= idxlist COMMA nm collate sortorder */
110503: {
110504:   Expr *p = 0;
110505:   if( yymsp[-1].minor.yy0.n>0 ){
110506:     p = sqlite3Expr(pParse->db, TK_COLUMN, 0);
110507:     sqlite3ExprSetCollByToken(pParse, p, &yymsp[-1].minor.yy0);
110508:   }
110509:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, p);
110510:   sqlite3ExprListSetName(pParse,yygotominor.yy322,&yymsp[-2].minor.yy0,1);
110511:   sqlite3ExprListCheckLength(pParse, yygotominor.yy322, "index");
110512:   if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
110513: }
110514:         break;
110515:       case 249: /* idxlist ::= nm collate sortorder */
110516: {
110517:   Expr *p = 0;
110518:   if( yymsp[-1].minor.yy0.n>0 ){
110519:     p = sqlite3PExpr(pParse, TK_COLUMN, 0, 0, 0);
110520:     sqlite3ExprSetCollByToken(pParse, p, &yymsp[-1].minor.yy0);
110521:   }
110522:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,0, p);
110523:   sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
110524:   sqlite3ExprListCheckLength(pParse, yygotominor.yy322, "index");
110525:   if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
110526: }
110527:         break;
110528:       case 250: /* collate ::= */
110529: {yygotominor.yy0.z = 0; yygotominor.yy0.n = 0;}
110530:         break;
110531:       case 252: /* cmd ::= DROP INDEX ifexists fullname */
110532: {sqlite3DropIndex(pParse, yymsp[0].minor.yy259, yymsp[-1].minor.yy4);}
110533:         break;
110534:       case 253: /* cmd ::= VACUUM */
110535:       case 254: /* cmd ::= VACUUM nm */ yytestcase(yyruleno==254);
110536: {sqlite3Vacuum(pParse);}
110537:         break;
110538:       case 255: /* cmd ::= PRAGMA nm dbnm */
110539: {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);}
110540:         break;
110541:       case 256: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
110542: {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);}
110543:         break;
110544:       case 257: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
110545: {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);}
110546:         break;
110547:       case 258: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
110548: {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);}
110549:         break;
110550:       case 259: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
110551: {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);}
110552:         break;
110553:       case 270: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
110554: {
110555:   Token all;
110556:   all.z = yymsp[-3].minor.yy0.z;
110557:   all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
110558:   sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy203, &all);
110559: }
110560:         break;
110561:       case 271: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
110562: {
110563:   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);
110564:   yygotominor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0);
110565: }
110566:         break;
110567:       case 272: /* trigger_time ::= BEFORE */
110568:       case 275: /* trigger_time ::= */ yytestcase(yyruleno==275);
110569: { yygotominor.yy4 = TK_BEFORE; }
110570:         break;
110571:       case 273: /* trigger_time ::= AFTER */
110572: { yygotominor.yy4 = TK_AFTER;  }
110573:         break;
110574:       case 274: /* trigger_time ::= INSTEAD OF */
110575: { yygotominor.yy4 = TK_INSTEAD;}
110576:         break;
110577:       case 276: /* trigger_event ::= DELETE|INSERT */
110578:       case 277: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==277);
110579: {yygotominor.yy90.a = yymsp[0].major; yygotominor.yy90.b = 0;}
110580:         break;
110581:       case 278: /* trigger_event ::= UPDATE OF inscollist */
110582: {yygotominor.yy90.a = TK_UPDATE; yygotominor.yy90.b = yymsp[0].minor.yy384;}
110583:         break;
110584:       case 281: /* when_clause ::= */
110585:       case 303: /* key_opt ::= */ yytestcase(yyruleno==303);
110586: { yygotominor.yy314 = 0; }
110587:         break;
110588:       case 282: /* when_clause ::= WHEN expr */
110589:       case 304: /* key_opt ::= KEY expr */ yytestcase(yyruleno==304);
110590: { yygotominor.yy314 = yymsp[0].minor.yy118.pExpr; }
110591:         break;
110592:       case 283: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
110593: {
110594:   assert( yymsp[-2].minor.yy203!=0 );
110595:   yymsp[-2].minor.yy203->pLast->pNext = yymsp[-1].minor.yy203;
110596:   yymsp[-2].minor.yy203->pLast = yymsp[-1].minor.yy203;
110597:   yygotominor.yy203 = yymsp[-2].minor.yy203;
110598: }
110599:         break;
110600:       case 284: /* trigger_cmd_list ::= trigger_cmd SEMI */
110601: { 
110602:   assert( yymsp[-1].minor.yy203!=0 );
110603:   yymsp[-1].minor.yy203->pLast = yymsp[-1].minor.yy203;
110604:   yygotominor.yy203 = yymsp[-1].minor.yy203;
110605: }
110606:         break;
110607:       case 286: /* trnm ::= nm DOT nm */
110608: {
110609:   yygotominor.yy0 = yymsp[0].minor.yy0;
110610:   sqlite3ErrorMsg(pParse, 
110611:         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
110612:         "statements within triggers");
110613: }
110614:         break;
110615:       case 288: /* tridxby ::= INDEXED BY nm */
110616: {
110617:   sqlite3ErrorMsg(pParse,
110618:         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
110619:         "within triggers");
110620: }
110621:         break;
110622:       case 289: /* tridxby ::= NOT INDEXED */
110623: {
110624:   sqlite3ErrorMsg(pParse,
110625:         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
110626:         "within triggers");
110627: }
110628:         break;
110629:       case 290: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */
110630: { yygotominor.yy203 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy322, yymsp[0].minor.yy314, yymsp[-5].minor.yy210); }
110631:         break;
110632:       case 291: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt VALUES LP itemlist RP */
110633: {yygotominor.yy203 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy384, yymsp[-1].minor.yy322, 0, yymsp[-7].minor.yy210);}
110634:         break;
110635:       case 292: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select */
110636: {yygotominor.yy203 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy384, 0, yymsp[0].minor.yy387, yymsp[-4].minor.yy210);}
110637:         break;
110638:       case 293: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */
110639: {yygotominor.yy203 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy314);}
110640:         break;
110641:       case 294: /* trigger_cmd ::= select */
110642: {yygotominor.yy203 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy387); }
110643:         break;
110644:       case 295: /* expr ::= RAISE LP IGNORE RP */
110645: {
110646:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0); 
110647:   if( yygotominor.yy118.pExpr ){
110648:     yygotominor.yy118.pExpr->affinity = OE_Ignore;
110649:   }
110650:   yygotominor.yy118.zStart = yymsp[-3].minor.yy0.z;
110651:   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110652: }
110653:         break;
110654:       case 296: /* expr ::= RAISE LP raisetype COMMA nm RP */
110655: {
110656:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &yymsp[-1].minor.yy0); 
110657:   if( yygotominor.yy118.pExpr ) {
110658:     yygotominor.yy118.pExpr->affinity = (char)yymsp[-3].minor.yy4;
110659:   }
110660:   yygotominor.yy118.zStart = yymsp[-5].minor.yy0.z;
110661:   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110662: }
110663:         break;
110664:       case 297: /* raisetype ::= ROLLBACK */
110665: {yygotominor.yy4 = OE_Rollback;}
110666:         break;
110667:       case 299: /* raisetype ::= FAIL */
110668: {yygotominor.yy4 = OE_Fail;}
110669:         break;
110670:       case 300: /* cmd ::= DROP TRIGGER ifexists fullname */
110671: {
110672:   sqlite3DropTrigger(pParse,yymsp[0].minor.yy259,yymsp[-1].minor.yy4);
110673: }
110674:         break;
110675:       case 301: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
110676: {
110677:   sqlite3Attach(pParse, yymsp[-3].minor.yy118.pExpr, yymsp[-1].minor.yy118.pExpr, yymsp[0].minor.yy314);
110678: }
110679:         break;
110680:       case 302: /* cmd ::= DETACH database_kw_opt expr */
110681: {
110682:   sqlite3Detach(pParse, yymsp[0].minor.yy118.pExpr);
110683: }
110684:         break;
110685:       case 307: /* cmd ::= REINDEX */
110686: {sqlite3Reindex(pParse, 0, 0);}
110687:         break;
110688:       case 308: /* cmd ::= REINDEX nm dbnm */
110689: {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
110690:         break;
110691:       case 309: /* cmd ::= ANALYZE */
110692: {sqlite3Analyze(pParse, 0, 0);}
110693:         break;
110694:       case 310: /* cmd ::= ANALYZE nm dbnm */
110695: {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
110696:         break;
110697:       case 311: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
110698: {
110699:   sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy259,&yymsp[0].minor.yy0);
110700: }
110701:         break;
110702:       case 312: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column */
110703: {
110704:   sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy0);
110705: }
110706:         break;
110707:       case 313: /* add_column_fullname ::= fullname */
110708: {
110709:   pParse->db->lookaside.bEnabled = 0;
110710:   sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy259);
110711: }
110712:         break;
110713:       case 316: /* cmd ::= create_vtab */
110714: {sqlite3VtabFinishParse(pParse,0);}
110715:         break;
110716:       case 317: /* cmd ::= create_vtab LP vtabarglist RP */
110717: {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
110718:         break;
110719:       case 318: /* create_vtab ::= createkw VIRTUAL TABLE nm dbnm USING nm */
110720: {
110721:     sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
110722: }
110723:         break;
110724:       case 321: /* vtabarg ::= */
110725: {sqlite3VtabArgInit(pParse);}
110726:         break;
110727:       case 323: /* vtabargtoken ::= ANY */
110728:       case 324: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==324);
110729:       case 325: /* lp ::= LP */ yytestcase(yyruleno==325);
110730: {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
110731:         break;
110732:       default:
110733:       /* (0) input ::= cmdlist */ yytestcase(yyruleno==0);
110734:       /* (1) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==1);
110735:       /* (2) cmdlist ::= ecmd */ yytestcase(yyruleno==2);
110736:       /* (3) ecmd ::= SEMI */ yytestcase(yyruleno==3);
110737:       /* (4) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==4);
110738:       /* (10) trans_opt ::= */ yytestcase(yyruleno==10);
110739:       /* (11) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==11);
110740:       /* (12) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==12);
110741:       /* (20) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==20);
110742:       /* (21) savepoint_opt ::= */ yytestcase(yyruleno==21);
110743:       /* (25) cmd ::= create_table create_table_args */ yytestcase(yyruleno==25);
110744:       /* (34) columnlist ::= columnlist COMMA column */ yytestcase(yyruleno==34);
110745:       /* (35) columnlist ::= column */ yytestcase(yyruleno==35);
110746:       /* (44) type ::= */ yytestcase(yyruleno==44);
110747:       /* (51) signed ::= plus_num */ yytestcase(yyruleno==51);
110748:       /* (52) signed ::= minus_num */ yytestcase(yyruleno==52);
110749:       /* (53) carglist ::= carglist carg */ yytestcase(yyruleno==53);
110750:       /* (54) carglist ::= */ yytestcase(yyruleno==54);
110751:       /* (55) carg ::= CONSTRAINT nm ccons */ yytestcase(yyruleno==55);
110752:       /* (56) carg ::= ccons */ yytestcase(yyruleno==56);
110753:       /* (62) ccons ::= NULL onconf */ yytestcase(yyruleno==62);
110754:       /* (90) conslist ::= conslist COMMA tcons */ yytestcase(yyruleno==90);
110755:       /* (91) conslist ::= conslist tcons */ yytestcase(yyruleno==91);
110756:       /* (92) conslist ::= tcons */ yytestcase(yyruleno==92);
110757:       /* (93) tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==93);
110758:       /* (268) plus_opt ::= PLUS */ yytestcase(yyruleno==268);
110759:       /* (269) plus_opt ::= */ yytestcase(yyruleno==269);
110760:       /* (279) foreach_clause ::= */ yytestcase(yyruleno==279);
110761:       /* (280) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==280);
110762:       /* (287) tridxby ::= */ yytestcase(yyruleno==287);
110763:       /* (305) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==305);
110764:       /* (306) database_kw_opt ::= */ yytestcase(yyruleno==306);
110765:       /* (314) kwcolumn_opt ::= */ yytestcase(yyruleno==314);
110766:       /* (315) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==315);
110767:       /* (319) vtabarglist ::= vtabarg */ yytestcase(yyruleno==319);
110768:       /* (320) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==320);
110769:       /* (322) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==322);
110770:       /* (326) anylist ::= */ yytestcase(yyruleno==326);
110771:       /* (327) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==327);
110772:       /* (328) anylist ::= anylist ANY */ yytestcase(yyruleno==328);
110773:         break;
110774:   };
110775:   yygoto = yyRuleInfo[yyruleno].lhs;
110776:   yysize = yyRuleInfo[yyruleno].nrhs;
110777:   yypParser->yyidx -= yysize;
110778:   yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
110779:   if( yyact < YYNSTATE ){
110780: #ifdef NDEBUG
110781:     /* If we are not debugging and the reduce action popped at least
110782:     ** one element off the stack, then we can push the new element back
110783:     ** onto the stack here, and skip the stack overflow test in yy_shift().
110784:     ** That gives a significant speed improvement. */
110785:     if( yysize ){
110786:       yypParser->yyidx++;
110787:       yymsp -= yysize-1;
110788:       yymsp->stateno = (YYACTIONTYPE)yyact;
110789:       yymsp->major = (YYCODETYPE)yygoto;
110790:       yymsp->minor = yygotominor;
110791:     }else
110792: #endif
110793:     {
110794:       yy_shift(yypParser,yyact,yygoto,&yygotominor);
110795:     }
110796:   }else{
110797:     assert( yyact == YYNSTATE + YYNRULE + 1 );
110798:     yy_accept(yypParser);
110799:   }
110800: }
110801: 
110802: /*
110803: ** The following code executes when the parse fails
110804: */
110805: #ifndef YYNOERRORRECOVERY
110806: static void yy_parse_failed(
110807:   yyParser *yypParser           /* The parser */
110808: ){
110809:   sqlite3ParserARG_FETCH;
110810: #ifndef NDEBUG
110811:   if( yyTraceFILE ){
110812:     fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
110813:   }
110814: #endif
110815:   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
110816:   /* Here code is inserted which will be executed whenever the
110817:   ** parser fails */
110818:   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
110819: }
110820: #endif /* YYNOERRORRECOVERY */
110821: 
110822: /*
110823: ** The following code executes when a syntax error first occurs.
110824: */
110825: static void yy_syntax_error(
110826:   yyParser *yypParser,           /* The parser */
110827:   int yymajor,                   /* The major type of the error token */
110828:   YYMINORTYPE yyminor            /* The minor type of the error token */
110829: ){
110830:   sqlite3ParserARG_FETCH;
110831: #define TOKEN (yyminor.yy0)
110832: 
110833:   UNUSED_PARAMETER(yymajor);  /* Silence some compiler warnings */
110834:   assert( TOKEN.z[0] );  /* The tokenizer always gives us a token */
110835:   sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
110836:   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
110837: }
110838: 
110839: /*
110840: ** The following is executed when the parser accepts
110841: */
110842: static void yy_accept(
110843:   yyParser *yypParser           /* The parser */
110844: ){
110845:   sqlite3ParserARG_FETCH;
110846: #ifndef NDEBUG
110847:   if( yyTraceFILE ){
110848:     fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
110849:   }
110850: #endif
110851:   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
110852:   /* Here code is inserted which will be executed whenever the
110853:   ** parser accepts */
110854:   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
110855: }
110856: 
110857: /* The main parser program.
110858: ** The first argument is a pointer to a structure obtained from
110859: ** "sqlite3ParserAlloc" which describes the current state of the parser.
110860: ** The second argument is the major token number.  The third is
110861: ** the minor token.  The fourth optional argument is whatever the
110862: ** user wants (and specified in the grammar) and is available for
110863: ** use by the action routines.
110864: **
110865: ** Inputs:
110866: ** <ul>
110867: ** <li> A pointer to the parser (an opaque structure.)
110868: ** <li> The major token number.
110869: ** <li> The minor token number.
110870: ** <li> An option argument of a grammar-specified type.
110871: ** </ul>
110872: **
110873: ** Outputs:
110874: ** None.
110875: */
110876: SQLITE_PRIVATE void sqlite3Parser(
110877:   void *yyp,                   /* The parser */
110878:   int yymajor,                 /* The major token code number */
110879:   sqlite3ParserTOKENTYPE yyminor       /* The value for the token */
110880:   sqlite3ParserARG_PDECL               /* Optional %extra_argument parameter */
110881: ){
110882:   YYMINORTYPE yyminorunion;
110883:   int yyact;            /* The parser action. */
110884: #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
110885:   int yyendofinput;     /* True if we are at the end of input */
110886: #endif
110887: #ifdef YYERRORSYMBOL
110888:   int yyerrorhit = 0;   /* True if yymajor has invoked an error */
110889: #endif
110890:   yyParser *yypParser;  /* The parser */
110891: 
110892:   /* (re)initialize the parser, if necessary */
110893:   yypParser = (yyParser*)yyp;
110894:   if( yypParser->yyidx<0 ){
110895: #if YYSTACKDEPTH<=0
110896:     if( yypParser->yystksz <=0 ){
110897:       /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
110898:       yyminorunion = yyzerominor;
110899:       yyStackOverflow(yypParser, &yyminorunion);
110900:       return;
110901:     }
110902: #endif
110903:     yypParser->yyidx = 0;
110904:     yypParser->yyerrcnt = -1;
110905:     yypParser->yystack[0].stateno = 0;
110906:     yypParser->yystack[0].major = 0;
110907:   }
110908:   yyminorunion.yy0 = yyminor;
110909: #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
110910:   yyendofinput = (yymajor==0);
110911: #endif
110912:   sqlite3ParserARG_STORE;
110913: 
110914: #ifndef NDEBUG
110915:   if( yyTraceFILE ){
110916:     fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
110917:   }
110918: #endif
110919: 
110920:   do{
110921:     yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
110922:     if( yyact<YYNSTATE ){
110923:       yy_shift(yypParser,yyact,yymajor,&yyminorunion);
110924:       yypParser->yyerrcnt--;
110925:       yymajor = YYNOCODE;
110926:     }else if( yyact < YYNSTATE + YYNRULE ){
110927:       yy_reduce(yypParser,yyact-YYNSTATE);
110928:     }else{
110929:       assert( yyact == YY_ERROR_ACTION );
110930: #ifdef YYERRORSYMBOL
110931:       int yymx;
110932: #endif
110933: #ifndef NDEBUG
110934:       if( yyTraceFILE ){
110935:         fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
110936:       }
110937: #endif
110938: #ifdef YYERRORSYMBOL
110939:       /* A syntax error has occurred.
110940:       ** The response to an error depends upon whether or not the
110941:       ** grammar defines an error token "ERROR".  
110942:       **
110943:       ** This is what we do if the grammar does define ERROR:
110944:       **
110945:       **  * Call the %syntax_error function.
110946:       **
110947:       **  * Begin popping the stack until we enter a state where
110948:       **    it is legal to shift the error symbol, then shift
110949:       **    the error symbol.
110950:       **
110951:       **  * Set the error count to three.
110952:       **
110953:       **  * Begin accepting and shifting new tokens.  No new error
110954:       **    processing will occur until three tokens have been
110955:       **    shifted successfully.
110956:       **
110957:       */
110958:       if( yypParser->yyerrcnt<0 ){
110959:         yy_syntax_error(yypParser,yymajor,yyminorunion);
110960:       }
110961:       yymx = yypParser->yystack[yypParser->yyidx].major;
110962:       if( yymx==YYERRORSYMBOL || yyerrorhit ){
110963: #ifndef NDEBUG
110964:         if( yyTraceFILE ){
110965:           fprintf(yyTraceFILE,"%sDiscard input token %s\n",
110966:              yyTracePrompt,yyTokenName[yymajor]);
110967:         }
110968: #endif
110969:         yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
110970:         yymajor = YYNOCODE;
110971:       }else{
110972:          while(
110973:           yypParser->yyidx >= 0 &&
110974:           yymx != YYERRORSYMBOL &&
110975:           (yyact = yy_find_reduce_action(
110976:                         yypParser->yystack[yypParser->yyidx].stateno,
110977:                         YYERRORSYMBOL)) >= YYNSTATE
110978:         ){
110979:           yy_pop_parser_stack(yypParser);
110980:         }
110981:         if( yypParser->yyidx < 0 || yymajor==0 ){
110982:           yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
110983:           yy_parse_failed(yypParser);
110984:           yymajor = YYNOCODE;
110985:         }else if( yymx!=YYERRORSYMBOL ){
110986:           YYMINORTYPE u2;
110987:           u2.YYERRSYMDT = 0;
110988:           yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
110989:         }
110990:       }
110991:       yypParser->yyerrcnt = 3;
110992:       yyerrorhit = 1;
110993: #elif defined(YYNOERRORRECOVERY)
110994:       /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
110995:       ** do any kind of error recovery.  Instead, simply invoke the syntax
110996:       ** error routine and continue going as if nothing had happened.
110997:       **
110998:       ** Applications can set this macro (for example inside %include) if
110999:       ** they intend to abandon the parse upon the first syntax error seen.
111000:       */
111001:       yy_syntax_error(yypParser,yymajor,yyminorunion);
111002:       yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
111003:       yymajor = YYNOCODE;
111004:       
111005: #else  /* YYERRORSYMBOL is not defined */
111006:       /* This is what we do if the grammar does not define ERROR:
111007:       **
111008:       **  * Report an error message, and throw away the input token.
111009:       **
111010:       **  * If the input token is $, then fail the parse.
111011:       **
111012:       ** As before, subsequent error messages are suppressed until
111013:       ** three input tokens have been successfully shifted.
111014:       */
111015:       if( yypParser->yyerrcnt<=0 ){
111016:         yy_syntax_error(yypParser,yymajor,yyminorunion);
111017:       }
111018:       yypParser->yyerrcnt = 3;
111019:       yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
111020:       if( yyendofinput ){
111021:         yy_parse_failed(yypParser);
111022:       }
111023:       yymajor = YYNOCODE;
111024: #endif
111025:     }
111026:   }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
111027:   return;
111028: }
111029: 
111030: /************** End of parse.c ***********************************************/
111031: /************** Begin file tokenize.c ****************************************/
111032: /*
111033: ** 2001 September 15
111034: **
111035: ** The author disclaims copyright to this source code.  In place of
111036: ** a legal notice, here is a blessing:
111037: **
111038: **    May you do good and not evil.
111039: **    May you find forgiveness for yourself and forgive others.
111040: **    May you share freely, never taking more than you give.
111041: **
111042: *************************************************************************
111043: ** An tokenizer for SQL
111044: **
111045: ** This file contains C code that splits an SQL input string up into
111046: ** individual tokens and sends those tokens one-by-one over to the
111047: ** parser for analysis.
111048: */
111049: /* #include <stdlib.h> */
111050: 
111051: /*
111052: ** The charMap() macro maps alphabetic characters into their
111053: ** lower-case ASCII equivalent.  On ASCII machines, this is just
111054: ** an upper-to-lower case map.  On EBCDIC machines we also need
111055: ** to adjust the encoding.  Only alphabetic characters and underscores
111056: ** need to be translated.
111057: */
111058: #ifdef SQLITE_ASCII
111059: # define charMap(X) sqlite3UpperToLower[(unsigned char)X]
111060: #endif
111061: #ifdef SQLITE_EBCDIC
111062: # define charMap(X) ebcdicToAscii[(unsigned char)X]
111063: const unsigned char ebcdicToAscii[] = {
111064: /* 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F */
111065:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 0x */
111066:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 1x */
111067:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 2x */
111068:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 3x */
111069:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 4x */
111070:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 5x */
111071:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 95,  0,  0,  /* 6x */
111072:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 7x */
111073:    0, 97, 98, 99,100,101,102,103,104,105,  0,  0,  0,  0,  0,  0,  /* 8x */
111074:    0,106,107,108,109,110,111,112,113,114,  0,  0,  0,  0,  0,  0,  /* 9x */
111075:    0,  0,115,116,117,118,119,120,121,122,  0,  0,  0,  0,  0,  0,  /* Ax */
111076:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* Bx */
111077:    0, 97, 98, 99,100,101,102,103,104,105,  0,  0,  0,  0,  0,  0,  /* Cx */
111078:    0,106,107,108,109,110,111,112,113,114,  0,  0,  0,  0,  0,  0,  /* Dx */
111079:    0,  0,115,116,117,118,119,120,121,122,  0,  0,  0,  0,  0,  0,  /* Ex */
111080:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* Fx */
111081: };
111082: #endif
111083: 
111084: /*
111085: ** The sqlite3KeywordCode function looks up an identifier to determine if
111086: ** it is a keyword.  If it is a keyword, the token code of that keyword is 
111087: ** returned.  If the input is not a keyword, TK_ID is returned.
111088: **
111089: ** The implementation of this routine was generated by a program,
111090: ** mkkeywordhash.h, located in the tool subdirectory of the distribution.
111091: ** The output of the mkkeywordhash.c program is written into a file
111092: ** named keywordhash.h and then included into this source file by
111093: ** the #include below.
111094: */
111095: /************** Include keywordhash.h in the middle of tokenize.c ************/
111096: /************** Begin file keywordhash.h *************************************/
111097: /***** This file contains automatically generated code ******
111098: **
111099: ** The code in this file has been automatically generated by
111100: **
111101: **   sqlite/tool/mkkeywordhash.c
111102: **
111103: ** The code in this file implements a function that determines whether
111104: ** or not a given identifier is really an SQL keyword.  The same thing
111105: ** might be implemented more directly using a hand-written hash table.
111106: ** But by using this automatically generated code, the size of the code
111107: ** is substantially reduced.  This is important for embedded applications
111108: ** on platforms with limited memory.
111109: */
111110: /* Hash score: 175 */
111111: static int keywordCode(const char *z, int n){
111112:   /* zText[] encodes 811 bytes of keywords in 541 bytes */
111113:   /*   REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT       */
111114:   /*   ABLEFTHENDEFERRABLELSEXCEPTRANSACTIONATURALTERAISEXCLUSIVE         */
111115:   /*   XISTSAVEPOINTERSECTRIGGEREFERENCESCONSTRAINTOFFSETEMPORARY         */
111116:   /*   UNIQUERYATTACHAVINGROUPDATEBEGINNERELEASEBETWEENOTNULLIKE          */
111117:   /*   CASCADELETECASECOLLATECREATECURRENT_DATEDETACHIMMEDIATEJOIN        */
111118:   /*   SERTMATCHPLANALYZEPRAGMABORTVALUESVIRTUALIMITWHENWHERENAME         */
111119:   /*   AFTEREPLACEANDEFAULTAUTOINCREMENTCASTCOLUMNCOMMITCONFLICTCROSS     */
111120:   /*   CURRENT_TIMESTAMPRIMARYDEFERREDISTINCTDROPFAILFROMFULLGLOBYIF      */
111121:   /*   ISNULLORDERESTRICTOUTERIGHTROLLBACKROWUNIONUSINGVACUUMVIEW         */
111122:   /*   INITIALLY                                                          */
111123:   static const char zText[540] = {
111124:     'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H',
111125:     'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G',
111126:     'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A',
111127:     'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F',
111128:     'E','R','R','A','B','L','E','L','S','E','X','C','E','P','T','R','A','N',
111129:     'S','A','C','T','I','O','N','A','T','U','R','A','L','T','E','R','A','I',
111130:     'S','E','X','C','L','U','S','I','V','E','X','I','S','T','S','A','V','E',
111131:     'P','O','I','N','T','E','R','S','E','C','T','R','I','G','G','E','R','E',
111132:     'F','E','R','E','N','C','E','S','C','O','N','S','T','R','A','I','N','T',
111133:     'O','F','F','S','E','T','E','M','P','O','R','A','R','Y','U','N','I','Q',
111134:     'U','E','R','Y','A','T','T','A','C','H','A','V','I','N','G','R','O','U',
111135:     'P','D','A','T','E','B','E','G','I','N','N','E','R','E','L','E','A','S',
111136:     'E','B','E','T','W','E','E','N','O','T','N','U','L','L','I','K','E','C',
111137:     'A','S','C','A','D','E','L','E','T','E','C','A','S','E','C','O','L','L',
111138:     'A','T','E','C','R','E','A','T','E','C','U','R','R','E','N','T','_','D',
111139:     'A','T','E','D','E','T','A','C','H','I','M','M','E','D','I','A','T','E',
111140:     'J','O','I','N','S','E','R','T','M','A','T','C','H','P','L','A','N','A',
111141:     'L','Y','Z','E','P','R','A','G','M','A','B','O','R','T','V','A','L','U',
111142:     'E','S','V','I','R','T','U','A','L','I','M','I','T','W','H','E','N','W',
111143:     'H','E','R','E','N','A','M','E','A','F','T','E','R','E','P','L','A','C',
111144:     'E','A','N','D','E','F','A','U','L','T','A','U','T','O','I','N','C','R',
111145:     'E','M','E','N','T','C','A','S','T','C','O','L','U','M','N','C','O','M',
111146:     'M','I','T','C','O','N','F','L','I','C','T','C','R','O','S','S','C','U',
111147:     'R','R','E','N','T','_','T','I','M','E','S','T','A','M','P','R','I','M',
111148:     'A','R','Y','D','E','F','E','R','R','E','D','I','S','T','I','N','C','T',
111149:     'D','R','O','P','F','A','I','L','F','R','O','M','F','U','L','L','G','L',
111150:     'O','B','Y','I','F','I','S','N','U','L','L','O','R','D','E','R','E','S',
111151:     'T','R','I','C','T','O','U','T','E','R','I','G','H','T','R','O','L','L',
111152:     'B','A','C','K','R','O','W','U','N','I','O','N','U','S','I','N','G','V',
111153:     'A','C','U','U','M','V','I','E','W','I','N','I','T','I','A','L','L','Y',
111154:   };
111155:   static const unsigned char aHash[127] = {
111156:       72, 101, 114,  70,   0,  45,   0,   0,  78,   0,  73,   0,   0,
111157:       42,  12,  74,  15,   0, 113,  81,  50, 108,   0,  19,   0,   0,
111158:      118,   0, 116, 111,   0,  22,  89,   0,   9,   0,   0,  66,  67,
111159:        0,  65,   6,   0,  48,  86,  98,   0, 115,  97,   0,   0,  44,
111160:        0,  99,  24,   0,  17,   0, 119,  49,  23,   0,   5, 106,  25,
111161:       92,   0,   0, 121, 102,  56, 120,  53,  28,  51,   0,  87,   0,
111162:       96,  26,   0,  95,   0,   0,   0,  91,  88,  93,  84, 105,  14,
111163:       39, 104,   0,  77,   0,  18,  85, 107,  32,   0, 117,  76, 109,
111164:       58,  46,  80,   0,   0,  90,  40,   0, 112,   0,  36,   0,   0,
111165:       29,   0,  82,  59,  60,   0,  20,  57,   0,  52,
111166:   };
111167:   static const unsigned char aNext[121] = {
111168:        0,   0,   0,   0,   4,   0,   0,   0,   0,   0,   0,   0,   0,
111169:        0,   2,   0,   0,   0,   0,   0,   0,  13,   0,   0,   0,   0,
111170:        0,   7,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
111171:        0,   0,   0,   0,  33,   0,  21,   0,   0,   0,  43,   3,  47,
111172:        0,   0,   0,   0,  30,   0,  54,   0,  38,   0,   0,   0,   1,
111173:       62,   0,   0,  63,   0,  41,   0,   0,   0,   0,   0,   0,   0,
111174:       61,   0,   0,   0,   0,  31,  55,  16,  34,  10,   0,   0,   0,
111175:        0,   0,   0,   0,  11,  68,  75,   0,   8,   0, 100,  94,   0,
111176:      103,   0,  83,   0,  71,   0,   0, 110,  27,  37,  69,  79,   0,
111177:       35,  64,   0,   0,
111178:   };
111179:   static const unsigned char aLen[121] = {
111180:        7,   7,   5,   4,   6,   4,   5,   3,   6,   7,   3,   6,   6,
111181:        7,   7,   3,   8,   2,   6,   5,   4,   4,   3,  10,   4,   6,
111182:       11,   6,   2,   7,   5,   5,   9,   6,   9,   9,   7,  10,  10,
111183:        4,   6,   2,   3,   9,   4,   2,   6,   5,   6,   6,   5,   6,
111184:        5,   5,   7,   7,   7,   3,   2,   4,   4,   7,   3,   6,   4,
111185:        7,   6,  12,   6,   9,   4,   6,   5,   4,   7,   6,   5,   6,
111186:        7,   5,   4,   5,   6,   5,   7,   3,   7,  13,   2,   2,   4,
111187:        6,   6,   8,   5,  17,  12,   7,   8,   8,   2,   4,   4,   4,
111188:        4,   4,   2,   2,   6,   5,   8,   5,   5,   8,   3,   5,   5,
111189:        6,   4,   9,   3,
111190:   };
111191:   static const unsigned short int aOffset[121] = {
111192:        0,   2,   2,   8,   9,  14,  16,  20,  23,  25,  25,  29,  33,
111193:       36,  41,  46,  48,  53,  54,  59,  62,  65,  67,  69,  78,  81,
111194:       86,  91,  95,  96, 101, 105, 109, 117, 122, 128, 136, 142, 152,
111195:      159, 162, 162, 165, 167, 167, 171, 176, 179, 184, 189, 194, 197,
111196:      203, 206, 210, 217, 223, 223, 223, 226, 229, 233, 234, 238, 244,
111197:      248, 255, 261, 273, 279, 288, 290, 296, 301, 303, 310, 315, 320,
111198:      326, 332, 337, 341, 344, 350, 354, 361, 363, 370, 372, 374, 383,
111199:      387, 393, 399, 407, 412, 412, 428, 435, 442, 443, 450, 454, 458,
111200:      462, 466, 469, 471, 473, 479, 483, 491, 495, 500, 508, 511, 516,
111201:      521, 527, 531, 536,
111202:   };
111203:   static const unsigned char aCode[121] = {
111204:     TK_REINDEX,    TK_INDEXED,    TK_INDEX,      TK_DESC,       TK_ESCAPE,     
111205:     TK_EACH,       TK_CHECK,      TK_KEY,        TK_BEFORE,     TK_FOREIGN,    
111206:     TK_FOR,        TK_IGNORE,     TK_LIKE_KW,    TK_EXPLAIN,    TK_INSTEAD,    
111207:     TK_ADD,        TK_DATABASE,   TK_AS,         TK_SELECT,     TK_TABLE,      
111208:     TK_JOIN_KW,    TK_THEN,       TK_END,        TK_DEFERRABLE, TK_ELSE,       
111209:     TK_EXCEPT,     TK_TRANSACTION,TK_ACTION,     TK_ON,         TK_JOIN_KW,    
111210:     TK_ALTER,      TK_RAISE,      TK_EXCLUSIVE,  TK_EXISTS,     TK_SAVEPOINT,  
111211:     TK_INTERSECT,  TK_TRIGGER,    TK_REFERENCES, TK_CONSTRAINT, TK_INTO,       
111212:     TK_OFFSET,     TK_OF,         TK_SET,        TK_TEMP,       TK_TEMP,       
111213:     TK_OR,         TK_UNIQUE,     TK_QUERY,      TK_ATTACH,     TK_HAVING,     
111214:     TK_GROUP,      TK_UPDATE,     TK_BEGIN,      TK_JOIN_KW,    TK_RELEASE,    
111215:     TK_BETWEEN,    TK_NOTNULL,    TK_NOT,        TK_NO,         TK_NULL,       
111216:     TK_LIKE_KW,    TK_CASCADE,    TK_ASC,        TK_DELETE,     TK_CASE,       
111217:     TK_COLLATE,    TK_CREATE,     TK_CTIME_KW,   TK_DETACH,     TK_IMMEDIATE,  
111218:     TK_JOIN,       TK_INSERT,     TK_MATCH,      TK_PLAN,       TK_ANALYZE,    
111219:     TK_PRAGMA,     TK_ABORT,      TK_VALUES,     TK_VIRTUAL,    TK_LIMIT,      
111220:     TK_WHEN,       TK_WHERE,      TK_RENAME,     TK_AFTER,      TK_REPLACE,    
111221:     TK_AND,        TK_DEFAULT,    TK_AUTOINCR,   TK_TO,         TK_IN,         
111222:     TK_CAST,       TK_COLUMNKW,   TK_COMMIT,     TK_CONFLICT,   TK_JOIN_KW,    
111223:     TK_CTIME_KW,   TK_CTIME_KW,   TK_PRIMARY,    TK_DEFERRED,   TK_DISTINCT,   
111224:     TK_IS,         TK_DROP,       TK_FAIL,       TK_FROM,       TK_JOIN_KW,    
111225:     TK_LIKE_KW,    TK_BY,         TK_IF,         TK_ISNULL,     TK_ORDER,      
111226:     TK_RESTRICT,   TK_JOIN_KW,    TK_JOIN_KW,    TK_ROLLBACK,   TK_ROW,        
111227:     TK_UNION,      TK_USING,      TK_VACUUM,     TK_VIEW,       TK_INITIALLY,  
111228:     TK_ALL,        
111229:   };
111230:   int h, i;
111231:   if( n<2 ) return TK_ID;
111232:   h = ((charMap(z[0])*4) ^
111233:       (charMap(z[n-1])*3) ^
111234:       n) % 127;
111235:   for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){
111236:     if( aLen[i]==n && sqlite3StrNICmp(&zText[aOffset[i]],z,n)==0 ){
111237:       testcase( i==0 ); /* REINDEX */
111238:       testcase( i==1 ); /* INDEXED */
111239:       testcase( i==2 ); /* INDEX */
111240:       testcase( i==3 ); /* DESC */
111241:       testcase( i==4 ); /* ESCAPE */
111242:       testcase( i==5 ); /* EACH */
111243:       testcase( i==6 ); /* CHECK */
111244:       testcase( i==7 ); /* KEY */
111245:       testcase( i==8 ); /* BEFORE */
111246:       testcase( i==9 ); /* FOREIGN */
111247:       testcase( i==10 ); /* FOR */
111248:       testcase( i==11 ); /* IGNORE */
111249:       testcase( i==12 ); /* REGEXP */
111250:       testcase( i==13 ); /* EXPLAIN */
111251:       testcase( i==14 ); /* INSTEAD */
111252:       testcase( i==15 ); /* ADD */
111253:       testcase( i==16 ); /* DATABASE */
111254:       testcase( i==17 ); /* AS */
111255:       testcase( i==18 ); /* SELECT */
111256:       testcase( i==19 ); /* TABLE */
111257:       testcase( i==20 ); /* LEFT */
111258:       testcase( i==21 ); /* THEN */
111259:       testcase( i==22 ); /* END */
111260:       testcase( i==23 ); /* DEFERRABLE */
111261:       testcase( i==24 ); /* ELSE */
111262:       testcase( i==25 ); /* EXCEPT */
111263:       testcase( i==26 ); /* TRANSACTION */
111264:       testcase( i==27 ); /* ACTION */
111265:       testcase( i==28 ); /* ON */
111266:       testcase( i==29 ); /* NATURAL */
111267:       testcase( i==30 ); /* ALTER */
111268:       testcase( i==31 ); /* RAISE */
111269:       testcase( i==32 ); /* EXCLUSIVE */
111270:       testcase( i==33 ); /* EXISTS */
111271:       testcase( i==34 ); /* SAVEPOINT */
111272:       testcase( i==35 ); /* INTERSECT */
111273:       testcase( i==36 ); /* TRIGGER */
111274:       testcase( i==37 ); /* REFERENCES */
111275:       testcase( i==38 ); /* CONSTRAINT */
111276:       testcase( i==39 ); /* INTO */
111277:       testcase( i==40 ); /* OFFSET */
111278:       testcase( i==41 ); /* OF */
111279:       testcase( i==42 ); /* SET */
111280:       testcase( i==43 ); /* TEMPORARY */
111281:       testcase( i==44 ); /* TEMP */
111282:       testcase( i==45 ); /* OR */
111283:       testcase( i==46 ); /* UNIQUE */
111284:       testcase( i==47 ); /* QUERY */
111285:       testcase( i==48 ); /* ATTACH */
111286:       testcase( i==49 ); /* HAVING */
111287:       testcase( i==50 ); /* GROUP */
111288:       testcase( i==51 ); /* UPDATE */
111289:       testcase( i==52 ); /* BEGIN */
111290:       testcase( i==53 ); /* INNER */
111291:       testcase( i==54 ); /* RELEASE */
111292:       testcase( i==55 ); /* BETWEEN */
111293:       testcase( i==56 ); /* NOTNULL */
111294:       testcase( i==57 ); /* NOT */
111295:       testcase( i==58 ); /* NO */
111296:       testcase( i==59 ); /* NULL */
111297:       testcase( i==60 ); /* LIKE */
111298:       testcase( i==61 ); /* CASCADE */
111299:       testcase( i==62 ); /* ASC */
111300:       testcase( i==63 ); /* DELETE */
111301:       testcase( i==64 ); /* CASE */
111302:       testcase( i==65 ); /* COLLATE */
111303:       testcase( i==66 ); /* CREATE */
111304:       testcase( i==67 ); /* CURRENT_DATE */
111305:       testcase( i==68 ); /* DETACH */
111306:       testcase( i==69 ); /* IMMEDIATE */
111307:       testcase( i==70 ); /* JOIN */
111308:       testcase( i==71 ); /* INSERT */
111309:       testcase( i==72 ); /* MATCH */
111310:       testcase( i==73 ); /* PLAN */
111311:       testcase( i==74 ); /* ANALYZE */
111312:       testcase( i==75 ); /* PRAGMA */
111313:       testcase( i==76 ); /* ABORT */
111314:       testcase( i==77 ); /* VALUES */
111315:       testcase( i==78 ); /* VIRTUAL */
111316:       testcase( i==79 ); /* LIMIT */
111317:       testcase( i==80 ); /* WHEN */
111318:       testcase( i==81 ); /* WHERE */
111319:       testcase( i==82 ); /* RENAME */
111320:       testcase( i==83 ); /* AFTER */
111321:       testcase( i==84 ); /* REPLACE */
111322:       testcase( i==85 ); /* AND */
111323:       testcase( i==86 ); /* DEFAULT */
111324:       testcase( i==87 ); /* AUTOINCREMENT */
111325:       testcase( i==88 ); /* TO */
111326:       testcase( i==89 ); /* IN */
111327:       testcase( i==90 ); /* CAST */
111328:       testcase( i==91 ); /* COLUMN */
111329:       testcase( i==92 ); /* COMMIT */
111330:       testcase( i==93 ); /* CONFLICT */
111331:       testcase( i==94 ); /* CROSS */
111332:       testcase( i==95 ); /* CURRENT_TIMESTAMP */
111333:       testcase( i==96 ); /* CURRENT_TIME */
111334:       testcase( i==97 ); /* PRIMARY */
111335:       testcase( i==98 ); /* DEFERRED */
111336:       testcase( i==99 ); /* DISTINCT */
111337:       testcase( i==100 ); /* IS */
111338:       testcase( i==101 ); /* DROP */
111339:       testcase( i==102 ); /* FAIL */
111340:       testcase( i==103 ); /* FROM */
111341:       testcase( i==104 ); /* FULL */
111342:       testcase( i==105 ); /* GLOB */
111343:       testcase( i==106 ); /* BY */
111344:       testcase( i==107 ); /* IF */
111345:       testcase( i==108 ); /* ISNULL */
111346:       testcase( i==109 ); /* ORDER */
111347:       testcase( i==110 ); /* RESTRICT */
111348:       testcase( i==111 ); /* OUTER */
111349:       testcase( i==112 ); /* RIGHT */
111350:       testcase( i==113 ); /* ROLLBACK */
111351:       testcase( i==114 ); /* ROW */
111352:       testcase( i==115 ); /* UNION */
111353:       testcase( i==116 ); /* USING */
111354:       testcase( i==117 ); /* VACUUM */
111355:       testcase( i==118 ); /* VIEW */
111356:       testcase( i==119 ); /* INITIALLY */
111357:       testcase( i==120 ); /* ALL */
111358:       return aCode[i];
111359:     }
111360:   }
111361:   return TK_ID;
111362: }
111363: SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char *z, int n){
111364:   return keywordCode((char*)z, n);
111365: }
111366: #define SQLITE_N_KEYWORD 121
111367: 
111368: /************** End of keywordhash.h *****************************************/
111369: /************** Continuing where we left off in tokenize.c *******************/
111370: 
111371: 
111372: /*
111373: ** If X is a character that can be used in an identifier then
111374: ** IdChar(X) will be true.  Otherwise it is false.
111375: **
111376: ** For ASCII, any character with the high-order bit set is
111377: ** allowed in an identifier.  For 7-bit characters, 
111378: ** sqlite3IsIdChar[X] must be 1.
111379: **
111380: ** For EBCDIC, the rules are more complex but have the same
111381: ** end result.
111382: **
111383: ** Ticket #1066.  the SQL standard does not allow '$' in the
111384: ** middle of identfiers.  But many SQL implementations do. 
111385: ** SQLite will allow '$' in identifiers for compatibility.
111386: ** But the feature is undocumented.
111387: */
111388: #ifdef SQLITE_ASCII
111389: #define IdChar(C)  ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0)
111390: #endif
111391: #ifdef SQLITE_EBCDIC
111392: SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[] = {
111393: /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
111394:     0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 4x */
111395:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0,  /* 5x */
111396:     0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0,  /* 6x */
111397:     0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,  /* 7x */
111398:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0,  /* 8x */
111399:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0,  /* 9x */
111400:     1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0,  /* Ax */
111401:     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* Bx */
111402:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Cx */
111403:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Dx */
111404:     0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Ex */
111405:     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,  /* Fx */
111406: };
111407: #define IdChar(C)  (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40]))
111408: #endif
111409: 
111410: 
111411: /*
111412: ** Return the length of the token that begins at z[0]. 
111413: ** Store the token type in *tokenType before returning.
111414: */
111415: SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){
111416:   int i, c;
111417:   switch( *z ){
111418:     case ' ': case '\t': case '\n': case '\f': case '\r': {
111419:       testcase( z[0]==' ' );
111420:       testcase( z[0]=='\t' );
111421:       testcase( z[0]=='\n' );
111422:       testcase( z[0]=='\f' );
111423:       testcase( z[0]=='\r' );
111424:       for(i=1; sqlite3Isspace(z[i]); i++){}
111425:       *tokenType = TK_SPACE;
111426:       return i;
111427:     }
111428:     case '-': {
111429:       if( z[1]=='-' ){
111430:         /* IMP: R-50417-27976 -- syntax diagram for comments */
111431:         for(i=2; (c=z[i])!=0 && c!='\n'; i++){}
111432:         *tokenType = TK_SPACE;   /* IMP: R-22934-25134 */
111433:         return i;
111434:       }
111435:       *tokenType = TK_MINUS;
111436:       return 1;
111437:     }
111438:     case '(': {
111439:       *tokenType = TK_LP;
111440:       return 1;
111441:     }
111442:     case ')': {
111443:       *tokenType = TK_RP;
111444:       return 1;
111445:     }
111446:     case ';': {
111447:       *tokenType = TK_SEMI;
111448:       return 1;
111449:     }
111450:     case '+': {
111451:       *tokenType = TK_PLUS;
111452:       return 1;
111453:     }
111454:     case '*': {
111455:       *tokenType = TK_STAR;
111456:       return 1;
111457:     }
111458:     case '/': {
111459:       if( z[1]!='*' || z[2]==0 ){
111460:         *tokenType = TK_SLASH;
111461:         return 1;
111462:       }
111463:       /* IMP: R-50417-27976 -- syntax diagram for comments */
111464:       for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){}
111465:       if( c ) i++;
111466:       *tokenType = TK_SPACE;   /* IMP: R-22934-25134 */
111467:       return i;
111468:     }
111469:     case '%': {
111470:       *tokenType = TK_REM;
111471:       return 1;
111472:     }
111473:     case '=': {
111474:       *tokenType = TK_EQ;
111475:       return 1 + (z[1]=='=');
111476:     }
111477:     case '<': {
111478:       if( (c=z[1])=='=' ){
111479:         *tokenType = TK_LE;
111480:         return 2;
111481:       }else if( c=='>' ){
111482:         *tokenType = TK_NE;
111483:         return 2;
111484:       }else if( c=='<' ){
111485:         *tokenType = TK_LSHIFT;
111486:         return 2;
111487:       }else{
111488:         *tokenType = TK_LT;
111489:         return 1;
111490:       }
111491:     }
111492:     case '>': {
111493:       if( (c=z[1])=='=' ){
111494:         *tokenType = TK_GE;
111495:         return 2;
111496:       }else if( c=='>' ){
111497:         *tokenType = TK_RSHIFT;
111498:         return 2;
111499:       }else{
111500:         *tokenType = TK_GT;
111501:         return 1;
111502:       }
111503:     }
111504:     case '!': {
111505:       if( z[1]!='=' ){
111506:         *tokenType = TK_ILLEGAL;
111507:         return 2;
111508:       }else{
111509:         *tokenType = TK_NE;
111510:         return 2;
111511:       }
111512:     }
111513:     case '|': {
111514:       if( z[1]!='|' ){
111515:         *tokenType = TK_BITOR;
111516:         return 1;
111517:       }else{
111518:         *tokenType = TK_CONCAT;
111519:         return 2;
111520:       }
111521:     }
111522:     case ',': {
111523:       *tokenType = TK_COMMA;
111524:       return 1;
111525:     }
111526:     case '&': {
111527:       *tokenType = TK_BITAND;
111528:       return 1;
111529:     }
111530:     case '~': {
111531:       *tokenType = TK_BITNOT;
111532:       return 1;
111533:     }
111534:     case '`':
111535:     case '\'':
111536:     case '"': {
111537:       int delim = z[0];
111538:       testcase( delim=='`' );
111539:       testcase( delim=='\'' );
111540:       testcase( delim=='"' );
111541:       for(i=1; (c=z[i])!=0; i++){
111542:         if( c==delim ){
111543:           if( z[i+1]==delim ){
111544:             i++;
111545:           }else{
111546:             break;
111547:           }
111548:         }
111549:       }
111550:       if( c=='\'' ){
111551:         *tokenType = TK_STRING;
111552:         return i+1;
111553:       }else if( c!=0 ){
111554:         *tokenType = TK_ID;
111555:         return i+1;
111556:       }else{
111557:         *tokenType = TK_ILLEGAL;
111558:         return i;
111559:       }
111560:     }
111561:     case '.': {
111562: #ifndef SQLITE_OMIT_FLOATING_POINT
111563:       if( !sqlite3Isdigit(z[1]) )
111564: #endif
111565:       {
111566:         *tokenType = TK_DOT;
111567:         return 1;
111568:       }
111569:       /* If the next character is a digit, this is a floating point
111570:       ** number that begins with ".".  Fall thru into the next case */
111571:     }
111572:     case '0': case '1': case '2': case '3': case '4':
111573:     case '5': case '6': case '7': case '8': case '9': {
111574:       testcase( z[0]=='0' );  testcase( z[0]=='1' );  testcase( z[0]=='2' );
111575:       testcase( z[0]=='3' );  testcase( z[0]=='4' );  testcase( z[0]=='5' );
111576:       testcase( z[0]=='6' );  testcase( z[0]=='7' );  testcase( z[0]=='8' );
111577:       testcase( z[0]=='9' );
111578:       *tokenType = TK_INTEGER;
111579:       for(i=0; sqlite3Isdigit(z[i]); i++){}
111580: #ifndef SQLITE_OMIT_FLOATING_POINT
111581:       if( z[i]=='.' ){
111582:         i++;
111583:         while( sqlite3Isdigit(z[i]) ){ i++; }
111584:         *tokenType = TK_FLOAT;
111585:       }
111586:       if( (z[i]=='e' || z[i]=='E') &&
111587:            ( sqlite3Isdigit(z[i+1]) 
111588:             || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
111589:            )
111590:       ){
111591:         i += 2;
111592:         while( sqlite3Isdigit(z[i]) ){ i++; }
111593:         *tokenType = TK_FLOAT;
111594:       }
111595: #endif
111596:       while( IdChar(z[i]) ){
111597:         *tokenType = TK_ILLEGAL;
111598:         i++;
111599:       }
111600:       return i;
111601:     }
111602:     case '[': {
111603:       for(i=1, c=z[0]; c!=']' && (c=z[i])!=0; i++){}
111604:       *tokenType = c==']' ? TK_ID : TK_ILLEGAL;
111605:       return i;
111606:     }
111607:     case '?': {
111608:       *tokenType = TK_VARIABLE;
111609:       for(i=1; sqlite3Isdigit(z[i]); i++){}
111610:       return i;
111611:     }
111612:     case '#': {
111613:       for(i=1; sqlite3Isdigit(z[i]); i++){}
111614:       if( i>1 ){
111615:         /* Parameters of the form #NNN (where NNN is a number) are used
111616:         ** internally by sqlite3NestedParse.  */
111617:         *tokenType = TK_REGISTER;
111618:         return i;
111619:       }
111620:       /* Fall through into the next case if the '#' is not followed by
111621:       ** a digit. Try to match #AAAA where AAAA is a parameter name. */
111622:     }
111623: #ifndef SQLITE_OMIT_TCL_VARIABLE
111624:     case '$':
111625: #endif
111626:     case '@':  /* For compatibility with MS SQL Server */
111627:     case ':': {
111628:       int n = 0;
111629:       testcase( z[0]=='$' );  testcase( z[0]=='@' );  testcase( z[0]==':' );
111630:       *tokenType = TK_VARIABLE;
111631:       for(i=1; (c=z[i])!=0; i++){
111632:         if( IdChar(c) ){
111633:           n++;
111634: #ifndef SQLITE_OMIT_TCL_VARIABLE
111635:         }else if( c=='(' && n>0 ){
111636:           do{
111637:             i++;
111638:           }while( (c=z[i])!=0 && !sqlite3Isspace(c) && c!=')' );
111639:           if( c==')' ){
111640:             i++;
111641:           }else{
111642:             *tokenType = TK_ILLEGAL;
111643:           }
111644:           break;
111645:         }else if( c==':' && z[i+1]==':' ){
111646:           i++;
111647: #endif
111648:         }else{
111649:           break;
111650:         }
111651:       }
111652:       if( n==0 ) *tokenType = TK_ILLEGAL;
111653:       return i;
111654:     }
111655: #ifndef SQLITE_OMIT_BLOB_LITERAL
111656:     case 'x': case 'X': {
111657:       testcase( z[0]=='x' ); testcase( z[0]=='X' );
111658:       if( z[1]=='\'' ){
111659:         *tokenType = TK_BLOB;
111660:         for(i=2; sqlite3Isxdigit(z[i]); i++){}
111661:         if( z[i]!='\'' || i%2 ){
111662:           *tokenType = TK_ILLEGAL;
111663:           while( z[i] && z[i]!='\'' ){ i++; }
111664:         }
111665:         if( z[i] ) i++;
111666:         return i;
111667:       }
111668:       /* Otherwise fall through to the next case */
111669:     }
111670: #endif
111671:     default: {
111672:       if( !IdChar(*z) ){
111673:         break;
111674:       }
111675:       for(i=1; IdChar(z[i]); i++){}
111676:       *tokenType = keywordCode((char*)z, i);
111677:       return i;
111678:     }
111679:   }
111680:   *tokenType = TK_ILLEGAL;
111681:   return 1;
111682: }
111683: 
111684: /*
111685: ** Run the parser on the given SQL string.  The parser structure is
111686: ** passed in.  An SQLITE_ status code is returned.  If an error occurs
111687: ** then an and attempt is made to write an error message into 
111688: ** memory obtained from sqlite3_malloc() and to make *pzErrMsg point to that
111689: ** error message.
111690: */
111691: SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){
111692:   int nErr = 0;                   /* Number of errors encountered */
111693:   int i;                          /* Loop counter */
111694:   void *pEngine;                  /* The LEMON-generated LALR(1) parser */
111695:   int tokenType;                  /* type of the next token */
111696:   int lastTokenParsed = -1;       /* type of the previous token */
111697:   u8 enableLookaside;             /* Saved value of db->lookaside.bEnabled */
111698:   sqlite3 *db = pParse->db;       /* The database connection */
111699:   int mxSqlLen;                   /* Max length of an SQL string */
111700: 
111701: 
111702:   mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
111703:   if( db->activeVdbeCnt==0 ){
111704:     db->u1.isInterrupted = 0;
111705:   }
111706:   pParse->rc = SQLITE_OK;
111707:   pParse->zTail = zSql;
111708:   i = 0;
111709:   assert( pzErrMsg!=0 );
111710:   pEngine = sqlite3ParserAlloc((void*(*)(size_t))sqlite3Malloc);
111711:   if( pEngine==0 ){
111712:     db->mallocFailed = 1;
111713:     return SQLITE_NOMEM;
111714:   }
111715:   assert( pParse->pNewTable==0 );
111716:   assert( pParse->pNewTrigger==0 );
111717:   assert( pParse->nVar==0 );
111718:   assert( pParse->nzVar==0 );
111719:   assert( pParse->azVar==0 );
111720:   enableLookaside = db->lookaside.bEnabled;
111721:   if( db->lookaside.pStart ) db->lookaside.bEnabled = 1;
111722:   while( !db->mallocFailed && zSql[i]!=0 ){
111723:     assert( i>=0 );
111724:     pParse->sLastToken.z = &zSql[i];
111725:     pParse->sLastToken.n = sqlite3GetToken((unsigned char*)&zSql[i],&tokenType);
111726:     i += pParse->sLastToken.n;
111727:     if( i>mxSqlLen ){
111728:       pParse->rc = SQLITE_TOOBIG;
111729:       break;
111730:     }
111731:     switch( tokenType ){
111732:       case TK_SPACE: {
111733:         if( db->u1.isInterrupted ){
111734:           sqlite3ErrorMsg(pParse, "interrupt");
111735:           pParse->rc = SQLITE_INTERRUPT;
111736:           goto abort_parse;
111737:         }
111738:         break;
111739:       }
111740:       case TK_ILLEGAL: {
111741:         sqlite3DbFree(db, *pzErrMsg);
111742:         *pzErrMsg = sqlite3MPrintf(db, "unrecognized token: \"%T\"",
111743:                         &pParse->sLastToken);
111744:         nErr++;
111745:         goto abort_parse;
111746:       }
111747:       case TK_SEMI: {
111748:         pParse->zTail = &zSql[i];
111749:         /* Fall thru into the default case */
111750:       }
111751:       default: {
111752:         sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);
111753:         lastTokenParsed = tokenType;
111754:         if( pParse->rc!=SQLITE_OK ){
111755:           goto abort_parse;
111756:         }
111757:         break;
111758:       }
111759:     }
111760:   }
111761: abort_parse:
111762:   if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){
111763:     if( lastTokenParsed!=TK_SEMI ){
111764:       sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);
111765:       pParse->zTail = &zSql[i];
111766:     }
111767:     sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);
111768:   }
111769: #ifdef YYTRACKMAXSTACKDEPTH
111770:   sqlite3StatusSet(SQLITE_STATUS_PARSER_STACK,
111771:       sqlite3ParserStackPeak(pEngine)
111772:   );
111773: #endif /* YYDEBUG */
111774:   sqlite3ParserFree(pEngine, sqlite3_free);
111775:   db->lookaside.bEnabled = enableLookaside;
111776:   if( db->mallocFailed ){
111777:     pParse->rc = SQLITE_NOMEM;
111778:   }
111779:   if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){
111780:     sqlite3SetString(&pParse->zErrMsg, db, "%s", sqlite3ErrStr(pParse->rc));
111781:   }
111782:   assert( pzErrMsg!=0 );
111783:   if( pParse->zErrMsg ){
111784:     *pzErrMsg = pParse->zErrMsg;
111785:     sqlite3_log(pParse->rc, "%s", *pzErrMsg);
111786:     pParse->zErrMsg = 0;
111787:     nErr++;
111788:   }
111789:   if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){
111790:     sqlite3VdbeDelete(pParse->pVdbe);
111791:     pParse->pVdbe = 0;
111792:   }
111793: #ifndef SQLITE_OMIT_SHARED_CACHE
111794:   if( pParse->nested==0 ){
111795:     sqlite3DbFree(db, pParse->aTableLock);
111796:     pParse->aTableLock = 0;
111797:     pParse->nTableLock = 0;
111798:   }
111799: #endif
111800: #ifndef SQLITE_OMIT_VIRTUALTABLE
111801:   sqlite3_free(pParse->apVtabLock);
111802: #endif
111803: 
111804:   if( !IN_DECLARE_VTAB ){
111805:     /* If the pParse->declareVtab flag is set, do not delete any table 
111806:     ** structure built up in pParse->pNewTable. The calling code (see vtab.c)
111807:     ** will take responsibility for freeing the Table structure.
111808:     */
111809:     sqlite3DeleteTable(db, pParse->pNewTable);
111810:   }
111811: 
111812:   sqlite3DeleteTrigger(db, pParse->pNewTrigger);
111813:   for(i=pParse->nzVar-1; i>=0; i--) sqlite3DbFree(db, pParse->azVar[i]);
111814:   sqlite3DbFree(db, pParse->azVar);
111815:   sqlite3DbFree(db, pParse->aAlias);
111816:   while( pParse->pAinc ){
111817:     AutoincInfo *p = pParse->pAinc;
111818:     pParse->pAinc = p->pNext;
111819:     sqlite3DbFree(db, p);
111820:   }
111821:   while( pParse->pZombieTab ){
111822:     Table *p = pParse->pZombieTab;
111823:     pParse->pZombieTab = p->pNextZombie;
111824:     sqlite3DeleteTable(db, p);
111825:   }
111826:   if( nErr>0 && pParse->rc==SQLITE_OK ){
111827:     pParse->rc = SQLITE_ERROR;
111828:   }
111829:   return nErr;
111830: }
111831: 
111832: /************** End of tokenize.c ********************************************/
111833: /************** Begin file complete.c ****************************************/
111834: /*
111835: ** 2001 September 15
111836: **
111837: ** The author disclaims copyright to this source code.  In place of
111838: ** a legal notice, here is a blessing:
111839: **
111840: **    May you do good and not evil.
111841: **    May you find forgiveness for yourself and forgive others.
111842: **    May you share freely, never taking more than you give.
111843: **
111844: *************************************************************************
111845: ** An tokenizer for SQL
111846: **
111847: ** This file contains C code that implements the sqlite3_complete() API.
111848: ** This code used to be part of the tokenizer.c source file.  But by
111849: ** separating it out, the code will be automatically omitted from
111850: ** static links that do not use it.
111851: */
111852: #ifndef SQLITE_OMIT_COMPLETE
111853: 
111854: /*
111855: ** This is defined in tokenize.c.  We just have to import the definition.
111856: */
111857: #ifndef SQLITE_AMALGAMATION
111858: #ifdef SQLITE_ASCII
111859: #define IdChar(C)  ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0)
111860: #endif
111861: #ifdef SQLITE_EBCDIC
111862: SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[];
111863: #define IdChar(C)  (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40]))
111864: #endif
111865: #endif /* SQLITE_AMALGAMATION */
111866: 
111867: 
111868: /*
111869: ** Token types used by the sqlite3_complete() routine.  See the header
111870: ** comments on that procedure for additional information.
111871: */
111872: #define tkSEMI    0
111873: #define tkWS      1
111874: #define tkOTHER   2
111875: #ifndef SQLITE_OMIT_TRIGGER
111876: #define tkEXPLAIN 3
111877: #define tkCREATE  4
111878: #define tkTEMP    5
111879: #define tkTRIGGER 6
111880: #define tkEND     7
111881: #endif
111882: 
111883: /*
111884: ** Return TRUE if the given SQL string ends in a semicolon.
111885: **
111886: ** Special handling is require for CREATE TRIGGER statements.
111887: ** Whenever the CREATE TRIGGER keywords are seen, the statement
111888: ** must end with ";END;".
111889: **
111890: ** This implementation uses a state machine with 8 states:
111891: **
111892: **   (0) INVALID   We have not yet seen a non-whitespace character.
111893: **
111894: **   (1) START     At the beginning or end of an SQL statement.  This routine
111895: **                 returns 1 if it ends in the START state and 0 if it ends
111896: **                 in any other state.
111897: **
111898: **   (2) NORMAL    We are in the middle of statement which ends with a single
111899: **                 semicolon.
111900: **
111901: **   (3) EXPLAIN   The keyword EXPLAIN has been seen at the beginning of 
111902: **                 a statement.
111903: **
111904: **   (4) CREATE    The keyword CREATE has been seen at the beginning of a
111905: **                 statement, possibly preceeded by EXPLAIN and/or followed by
111906: **                 TEMP or TEMPORARY
111907: **
111908: **   (5) TRIGGER   We are in the middle of a trigger definition that must be
111909: **                 ended by a semicolon, the keyword END, and another semicolon.
111910: **
111911: **   (6) SEMI      We've seen the first semicolon in the ";END;" that occurs at
111912: **                 the end of a trigger definition.
111913: **
111914: **   (7) END       We've seen the ";END" of the ";END;" that occurs at the end
111915: **                 of a trigger difinition.
111916: **
111917: ** Transitions between states above are determined by tokens extracted
111918: ** from the input.  The following tokens are significant:
111919: **
111920: **   (0) tkSEMI      A semicolon.
111921: **   (1) tkWS        Whitespace.
111922: **   (2) tkOTHER     Any other SQL token.
111923: **   (3) tkEXPLAIN   The "explain" keyword.
111924: **   (4) tkCREATE    The "create" keyword.
111925: **   (5) tkTEMP      The "temp" or "temporary" keyword.
111926: **   (6) tkTRIGGER   The "trigger" keyword.
111927: **   (7) tkEND       The "end" keyword.
111928: **
111929: ** Whitespace never causes a state transition and is always ignored.
111930: ** This means that a SQL string of all whitespace is invalid.
111931: **
111932: ** If we compile with SQLITE_OMIT_TRIGGER, all of the computation needed
111933: ** to recognize the end of a trigger can be omitted.  All we have to do
111934: ** is look for a semicolon that is not part of an string or comment.
111935: */
111936: SQLITE_API int sqlite3_complete(const char *zSql){
111937:   u8 state = 0;   /* Current state, using numbers defined in header comment */
111938:   u8 token;       /* Value of the next token */
111939: 
111940: #ifndef SQLITE_OMIT_TRIGGER
111941:   /* A complex statement machine used to detect the end of a CREATE TRIGGER
111942:   ** statement.  This is the normal case.
111943:   */
111944:   static const u8 trans[8][8] = {
111945:                      /* Token:                                                */
111946:      /* State:       **  SEMI  WS  OTHER  EXPLAIN  CREATE  TEMP  TRIGGER  END */
111947:      /* 0 INVALID: */ {    1,  0,     2,       3,      4,    2,       2,   2, },
111948:      /* 1   START: */ {    1,  1,     2,       3,      4,    2,       2,   2, },
111949:      /* 2  NORMAL: */ {    1,  2,     2,       2,      2,    2,       2,   2, },
111950:      /* 3 EXPLAIN: */ {    1,  3,     3,       2,      4,    2,       2,   2, },
111951:      /* 4  CREATE: */ {    1,  4,     2,       2,      2,    4,       5,   2, },
111952:      /* 5 TRIGGER: */ {    6,  5,     5,       5,      5,    5,       5,   5, },
111953:      /* 6    SEMI: */ {    6,  6,     5,       5,      5,    5,       5,   7, },
111954:      /* 7     END: */ {    1,  7,     5,       5,      5,    5,       5,   5, },
111955:   };
111956: #else
111957:   /* If triggers are not supported by this compile then the statement machine
111958:   ** used to detect the end of a statement is much simplier
111959:   */
111960:   static const u8 trans[3][3] = {
111961:                      /* Token:           */
111962:      /* State:       **  SEMI  WS  OTHER */
111963:      /* 0 INVALID: */ {    1,  0,     2, },
111964:      /* 1   START: */ {    1,  1,     2, },
111965:      /* 2  NORMAL: */ {    1,  2,     2, },
111966:   };
111967: #endif /* SQLITE_OMIT_TRIGGER */
111968: 
111969:   while( *zSql ){
111970:     switch( *zSql ){
111971:       case ';': {  /* A semicolon */
111972:         token = tkSEMI;
111973:         break;
111974:       }
111975:       case ' ':
111976:       case '\r':
111977:       case '\t':
111978:       case '\n':
111979:       case '\f': {  /* White space is ignored */
111980:         token = tkWS;
111981:         break;
111982:       }
111983:       case '/': {   /* C-style comments */
111984:         if( zSql[1]!='*' ){
111985:           token = tkOTHER;
111986:           break;
111987:         }
111988:         zSql += 2;
111989:         while( zSql[0] && (zSql[0]!='*' || zSql[1]!='/') ){ zSql++; }
111990:         if( zSql[0]==0 ) return 0;
111991:         zSql++;
111992:         token = tkWS;
111993:         break;
111994:       }
111995:       case '-': {   /* SQL-style comments from "--" to end of line */
111996:         if( zSql[1]!='-' ){
111997:           token = tkOTHER;
111998:           break;
111999:         }
112000:         while( *zSql && *zSql!='\n' ){ zSql++; }
112001:         if( *zSql==0 ) return state==1;
112002:         token = tkWS;
112003:         break;
112004:       }
112005:       case '[': {   /* Microsoft-style identifiers in [...] */
112006:         zSql++;
112007:         while( *zSql && *zSql!=']' ){ zSql++; }
112008:         if( *zSql==0 ) return 0;
112009:         token = tkOTHER;
112010:         break;
112011:       }
112012:       case '`':     /* Grave-accent quoted symbols used by MySQL */
112013:       case '"':     /* single- and double-quoted strings */
112014:       case '\'': {
112015:         int c = *zSql;
112016:         zSql++;
112017:         while( *zSql && *zSql!=c ){ zSql++; }
112018:         if( *zSql==0 ) return 0;
112019:         token = tkOTHER;
112020:         break;
112021:       }
112022:       default: {
112023: #ifdef SQLITE_EBCDIC
112024:         unsigned char c;
112025: #endif
112026:         if( IdChar((u8)*zSql) ){
112027:           /* Keywords and unquoted identifiers */
112028:           int nId;
112029:           for(nId=1; IdChar(zSql[nId]); nId++){}
112030: #ifdef SQLITE_OMIT_TRIGGER
112031:           token = tkOTHER;
112032: #else
112033:           switch( *zSql ){
112034:             case 'c': case 'C': {
112035:               if( nId==6 && sqlite3StrNICmp(zSql, "create", 6)==0 ){
112036:                 token = tkCREATE;
112037:               }else{
112038:                 token = tkOTHER;
112039:               }
112040:               break;
112041:             }
112042:             case 't': case 'T': {
112043:               if( nId==7 && sqlite3StrNICmp(zSql, "trigger", 7)==0 ){
112044:                 token = tkTRIGGER;
112045:               }else if( nId==4 && sqlite3StrNICmp(zSql, "temp", 4)==0 ){
112046:                 token = tkTEMP;
112047:               }else if( nId==9 && sqlite3StrNICmp(zSql, "temporary", 9)==0 ){
112048:                 token = tkTEMP;
112049:               }else{
112050:                 token = tkOTHER;
112051:               }
112052:               break;
112053:             }
112054:             case 'e':  case 'E': {
112055:               if( nId==3 && sqlite3StrNICmp(zSql, "end", 3)==0 ){
112056:                 token = tkEND;
112057:               }else
112058: #ifndef SQLITE_OMIT_EXPLAIN
112059:               if( nId==7 && sqlite3StrNICmp(zSql, "explain", 7)==0 ){
112060:                 token = tkEXPLAIN;
112061:               }else
112062: #endif
112063:               {
112064:                 token = tkOTHER;
112065:               }
112066:               break;
112067:             }
112068:             default: {
112069:               token = tkOTHER;
112070:               break;
112071:             }
112072:           }
112073: #endif /* SQLITE_OMIT_TRIGGER */
112074:           zSql += nId-1;
112075:         }else{
112076:           /* Operators and special symbols */
112077:           token = tkOTHER;
112078:         }
112079:         break;
112080:       }
112081:     }
112082:     state = trans[state][token];
112083:     zSql++;
112084:   }
112085:   return state==1;
112086: }
112087: 
112088: #ifndef SQLITE_OMIT_UTF16
112089: /*
112090: ** This routine is the same as the sqlite3_complete() routine described
112091: ** above, except that the parameter is required to be UTF-16 encoded, not
112092: ** UTF-8.
112093: */
112094: SQLITE_API int sqlite3_complete16(const void *zSql){
112095:   sqlite3_value *pVal;
112096:   char const *zSql8;
112097:   int rc = SQLITE_NOMEM;
112098: 
112099: #ifndef SQLITE_OMIT_AUTOINIT
112100:   rc = sqlite3_initialize();
112101:   if( rc ) return rc;
112102: #endif
112103:   pVal = sqlite3ValueNew(0);
112104:   sqlite3ValueSetStr(pVal, -1, zSql, SQLITE_UTF16NATIVE, SQLITE_STATIC);
112105:   zSql8 = sqlite3ValueText(pVal, SQLITE_UTF8);
112106:   if( zSql8 ){
112107:     rc = sqlite3_complete(zSql8);
112108:   }else{
112109:     rc = SQLITE_NOMEM;
112110:   }
112111:   sqlite3ValueFree(pVal);
112112:   return sqlite3ApiExit(0, rc);
112113: }
112114: #endif /* SQLITE_OMIT_UTF16 */
112115: #endif /* SQLITE_OMIT_COMPLETE */
112116: 
112117: /************** End of complete.c ********************************************/
112118: /************** Begin file main.c ********************************************/
112119: /*
112120: ** 2001 September 15
112121: **
112122: ** The author disclaims copyright to this source code.  In place of
112123: ** a legal notice, here is a blessing:
112124: **
112125: **    May you do good and not evil.
112126: **    May you find forgiveness for yourself and forgive others.
112127: **    May you share freely, never taking more than you give.
112128: **
112129: *************************************************************************
112130: ** Main file for the SQLite library.  The routines in this file
112131: ** implement the programmer interface to the library.  Routines in
112132: ** other files are for internal use by SQLite and should not be
112133: ** accessed by users of the library.
112134: */
112135: 
112136: #ifdef SQLITE_ENABLE_FTS3
112137: /************** Include fts3.h in the middle of main.c ***********************/
112138: /************** Begin file fts3.h ********************************************/
112139: /*
112140: ** 2006 Oct 10
112141: **
112142: ** The author disclaims copyright to this source code.  In place of
112143: ** a legal notice, here is a blessing:
112144: **
112145: **    May you do good and not evil.
112146: **    May you find forgiveness for yourself and forgive others.
112147: **    May you share freely, never taking more than you give.
112148: **
112149: ******************************************************************************
112150: **
112151: ** This header file is used by programs that want to link against the
112152: ** FTS3 library.  All it does is declare the sqlite3Fts3Init() interface.
112153: */
112154: 
112155: #if 0
112156: extern "C" {
112157: #endif  /* __cplusplus */
112158: 
112159: SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db);
112160: 
112161: #if 0
112162: }  /* extern "C" */
112163: #endif  /* __cplusplus */
112164: 
112165: /************** End of fts3.h ************************************************/
112166: /************** Continuing where we left off in main.c ***********************/
112167: #endif
112168: #ifdef SQLITE_ENABLE_RTREE
112169: /************** Include rtree.h in the middle of main.c **********************/
112170: /************** Begin file rtree.h *******************************************/
112171: /*
112172: ** 2008 May 26
112173: **
112174: ** The author disclaims copyright to this source code.  In place of
112175: ** a legal notice, here is a blessing:
112176: **
112177: **    May you do good and not evil.
112178: **    May you find forgiveness for yourself and forgive others.
112179: **    May you share freely, never taking more than you give.
112180: **
112181: ******************************************************************************
112182: **
112183: ** This header file is used by programs that want to link against the
112184: ** RTREE library.  All it does is declare the sqlite3RtreeInit() interface.
112185: */
112186: 
112187: #if 0
112188: extern "C" {
112189: #endif  /* __cplusplus */
112190: 
112191: SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db);
112192: 
112193: #if 0
112194: }  /* extern "C" */
112195: #endif  /* __cplusplus */
112196: 
112197: /************** End of rtree.h ***********************************************/
112198: /************** Continuing where we left off in main.c ***********************/
112199: #endif
112200: #ifdef SQLITE_ENABLE_ICU
112201: /************** Include sqliteicu.h in the middle of main.c ******************/
112202: /************** Begin file sqliteicu.h ***************************************/
112203: /*
112204: ** 2008 May 26
112205: **
112206: ** The author disclaims copyright to this source code.  In place of
112207: ** a legal notice, here is a blessing:
112208: **
112209: **    May you do good and not evil.
112210: **    May you find forgiveness for yourself and forgive others.
112211: **    May you share freely, never taking more than you give.
112212: **
112213: ******************************************************************************
112214: **
112215: ** This header file is used by programs that want to link against the
112216: ** ICU extension.  All it does is declare the sqlite3IcuInit() interface.
112217: */
112218: 
112219: #if 0
112220: extern "C" {
112221: #endif  /* __cplusplus */
112222: 
112223: SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db);
112224: 
112225: #if 0
112226: }  /* extern "C" */
112227: #endif  /* __cplusplus */
112228: 
112229: 
112230: /************** End of sqliteicu.h *******************************************/
112231: /************** Continuing where we left off in main.c ***********************/
112232: #endif
112233: 
112234: #ifndef SQLITE_AMALGAMATION
112235: /* IMPLEMENTATION-OF: R-46656-45156 The sqlite3_version[] string constant
112236: ** contains the text of SQLITE_VERSION macro. 
112237: */
112238: SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
112239: #endif
112240: 
112241: /* IMPLEMENTATION-OF: R-53536-42575 The sqlite3_libversion() function returns
112242: ** a pointer to the to the sqlite3_version[] string constant. 
112243: */
112244: SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; }
112245: 
112246: /* IMPLEMENTATION-OF: R-63124-39300 The sqlite3_sourceid() function returns a
112247: ** pointer to a string constant whose value is the same as the
112248: ** SQLITE_SOURCE_ID C preprocessor macro. 
112249: */
112250: SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
112251: 
112252: /* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function
112253: ** returns an integer equal to SQLITE_VERSION_NUMBER.
112254: */
112255: SQLITE_API int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
112256: 
112257: /* IMPLEMENTATION-OF: R-20790-14025 The sqlite3_threadsafe() function returns
112258: ** zero if and only if SQLite was compiled with mutexing code omitted due to
112259: ** the SQLITE_THREADSAFE compile-time option being set to 0.
112260: */
112261: SQLITE_API int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; }
112262: 
112263: #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
112264: /*
112265: ** If the following function pointer is not NULL and if
112266: ** SQLITE_ENABLE_IOTRACE is enabled, then messages describing
112267: ** I/O active are written using this function.  These messages
112268: ** are intended for debugging activity only.
112269: */
112270: SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*, ...) = 0;
112271: #endif
112272: 
112273: /*
112274: ** If the following global variable points to a string which is the
112275: ** name of a directory, then that directory will be used to store
112276: ** temporary files.
112277: **
112278: ** See also the "PRAGMA temp_store_directory" SQL command.
112279: */
112280: SQLITE_API char *sqlite3_temp_directory = 0;
112281: 
112282: /*
112283: ** Initialize SQLite.  
112284: **
112285: ** This routine must be called to initialize the memory allocation,
112286: ** VFS, and mutex subsystems prior to doing any serious work with
112287: ** SQLite.  But as long as you do not compile with SQLITE_OMIT_AUTOINIT
112288: ** this routine will be called automatically by key routines such as
112289: ** sqlite3_open().  
112290: **
112291: ** This routine is a no-op except on its very first call for the process,
112292: ** or for the first call after a call to sqlite3_shutdown.
112293: **
112294: ** The first thread to call this routine runs the initialization to
112295: ** completion.  If subsequent threads call this routine before the first
112296: ** thread has finished the initialization process, then the subsequent
112297: ** threads must block until the first thread finishes with the initialization.
112298: **
112299: ** The first thread might call this routine recursively.  Recursive
112300: ** calls to this routine should not block, of course.  Otherwise the
112301: ** initialization process would never complete.
112302: **
112303: ** Let X be the first thread to enter this routine.  Let Y be some other
112304: ** thread.  Then while the initial invocation of this routine by X is
112305: ** incomplete, it is required that:
112306: **
112307: **    *  Calls to this routine from Y must block until the outer-most
112308: **       call by X completes.
112309: **
112310: **    *  Recursive calls to this routine from thread X return immediately
112311: **       without blocking.
112312: */
112313: SQLITE_API int sqlite3_initialize(void){
112314:   MUTEX_LOGIC( sqlite3_mutex *pMaster; )       /* The main static mutex */
112315:   int rc;                                      /* Result code */
112316: 
112317: #ifdef SQLITE_OMIT_WSD
112318:   rc = sqlite3_wsd_init(4096, 24);
112319:   if( rc!=SQLITE_OK ){
112320:     return rc;
112321:   }
112322: #endif
112323: 
112324:   /* If SQLite is already completely initialized, then this call
112325:   ** to sqlite3_initialize() should be a no-op.  But the initialization
112326:   ** must be complete.  So isInit must not be set until the very end
112327:   ** of this routine.
112328:   */
112329:   if( sqlite3GlobalConfig.isInit ) return SQLITE_OK;
112330: 
112331:   /* Make sure the mutex subsystem is initialized.  If unable to 
112332:   ** initialize the mutex subsystem, return early with the error.
112333:   ** If the system is so sick that we are unable to allocate a mutex,
112334:   ** there is not much SQLite is going to be able to do.
112335:   **
112336:   ** The mutex subsystem must take care of serializing its own
112337:   ** initialization.
112338:   */
112339:   rc = sqlite3MutexInit();
112340:   if( rc ) return rc;
112341: 
112342:   /* Initialize the malloc() system and the recursive pInitMutex mutex.
112343:   ** This operation is protected by the STATIC_MASTER mutex.  Note that
112344:   ** MutexAlloc() is called for a static mutex prior to initializing the
112345:   ** malloc subsystem - this implies that the allocation of a static
112346:   ** mutex must not require support from the malloc subsystem.
112347:   */
112348:   MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
112349:   sqlite3_mutex_enter(pMaster);
112350:   sqlite3GlobalConfig.isMutexInit = 1;
112351:   if( !sqlite3GlobalConfig.isMallocInit ){
112352:     rc = sqlite3MallocInit();
112353:   }
112354:   if( rc==SQLITE_OK ){
112355:     sqlite3GlobalConfig.isMallocInit = 1;
112356:     if( !sqlite3GlobalConfig.pInitMutex ){
112357:       sqlite3GlobalConfig.pInitMutex =
112358:            sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
112359:       if( sqlite3GlobalConfig.bCoreMutex && !sqlite3GlobalConfig.pInitMutex ){
112360:         rc = SQLITE_NOMEM;
112361:       }
112362:     }
112363:   }
112364:   if( rc==SQLITE_OK ){
112365:     sqlite3GlobalConfig.nRefInitMutex++;
112366:   }
112367:   sqlite3_mutex_leave(pMaster);
112368: 
112369:   /* If rc is not SQLITE_OK at this point, then either the malloc
112370:   ** subsystem could not be initialized or the system failed to allocate
112371:   ** the pInitMutex mutex. Return an error in either case.  */
112372:   if( rc!=SQLITE_OK ){
112373:     return rc;
112374:   }
112375: 
112376:   /* Do the rest of the initialization under the recursive mutex so
112377:   ** that we will be able to handle recursive calls into
112378:   ** sqlite3_initialize().  The recursive calls normally come through
112379:   ** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other
112380:   ** recursive calls might also be possible.
112381:   **
112382:   ** IMPLEMENTATION-OF: R-00140-37445 SQLite automatically serializes calls
112383:   ** to the xInit method, so the xInit method need not be threadsafe.
112384:   **
112385:   ** The following mutex is what serializes access to the appdef pcache xInit
112386:   ** methods.  The sqlite3_pcache_methods.xInit() all is embedded in the
112387:   ** call to sqlite3PcacheInitialize().
112388:   */
112389:   sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex);
112390:   if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){
112391:     FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
112392:     sqlite3GlobalConfig.inProgress = 1;
112393:     memset(pHash, 0, sizeof(sqlite3GlobalFunctions));
112394:     sqlite3RegisterGlobalFunctions();
112395:     if( sqlite3GlobalConfig.isPCacheInit==0 ){
112396:       rc = sqlite3PcacheInitialize();
112397:     }
112398:     if( rc==SQLITE_OK ){
112399:       sqlite3GlobalConfig.isPCacheInit = 1;
112400:       rc = sqlite3OsInit();
112401:     }
112402:     if( rc==SQLITE_OK ){
112403:       sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage, 
112404:           sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage);
112405:       sqlite3GlobalConfig.isInit = 1;
112406:     }
112407:     sqlite3GlobalConfig.inProgress = 0;
112408:   }
112409:   sqlite3_mutex_leave(sqlite3GlobalConfig.pInitMutex);
112410: 
112411:   /* Go back under the static mutex and clean up the recursive
112412:   ** mutex to prevent a resource leak.
112413:   */
112414:   sqlite3_mutex_enter(pMaster);
112415:   sqlite3GlobalConfig.nRefInitMutex--;
112416:   if( sqlite3GlobalConfig.nRefInitMutex<=0 ){
112417:     assert( sqlite3GlobalConfig.nRefInitMutex==0 );
112418:     sqlite3_mutex_free(sqlite3GlobalConfig.pInitMutex);
112419:     sqlite3GlobalConfig.pInitMutex = 0;
112420:   }
112421:   sqlite3_mutex_leave(pMaster);
112422: 
112423:   /* The following is just a sanity check to make sure SQLite has
112424:   ** been compiled correctly.  It is important to run this code, but
112425:   ** we don't want to run it too often and soak up CPU cycles for no
112426:   ** reason.  So we run it once during initialization.
112427:   */
112428: #ifndef NDEBUG
112429: #ifndef SQLITE_OMIT_FLOATING_POINT
112430:   /* This section of code's only "output" is via assert() statements. */
112431:   if ( rc==SQLITE_OK ){
112432:     u64 x = (((u64)1)<<63)-1;
112433:     double y;
112434:     assert(sizeof(x)==8);
112435:     assert(sizeof(x)==sizeof(y));
112436:     memcpy(&y, &x, 8);
112437:     assert( sqlite3IsNaN(y) );
112438:   }
112439: #endif
112440: #endif
112441: 
112442:   /* Do extra initialization steps requested by the SQLITE_EXTRA_INIT
112443:   ** compile-time option.
112444:   */
112445: #ifdef SQLITE_EXTRA_INIT
112446:   if( rc==SQLITE_OK && sqlite3GlobalConfig.isInit ){
112447:     int SQLITE_EXTRA_INIT(const char*);
112448:     rc = SQLITE_EXTRA_INIT(0);
112449:   }
112450: #endif
112451: 
112452:   return rc;
112453: }
112454: 
112455: /*
112456: ** Undo the effects of sqlite3_initialize().  Must not be called while
112457: ** there are outstanding database connections or memory allocations or
112458: ** while any part of SQLite is otherwise in use in any thread.  This
112459: ** routine is not threadsafe.  But it is safe to invoke this routine
112460: ** on when SQLite is already shut down.  If SQLite is already shut down
112461: ** when this routine is invoked, then this routine is a harmless no-op.
112462: */
112463: SQLITE_API int sqlite3_shutdown(void){
112464:   if( sqlite3GlobalConfig.isInit ){
112465: #ifdef SQLITE_EXTRA_SHUTDOWN
112466:     void SQLITE_EXTRA_SHUTDOWN(void);
112467:     SQLITE_EXTRA_SHUTDOWN();
112468: #endif
112469:     sqlite3_os_end();
112470:     sqlite3_reset_auto_extension();
112471:     sqlite3GlobalConfig.isInit = 0;
112472:   }
112473:   if( sqlite3GlobalConfig.isPCacheInit ){
112474:     sqlite3PcacheShutdown();
112475:     sqlite3GlobalConfig.isPCacheInit = 0;
112476:   }
112477:   if( sqlite3GlobalConfig.isMallocInit ){
112478:     sqlite3MallocEnd();
112479:     sqlite3GlobalConfig.isMallocInit = 0;
112480:   }
112481:   if( sqlite3GlobalConfig.isMutexInit ){
112482:     sqlite3MutexEnd();
112483:     sqlite3GlobalConfig.isMutexInit = 0;
112484:   }
112485: 
112486:   return SQLITE_OK;
112487: }
112488: 
112489: /*
112490: ** This API allows applications to modify the global configuration of
112491: ** the SQLite library at run-time.
112492: **
112493: ** This routine should only be called when there are no outstanding
112494: ** database connections or memory allocations.  This routine is not
112495: ** threadsafe.  Failure to heed these warnings can lead to unpredictable
112496: ** behavior.
112497: */
112498: SQLITE_API int sqlite3_config(int op, ...){
112499:   va_list ap;
112500:   int rc = SQLITE_OK;
112501: 
112502:   /* sqlite3_config() shall return SQLITE_MISUSE if it is invoked while
112503:   ** the SQLite library is in use. */
112504:   if( sqlite3GlobalConfig.isInit ) return SQLITE_MISUSE_BKPT;
112505: 
112506:   va_start(ap, op);
112507:   switch( op ){
112508: 
112509:     /* Mutex configuration options are only available in a threadsafe
112510:     ** compile. 
112511:     */
112512: #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0
112513:     case SQLITE_CONFIG_SINGLETHREAD: {
112514:       /* Disable all mutexing */
112515:       sqlite3GlobalConfig.bCoreMutex = 0;
112516:       sqlite3GlobalConfig.bFullMutex = 0;
112517:       break;
112518:     }
112519:     case SQLITE_CONFIG_MULTITHREAD: {
112520:       /* Disable mutexing of database connections */
112521:       /* Enable mutexing of core data structures */
112522:       sqlite3GlobalConfig.bCoreMutex = 1;
112523:       sqlite3GlobalConfig.bFullMutex = 0;
112524:       break;
112525:     }
112526:     case SQLITE_CONFIG_SERIALIZED: {
112527:       /* Enable all mutexing */
112528:       sqlite3GlobalConfig.bCoreMutex = 1;
112529:       sqlite3GlobalConfig.bFullMutex = 1;
112530:       break;
112531:     }
112532:     case SQLITE_CONFIG_MUTEX: {
112533:       /* Specify an alternative mutex implementation */
112534:       sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*);
112535:       break;
112536:     }
112537:     case SQLITE_CONFIG_GETMUTEX: {
112538:       /* Retrieve the current mutex implementation */
112539:       *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex;
112540:       break;
112541:     }
112542: #endif
112543: 
112544: 
112545:     case SQLITE_CONFIG_MALLOC: {
112546:       /* Specify an alternative malloc implementation */
112547:       sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*);
112548:       break;
112549:     }
112550:     case SQLITE_CONFIG_GETMALLOC: {
112551:       /* Retrieve the current malloc() implementation */
112552:       if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault();
112553:       *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m;
112554:       break;
112555:     }
112556:     case SQLITE_CONFIG_MEMSTATUS: {
112557:       /* Enable or disable the malloc status collection */
112558:       sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
112559:       break;
112560:     }
112561:     case SQLITE_CONFIG_SCRATCH: {
112562:       /* Designate a buffer for scratch memory space */
112563:       sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
112564:       sqlite3GlobalConfig.szScratch = va_arg(ap, int);
112565:       sqlite3GlobalConfig.nScratch = va_arg(ap, int);
112566:       break;
112567:     }
112568:     case SQLITE_CONFIG_PAGECACHE: {
112569:       /* Designate a buffer for page cache memory space */
112570:       sqlite3GlobalConfig.pPage = va_arg(ap, void*);
112571:       sqlite3GlobalConfig.szPage = va_arg(ap, int);
112572:       sqlite3GlobalConfig.nPage = va_arg(ap, int);
112573:       break;
112574:     }
112575: 
112576:     case SQLITE_CONFIG_PCACHE: {
112577:       /* no-op */
112578:       break;
112579:     }
112580:     case SQLITE_CONFIG_GETPCACHE: {
112581:       /* now an error */
112582:       rc = SQLITE_ERROR;
112583:       break;
112584:     }
112585: 
112586:     case SQLITE_CONFIG_PCACHE2: {
112587:       /* Specify an alternative page cache implementation */
112588:       sqlite3GlobalConfig.pcache2 = *va_arg(ap, sqlite3_pcache_methods2*);
112589:       break;
112590:     }
112591:     case SQLITE_CONFIG_GETPCACHE2: {
112592:       if( sqlite3GlobalConfig.pcache2.xInit==0 ){
112593:         sqlite3PCacheSetDefault();
112594:       }
112595:       *va_arg(ap, sqlite3_pcache_methods2*) = sqlite3GlobalConfig.pcache2;
112596:       break;
112597:     }
112598: 
112599: #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
112600:     case SQLITE_CONFIG_HEAP: {
112601:       /* Designate a buffer for heap memory space */
112602:       sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
112603:       sqlite3GlobalConfig.nHeap = va_arg(ap, int);
112604:       sqlite3GlobalConfig.mnReq = va_arg(ap, int);
112605: 
112606:       if( sqlite3GlobalConfig.mnReq<1 ){
112607:         sqlite3GlobalConfig.mnReq = 1;
112608:       }else if( sqlite3GlobalConfig.mnReq>(1<<12) ){
112609:         /* cap min request size at 2^12 */
112610:         sqlite3GlobalConfig.mnReq = (1<<12);
112611:       }
112612: 
112613:       if( sqlite3GlobalConfig.pHeap==0 ){
112614:         /* If the heap pointer is NULL, then restore the malloc implementation
112615:         ** back to NULL pointers too.  This will cause the malloc to go
112616:         ** back to its default implementation when sqlite3_initialize() is
112617:         ** run.
112618:         */
112619:         memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m));
112620:       }else{
112621:         /* The heap pointer is not NULL, then install one of the
112622:         ** mem5.c/mem3.c methods. If neither ENABLE_MEMSYS3 nor
112623:         ** ENABLE_MEMSYS5 is defined, return an error.
112624:         */
112625: #ifdef SQLITE_ENABLE_MEMSYS3
112626:         sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3();
112627: #endif
112628: #ifdef SQLITE_ENABLE_MEMSYS5
112629:         sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5();
112630: #endif
112631:       }
112632:       break;
112633:     }
112634: #endif
112635: 
112636:     case SQLITE_CONFIG_LOOKASIDE: {
112637:       sqlite3GlobalConfig.szLookaside = va_arg(ap, int);
112638:       sqlite3GlobalConfig.nLookaside = va_arg(ap, int);
112639:       break;
112640:     }
112641:     
112642:     /* Record a pointer to the logger funcction and its first argument.
112643:     ** The default is NULL.  Logging is disabled if the function pointer is
112644:     ** NULL.
112645:     */
112646:     case SQLITE_CONFIG_LOG: {
112647:       /* MSVC is picky about pulling func ptrs from va lists.
112648:       ** http://support.microsoft.com/kb/47961
112649:       ** sqlite3GlobalConfig.xLog = va_arg(ap, void(*)(void*,int,const char*));
112650:       */
112651:       typedef void(*LOGFUNC_t)(void*,int,const char*);
112652:       sqlite3GlobalConfig.xLog = va_arg(ap, LOGFUNC_t);
112653:       sqlite3GlobalConfig.pLogArg = va_arg(ap, void*);
112654:       break;
112655:     }
112656: 
112657:     case SQLITE_CONFIG_URI: {
112658:       sqlite3GlobalConfig.bOpenUri = va_arg(ap, int);
112659:       break;
112660:     }
112661: 
112662:     default: {
112663:       rc = SQLITE_ERROR;
112664:       break;
112665:     }
112666:   }
112667:   va_end(ap);
112668:   return rc;
112669: }
112670: 
112671: /*
112672: ** Set up the lookaside buffers for a database connection.
112673: ** Return SQLITE_OK on success.  
112674: ** If lookaside is already active, return SQLITE_BUSY.
112675: **
112676: ** The sz parameter is the number of bytes in each lookaside slot.
112677: ** The cnt parameter is the number of slots.  If pStart is NULL the
112678: ** space for the lookaside memory is obtained from sqlite3_malloc().
112679: ** If pStart is not NULL then it is sz*cnt bytes of memory to use for
112680: ** the lookaside memory.
112681: */
112682: static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
112683:   void *pStart;
112684:   if( db->lookaside.nOut ){
112685:     return SQLITE_BUSY;
112686:   }
112687:   /* Free any existing lookaside buffer for this handle before
112688:   ** allocating a new one so we don't have to have space for 
112689:   ** both at the same time.
112690:   */
112691:   if( db->lookaside.bMalloced ){
112692:     sqlite3_free(db->lookaside.pStart);
112693:   }
112694:   /* The size of a lookaside slot after ROUNDDOWN8 needs to be larger
112695:   ** than a pointer to be useful.
112696:   */
112697:   sz = ROUNDDOWN8(sz);  /* IMP: R-33038-09382 */
112698:   if( sz<=(int)sizeof(LookasideSlot*) ) sz = 0;
112699:   if( cnt<0 ) cnt = 0;
112700:   if( sz==0 || cnt==0 ){
112701:     sz = 0;
112702:     pStart = 0;
112703:   }else if( pBuf==0 ){
112704:     sqlite3BeginBenignMalloc();
112705:     pStart = sqlite3Malloc( sz*cnt );  /* IMP: R-61949-35727 */
112706:     sqlite3EndBenignMalloc();
112707:     if( pStart ) cnt = sqlite3MallocSize(pStart)/sz;
112708:   }else{
112709:     pStart = pBuf;
112710:   }
112711:   db->lookaside.pStart = pStart;
112712:   db->lookaside.pFree = 0;
112713:   db->lookaside.sz = (u16)sz;
112714:   if( pStart ){
112715:     int i;
112716:     LookasideSlot *p;
112717:     assert( sz > (int)sizeof(LookasideSlot*) );
112718:     p = (LookasideSlot*)pStart;
112719:     for(i=cnt-1; i>=0; i--){
112720:       p->pNext = db->lookaside.pFree;
112721:       db->lookaside.pFree = p;
112722:       p = (LookasideSlot*)&((u8*)p)[sz];
112723:     }
112724:     db->lookaside.pEnd = p;
112725:     db->lookaside.bEnabled = 1;
112726:     db->lookaside.bMalloced = pBuf==0 ?1:0;
112727:   }else{
112728:     db->lookaside.pEnd = 0;
112729:     db->lookaside.bEnabled = 0;
112730:     db->lookaside.bMalloced = 0;
112731:   }
112732:   return SQLITE_OK;
112733: }
112734: 
112735: /*
112736: ** Return the mutex associated with a database connection.
112737: */
112738: SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){
112739:   return db->mutex;
112740: }
112741: 
112742: /*
112743: ** Free up as much memory as we can from the given database
112744: ** connection.
112745: */
112746: SQLITE_API int sqlite3_db_release_memory(sqlite3 *db){
112747:   int i;
112748:   sqlite3_mutex_enter(db->mutex);
112749:   sqlite3BtreeEnterAll(db);
112750:   for(i=0; i<db->nDb; i++){
112751:     Btree *pBt = db->aDb[i].pBt;
112752:     if( pBt ){
112753:       Pager *pPager = sqlite3BtreePager(pBt);
112754:       sqlite3PagerShrink(pPager);
112755:     }
112756:   }
112757:   sqlite3BtreeLeaveAll(db);
112758:   sqlite3_mutex_leave(db->mutex);
112759:   return SQLITE_OK;
112760: }
112761: 
112762: /*
112763: ** Configuration settings for an individual database connection
112764: */
112765: SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
112766:   va_list ap;
112767:   int rc;
112768:   va_start(ap, op);
112769:   switch( op ){
112770:     case SQLITE_DBCONFIG_LOOKASIDE: {
112771:       void *pBuf = va_arg(ap, void*); /* IMP: R-26835-10964 */
112772:       int sz = va_arg(ap, int);       /* IMP: R-47871-25994 */
112773:       int cnt = va_arg(ap, int);      /* IMP: R-04460-53386 */
112774:       rc = setupLookaside(db, pBuf, sz, cnt);
112775:       break;
112776:     }
112777:     default: {
112778:       static const struct {
112779:         int op;      /* The opcode */
112780:         u32 mask;    /* Mask of the bit in sqlite3.flags to set/clear */
112781:       } aFlagOp[] = {
112782:         { SQLITE_DBCONFIG_ENABLE_FKEY,    SQLITE_ForeignKeys    },
112783:         { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger  },
112784:       };
112785:       unsigned int i;
112786:       rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
112787:       for(i=0; i<ArraySize(aFlagOp); i++){
112788:         if( aFlagOp[i].op==op ){
112789:           int onoff = va_arg(ap, int);
112790:           int *pRes = va_arg(ap, int*);
112791:           int oldFlags = db->flags;
112792:           if( onoff>0 ){
112793:             db->flags |= aFlagOp[i].mask;
112794:           }else if( onoff==0 ){
112795:             db->flags &= ~aFlagOp[i].mask;
112796:           }
112797:           if( oldFlags!=db->flags ){
112798:             sqlite3ExpirePreparedStatements(db);
112799:           }
112800:           if( pRes ){
112801:             *pRes = (db->flags & aFlagOp[i].mask)!=0;
112802:           }
112803:           rc = SQLITE_OK;
112804:           break;
112805:         }
112806:       }
112807:       break;
112808:     }
112809:   }
112810:   va_end(ap);
112811:   return rc;
112812: }
112813: 
112814: 
112815: /*
112816: ** Return true if the buffer z[0..n-1] contains all spaces.
112817: */
112818: static int allSpaces(const char *z, int n){
112819:   while( n>0 && z[n-1]==' ' ){ n--; }
112820:   return n==0;
112821: }
112822: 
112823: /*
112824: ** This is the default collating function named "BINARY" which is always
112825: ** available.
112826: **
112827: ** If the padFlag argument is not NULL then space padding at the end
112828: ** of strings is ignored.  This implements the RTRIM collation.
112829: */
112830: static int binCollFunc(
112831:   void *padFlag,
112832:   int nKey1, const void *pKey1,
112833:   int nKey2, const void *pKey2
112834: ){
112835:   int rc, n;
112836:   n = nKey1<nKey2 ? nKey1 : nKey2;
112837:   rc = memcmp(pKey1, pKey2, n);
112838:   if( rc==0 ){
112839:     if( padFlag
112840:      && allSpaces(((char*)pKey1)+n, nKey1-n)
112841:      && allSpaces(((char*)pKey2)+n, nKey2-n)
112842:     ){
112843:       /* Leave rc unchanged at 0 */
112844:     }else{
112845:       rc = nKey1 - nKey2;
112846:     }
112847:   }
112848:   return rc;
112849: }
112850: 
112851: /*
112852: ** Another built-in collating sequence: NOCASE. 
112853: **
112854: ** This collating sequence is intended to be used for "case independant
112855: ** comparison". SQLite's knowledge of upper and lower case equivalents
112856: ** extends only to the 26 characters used in the English language.
112857: **
112858: ** At the moment there is only a UTF-8 implementation.
112859: */
112860: static int nocaseCollatingFunc(
112861:   void *NotUsed,
112862:   int nKey1, const void *pKey1,
112863:   int nKey2, const void *pKey2
112864: ){
112865:   int r = sqlite3StrNICmp(
112866:       (const char *)pKey1, (const char *)pKey2, (nKey1<nKey2)?nKey1:nKey2);
112867:   UNUSED_PARAMETER(NotUsed);
112868:   if( 0==r ){
112869:     r = nKey1-nKey2;
112870:   }
112871:   return r;
112872: }
112873: 
112874: /*
112875: ** Return the ROWID of the most recent insert
112876: */
112877: SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
112878:   return db->lastRowid;
112879: }
112880: 
112881: /*
112882: ** Return the number of changes in the most recent call to sqlite3_exec().
112883: */
112884: SQLITE_API int sqlite3_changes(sqlite3 *db){
112885:   return db->nChange;
112886: }
112887: 
112888: /*
112889: ** Return the number of changes since the database handle was opened.
112890: */
112891: SQLITE_API int sqlite3_total_changes(sqlite3 *db){
112892:   return db->nTotalChange;
112893: }
112894: 
112895: /*
112896: ** Close all open savepoints. This function only manipulates fields of the
112897: ** database handle object, it does not close any savepoints that may be open
112898: ** at the b-tree/pager level.
112899: */
112900: SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *db){
112901:   while( db->pSavepoint ){
112902:     Savepoint *pTmp = db->pSavepoint;
112903:     db->pSavepoint = pTmp->pNext;
112904:     sqlite3DbFree(db, pTmp);
112905:   }
112906:   db->nSavepoint = 0;
112907:   db->nStatement = 0;
112908:   db->isTransactionSavepoint = 0;
112909: }
112910: 
112911: /*
112912: ** Invoke the destructor function associated with FuncDef p, if any. Except,
112913: ** if this is not the last copy of the function, do not invoke it. Multiple
112914: ** copies of a single function are created when create_function() is called
112915: ** with SQLITE_ANY as the encoding.
112916: */
112917: static void functionDestroy(sqlite3 *db, FuncDef *p){
112918:   FuncDestructor *pDestructor = p->pDestructor;
112919:   if( pDestructor ){
112920:     pDestructor->nRef--;
112921:     if( pDestructor->nRef==0 ){
112922:       pDestructor->xDestroy(pDestructor->pUserData);
112923:       sqlite3DbFree(db, pDestructor);
112924:     }
112925:   }
112926: }
112927: 
112928: /*
112929: ** Close an existing SQLite database
112930: */
112931: SQLITE_API int sqlite3_close(sqlite3 *db){
112932:   HashElem *i;                    /* Hash table iterator */
112933:   int j;
112934: 
112935:   if( !db ){
112936:     return SQLITE_OK;
112937:   }
112938:   if( !sqlite3SafetyCheckSickOrOk(db) ){
112939:     return SQLITE_MISUSE_BKPT;
112940:   }
112941:   sqlite3_mutex_enter(db->mutex);
112942: 
112943:   /* Force xDestroy calls on all virtual tables */
112944:   sqlite3ResetInternalSchema(db, -1);
112945: 
112946:   /* If a transaction is open, the ResetInternalSchema() call above
112947:   ** will not have called the xDisconnect() method on any virtual
112948:   ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback()
112949:   ** call will do so. We need to do this before the check for active
112950:   ** SQL statements below, as the v-table implementation may be storing
112951:   ** some prepared statements internally.
112952:   */
112953:   sqlite3VtabRollback(db);
112954: 
112955:   /* If there are any outstanding VMs, return SQLITE_BUSY. */
112956:   if( db->pVdbe ){
112957:     sqlite3Error(db, SQLITE_BUSY, 
112958:         "unable to close due to unfinalised statements");
112959:     sqlite3_mutex_leave(db->mutex);
112960:     return SQLITE_BUSY;
112961:   }
112962:   assert( sqlite3SafetyCheckSickOrOk(db) );
112963: 
112964:   for(j=0; j<db->nDb; j++){
112965:     Btree *pBt = db->aDb[j].pBt;
112966:     if( pBt && sqlite3BtreeIsInBackup(pBt) ){
112967:       sqlite3Error(db, SQLITE_BUSY, 
112968:           "unable to close due to unfinished backup operation");
112969:       sqlite3_mutex_leave(db->mutex);
112970:       return SQLITE_BUSY;
112971:     }
112972:   }
112973: 
112974:   /* Free any outstanding Savepoint structures. */
112975:   sqlite3CloseSavepoints(db);
112976: 
112977:   for(j=0; j<db->nDb; j++){
112978:     struct Db *pDb = &db->aDb[j];
112979:     if( pDb->pBt ){
112980:       sqlite3BtreeClose(pDb->pBt);
112981:       pDb->pBt = 0;
112982:       if( j!=1 ){
112983:         pDb->pSchema = 0;
112984:       }
112985:     }
112986:   }
112987:   sqlite3ResetInternalSchema(db, -1);
112988: 
112989:   /* Tell the code in notify.c that the connection no longer holds any
112990:   ** locks and does not require any further unlock-notify callbacks.
112991:   */
112992:   sqlite3ConnectionClosed(db);
112993: 
112994:   assert( db->nDb<=2 );
112995:   assert( db->aDb==db->aDbStatic );
112996:   for(j=0; j<ArraySize(db->aFunc.a); j++){
112997:     FuncDef *pNext, *pHash, *p;
112998:     for(p=db->aFunc.a[j]; p; p=pHash){
112999:       pHash = p->pHash;
113000:       while( p ){
113001:         functionDestroy(db, p);
113002:         pNext = p->pNext;
113003:         sqlite3DbFree(db, p);
113004:         p = pNext;
113005:       }
113006:     }
113007:   }
113008:   for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){
113009:     CollSeq *pColl = (CollSeq *)sqliteHashData(i);
113010:     /* Invoke any destructors registered for collation sequence user data. */
113011:     for(j=0; j<3; j++){
113012:       if( pColl[j].xDel ){
113013:         pColl[j].xDel(pColl[j].pUser);
113014:       }
113015:     }
113016:     sqlite3DbFree(db, pColl);
113017:   }
113018:   sqlite3HashClear(&db->aCollSeq);
113019: #ifndef SQLITE_OMIT_VIRTUALTABLE
113020:   for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){
113021:     Module *pMod = (Module *)sqliteHashData(i);
113022:     if( pMod->xDestroy ){
113023:       pMod->xDestroy(pMod->pAux);
113024:     }
113025:     sqlite3DbFree(db, pMod);
113026:   }
113027:   sqlite3HashClear(&db->aModule);
113028: #endif
113029: 
113030:   sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */
113031:   if( db->pErr ){
113032:     sqlite3ValueFree(db->pErr);
113033:   }
113034:   sqlite3CloseExtensions(db);
113035: 
113036:   db->magic = SQLITE_MAGIC_ERROR;
113037: 
113038:   /* The temp-database schema is allocated differently from the other schema
113039:   ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
113040:   ** So it needs to be freed here. Todo: Why not roll the temp schema into
113041:   ** the same sqliteMalloc() as the one that allocates the database 
113042:   ** structure?
113043:   */
113044:   sqlite3DbFree(db, db->aDb[1].pSchema);
113045:   sqlite3_mutex_leave(db->mutex);
113046:   db->magic = SQLITE_MAGIC_CLOSED;
113047:   sqlite3_mutex_free(db->mutex);
113048:   assert( db->lookaside.nOut==0 );  /* Fails on a lookaside memory leak */
113049:   if( db->lookaside.bMalloced ){
113050:     sqlite3_free(db->lookaside.pStart);
113051:   }
113052:   sqlite3_free(db);
113053:   return SQLITE_OK;
113054: }
113055: 
113056: /*
113057: ** Rollback all database files.
113058: */
113059: SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db){
113060:   int i;
113061:   int inTrans = 0;
113062:   assert( sqlite3_mutex_held(db->mutex) );
113063:   sqlite3BeginBenignMalloc();
113064:   for(i=0; i<db->nDb; i++){
113065:     if( db->aDb[i].pBt ){
113066:       if( sqlite3BtreeIsInTrans(db->aDb[i].pBt) ){
113067:         inTrans = 1;
113068:       }
113069:       sqlite3BtreeRollback(db->aDb[i].pBt);
113070:       db->aDb[i].inTrans = 0;
113071:     }
113072:   }
113073:   sqlite3VtabRollback(db);
113074:   sqlite3EndBenignMalloc();
113075: 
113076:   if( db->flags&SQLITE_InternChanges ){
113077:     sqlite3ExpirePreparedStatements(db);
113078:     sqlite3ResetInternalSchema(db, -1);
113079:   }
113080: 
113081:   /* Any deferred constraint violations have now been resolved. */
113082:   db->nDeferredCons = 0;
113083: 
113084:   /* If one has been configured, invoke the rollback-hook callback */
113085:   if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){
113086:     db->xRollbackCallback(db->pRollbackArg);
113087:   }
113088: }
113089: 
113090: /*
113091: ** Return a static string that describes the kind of error specified in the
113092: ** argument.
113093: */
113094: SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){
113095:   static const char* const aMsg[] = {
113096:     /* SQLITE_OK          */ "not an error",
113097:     /* SQLITE_ERROR       */ "SQL logic error or missing database",
113098:     /* SQLITE_INTERNAL    */ 0,
113099:     /* SQLITE_PERM        */ "access permission denied",
113100:     /* SQLITE_ABORT       */ "callback requested query abort",
113101:     /* SQLITE_BUSY        */ "database is locked",
113102:     /* SQLITE_LOCKED      */ "database table is locked",
113103:     /* SQLITE_NOMEM       */ "out of memory",
113104:     /* SQLITE_READONLY    */ "attempt to write a readonly database",
113105:     /* SQLITE_INTERRUPT   */ "interrupted",
113106:     /* SQLITE_IOERR       */ "disk I/O error",
113107:     /* SQLITE_CORRUPT     */ "database disk image is malformed",
113108:     /* SQLITE_NOTFOUND    */ "unknown operation",
113109:     /* SQLITE_FULL        */ "database or disk is full",
113110:     /* SQLITE_CANTOPEN    */ "unable to open database file",
113111:     /* SQLITE_PROTOCOL    */ "locking protocol",
113112:     /* SQLITE_EMPTY       */ "table contains no data",
113113:     /* SQLITE_SCHEMA      */ "database schema has changed",
113114:     /* SQLITE_TOOBIG      */ "string or blob too big",
113115:     /* SQLITE_CONSTRAINT  */ "constraint failed",
113116:     /* SQLITE_MISMATCH    */ "datatype mismatch",
113117:     /* SQLITE_MISUSE      */ "library routine called out of sequence",
113118:     /* SQLITE_NOLFS       */ "large file support is disabled",
113119:     /* SQLITE_AUTH        */ "authorization denied",
113120:     /* SQLITE_FORMAT      */ "auxiliary database format error",
113121:     /* SQLITE_RANGE       */ "bind or column index out of range",
113122:     /* SQLITE_NOTADB      */ "file is encrypted or is not a database",
113123:   };
113124:   rc &= 0xff;
113125:   if( ALWAYS(rc>=0) && rc<(int)(sizeof(aMsg)/sizeof(aMsg[0])) && aMsg[rc]!=0 ){
113126:     return aMsg[rc];
113127:   }else{
113128:     return "unknown error";
113129:   }
113130: }
113131: 
113132: /*
113133: ** This routine implements a busy callback that sleeps and tries
113134: ** again until a timeout value is reached.  The timeout value is
113135: ** an integer number of milliseconds passed in as the first
113136: ** argument.
113137: */
113138: static int sqliteDefaultBusyCallback(
113139:  void *ptr,               /* Database connection */
113140:  int count                /* Number of times table has been busy */
113141: ){
113142: #if SQLITE_OS_WIN || (defined(HAVE_USLEEP) && HAVE_USLEEP)
113143:   static const u8 delays[] =
113144:      { 1, 2, 5, 10, 15, 20, 25, 25,  25,  50,  50, 100 };
113145:   static const u8 totals[] =
113146:      { 0, 1, 3,  8, 18, 33, 53, 78, 103, 128, 178, 228 };
113147: # define NDELAY ArraySize(delays)
113148:   sqlite3 *db = (sqlite3 *)ptr;
113149:   int timeout = db->busyTimeout;
113150:   int delay, prior;
113151: 
113152:   assert( count>=0 );
113153:   if( count < NDELAY ){
113154:     delay = delays[count];
113155:     prior = totals[count];
113156:   }else{
113157:     delay = delays[NDELAY-1];
113158:     prior = totals[NDELAY-1] + delay*(count-(NDELAY-1));
113159:   }
113160:   if( prior + delay > timeout ){
113161:     delay = timeout - prior;
113162:     if( delay<=0 ) return 0;
113163:   }
113164:   sqlite3OsSleep(db->pVfs, delay*1000);
113165:   return 1;
113166: #else
113167:   sqlite3 *db = (sqlite3 *)ptr;
113168:   int timeout = ((sqlite3 *)ptr)->busyTimeout;
113169:   if( (count+1)*1000 > timeout ){
113170:     return 0;
113171:   }
113172:   sqlite3OsSleep(db->pVfs, 1000000);
113173:   return 1;
113174: #endif
113175: }
113176: 
113177: /*
113178: ** Invoke the given busy handler.
113179: **
113180: ** This routine is called when an operation failed with a lock.
113181: ** If this routine returns non-zero, the lock is retried.  If it
113182: ** returns 0, the operation aborts with an SQLITE_BUSY error.
113183: */
113184: SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler *p){
113185:   int rc;
113186:   if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0;
113187:   rc = p->xFunc(p->pArg, p->nBusy);
113188:   if( rc==0 ){
113189:     p->nBusy = -1;
113190:   }else{
113191:     p->nBusy++;
113192:   }
113193:   return rc; 
113194: }
113195: 
113196: /*
113197: ** This routine sets the busy callback for an Sqlite database to the
113198: ** given callback function with the given argument.
113199: */
113200: SQLITE_API int sqlite3_busy_handler(
113201:   sqlite3 *db,
113202:   int (*xBusy)(void*,int),
113203:   void *pArg
113204: ){
113205:   sqlite3_mutex_enter(db->mutex);
113206:   db->busyHandler.xFunc = xBusy;
113207:   db->busyHandler.pArg = pArg;
113208:   db->busyHandler.nBusy = 0;
113209:   sqlite3_mutex_leave(db->mutex);
113210:   return SQLITE_OK;
113211: }
113212: 
113213: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
113214: /*
113215: ** This routine sets the progress callback for an Sqlite database to the
113216: ** given callback function with the given argument. The progress callback will
113217: ** be invoked every nOps opcodes.
113218: */
113219: SQLITE_API void sqlite3_progress_handler(
113220:   sqlite3 *db, 
113221:   int nOps,
113222:   int (*xProgress)(void*), 
113223:   void *pArg
113224: ){
113225:   sqlite3_mutex_enter(db->mutex);
113226:   if( nOps>0 ){
113227:     db->xProgress = xProgress;
113228:     db->nProgressOps = nOps;
113229:     db->pProgressArg = pArg;
113230:   }else{
113231:     db->xProgress = 0;
113232:     db->nProgressOps = 0;
113233:     db->pProgressArg = 0;
113234:   }
113235:   sqlite3_mutex_leave(db->mutex);
113236: }
113237: #endif
113238: 
113239: 
113240: /*
113241: ** This routine installs a default busy handler that waits for the
113242: ** specified number of milliseconds before returning 0.
113243: */
113244: SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){
113245:   if( ms>0 ){
113246:     db->busyTimeout = ms;
113247:     sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
113248:   }else{
113249:     sqlite3_busy_handler(db, 0, 0);
113250:   }
113251:   return SQLITE_OK;
113252: }
113253: 
113254: /*
113255: ** Cause any pending operation to stop at its earliest opportunity.
113256: */
113257: SQLITE_API void sqlite3_interrupt(sqlite3 *db){
113258:   db->u1.isInterrupted = 1;
113259: }
113260: 
113261: 
113262: /*
113263: ** This function is exactly the same as sqlite3_create_function(), except
113264: ** that it is designed to be called by internal code. The difference is
113265: ** that if a malloc() fails in sqlite3_create_function(), an error code
113266: ** is returned and the mallocFailed flag cleared. 
113267: */
113268: SQLITE_PRIVATE int sqlite3CreateFunc(
113269:   sqlite3 *db,
113270:   const char *zFunctionName,
113271:   int nArg,
113272:   int enc,
113273:   void *pUserData,
113274:   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
113275:   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
113276:   void (*xFinal)(sqlite3_context*),
113277:   FuncDestructor *pDestructor
113278: ){
113279:   FuncDef *p;
113280:   int nName;
113281: 
113282:   assert( sqlite3_mutex_held(db->mutex) );
113283:   if( zFunctionName==0 ||
113284:       (xFunc && (xFinal || xStep)) || 
113285:       (!xFunc && (xFinal && !xStep)) ||
113286:       (!xFunc && (!xFinal && xStep)) ||
113287:       (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) ||
113288:       (255<(nName = sqlite3Strlen30( zFunctionName))) ){
113289:     return SQLITE_MISUSE_BKPT;
113290:   }
113291:   
113292: #ifndef SQLITE_OMIT_UTF16
113293:   /* If SQLITE_UTF16 is specified as the encoding type, transform this
113294:   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
113295:   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
113296:   **
113297:   ** If SQLITE_ANY is specified, add three versions of the function
113298:   ** to the hash table.
113299:   */
113300:   if( enc==SQLITE_UTF16 ){
113301:     enc = SQLITE_UTF16NATIVE;
113302:   }else if( enc==SQLITE_ANY ){
113303:     int rc;
113304:     rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8,
113305:          pUserData, xFunc, xStep, xFinal, pDestructor);
113306:     if( rc==SQLITE_OK ){
113307:       rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE,
113308:           pUserData, xFunc, xStep, xFinal, pDestructor);
113309:     }
113310:     if( rc!=SQLITE_OK ){
113311:       return rc;
113312:     }
113313:     enc = SQLITE_UTF16BE;
113314:   }
113315: #else
113316:   enc = SQLITE_UTF8;
113317: #endif
113318:   
113319:   /* Check if an existing function is being overridden or deleted. If so,
113320:   ** and there are active VMs, then return SQLITE_BUSY. If a function
113321:   ** is being overridden/deleted but there are no active VMs, allow the
113322:   ** operation to continue but invalidate all precompiled statements.
113323:   */
113324:   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 0);
113325:   if( p && p->iPrefEnc==enc && p->nArg==nArg ){
113326:     if( db->activeVdbeCnt ){
113327:       sqlite3Error(db, SQLITE_BUSY, 
113328:         "unable to delete/modify user-function due to active statements");
113329:       assert( !db->mallocFailed );
113330:       return SQLITE_BUSY;
113331:     }else{
113332:       sqlite3ExpirePreparedStatements(db);
113333:     }
113334:   }
113335: 
113336:   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 1);
113337:   assert(p || db->mallocFailed);
113338:   if( !p ){
113339:     return SQLITE_NOMEM;
113340:   }
113341: 
113342:   /* If an older version of the function with a configured destructor is
113343:   ** being replaced invoke the destructor function here. */
113344:   functionDestroy(db, p);
113345: 
113346:   if( pDestructor ){
113347:     pDestructor->nRef++;
113348:   }
113349:   p->pDestructor = pDestructor;
113350:   p->flags = 0;
113351:   p->xFunc = xFunc;
113352:   p->xStep = xStep;
113353:   p->xFinalize = xFinal;
113354:   p->pUserData = pUserData;
113355:   p->nArg = (u16)nArg;
113356:   return SQLITE_OK;
113357: }
113358: 
113359: /*
113360: ** Create new user functions.
113361: */
113362: SQLITE_API int sqlite3_create_function(
113363:   sqlite3 *db,
113364:   const char *zFunc,
113365:   int nArg,
113366:   int enc,
113367:   void *p,
113368:   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
113369:   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
113370:   void (*xFinal)(sqlite3_context*)
113371: ){
113372:   return sqlite3_create_function_v2(db, zFunc, nArg, enc, p, xFunc, xStep,
113373:                                     xFinal, 0);
113374: }
113375: 
113376: SQLITE_API int sqlite3_create_function_v2(
113377:   sqlite3 *db,
113378:   const char *zFunc,
113379:   int nArg,
113380:   int enc,
113381:   void *p,
113382:   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
113383:   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
113384:   void (*xFinal)(sqlite3_context*),
113385:   void (*xDestroy)(void *)
113386: ){
113387:   int rc = SQLITE_ERROR;
113388:   FuncDestructor *pArg = 0;
113389:   sqlite3_mutex_enter(db->mutex);
113390:   if( xDestroy ){
113391:     pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor));
113392:     if( !pArg ){
113393:       xDestroy(p);
113394:       goto out;
113395:     }
113396:     pArg->xDestroy = xDestroy;
113397:     pArg->pUserData = p;
113398:   }
113399:   rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, xFunc, xStep, xFinal, pArg);
113400:   if( pArg && pArg->nRef==0 ){
113401:     assert( rc!=SQLITE_OK );
113402:     xDestroy(p);
113403:     sqlite3DbFree(db, pArg);
113404:   }
113405: 
113406:  out:
113407:   rc = sqlite3ApiExit(db, rc);
113408:   sqlite3_mutex_leave(db->mutex);
113409:   return rc;
113410: }
113411: 
113412: #ifndef SQLITE_OMIT_UTF16
113413: SQLITE_API int sqlite3_create_function16(
113414:   sqlite3 *db,
113415:   const void *zFunctionName,
113416:   int nArg,
113417:   int eTextRep,
113418:   void *p,
113419:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
113420:   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
113421:   void (*xFinal)(sqlite3_context*)
113422: ){
113423:   int rc;
113424:   char *zFunc8;
113425:   sqlite3_mutex_enter(db->mutex);
113426:   assert( !db->mallocFailed );
113427:   zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE);
113428:   rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0);
113429:   sqlite3DbFree(db, zFunc8);
113430:   rc = sqlite3ApiExit(db, rc);
113431:   sqlite3_mutex_leave(db->mutex);
113432:   return rc;
113433: }
113434: #endif
113435: 
113436: 
113437: /*
113438: ** Declare that a function has been overloaded by a virtual table.
113439: **
113440: ** If the function already exists as a regular global function, then
113441: ** this routine is a no-op.  If the function does not exist, then create
113442: ** a new one that always throws a run-time error.  
113443: **
113444: ** When virtual tables intend to provide an overloaded function, they
113445: ** should call this routine to make sure the global function exists.
113446: ** A global function must exist in order for name resolution to work
113447: ** properly.
113448: */
113449: SQLITE_API int sqlite3_overload_function(
113450:   sqlite3 *db,
113451:   const char *zName,
113452:   int nArg
113453: ){
113454:   int nName = sqlite3Strlen30(zName);
113455:   int rc = SQLITE_OK;
113456:   sqlite3_mutex_enter(db->mutex);
113457:   if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
113458:     rc = sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
113459:                            0, sqlite3InvalidFunction, 0, 0, 0);
113460:   }
113461:   rc = sqlite3ApiExit(db, rc);
113462:   sqlite3_mutex_leave(db->mutex);
113463:   return rc;
113464: }
113465: 
113466: #ifndef SQLITE_OMIT_TRACE
113467: /*
113468: ** Register a trace function.  The pArg from the previously registered trace
113469: ** is returned.  
113470: **
113471: ** A NULL trace function means that no tracing is executes.  A non-NULL
113472: ** trace is a pointer to a function that is invoked at the start of each
113473: ** SQL statement.
113474: */
113475: SQLITE_API void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
113476:   void *pOld;
113477:   sqlite3_mutex_enter(db->mutex);
113478:   pOld = db->pTraceArg;
113479:   db->xTrace = xTrace;
113480:   db->pTraceArg = pArg;
113481:   sqlite3_mutex_leave(db->mutex);
113482:   return pOld;
113483: }
113484: /*
113485: ** Register a profile function.  The pArg from the previously registered 
113486: ** profile function is returned.  
113487: **
113488: ** A NULL profile function means that no profiling is executes.  A non-NULL
113489: ** profile is a pointer to a function that is invoked at the conclusion of
113490: ** each SQL statement that is run.
113491: */
113492: SQLITE_API void *sqlite3_profile(
113493:   sqlite3 *db,
113494:   void (*xProfile)(void*,const char*,sqlite_uint64),
113495:   void *pArg
113496: ){
113497:   void *pOld;
113498:   sqlite3_mutex_enter(db->mutex);
113499:   pOld = db->pProfileArg;
113500:   db->xProfile = xProfile;
113501:   db->pProfileArg = pArg;
113502:   sqlite3_mutex_leave(db->mutex);
113503:   return pOld;
113504: }
113505: #endif /* SQLITE_OMIT_TRACE */
113506: 
113507: /*** EXPERIMENTAL ***
113508: **
113509: ** Register a function to be invoked when a transaction comments.
113510: ** If the invoked function returns non-zero, then the commit becomes a
113511: ** rollback.
113512: */
113513: SQLITE_API void *sqlite3_commit_hook(
113514:   sqlite3 *db,              /* Attach the hook to this database */
113515:   int (*xCallback)(void*),  /* Function to invoke on each commit */
113516:   void *pArg                /* Argument to the function */
113517: ){
113518:   void *pOld;
113519:   sqlite3_mutex_enter(db->mutex);
113520:   pOld = db->pCommitArg;
113521:   db->xCommitCallback = xCallback;
113522:   db->pCommitArg = pArg;
113523:   sqlite3_mutex_leave(db->mutex);
113524:   return pOld;
113525: }
113526: 
113527: /*
113528: ** Register a callback to be invoked each time a row is updated,
113529: ** inserted or deleted using this database connection.
113530: */
113531: SQLITE_API void *sqlite3_update_hook(
113532:   sqlite3 *db,              /* Attach the hook to this database */
113533:   void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
113534:   void *pArg                /* Argument to the function */
113535: ){
113536:   void *pRet;
113537:   sqlite3_mutex_enter(db->mutex);
113538:   pRet = db->pUpdateArg;
113539:   db->xUpdateCallback = xCallback;
113540:   db->pUpdateArg = pArg;
113541:   sqlite3_mutex_leave(db->mutex);
113542:   return pRet;
113543: }
113544: 
113545: /*
113546: ** Register a callback to be invoked each time a transaction is rolled
113547: ** back by this database connection.
113548: */
113549: SQLITE_API void *sqlite3_rollback_hook(
113550:   sqlite3 *db,              /* Attach the hook to this database */
113551:   void (*xCallback)(void*), /* Callback function */
113552:   void *pArg                /* Argument to the function */
113553: ){
113554:   void *pRet;
113555:   sqlite3_mutex_enter(db->mutex);
113556:   pRet = db->pRollbackArg;
113557:   db->xRollbackCallback = xCallback;
113558:   db->pRollbackArg = pArg;
113559:   sqlite3_mutex_leave(db->mutex);
113560:   return pRet;
113561: }
113562: 
113563: #ifndef SQLITE_OMIT_WAL
113564: /*
113565: ** The sqlite3_wal_hook() callback registered by sqlite3_wal_autocheckpoint().
113566: ** Invoke sqlite3_wal_checkpoint if the number of frames in the log file
113567: ** is greater than sqlite3.pWalArg cast to an integer (the value configured by
113568: ** wal_autocheckpoint()).
113569: */ 
113570: SQLITE_PRIVATE int sqlite3WalDefaultHook(
113571:   void *pClientData,     /* Argument */
113572:   sqlite3 *db,           /* Connection */
113573:   const char *zDb,       /* Database */
113574:   int nFrame             /* Size of WAL */
113575: ){
113576:   if( nFrame>=SQLITE_PTR_TO_INT(pClientData) ){
113577:     sqlite3BeginBenignMalloc();
113578:     sqlite3_wal_checkpoint(db, zDb);
113579:     sqlite3EndBenignMalloc();
113580:   }
113581:   return SQLITE_OK;
113582: }
113583: #endif /* SQLITE_OMIT_WAL */
113584: 
113585: /*
113586: ** Configure an sqlite3_wal_hook() callback to automatically checkpoint
113587: ** a database after committing a transaction if there are nFrame or
113588: ** more frames in the log file. Passing zero or a negative value as the
113589: ** nFrame parameter disables automatic checkpoints entirely.
113590: **
113591: ** The callback registered by this function replaces any existing callback
113592: ** registered using sqlite3_wal_hook(). Likewise, registering a callback
113593: ** using sqlite3_wal_hook() disables the automatic checkpoint mechanism
113594: ** configured by this function.
113595: */
113596: SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){
113597: #ifdef SQLITE_OMIT_WAL
113598:   UNUSED_PARAMETER(db);
113599:   UNUSED_PARAMETER(nFrame);
113600: #else
113601:   if( nFrame>0 ){
113602:     sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame));
113603:   }else{
113604:     sqlite3_wal_hook(db, 0, 0);
113605:   }
113606: #endif
113607:   return SQLITE_OK;
113608: }
113609: 
113610: /*
113611: ** Register a callback to be invoked each time a transaction is written
113612: ** into the write-ahead-log by this database connection.
113613: */
113614: SQLITE_API void *sqlite3_wal_hook(
113615:   sqlite3 *db,                    /* Attach the hook to this db handle */
113616:   int(*xCallback)(void *, sqlite3*, const char*, int),
113617:   void *pArg                      /* First argument passed to xCallback() */
113618: ){
113619: #ifndef SQLITE_OMIT_WAL
113620:   void *pRet;
113621:   sqlite3_mutex_enter(db->mutex);
113622:   pRet = db->pWalArg;
113623:   db->xWalCallback = xCallback;
113624:   db->pWalArg = pArg;
113625:   sqlite3_mutex_leave(db->mutex);
113626:   return pRet;
113627: #else
113628:   return 0;
113629: #endif
113630: }
113631: 
113632: /*
113633: ** Checkpoint database zDb.
113634: */
113635: SQLITE_API int sqlite3_wal_checkpoint_v2(
113636:   sqlite3 *db,                    /* Database handle */
113637:   const char *zDb,                /* Name of attached database (or NULL) */
113638:   int eMode,                      /* SQLITE_CHECKPOINT_* value */
113639:   int *pnLog,                     /* OUT: Size of WAL log in frames */
113640:   int *pnCkpt                     /* OUT: Total number of frames checkpointed */
113641: ){
113642: #ifdef SQLITE_OMIT_WAL
113643:   return SQLITE_OK;
113644: #else
113645:   int rc;                         /* Return code */
113646:   int iDb = SQLITE_MAX_ATTACHED;  /* sqlite3.aDb[] index of db to checkpoint */
113647: 
113648:   /* Initialize the output variables to -1 in case an error occurs. */
113649:   if( pnLog ) *pnLog = -1;
113650:   if( pnCkpt ) *pnCkpt = -1;
113651: 
113652:   assert( SQLITE_CHECKPOINT_FULL>SQLITE_CHECKPOINT_PASSIVE );
113653:   assert( SQLITE_CHECKPOINT_FULL<SQLITE_CHECKPOINT_RESTART );
113654:   assert( SQLITE_CHECKPOINT_PASSIVE+2==SQLITE_CHECKPOINT_RESTART );
113655:   if( eMode<SQLITE_CHECKPOINT_PASSIVE || eMode>SQLITE_CHECKPOINT_RESTART ){
113656:     return SQLITE_MISUSE;
113657:   }
113658: 
113659:   sqlite3_mutex_enter(db->mutex);
113660:   if( zDb && zDb[0] ){
113661:     iDb = sqlite3FindDbName(db, zDb);
113662:   }
113663:   if( iDb<0 ){
113664:     rc = SQLITE_ERROR;
113665:     sqlite3Error(db, SQLITE_ERROR, "unknown database: %s", zDb);
113666:   }else{
113667:     rc = sqlite3Checkpoint(db, iDb, eMode, pnLog, pnCkpt);
113668:     sqlite3Error(db, rc, 0);
113669:   }
113670:   rc = sqlite3ApiExit(db, rc);
113671:   sqlite3_mutex_leave(db->mutex);
113672:   return rc;
113673: #endif
113674: }
113675: 
113676: 
113677: /*
113678: ** Checkpoint database zDb. If zDb is NULL, or if the buffer zDb points
113679: ** to contains a zero-length string, all attached databases are 
113680: ** checkpointed.
113681: */
113682: SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){
113683:   return sqlite3_wal_checkpoint_v2(db, zDb, SQLITE_CHECKPOINT_PASSIVE, 0, 0);
113684: }
113685: 
113686: #ifndef SQLITE_OMIT_WAL
113687: /*
113688: ** Run a checkpoint on database iDb. This is a no-op if database iDb is
113689: ** not currently open in WAL mode.
113690: **
113691: ** If a transaction is open on the database being checkpointed, this 
113692: ** function returns SQLITE_LOCKED and a checkpoint is not attempted. If 
113693: ** an error occurs while running the checkpoint, an SQLite error code is 
113694: ** returned (i.e. SQLITE_IOERR). Otherwise, SQLITE_OK.
113695: **
113696: ** The mutex on database handle db should be held by the caller. The mutex
113697: ** associated with the specific b-tree being checkpointed is taken by
113698: ** this function while the checkpoint is running.
113699: **
113700: ** If iDb is passed SQLITE_MAX_ATTACHED, then all attached databases are
113701: ** checkpointed. If an error is encountered it is returned immediately -
113702: ** no attempt is made to checkpoint any remaining databases.
113703: **
113704: ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
113705: */
113706: SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog, int *pnCkpt){
113707:   int rc = SQLITE_OK;             /* Return code */
113708:   int i;                          /* Used to iterate through attached dbs */
113709:   int bBusy = 0;                  /* True if SQLITE_BUSY has been encountered */
113710: 
113711:   assert( sqlite3_mutex_held(db->mutex) );
113712:   assert( !pnLog || *pnLog==-1 );
113713:   assert( !pnCkpt || *pnCkpt==-1 );
113714: 
113715:   for(i=0; i<db->nDb && rc==SQLITE_OK; i++){
113716:     if( i==iDb || iDb==SQLITE_MAX_ATTACHED ){
113717:       rc = sqlite3BtreeCheckpoint(db->aDb[i].pBt, eMode, pnLog, pnCkpt);
113718:       pnLog = 0;
113719:       pnCkpt = 0;
113720:       if( rc==SQLITE_BUSY ){
113721:         bBusy = 1;
113722:         rc = SQLITE_OK;
113723:       }
113724:     }
113725:   }
113726: 
113727:   return (rc==SQLITE_OK && bBusy) ? SQLITE_BUSY : rc;
113728: }
113729: #endif /* SQLITE_OMIT_WAL */
113730: 
113731: /*
113732: ** This function returns true if main-memory should be used instead of
113733: ** a temporary file for transient pager files and statement journals.
113734: ** The value returned depends on the value of db->temp_store (runtime
113735: ** parameter) and the compile time value of SQLITE_TEMP_STORE. The
113736: ** following table describes the relationship between these two values
113737: ** and this functions return value.
113738: **
113739: **   SQLITE_TEMP_STORE     db->temp_store     Location of temporary database
113740: **   -----------------     --------------     ------------------------------
113741: **   0                     any                file      (return 0)
113742: **   1                     1                  file      (return 0)
113743: **   1                     2                  memory    (return 1)
113744: **   1                     0                  file      (return 0)
113745: **   2                     1                  file      (return 0)
113746: **   2                     2                  memory    (return 1)
113747: **   2                     0                  memory    (return 1)
113748: **   3                     any                memory    (return 1)
113749: */
113750: SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3 *db){
113751: #if SQLITE_TEMP_STORE==1
113752:   return ( db->temp_store==2 );
113753: #endif
113754: #if SQLITE_TEMP_STORE==2
113755:   return ( db->temp_store!=1 );
113756: #endif
113757: #if SQLITE_TEMP_STORE==3
113758:   return 1;
113759: #endif
113760: #if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3
113761:   return 0;
113762: #endif
113763: }
113764: 
113765: /*
113766: ** Return UTF-8 encoded English language explanation of the most recent
113767: ** error.
113768: */
113769: SQLITE_API const char *sqlite3_errmsg(sqlite3 *db){
113770:   const char *z;
113771:   if( !db ){
113772:     return sqlite3ErrStr(SQLITE_NOMEM);
113773:   }
113774:   if( !sqlite3SafetyCheckSickOrOk(db) ){
113775:     return sqlite3ErrStr(SQLITE_MISUSE_BKPT);
113776:   }
113777:   sqlite3_mutex_enter(db->mutex);
113778:   if( db->mallocFailed ){
113779:     z = sqlite3ErrStr(SQLITE_NOMEM);
113780:   }else{
113781:     z = (char*)sqlite3_value_text(db->pErr);
113782:     assert( !db->mallocFailed );
113783:     if( z==0 ){
113784:       z = sqlite3ErrStr(db->errCode);
113785:     }
113786:   }
113787:   sqlite3_mutex_leave(db->mutex);
113788:   return z;
113789: }
113790: 
113791: #ifndef SQLITE_OMIT_UTF16
113792: /*
113793: ** Return UTF-16 encoded English language explanation of the most recent
113794: ** error.
113795: */
113796: SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){
113797:   static const u16 outOfMem[] = {
113798:     'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0
113799:   };
113800:   static const u16 misuse[] = {
113801:     'l', 'i', 'b', 'r', 'a', 'r', 'y', ' ', 
113802:     'r', 'o', 'u', 't', 'i', 'n', 'e', ' ', 
113803:     'c', 'a', 'l', 'l', 'e', 'd', ' ', 
113804:     'o', 'u', 't', ' ', 
113805:     'o', 'f', ' ', 
113806:     's', 'e', 'q', 'u', 'e', 'n', 'c', 'e', 0
113807:   };
113808: 
113809:   const void *z;
113810:   if( !db ){
113811:     return (void *)outOfMem;
113812:   }
113813:   if( !sqlite3SafetyCheckSickOrOk(db) ){
113814:     return (void *)misuse;
113815:   }
113816:   sqlite3_mutex_enter(db->mutex);
113817:   if( db->mallocFailed ){
113818:     z = (void *)outOfMem;
113819:   }else{
113820:     z = sqlite3_value_text16(db->pErr);
113821:     if( z==0 ){
113822:       sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),
113823:            SQLITE_UTF8, SQLITE_STATIC);
113824:       z = sqlite3_value_text16(db->pErr);
113825:     }
113826:     /* A malloc() may have failed within the call to sqlite3_value_text16()
113827:     ** above. If this is the case, then the db->mallocFailed flag needs to
113828:     ** be cleared before returning. Do this directly, instead of via
113829:     ** sqlite3ApiExit(), to avoid setting the database handle error message.
113830:     */
113831:     db->mallocFailed = 0;
113832:   }
113833:   sqlite3_mutex_leave(db->mutex);
113834:   return z;
113835: }
113836: #endif /* SQLITE_OMIT_UTF16 */
113837: 
113838: /*
113839: ** Return the most recent error code generated by an SQLite routine. If NULL is
113840: ** passed to this function, we assume a malloc() failed during sqlite3_open().
113841: */
113842: SQLITE_API int sqlite3_errcode(sqlite3 *db){
113843:   if( db && !sqlite3SafetyCheckSickOrOk(db) ){
113844:     return SQLITE_MISUSE_BKPT;
113845:   }
113846:   if( !db || db->mallocFailed ){
113847:     return SQLITE_NOMEM;
113848:   }
113849:   return db->errCode & db->errMask;
113850: }
113851: SQLITE_API int sqlite3_extended_errcode(sqlite3 *db){
113852:   if( db && !sqlite3SafetyCheckSickOrOk(db) ){
113853:     return SQLITE_MISUSE_BKPT;
113854:   }
113855:   if( !db || db->mallocFailed ){
113856:     return SQLITE_NOMEM;
113857:   }
113858:   return db->errCode;
113859: }
113860: 
113861: /*
113862: ** Create a new collating function for database "db".  The name is zName
113863: ** and the encoding is enc.
113864: */
113865: static int createCollation(
113866:   sqlite3* db,
113867:   const char *zName, 
113868:   u8 enc,
113869:   void* pCtx,
113870:   int(*xCompare)(void*,int,const void*,int,const void*),
113871:   void(*xDel)(void*)
113872: ){
113873:   CollSeq *pColl;
113874:   int enc2;
113875:   int nName = sqlite3Strlen30(zName);
113876:   
113877:   assert( sqlite3_mutex_held(db->mutex) );
113878: 
113879:   /* If SQLITE_UTF16 is specified as the encoding type, transform this
113880:   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
113881:   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
113882:   */
113883:   enc2 = enc;
113884:   testcase( enc2==SQLITE_UTF16 );
113885:   testcase( enc2==SQLITE_UTF16_ALIGNED );
113886:   if( enc2==SQLITE_UTF16 || enc2==SQLITE_UTF16_ALIGNED ){
113887:     enc2 = SQLITE_UTF16NATIVE;
113888:   }
113889:   if( enc2<SQLITE_UTF8 || enc2>SQLITE_UTF16BE ){
113890:     return SQLITE_MISUSE_BKPT;
113891:   }
113892: 
113893:   /* Check if this call is removing or replacing an existing collation 
113894:   ** sequence. If so, and there are active VMs, return busy. If there
113895:   ** are no active VMs, invalidate any pre-compiled statements.
113896:   */
113897:   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 0);
113898:   if( pColl && pColl->xCmp ){
113899:     if( db->activeVdbeCnt ){
113900:       sqlite3Error(db, SQLITE_BUSY, 
113901:         "unable to delete/modify collation sequence due to active statements");
113902:       return SQLITE_BUSY;
113903:     }
113904:     sqlite3ExpirePreparedStatements(db);
113905: 
113906:     /* If collation sequence pColl was created directly by a call to
113907:     ** sqlite3_create_collation, and not generated by synthCollSeq(),
113908:     ** then any copies made by synthCollSeq() need to be invalidated.
113909:     ** Also, collation destructor - CollSeq.xDel() - function may need
113910:     ** to be called.
113911:     */ 
113912:     if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){
113913:       CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
113914:       int j;
113915:       for(j=0; j<3; j++){
113916:         CollSeq *p = &aColl[j];
113917:         if( p->enc==pColl->enc ){
113918:           if( p->xDel ){
113919:             p->xDel(p->pUser);
113920:           }
113921:           p->xCmp = 0;
113922:         }
113923:       }
113924:     }
113925:   }
113926: 
113927:   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 1);
113928:   if( pColl==0 ) return SQLITE_NOMEM;
113929:   pColl->xCmp = xCompare;
113930:   pColl->pUser = pCtx;
113931:   pColl->xDel = xDel;
113932:   pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED));
113933:   sqlite3Error(db, SQLITE_OK, 0);
113934:   return SQLITE_OK;
113935: }
113936: 
113937: 
113938: /*
113939: ** This array defines hard upper bounds on limit values.  The
113940: ** initializer must be kept in sync with the SQLITE_LIMIT_*
113941: ** #defines in sqlite3.h.
113942: */
113943: static const int aHardLimit[] = {
113944:   SQLITE_MAX_LENGTH,
113945:   SQLITE_MAX_SQL_LENGTH,
113946:   SQLITE_MAX_COLUMN,
113947:   SQLITE_MAX_EXPR_DEPTH,
113948:   SQLITE_MAX_COMPOUND_SELECT,
113949:   SQLITE_MAX_VDBE_OP,
113950:   SQLITE_MAX_FUNCTION_ARG,
113951:   SQLITE_MAX_ATTACHED,
113952:   SQLITE_MAX_LIKE_PATTERN_LENGTH,
113953:   SQLITE_MAX_VARIABLE_NUMBER,
113954:   SQLITE_MAX_TRIGGER_DEPTH,
113955: };
113956: 
113957: /*
113958: ** Make sure the hard limits are set to reasonable values
113959: */
113960: #if SQLITE_MAX_LENGTH<100
113961: # error SQLITE_MAX_LENGTH must be at least 100
113962: #endif
113963: #if SQLITE_MAX_SQL_LENGTH<100
113964: # error SQLITE_MAX_SQL_LENGTH must be at least 100
113965: #endif
113966: #if SQLITE_MAX_SQL_LENGTH>SQLITE_MAX_LENGTH
113967: # error SQLITE_MAX_SQL_LENGTH must not be greater than SQLITE_MAX_LENGTH
113968: #endif
113969: #if SQLITE_MAX_COMPOUND_SELECT<2
113970: # error SQLITE_MAX_COMPOUND_SELECT must be at least 2
113971: #endif
113972: #if SQLITE_MAX_VDBE_OP<40
113973: # error SQLITE_MAX_VDBE_OP must be at least 40
113974: #endif
113975: #if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>1000
113976: # error SQLITE_MAX_FUNCTION_ARG must be between 0 and 1000
113977: #endif
113978: #if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>62
113979: # error SQLITE_MAX_ATTACHED must be between 0 and 62
113980: #endif
113981: #if SQLITE_MAX_LIKE_PATTERN_LENGTH<1
113982: # error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1
113983: #endif
113984: #if SQLITE_MAX_COLUMN>32767
113985: # error SQLITE_MAX_COLUMN must not exceed 32767
113986: #endif
113987: #if SQLITE_MAX_TRIGGER_DEPTH<1
113988: # error SQLITE_MAX_TRIGGER_DEPTH must be at least 1
113989: #endif
113990: 
113991: 
113992: /*
113993: ** Change the value of a limit.  Report the old value.
113994: ** If an invalid limit index is supplied, report -1.
113995: ** Make no changes but still report the old value if the
113996: ** new limit is negative.
113997: **
113998: ** A new lower limit does not shrink existing constructs.
113999: ** It merely prevents new constructs that exceed the limit
114000: ** from forming.
114001: */
114002: SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
114003:   int oldLimit;
114004: 
114005: 
114006:   /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME
114007:   ** there is a hard upper bound set at compile-time by a C preprocessor
114008:   ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to
114009:   ** "_MAX_".)
114010:   */
114011:   assert( aHardLimit[SQLITE_LIMIT_LENGTH]==SQLITE_MAX_LENGTH );
114012:   assert( aHardLimit[SQLITE_LIMIT_SQL_LENGTH]==SQLITE_MAX_SQL_LENGTH );
114013:   assert( aHardLimit[SQLITE_LIMIT_COLUMN]==SQLITE_MAX_COLUMN );
114014:   assert( aHardLimit[SQLITE_LIMIT_EXPR_DEPTH]==SQLITE_MAX_EXPR_DEPTH );
114015:   assert( aHardLimit[SQLITE_LIMIT_COMPOUND_SELECT]==SQLITE_MAX_COMPOUND_SELECT);
114016:   assert( aHardLimit[SQLITE_LIMIT_VDBE_OP]==SQLITE_MAX_VDBE_OP );
114017:   assert( aHardLimit[SQLITE_LIMIT_FUNCTION_ARG]==SQLITE_MAX_FUNCTION_ARG );
114018:   assert( aHardLimit[SQLITE_LIMIT_ATTACHED]==SQLITE_MAX_ATTACHED );
114019:   assert( aHardLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]==
114020:                                                SQLITE_MAX_LIKE_PATTERN_LENGTH );
114021:   assert( aHardLimit[SQLITE_LIMIT_VARIABLE_NUMBER]==SQLITE_MAX_VARIABLE_NUMBER);
114022:   assert( aHardLimit[SQLITE_LIMIT_TRIGGER_DEPTH]==SQLITE_MAX_TRIGGER_DEPTH );
114023:   assert( SQLITE_LIMIT_TRIGGER_DEPTH==(SQLITE_N_LIMIT-1) );
114024: 
114025: 
114026:   if( limitId<0 || limitId>=SQLITE_N_LIMIT ){
114027:     return -1;
114028:   }
114029:   oldLimit = db->aLimit[limitId];
114030:   if( newLimit>=0 ){                   /* IMP: R-52476-28732 */
114031:     if( newLimit>aHardLimit[limitId] ){
114032:       newLimit = aHardLimit[limitId];  /* IMP: R-51463-25634 */
114033:     }
114034:     db->aLimit[limitId] = newLimit;
114035:   }
114036:   return oldLimit;                     /* IMP: R-53341-35419 */
114037: }
114038: 
114039: /*
114040: ** This function is used to parse both URIs and non-URI filenames passed by the
114041: ** user to API functions sqlite3_open() or sqlite3_open_v2(), and for database
114042: ** URIs specified as part of ATTACH statements.
114043: **
114044: ** The first argument to this function is the name of the VFS to use (or
114045: ** a NULL to signify the default VFS) if the URI does not contain a "vfs=xxx"
114046: ** query parameter. The second argument contains the URI (or non-URI filename)
114047: ** itself. When this function is called the *pFlags variable should contain
114048: ** the default flags to open the database handle with. The value stored in
114049: ** *pFlags may be updated before returning if the URI filename contains 
114050: ** "cache=xxx" or "mode=xxx" query parameters.
114051: **
114052: ** If successful, SQLITE_OK is returned. In this case *ppVfs is set to point to
114053: ** the VFS that should be used to open the database file. *pzFile is set to
114054: ** point to a buffer containing the name of the file to open. It is the 
114055: ** responsibility of the caller to eventually call sqlite3_free() to release
114056: ** this buffer.
114057: **
114058: ** If an error occurs, then an SQLite error code is returned and *pzErrMsg
114059: ** may be set to point to a buffer containing an English language error 
114060: ** message. It is the responsibility of the caller to eventually release
114061: ** this buffer by calling sqlite3_free().
114062: */
114063: SQLITE_PRIVATE int sqlite3ParseUri(
114064:   const char *zDefaultVfs,        /* VFS to use if no "vfs=xxx" query option */
114065:   const char *zUri,               /* Nul-terminated URI to parse */
114066:   unsigned int *pFlags,           /* IN/OUT: SQLITE_OPEN_XXX flags */
114067:   sqlite3_vfs **ppVfs,            /* OUT: VFS to use */ 
114068:   char **pzFile,                  /* OUT: Filename component of URI */
114069:   char **pzErrMsg                 /* OUT: Error message (if rc!=SQLITE_OK) */
114070: ){
114071:   int rc = SQLITE_OK;
114072:   unsigned int flags = *pFlags;
114073:   const char *zVfs = zDefaultVfs;
114074:   char *zFile;
114075:   char c;
114076:   int nUri = sqlite3Strlen30(zUri);
114077: 
114078:   assert( *pzErrMsg==0 );
114079: 
114080:   if( ((flags & SQLITE_OPEN_URI) || sqlite3GlobalConfig.bOpenUri) 
114081:    && nUri>=5 && memcmp(zUri, "file:", 5)==0 
114082:   ){
114083:     char *zOpt;
114084:     int eState;                   /* Parser state when parsing URI */
114085:     int iIn;                      /* Input character index */
114086:     int iOut = 0;                 /* Output character index */
114087:     int nByte = nUri+2;           /* Bytes of space to allocate */
114088: 
114089:     /* Make sure the SQLITE_OPEN_URI flag is set to indicate to the VFS xOpen 
114090:     ** method that there may be extra parameters following the file-name.  */
114091:     flags |= SQLITE_OPEN_URI;
114092: 
114093:     for(iIn=0; iIn<nUri; iIn++) nByte += (zUri[iIn]=='&');
114094:     zFile = sqlite3_malloc(nByte);
114095:     if( !zFile ) return SQLITE_NOMEM;
114096: 
114097:     /* Discard the scheme and authority segments of the URI. */
114098:     if( zUri[5]=='/' && zUri[6]=='/' ){
114099:       iIn = 7;
114100:       while( zUri[iIn] && zUri[iIn]!='/' ) iIn++;
114101: 
114102:       if( iIn!=7 && (iIn!=16 || memcmp("localhost", &zUri[7], 9)) ){
114103:         *pzErrMsg = sqlite3_mprintf("invalid uri authority: %.*s", 
114104:             iIn-7, &zUri[7]);
114105:         rc = SQLITE_ERROR;
114106:         goto parse_uri_out;
114107:       }
114108:     }else{
114109:       iIn = 5;
114110:     }
114111: 
114112:     /* Copy the filename and any query parameters into the zFile buffer. 
114113:     ** Decode %HH escape codes along the way. 
114114:     **
114115:     ** Within this loop, variable eState may be set to 0, 1 or 2, depending
114116:     ** on the parsing context. As follows:
114117:     **
114118:     **   0: Parsing file-name.
114119:     **   1: Parsing name section of a name=value query parameter.
114120:     **   2: Parsing value section of a name=value query parameter.
114121:     */
114122:     eState = 0;
114123:     while( (c = zUri[iIn])!=0 && c!='#' ){
114124:       iIn++;
114125:       if( c=='%' 
114126:        && sqlite3Isxdigit(zUri[iIn]) 
114127:        && sqlite3Isxdigit(zUri[iIn+1]) 
114128:       ){
114129:         int octet = (sqlite3HexToInt(zUri[iIn++]) << 4);
114130:         octet += sqlite3HexToInt(zUri[iIn++]);
114131: 
114132:         assert( octet>=0 && octet<256 );
114133:         if( octet==0 ){
114134:           /* This branch is taken when "%00" appears within the URI. In this
114135:           ** case we ignore all text in the remainder of the path, name or
114136:           ** value currently being parsed. So ignore the current character
114137:           ** and skip to the next "?", "=" or "&", as appropriate. */
114138:           while( (c = zUri[iIn])!=0 && c!='#' 
114139:               && (eState!=0 || c!='?')
114140:               && (eState!=1 || (c!='=' && c!='&'))
114141:               && (eState!=2 || c!='&')
114142:           ){
114143:             iIn++;
114144:           }
114145:           continue;
114146:         }
114147:         c = octet;
114148:       }else if( eState==1 && (c=='&' || c=='=') ){
114149:         if( zFile[iOut-1]==0 ){
114150:           /* An empty option name. Ignore this option altogether. */
114151:           while( zUri[iIn] && zUri[iIn]!='#' && zUri[iIn-1]!='&' ) iIn++;
114152:           continue;
114153:         }
114154:         if( c=='&' ){
114155:           zFile[iOut++] = '\0';
114156:         }else{
114157:           eState = 2;
114158:         }
114159:         c = 0;
114160:       }else if( (eState==0 && c=='?') || (eState==2 && c=='&') ){
114161:         c = 0;
114162:         eState = 1;
114163:       }
114164:       zFile[iOut++] = c;
114165:     }
114166:     if( eState==1 ) zFile[iOut++] = '\0';
114167:     zFile[iOut++] = '\0';
114168:     zFile[iOut++] = '\0';
114169: 
114170:     /* Check if there were any options specified that should be interpreted 
114171:     ** here. Options that are interpreted here include "vfs" and those that
114172:     ** correspond to flags that may be passed to the sqlite3_open_v2()
114173:     ** method. */
114174:     zOpt = &zFile[sqlite3Strlen30(zFile)+1];
114175:     while( zOpt[0] ){
114176:       int nOpt = sqlite3Strlen30(zOpt);
114177:       char *zVal = &zOpt[nOpt+1];
114178:       int nVal = sqlite3Strlen30(zVal);
114179: 
114180:       if( nOpt==3 && memcmp("vfs", zOpt, 3)==0 ){
114181:         zVfs = zVal;
114182:       }else{
114183:         struct OpenMode {
114184:           const char *z;
114185:           int mode;
114186:         } *aMode = 0;
114187:         char *zModeType = 0;
114188:         int mask = 0;
114189:         int limit = 0;
114190: 
114191:         if( nOpt==5 && memcmp("cache", zOpt, 5)==0 ){
114192:           static struct OpenMode aCacheMode[] = {
114193:             { "shared",  SQLITE_OPEN_SHAREDCACHE },
114194:             { "private", SQLITE_OPEN_PRIVATECACHE },
114195:             { 0, 0 }
114196:           };
114197: 
114198:           mask = SQLITE_OPEN_SHAREDCACHE|SQLITE_OPEN_PRIVATECACHE;
114199:           aMode = aCacheMode;
114200:           limit = mask;
114201:           zModeType = "cache";
114202:         }
114203:         if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){
114204:           static struct OpenMode aOpenMode[] = {
114205:             { "ro",  SQLITE_OPEN_READONLY },
114206:             { "rw",  SQLITE_OPEN_READWRITE }, 
114207:             { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE },
114208:             { 0, 0 }
114209:           };
114210: 
114211:           mask = SQLITE_OPEN_READONLY|SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
114212:           aMode = aOpenMode;
114213:           limit = mask & flags;
114214:           zModeType = "access";
114215:         }
114216: 
114217:         if( aMode ){
114218:           int i;
114219:           int mode = 0;
114220:           for(i=0; aMode[i].z; i++){
114221:             const char *z = aMode[i].z;
114222:             if( nVal==sqlite3Strlen30(z) && 0==memcmp(zVal, z, nVal) ){
114223:               mode = aMode[i].mode;
114224:               break;
114225:             }
114226:           }
114227:           if( mode==0 ){
114228:             *pzErrMsg = sqlite3_mprintf("no such %s mode: %s", zModeType, zVal);
114229:             rc = SQLITE_ERROR;
114230:             goto parse_uri_out;
114231:           }
114232:           if( mode>limit ){
114233:             *pzErrMsg = sqlite3_mprintf("%s mode not allowed: %s",
114234:                                         zModeType, zVal);
114235:             rc = SQLITE_PERM;
114236:             goto parse_uri_out;
114237:           }
114238:           flags = (flags & ~mask) | mode;
114239:         }
114240:       }
114241: 
114242:       zOpt = &zVal[nVal+1];
114243:     }
114244: 
114245:   }else{
114246:     zFile = sqlite3_malloc(nUri+2);
114247:     if( !zFile ) return SQLITE_NOMEM;
114248:     memcpy(zFile, zUri, nUri);
114249:     zFile[nUri] = '\0';
114250:     zFile[nUri+1] = '\0';
114251:   }
114252: 
114253:   *ppVfs = sqlite3_vfs_find(zVfs);
114254:   if( *ppVfs==0 ){
114255:     *pzErrMsg = sqlite3_mprintf("no such vfs: %s", zVfs);
114256:     rc = SQLITE_ERROR;
114257:   }
114258:  parse_uri_out:
114259:   if( rc!=SQLITE_OK ){
114260:     sqlite3_free(zFile);
114261:     zFile = 0;
114262:   }
114263:   *pFlags = flags;
114264:   *pzFile = zFile;
114265:   return rc;
114266: }
114267: 
114268: 
114269: /*
114270: ** This routine does the work of opening a database on behalf of
114271: ** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"  
114272: ** is UTF-8 encoded.
114273: */
114274: static int openDatabase(
114275:   const char *zFilename, /* Database filename UTF-8 encoded */
114276:   sqlite3 **ppDb,        /* OUT: Returned database handle */
114277:   unsigned int flags,    /* Operational flags */
114278:   const char *zVfs       /* Name of the VFS to use */
114279: ){
114280:   sqlite3 *db;                    /* Store allocated handle here */
114281:   int rc;                         /* Return code */
114282:   int isThreadsafe;               /* True for threadsafe connections */
114283:   char *zOpen = 0;                /* Filename argument to pass to BtreeOpen() */
114284:   char *zErrMsg = 0;              /* Error message from sqlite3ParseUri() */
114285: 
114286:   *ppDb = 0;
114287: #ifndef SQLITE_OMIT_AUTOINIT
114288:   rc = sqlite3_initialize();
114289:   if( rc ) return rc;
114290: #endif
114291: 
114292:   /* Only allow sensible combinations of bits in the flags argument.  
114293:   ** Throw an error if any non-sense combination is used.  If we
114294:   ** do not block illegal combinations here, it could trigger
114295:   ** assert() statements in deeper layers.  Sensible combinations
114296:   ** are:
114297:   **
114298:   **  1:  SQLITE_OPEN_READONLY
114299:   **  2:  SQLITE_OPEN_READWRITE
114300:   **  6:  SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
114301:   */
114302:   assert( SQLITE_OPEN_READONLY  == 0x01 );
114303:   assert( SQLITE_OPEN_READWRITE == 0x02 );
114304:   assert( SQLITE_OPEN_CREATE    == 0x04 );
114305:   testcase( (1<<(flags&7))==0x02 ); /* READONLY */
114306:   testcase( (1<<(flags&7))==0x04 ); /* READWRITE */
114307:   testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */
114308:   if( ((1<<(flags&7)) & 0x46)==0 ) return SQLITE_MISUSE_BKPT;
114309: 
114310:   if( sqlite3GlobalConfig.bCoreMutex==0 ){
114311:     isThreadsafe = 0;
114312:   }else if( flags & SQLITE_OPEN_NOMUTEX ){
114313:     isThreadsafe = 0;
114314:   }else if( flags & SQLITE_OPEN_FULLMUTEX ){
114315:     isThreadsafe = 1;
114316:   }else{
114317:     isThreadsafe = sqlite3GlobalConfig.bFullMutex;
114318:   }
114319:   if( flags & SQLITE_OPEN_PRIVATECACHE ){
114320:     flags &= ~SQLITE_OPEN_SHAREDCACHE;
114321:   }else if( sqlite3GlobalConfig.sharedCacheEnabled ){
114322:     flags |= SQLITE_OPEN_SHAREDCACHE;
114323:   }
114324: 
114325:   /* Remove harmful bits from the flags parameter
114326:   **
114327:   ** The SQLITE_OPEN_NOMUTEX and SQLITE_OPEN_FULLMUTEX flags were
114328:   ** dealt with in the previous code block.  Besides these, the only
114329:   ** valid input flags for sqlite3_open_v2() are SQLITE_OPEN_READONLY,
114330:   ** SQLITE_OPEN_READWRITE, SQLITE_OPEN_CREATE, SQLITE_OPEN_SHAREDCACHE,
114331:   ** SQLITE_OPEN_PRIVATECACHE, and some reserved bits.  Silently mask
114332:   ** off all other flags.
114333:   */
114334:   flags &=  ~( SQLITE_OPEN_DELETEONCLOSE |
114335:                SQLITE_OPEN_EXCLUSIVE |
114336:                SQLITE_OPEN_MAIN_DB |
114337:                SQLITE_OPEN_TEMP_DB | 
114338:                SQLITE_OPEN_TRANSIENT_DB | 
114339:                SQLITE_OPEN_MAIN_JOURNAL | 
114340:                SQLITE_OPEN_TEMP_JOURNAL | 
114341:                SQLITE_OPEN_SUBJOURNAL | 
114342:                SQLITE_OPEN_MASTER_JOURNAL |
114343:                SQLITE_OPEN_NOMUTEX |
114344:                SQLITE_OPEN_FULLMUTEX |
114345:                SQLITE_OPEN_WAL
114346:              );
114347: 
114348:   /* Allocate the sqlite data structure */
114349:   db = sqlite3MallocZero( sizeof(sqlite3) );
114350:   if( db==0 ) goto opendb_out;
114351:   if( isThreadsafe ){
114352:     db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
114353:     if( db->mutex==0 ){
114354:       sqlite3_free(db);
114355:       db = 0;
114356:       goto opendb_out;
114357:     }
114358:   }
114359:   sqlite3_mutex_enter(db->mutex);
114360:   db->errMask = 0xff;
114361:   db->nDb = 2;
114362:   db->magic = SQLITE_MAGIC_BUSY;
114363:   db->aDb = db->aDbStatic;
114364: 
114365:   assert( sizeof(db->aLimit)==sizeof(aHardLimit) );
114366:   memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit));
114367:   db->autoCommit = 1;
114368:   db->nextAutovac = -1;
114369:   db->nextPagesize = 0;
114370:   db->flags |= SQLITE_ShortColNames | SQLITE_AutoIndex | SQLITE_EnableTrigger
114371: #if SQLITE_DEFAULT_FILE_FORMAT<4
114372:                  | SQLITE_LegacyFileFmt
114373: #endif
114374: #ifdef SQLITE_ENABLE_LOAD_EXTENSION
114375:                  | SQLITE_LoadExtension
114376: #endif
114377: #if SQLITE_DEFAULT_RECURSIVE_TRIGGERS
114378:                  | SQLITE_RecTriggers
114379: #endif
114380: #if defined(SQLITE_DEFAULT_FOREIGN_KEYS) && SQLITE_DEFAULT_FOREIGN_KEYS
114381:                  | SQLITE_ForeignKeys
114382: #endif
114383:       ;
114384:   sqlite3HashInit(&db->aCollSeq);
114385: #ifndef SQLITE_OMIT_VIRTUALTABLE
114386:   sqlite3HashInit(&db->aModule);
114387: #endif
114388: 
114389:   /* Add the default collation sequence BINARY. BINARY works for both UTF-8
114390:   ** and UTF-16, so add a version for each to avoid any unnecessary
114391:   ** conversions. The only error that can occur here is a malloc() failure.
114392:   */
114393:   createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0);
114394:   createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0);
114395:   createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0);
114396:   createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
114397:   if( db->mallocFailed ){
114398:     goto opendb_out;
114399:   }
114400:   db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
114401:   assert( db->pDfltColl!=0 );
114402: 
114403:   /* Also add a UTF-8 case-insensitive collation sequence. */
114404:   createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
114405: 
114406:   /* Parse the filename/URI argument. */
114407:   db->openFlags = flags;
114408:   rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg);
114409:   if( rc!=SQLITE_OK ){
114410:     if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
114411:     sqlite3Error(db, rc, zErrMsg ? "%s" : 0, zErrMsg);
114412:     sqlite3_free(zErrMsg);
114413:     goto opendb_out;
114414:   }
114415: 
114416:   /* Open the backend database driver */
114417:   rc = sqlite3BtreeOpen(db->pVfs, zOpen, db, &db->aDb[0].pBt, 0,
114418:                         flags | SQLITE_OPEN_MAIN_DB);
114419:   if( rc!=SQLITE_OK ){
114420:     if( rc==SQLITE_IOERR_NOMEM ){
114421:       rc = SQLITE_NOMEM;
114422:     }
114423:     sqlite3Error(db, rc, 0);
114424:     goto opendb_out;
114425:   }
114426:   db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt);
114427:   db->aDb[1].pSchema = sqlite3SchemaGet(db, 0);
114428: 
114429: 
114430:   /* The default safety_level for the main database is 'full'; for the temp
114431:   ** database it is 'NONE'. This matches the pager layer defaults.  
114432:   */
114433:   db->aDb[0].zName = "main";
114434:   db->aDb[0].safety_level = 3;
114435:   db->aDb[1].zName = "temp";
114436:   db->aDb[1].safety_level = 1;
114437: 
114438:   db->magic = SQLITE_MAGIC_OPEN;
114439:   if( db->mallocFailed ){
114440:     goto opendb_out;
114441:   }
114442: 
114443:   /* Register all built-in functions, but do not attempt to read the
114444:   ** database schema yet. This is delayed until the first time the database
114445:   ** is accessed.
114446:   */
114447:   sqlite3Error(db, SQLITE_OK, 0);
114448:   sqlite3RegisterBuiltinFunctions(db);
114449: 
114450:   /* Load automatic extensions - extensions that have been registered
114451:   ** using the sqlite3_automatic_extension() API.
114452:   */
114453:   rc = sqlite3_errcode(db);
114454:   if( rc==SQLITE_OK ){
114455:     sqlite3AutoLoadExtensions(db);
114456:     rc = sqlite3_errcode(db);
114457:     if( rc!=SQLITE_OK ){
114458:       goto opendb_out;
114459:     }
114460:   }
114461: 
114462: #ifdef SQLITE_ENABLE_FTS1
114463:   if( !db->mallocFailed ){
114464:     extern int sqlite3Fts1Init(sqlite3*);
114465:     rc = sqlite3Fts1Init(db);
114466:   }
114467: #endif
114468: 
114469: #ifdef SQLITE_ENABLE_FTS2
114470:   if( !db->mallocFailed && rc==SQLITE_OK ){
114471:     extern int sqlite3Fts2Init(sqlite3*);
114472:     rc = sqlite3Fts2Init(db);
114473:   }
114474: #endif
114475: 
114476: #ifdef SQLITE_ENABLE_FTS3
114477:   if( !db->mallocFailed && rc==SQLITE_OK ){
114478:     rc = sqlite3Fts3Init(db);
114479:   }
114480: #endif
114481: 
114482: #ifdef SQLITE_ENABLE_ICU
114483:   if( !db->mallocFailed && rc==SQLITE_OK ){
114484:     rc = sqlite3IcuInit(db);
114485:   }
114486: #endif
114487: 
114488: #ifdef SQLITE_ENABLE_RTREE
114489:   if( !db->mallocFailed && rc==SQLITE_OK){
114490:     rc = sqlite3RtreeInit(db);
114491:   }
114492: #endif
114493: 
114494:   sqlite3Error(db, rc, 0);
114495: 
114496:   /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking
114497:   ** mode.  -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking
114498:   ** mode.  Doing nothing at all also makes NORMAL the default.
114499:   */
114500: #ifdef SQLITE_DEFAULT_LOCKING_MODE
114501:   db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE;
114502:   sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt),
114503:                           SQLITE_DEFAULT_LOCKING_MODE);
114504: #endif
114505: 
114506:   /* Enable the lookaside-malloc subsystem */
114507:   setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside,
114508:                         sqlite3GlobalConfig.nLookaside);
114509: 
114510:   sqlite3_wal_autocheckpoint(db, SQLITE_DEFAULT_WAL_AUTOCHECKPOINT);
114511: 
114512: opendb_out:
114513:   sqlite3_free(zOpen);
114514:   if( db ){
114515:     assert( db->mutex!=0 || isThreadsafe==0 || sqlite3GlobalConfig.bFullMutex==0 );
114516:     sqlite3_mutex_leave(db->mutex);
114517:   }
114518:   rc = sqlite3_errcode(db);
114519:   assert( db!=0 || rc==SQLITE_NOMEM );
114520:   if( rc==SQLITE_NOMEM ){
114521:     sqlite3_close(db);
114522:     db = 0;
114523:   }else if( rc!=SQLITE_OK ){
114524:     db->magic = SQLITE_MAGIC_SICK;
114525:   }
114526:   *ppDb = db;
114527:   return sqlite3ApiExit(0, rc);
114528: }
114529: 
114530: /*
114531: ** Open a new database handle.
114532: */
114533: SQLITE_API int sqlite3_open(
114534:   const char *zFilename, 
114535:   sqlite3 **ppDb 
114536: ){
114537:   return openDatabase(zFilename, ppDb,
114538:                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
114539: }
114540: SQLITE_API int sqlite3_open_v2(
114541:   const char *filename,   /* Database filename (UTF-8) */
114542:   sqlite3 **ppDb,         /* OUT: SQLite db handle */
114543:   int flags,              /* Flags */
114544:   const char *zVfs        /* Name of VFS module to use */
114545: ){
114546:   return openDatabase(filename, ppDb, (unsigned int)flags, zVfs);
114547: }
114548: 
114549: #ifndef SQLITE_OMIT_UTF16
114550: /*
114551: ** Open a new database handle.
114552: */
114553: SQLITE_API int sqlite3_open16(
114554:   const void *zFilename, 
114555:   sqlite3 **ppDb
114556: ){
114557:   char const *zFilename8;   /* zFilename encoded in UTF-8 instead of UTF-16 */
114558:   sqlite3_value *pVal;
114559:   int rc;
114560: 
114561:   assert( zFilename );
114562:   assert( ppDb );
114563:   *ppDb = 0;
114564: #ifndef SQLITE_OMIT_AUTOINIT
114565:   rc = sqlite3_initialize();
114566:   if( rc ) return rc;
114567: #endif
114568:   pVal = sqlite3ValueNew(0);
114569:   sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
114570:   zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
114571:   if( zFilename8 ){
114572:     rc = openDatabase(zFilename8, ppDb,
114573:                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
114574:     assert( *ppDb || rc==SQLITE_NOMEM );
114575:     if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){
114576:       ENC(*ppDb) = SQLITE_UTF16NATIVE;
114577:     }
114578:   }else{
114579:     rc = SQLITE_NOMEM;
114580:   }
114581:   sqlite3ValueFree(pVal);
114582: 
114583:   return sqlite3ApiExit(0, rc);
114584: }
114585: #endif /* SQLITE_OMIT_UTF16 */
114586: 
114587: /*
114588: ** Register a new collation sequence with the database handle db.
114589: */
114590: SQLITE_API int sqlite3_create_collation(
114591:   sqlite3* db, 
114592:   const char *zName, 
114593:   int enc, 
114594:   void* pCtx,
114595:   int(*xCompare)(void*,int,const void*,int,const void*)
114596: ){
114597:   int rc;
114598:   sqlite3_mutex_enter(db->mutex);
114599:   assert( !db->mallocFailed );
114600:   rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, 0);
114601:   rc = sqlite3ApiExit(db, rc);
114602:   sqlite3_mutex_leave(db->mutex);
114603:   return rc;
114604: }
114605: 
114606: /*
114607: ** Register a new collation sequence with the database handle db.
114608: */
114609: SQLITE_API int sqlite3_create_collation_v2(
114610:   sqlite3* db, 
114611:   const char *zName, 
114612:   int enc, 
114613:   void* pCtx,
114614:   int(*xCompare)(void*,int,const void*,int,const void*),
114615:   void(*xDel)(void*)
114616: ){
114617:   int rc;
114618:   sqlite3_mutex_enter(db->mutex);
114619:   assert( !db->mallocFailed );
114620:   rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, xDel);
114621:   rc = sqlite3ApiExit(db, rc);
114622:   sqlite3_mutex_leave(db->mutex);
114623:   return rc;
114624: }
114625: 
114626: #ifndef SQLITE_OMIT_UTF16
114627: /*
114628: ** Register a new collation sequence with the database handle db.
114629: */
114630: SQLITE_API int sqlite3_create_collation16(
114631:   sqlite3* db, 
114632:   const void *zName,
114633:   int enc, 
114634:   void* pCtx,
114635:   int(*xCompare)(void*,int,const void*,int,const void*)
114636: ){
114637:   int rc = SQLITE_OK;
114638:   char *zName8;
114639:   sqlite3_mutex_enter(db->mutex);
114640:   assert( !db->mallocFailed );
114641:   zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE);
114642:   if( zName8 ){
114643:     rc = createCollation(db, zName8, (u8)enc, pCtx, xCompare, 0);
114644:     sqlite3DbFree(db, zName8);
114645:   }
114646:   rc = sqlite3ApiExit(db, rc);
114647:   sqlite3_mutex_leave(db->mutex);
114648:   return rc;
114649: }
114650: #endif /* SQLITE_OMIT_UTF16 */
114651: 
114652: /*
114653: ** Register a collation sequence factory callback with the database handle
114654: ** db. Replace any previously installed collation sequence factory.
114655: */
114656: SQLITE_API int sqlite3_collation_needed(
114657:   sqlite3 *db, 
114658:   void *pCollNeededArg, 
114659:   void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
114660: ){
114661:   sqlite3_mutex_enter(db->mutex);
114662:   db->xCollNeeded = xCollNeeded;
114663:   db->xCollNeeded16 = 0;
114664:   db->pCollNeededArg = pCollNeededArg;
114665:   sqlite3_mutex_leave(db->mutex);
114666:   return SQLITE_OK;
114667: }
114668: 
114669: #ifndef SQLITE_OMIT_UTF16
114670: /*
114671: ** Register a collation sequence factory callback with the database handle
114672: ** db. Replace any previously installed collation sequence factory.
114673: */
114674: SQLITE_API int sqlite3_collation_needed16(
114675:   sqlite3 *db, 
114676:   void *pCollNeededArg, 
114677:   void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
114678: ){
114679:   sqlite3_mutex_enter(db->mutex);
114680:   db->xCollNeeded = 0;
114681:   db->xCollNeeded16 = xCollNeeded16;
114682:   db->pCollNeededArg = pCollNeededArg;
114683:   sqlite3_mutex_leave(db->mutex);
114684:   return SQLITE_OK;
114685: }
114686: #endif /* SQLITE_OMIT_UTF16 */
114687: 
114688: #ifndef SQLITE_OMIT_DEPRECATED
114689: /*
114690: ** This function is now an anachronism. It used to be used to recover from a
114691: ** malloc() failure, but SQLite now does this automatically.
114692: */
114693: SQLITE_API int sqlite3_global_recover(void){
114694:   return SQLITE_OK;
114695: }
114696: #endif
114697: 
114698: /*
114699: ** Test to see whether or not the database connection is in autocommit
114700: ** mode.  Return TRUE if it is and FALSE if not.  Autocommit mode is on
114701: ** by default.  Autocommit is disabled by a BEGIN statement and reenabled
114702: ** by the next COMMIT or ROLLBACK.
114703: **
114704: ******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
114705: */
114706: SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){
114707:   return db->autoCommit;
114708: }
114709: 
114710: /*
114711: ** The following routines are subtitutes for constants SQLITE_CORRUPT,
114712: ** SQLITE_MISUSE, SQLITE_CANTOPEN, SQLITE_IOERR and possibly other error
114713: ** constants.  They server two purposes:
114714: **
114715: **   1.  Serve as a convenient place to set a breakpoint in a debugger
114716: **       to detect when version error conditions occurs.
114717: **
114718: **   2.  Invoke sqlite3_log() to provide the source code location where
114719: **       a low-level error is first detected.
114720: */
114721: SQLITE_PRIVATE int sqlite3CorruptError(int lineno){
114722:   testcase( sqlite3GlobalConfig.xLog!=0 );
114723:   sqlite3_log(SQLITE_CORRUPT,
114724:               "database corruption at line %d of [%.10s]",
114725:               lineno, 20+sqlite3_sourceid());
114726:   return SQLITE_CORRUPT;
114727: }
114728: SQLITE_PRIVATE int sqlite3MisuseError(int lineno){
114729:   testcase( sqlite3GlobalConfig.xLog!=0 );
114730:   sqlite3_log(SQLITE_MISUSE, 
114731:               "misuse at line %d of [%.10s]",
114732:               lineno, 20+sqlite3_sourceid());
114733:   return SQLITE_MISUSE;
114734: }
114735: SQLITE_PRIVATE int sqlite3CantopenError(int lineno){
114736:   testcase( sqlite3GlobalConfig.xLog!=0 );
114737:   sqlite3_log(SQLITE_CANTOPEN, 
114738:               "cannot open file at line %d of [%.10s]",
114739:               lineno, 20+sqlite3_sourceid());
114740:   return SQLITE_CANTOPEN;
114741: }
114742: 
114743: 
114744: #ifndef SQLITE_OMIT_DEPRECATED
114745: /*
114746: ** This is a convenience routine that makes sure that all thread-specific
114747: ** data for this thread has been deallocated.
114748: **
114749: ** SQLite no longer uses thread-specific data so this routine is now a
114750: ** no-op.  It is retained for historical compatibility.
114751: */
114752: SQLITE_API void sqlite3_thread_cleanup(void){
114753: }
114754: #endif
114755: 
114756: /*
114757: ** Return meta information about a specific column of a database table.
114758: ** See comment in sqlite3.h (sqlite.h.in) for details.
114759: */
114760: #ifdef SQLITE_ENABLE_COLUMN_METADATA
114761: SQLITE_API int sqlite3_table_column_metadata(
114762:   sqlite3 *db,                /* Connection handle */
114763:   const char *zDbName,        /* Database name or NULL */
114764:   const char *zTableName,     /* Table name */
114765:   const char *zColumnName,    /* Column name */
114766:   char const **pzDataType,    /* OUTPUT: Declared data type */
114767:   char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
114768:   int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
114769:   int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
114770:   int *pAutoinc               /* OUTPUT: True if column is auto-increment */
114771: ){
114772:   int rc;
114773:   char *zErrMsg = 0;
114774:   Table *pTab = 0;
114775:   Column *pCol = 0;
114776:   int iCol;
114777: 
114778:   char const *zDataType = 0;
114779:   char const *zCollSeq = 0;
114780:   int notnull = 0;
114781:   int primarykey = 0;
114782:   int autoinc = 0;
114783: 
114784:   /* Ensure the database schema has been loaded */
114785:   sqlite3_mutex_enter(db->mutex);
114786:   sqlite3BtreeEnterAll(db);
114787:   rc = sqlite3Init(db, &zErrMsg);
114788:   if( SQLITE_OK!=rc ){
114789:     goto error_out;
114790:   }
114791: 
114792:   /* Locate the table in question */
114793:   pTab = sqlite3FindTable(db, zTableName, zDbName);
114794:   if( !pTab || pTab->pSelect ){
114795:     pTab = 0;
114796:     goto error_out;
114797:   }
114798: 
114799:   /* Find the column for which info is requested */
114800:   if( sqlite3IsRowid(zColumnName) ){
114801:     iCol = pTab->iPKey;
114802:     if( iCol>=0 ){
114803:       pCol = &pTab->aCol[iCol];
114804:     }
114805:   }else{
114806:     for(iCol=0; iCol<pTab->nCol; iCol++){
114807:       pCol = &pTab->aCol[iCol];
114808:       if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){
114809:         break;
114810:       }
114811:     }
114812:     if( iCol==pTab->nCol ){
114813:       pTab = 0;
114814:       goto error_out;
114815:     }
114816:   }
114817: 
114818:   /* The following block stores the meta information that will be returned
114819:   ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey
114820:   ** and autoinc. At this point there are two possibilities:
114821:   ** 
114822:   **     1. The specified column name was rowid", "oid" or "_rowid_" 
114823:   **        and there is no explicitly declared IPK column. 
114824:   **
114825:   **     2. The table is not a view and the column name identified an 
114826:   **        explicitly declared column. Copy meta information from *pCol.
114827:   */ 
114828:   if( pCol ){
114829:     zDataType = pCol->zType;
114830:     zCollSeq = pCol->zColl;
114831:     notnull = pCol->notNull!=0;
114832:     primarykey  = pCol->isPrimKey!=0;
114833:     autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0;
114834:   }else{
114835:     zDataType = "INTEGER";
114836:     primarykey = 1;
114837:   }
114838:   if( !zCollSeq ){
114839:     zCollSeq = "BINARY";
114840:   }
114841: 
114842: error_out:
114843:   sqlite3BtreeLeaveAll(db);
114844: 
114845:   /* Whether the function call succeeded or failed, set the output parameters
114846:   ** to whatever their local counterparts contain. If an error did occur,
114847:   ** this has the effect of zeroing all output parameters.
114848:   */
114849:   if( pzDataType ) *pzDataType = zDataType;
114850:   if( pzCollSeq ) *pzCollSeq = zCollSeq;
114851:   if( pNotNull ) *pNotNull = notnull;
114852:   if( pPrimaryKey ) *pPrimaryKey = primarykey;
114853:   if( pAutoinc ) *pAutoinc = autoinc;
114854: 
114855:   if( SQLITE_OK==rc && !pTab ){
114856:     sqlite3DbFree(db, zErrMsg);
114857:     zErrMsg = sqlite3MPrintf(db, "no such table column: %s.%s", zTableName,
114858:         zColumnName);
114859:     rc = SQLITE_ERROR;
114860:   }
114861:   sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg);
114862:   sqlite3DbFree(db, zErrMsg);
114863:   rc = sqlite3ApiExit(db, rc);
114864:   sqlite3_mutex_leave(db->mutex);
114865:   return rc;
114866: }
114867: #endif
114868: 
114869: /*
114870: ** Sleep for a little while.  Return the amount of time slept.
114871: */
114872: SQLITE_API int sqlite3_sleep(int ms){
114873:   sqlite3_vfs *pVfs;
114874:   int rc;
114875:   pVfs = sqlite3_vfs_find(0);
114876:   if( pVfs==0 ) return 0;
114877: 
114878:   /* This function works in milliseconds, but the underlying OsSleep() 
114879:   ** API uses microseconds. Hence the 1000's.
114880:   */
114881:   rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000);
114882:   return rc;
114883: }
114884: 
114885: /*
114886: ** Enable or disable the extended result codes.
114887: */
114888: SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
114889:   sqlite3_mutex_enter(db->mutex);
114890:   db->errMask = onoff ? 0xffffffff : 0xff;
114891:   sqlite3_mutex_leave(db->mutex);
114892:   return SQLITE_OK;
114893: }
114894: 
114895: /*
114896: ** Invoke the xFileControl method on a particular database.
114897: */
114898: SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
114899:   int rc = SQLITE_ERROR;
114900:   int iDb;
114901:   sqlite3_mutex_enter(db->mutex);
114902:   if( zDbName==0 ){
114903:     iDb = 0;
114904:   }else{
114905:     for(iDb=0; iDb<db->nDb; iDb++){
114906:       if( strcmp(db->aDb[iDb].zName, zDbName)==0 ) break;
114907:     }
114908:   }
114909:   if( iDb<db->nDb ){
114910:     Btree *pBtree = db->aDb[iDb].pBt;
114911:     if( pBtree ){
114912:       Pager *pPager;
114913:       sqlite3_file *fd;
114914:       sqlite3BtreeEnter(pBtree);
114915:       pPager = sqlite3BtreePager(pBtree);
114916:       assert( pPager!=0 );
114917:       fd = sqlite3PagerFile(pPager);
114918:       assert( fd!=0 );
114919:       if( op==SQLITE_FCNTL_FILE_POINTER ){
114920:         *(sqlite3_file**)pArg = fd;
114921:         rc = SQLITE_OK;
114922:       }else if( fd->pMethods ){
114923:         rc = sqlite3OsFileControl(fd, op, pArg);
114924:       }else{
114925:         rc = SQLITE_NOTFOUND;
114926:       }
114927:       sqlite3BtreeLeave(pBtree);
114928:     }
114929:   }
114930:   sqlite3_mutex_leave(db->mutex);
114931:   return rc;   
114932: }
114933: 
114934: /*
114935: ** Interface to the testing logic.
114936: */
114937: SQLITE_API int sqlite3_test_control(int op, ...){
114938:   int rc = 0;
114939: #ifndef SQLITE_OMIT_BUILTIN_TEST
114940:   va_list ap;
114941:   va_start(ap, op);
114942:   switch( op ){
114943: 
114944:     /*
114945:     ** Save the current state of the PRNG.
114946:     */
114947:     case SQLITE_TESTCTRL_PRNG_SAVE: {
114948:       sqlite3PrngSaveState();
114949:       break;
114950:     }
114951: 
114952:     /*
114953:     ** Restore the state of the PRNG to the last state saved using
114954:     ** PRNG_SAVE.  If PRNG_SAVE has never before been called, then
114955:     ** this verb acts like PRNG_RESET.
114956:     */
114957:     case SQLITE_TESTCTRL_PRNG_RESTORE: {
114958:       sqlite3PrngRestoreState();
114959:       break;
114960:     }
114961: 
114962:     /*
114963:     ** Reset the PRNG back to its uninitialized state.  The next call
114964:     ** to sqlite3_randomness() will reseed the PRNG using a single call
114965:     ** to the xRandomness method of the default VFS.
114966:     */
114967:     case SQLITE_TESTCTRL_PRNG_RESET: {
114968:       sqlite3PrngResetState();
114969:       break;
114970:     }
114971: 
114972:     /*
114973:     **  sqlite3_test_control(BITVEC_TEST, size, program)
114974:     **
114975:     ** Run a test against a Bitvec object of size.  The program argument
114976:     ** is an array of integers that defines the test.  Return -1 on a
114977:     ** memory allocation error, 0 on success, or non-zero for an error.
114978:     ** See the sqlite3BitvecBuiltinTest() for additional information.
114979:     */
114980:     case SQLITE_TESTCTRL_BITVEC_TEST: {
114981:       int sz = va_arg(ap, int);
114982:       int *aProg = va_arg(ap, int*);
114983:       rc = sqlite3BitvecBuiltinTest(sz, aProg);
114984:       break;
114985:     }
114986: 
114987:     /*
114988:     **  sqlite3_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd)
114989:     **
114990:     ** Register hooks to call to indicate which malloc() failures 
114991:     ** are benign.
114992:     */
114993:     case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: {
114994:       typedef void (*void_function)(void);
114995:       void_function xBenignBegin;
114996:       void_function xBenignEnd;
114997:       xBenignBegin = va_arg(ap, void_function);
114998:       xBenignEnd = va_arg(ap, void_function);
114999:       sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd);
115000:       break;
115001:     }
115002: 
115003:     /*
115004:     **  sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, unsigned int X)
115005:     **
115006:     ** Set the PENDING byte to the value in the argument, if X>0.
115007:     ** Make no changes if X==0.  Return the value of the pending byte
115008:     ** as it existing before this routine was called.
115009:     **
115010:     ** IMPORTANT:  Changing the PENDING byte from 0x40000000 results in
115011:     ** an incompatible database file format.  Changing the PENDING byte
115012:     ** while any database connection is open results in undefined and
115013:     ** dileterious behavior.
115014:     */
115015:     case SQLITE_TESTCTRL_PENDING_BYTE: {
115016:       rc = PENDING_BYTE;
115017: #ifndef SQLITE_OMIT_WSD
115018:       {
115019:         unsigned int newVal = va_arg(ap, unsigned int);
115020:         if( newVal ) sqlite3PendingByte = newVal;
115021:       }
115022: #endif
115023:       break;
115024:     }
115025: 
115026:     /*
115027:     **  sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, int X)
115028:     **
115029:     ** This action provides a run-time test to see whether or not
115030:     ** assert() was enabled at compile-time.  If X is true and assert()
115031:     ** is enabled, then the return value is true.  If X is true and
115032:     ** assert() is disabled, then the return value is zero.  If X is
115033:     ** false and assert() is enabled, then the assertion fires and the
115034:     ** process aborts.  If X is false and assert() is disabled, then the
115035:     ** return value is zero.
115036:     */
115037:     case SQLITE_TESTCTRL_ASSERT: {
115038:       volatile int x = 0;
115039:       assert( (x = va_arg(ap,int))!=0 );
115040:       rc = x;
115041:       break;
115042:     }
115043: 
115044: 
115045:     /*
115046:     **  sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, int X)
115047:     **
115048:     ** This action provides a run-time test to see how the ALWAYS and
115049:     ** NEVER macros were defined at compile-time.
115050:     **
115051:     ** The return value is ALWAYS(X).  
115052:     **
115053:     ** The recommended test is X==2.  If the return value is 2, that means
115054:     ** ALWAYS() and NEVER() are both no-op pass-through macros, which is the
115055:     ** default setting.  If the return value is 1, then ALWAYS() is either
115056:     ** hard-coded to true or else it asserts if its argument is false.
115057:     ** The first behavior (hard-coded to true) is the case if
115058:     ** SQLITE_TESTCTRL_ASSERT shows that assert() is disabled and the second
115059:     ** behavior (assert if the argument to ALWAYS() is false) is the case if
115060:     ** SQLITE_TESTCTRL_ASSERT shows that assert() is enabled.
115061:     **
115062:     ** The run-time test procedure might look something like this:
115063:     **
115064:     **    if( sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, 2)==2 ){
115065:     **      // ALWAYS() and NEVER() are no-op pass-through macros
115066:     **    }else if( sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, 1) ){
115067:     **      // ALWAYS(x) asserts that x is true. NEVER(x) asserts x is false.
115068:     **    }else{
115069:     **      // ALWAYS(x) is a constant 1.  NEVER(x) is a constant 0.
115070:     **    }
115071:     */
115072:     case SQLITE_TESTCTRL_ALWAYS: {
115073:       int x = va_arg(ap,int);
115074:       rc = ALWAYS(x);
115075:       break;
115076:     }
115077: 
115078:     /*   sqlite3_test_control(SQLITE_TESTCTRL_RESERVE, sqlite3 *db, int N)
115079:     **
115080:     ** Set the nReserve size to N for the main database on the database
115081:     ** connection db.
115082:     */
115083:     case SQLITE_TESTCTRL_RESERVE: {
115084:       sqlite3 *db = va_arg(ap, sqlite3*);
115085:       int x = va_arg(ap,int);
115086:       sqlite3_mutex_enter(db->mutex);
115087:       sqlite3BtreeSetPageSize(db->aDb[0].pBt, 0, x, 0);
115088:       sqlite3_mutex_leave(db->mutex);
115089:       break;
115090:     }
115091: 
115092:     /*  sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS, sqlite3 *db, int N)
115093:     **
115094:     ** Enable or disable various optimizations for testing purposes.  The 
115095:     ** argument N is a bitmask of optimizations to be disabled.  For normal
115096:     ** operation N should be 0.  The idea is that a test program (like the
115097:     ** SQL Logic Test or SLT test module) can run the same SQL multiple times
115098:     ** with various optimizations disabled to verify that the same answer
115099:     ** is obtained in every case.
115100:     */
115101:     case SQLITE_TESTCTRL_OPTIMIZATIONS: {
115102:       sqlite3 *db = va_arg(ap, sqlite3*);
115103:       int x = va_arg(ap,int);
115104:       db->flags = (x & SQLITE_OptMask) | (db->flags & ~SQLITE_OptMask);
115105:       break;
115106:     }
115107: 
115108: #ifdef SQLITE_N_KEYWORD
115109:     /* sqlite3_test_control(SQLITE_TESTCTRL_ISKEYWORD, const char *zWord)
115110:     **
115111:     ** If zWord is a keyword recognized by the parser, then return the
115112:     ** number of keywords.  Or if zWord is not a keyword, return 0.
115113:     ** 
115114:     ** This test feature is only available in the amalgamation since
115115:     ** the SQLITE_N_KEYWORD macro is not defined in this file if SQLite
115116:     ** is built using separate source files.
115117:     */
115118:     case SQLITE_TESTCTRL_ISKEYWORD: {
115119:       const char *zWord = va_arg(ap, const char*);
115120:       int n = sqlite3Strlen30(zWord);
115121:       rc = (sqlite3KeywordCode((u8*)zWord, n)!=TK_ID) ? SQLITE_N_KEYWORD : 0;
115122:       break;
115123:     }
115124: #endif 
115125: 
115126:     /* sqlite3_test_control(SQLITE_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree);
115127:     **
115128:     ** Pass pFree into sqlite3ScratchFree(). 
115129:     ** If sz>0 then allocate a scratch buffer into pNew.  
115130:     */
115131:     case SQLITE_TESTCTRL_SCRATCHMALLOC: {
115132:       void *pFree, **ppNew;
115133:       int sz;
115134:       sz = va_arg(ap, int);
115135:       ppNew = va_arg(ap, void**);
115136:       pFree = va_arg(ap, void*);
115137:       if( sz ) *ppNew = sqlite3ScratchMalloc(sz);
115138:       sqlite3ScratchFree(pFree);
115139:       break;
115140:     }
115141: 
115142:     /*   sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, int onoff);
115143:     **
115144:     ** If parameter onoff is non-zero, configure the wrappers so that all
115145:     ** subsequent calls to localtime() and variants fail. If onoff is zero,
115146:     ** undo this setting.
115147:     */
115148:     case SQLITE_TESTCTRL_LOCALTIME_FAULT: {
115149:       sqlite3GlobalConfig.bLocaltimeFault = va_arg(ap, int);
115150:       break;
115151:     }
115152: 
115153: #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
115154:     /*   sqlite3_test_control(SQLITE_TESTCTRL_EXPLAIN_STMT,
115155:     **                        sqlite3_stmt*,const char**);
115156:     **
115157:     ** If compiled with SQLITE_ENABLE_TREE_EXPLAIN, each sqlite3_stmt holds
115158:     ** a string that describes the optimized parse tree.  This test-control
115159:     ** returns a pointer to that string.
115160:     */
115161:     case SQLITE_TESTCTRL_EXPLAIN_STMT: {
115162:       sqlite3_stmt *pStmt = va_arg(ap, sqlite3_stmt*);
115163:       const char **pzRet = va_arg(ap, const char**);
115164:       *pzRet = sqlite3VdbeExplanation((Vdbe*)pStmt);
115165:       break;
115166:     }
115167: #endif
115168: 
115169:   }
115170:   va_end(ap);
115171: #endif /* SQLITE_OMIT_BUILTIN_TEST */
115172:   return rc;
115173: }
115174: 
115175: /*
115176: ** This is a utility routine, useful to VFS implementations, that checks
115177: ** to see if a database file was a URI that contained a specific query 
115178: ** parameter, and if so obtains the value of the query parameter.
115179: **
115180: ** The zFilename argument is the filename pointer passed into the xOpen()
115181: ** method of a VFS implementation.  The zParam argument is the name of the
115182: ** query parameter we seek.  This routine returns the value of the zParam
115183: ** parameter if it exists.  If the parameter does not exist, this routine
115184: ** returns a NULL pointer.
115185: */
115186: SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam){
115187:   if( zFilename==0 ) return 0;
115188:   zFilename += sqlite3Strlen30(zFilename) + 1;
115189:   while( zFilename[0] ){
115190:     int x = strcmp(zFilename, zParam);
115191:     zFilename += sqlite3Strlen30(zFilename) + 1;
115192:     if( x==0 ) return zFilename;
115193:     zFilename += sqlite3Strlen30(zFilename) + 1;
115194:   }
115195:   return 0;
115196: }
115197: 
115198: /*
115199: ** Return a boolean value for a query parameter.
115200: */
115201: SQLITE_API int sqlite3_uri_boolean(const char *zFilename, const char *zParam, int bDflt){
115202:   const char *z = sqlite3_uri_parameter(zFilename, zParam);
115203:   return z ? sqlite3GetBoolean(z) : (bDflt!=0);
115204: }
115205: 
115206: /*
115207: ** Return a 64-bit integer value for a query parameter.
115208: */
115209: SQLITE_API sqlite3_int64 sqlite3_uri_int64(
115210:   const char *zFilename,    /* Filename as passed to xOpen */
115211:   const char *zParam,       /* URI parameter sought */
115212:   sqlite3_int64 bDflt       /* return if parameter is missing */
115213: ){
115214:   const char *z = sqlite3_uri_parameter(zFilename, zParam);
115215:   sqlite3_int64 v;
115216:   if( z && sqlite3Atoi64(z, &v, sqlite3Strlen30(z), SQLITE_UTF8)==SQLITE_OK ){
115217:     bDflt = v;
115218:   }
115219:   return bDflt;
115220: }
115221: 
115222: /*
115223: ** Return the filename of the database associated with a database
115224: ** connection.
115225: */
115226: SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){
115227:   int i;
115228:   for(i=0; i<db->nDb; i++){
115229:     if( db->aDb[i].pBt && sqlite3StrICmp(zDbName, db->aDb[i].zName)==0 ){
115230:       return sqlite3BtreeGetFilename(db->aDb[i].pBt);
115231:     }
115232:   }
115233:   return 0;
115234: }
115235: 
115236: /************** End of main.c ************************************************/
115237: /************** Begin file notify.c ******************************************/
115238: /*
115239: ** 2009 March 3
115240: **
115241: ** The author disclaims copyright to this source code.  In place of
115242: ** a legal notice, here is a blessing:
115243: **
115244: **    May you do good and not evil.
115245: **    May you find forgiveness for yourself and forgive others.
115246: **    May you share freely, never taking more than you give.
115247: **
115248: *************************************************************************
115249: **
115250: ** This file contains the implementation of the sqlite3_unlock_notify()
115251: ** API method and its associated functionality.
115252: */
115253: 
115254: /* Omit this entire file if SQLITE_ENABLE_UNLOCK_NOTIFY is not defined. */
115255: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
115256: 
115257: /*
115258: ** Public interfaces:
115259: **
115260: **   sqlite3ConnectionBlocked()
115261: **   sqlite3ConnectionUnlocked()
115262: **   sqlite3ConnectionClosed()
115263: **   sqlite3_unlock_notify()
115264: */
115265: 
115266: #define assertMutexHeld() \
115267:   assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)) )
115268: 
115269: /*
115270: ** Head of a linked list of all sqlite3 objects created by this process
115271: ** for which either sqlite3.pBlockingConnection or sqlite3.pUnlockConnection
115272: ** is not NULL. This variable may only accessed while the STATIC_MASTER
115273: ** mutex is held.
115274: */
115275: static sqlite3 *SQLITE_WSD sqlite3BlockedList = 0;
115276: 
115277: #ifndef NDEBUG
115278: /*
115279: ** This function is a complex assert() that verifies the following 
115280: ** properties of the blocked connections list:
115281: **
115282: **   1) Each entry in the list has a non-NULL value for either 
115283: **      pUnlockConnection or pBlockingConnection, or both.
115284: **
115285: **   2) All entries in the list that share a common value for 
115286: **      xUnlockNotify are grouped together.
115287: **
115288: **   3) If the argument db is not NULL, then none of the entries in the
115289: **      blocked connections list have pUnlockConnection or pBlockingConnection
115290: **      set to db. This is used when closing connection db.
115291: */
115292: static void checkListProperties(sqlite3 *db){
115293:   sqlite3 *p;
115294:   for(p=sqlite3BlockedList; p; p=p->pNextBlocked){
115295:     int seen = 0;
115296:     sqlite3 *p2;
115297: 
115298:     /* Verify property (1) */
115299:     assert( p->pUnlockConnection || p->pBlockingConnection );
115300: 
115301:     /* Verify property (2) */
115302:     for(p2=sqlite3BlockedList; p2!=p; p2=p2->pNextBlocked){
115303:       if( p2->xUnlockNotify==p->xUnlockNotify ) seen = 1;
115304:       assert( p2->xUnlockNotify==p->xUnlockNotify || !seen );
115305:       assert( db==0 || p->pUnlockConnection!=db );
115306:       assert( db==0 || p->pBlockingConnection!=db );
115307:     }
115308:   }
115309: }
115310: #else
115311: # define checkListProperties(x)
115312: #endif
115313: 
115314: /*
115315: ** Remove connection db from the blocked connections list. If connection
115316: ** db is not currently a part of the list, this function is a no-op.
115317: */
115318: static void removeFromBlockedList(sqlite3 *db){
115319:   sqlite3 **pp;
115320:   assertMutexHeld();
115321:   for(pp=&sqlite3BlockedList; *pp; pp = &(*pp)->pNextBlocked){
115322:     if( *pp==db ){
115323:       *pp = (*pp)->pNextBlocked;
115324:       break;
115325:     }
115326:   }
115327: }
115328: 
115329: /*
115330: ** Add connection db to the blocked connections list. It is assumed
115331: ** that it is not already a part of the list.
115332: */
115333: static void addToBlockedList(sqlite3 *db){
115334:   sqlite3 **pp;
115335:   assertMutexHeld();
115336:   for(
115337:     pp=&sqlite3BlockedList; 
115338:     *pp && (*pp)->xUnlockNotify!=db->xUnlockNotify; 
115339:     pp=&(*pp)->pNextBlocked
115340:   );
115341:   db->pNextBlocked = *pp;
115342:   *pp = db;
115343: }
115344: 
115345: /*
115346: ** Obtain the STATIC_MASTER mutex.
115347: */
115348: static void enterMutex(void){
115349:   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
115350:   checkListProperties(0);
115351: }
115352: 
115353: /*
115354: ** Release the STATIC_MASTER mutex.
115355: */
115356: static void leaveMutex(void){
115357:   assertMutexHeld();
115358:   checkListProperties(0);
115359:   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
115360: }
115361: 
115362: /*
115363: ** Register an unlock-notify callback.
115364: **
115365: ** This is called after connection "db" has attempted some operation
115366: ** but has received an SQLITE_LOCKED error because another connection
115367: ** (call it pOther) in the same process was busy using the same shared
115368: ** cache.  pOther is found by looking at db->pBlockingConnection.
115369: **
115370: ** If there is no blocking connection, the callback is invoked immediately,
115371: ** before this routine returns.
115372: **
115373: ** If pOther is already blocked on db, then report SQLITE_LOCKED, to indicate
115374: ** a deadlock.
115375: **
115376: ** Otherwise, make arrangements to invoke xNotify when pOther drops
115377: ** its locks.
115378: **
115379: ** Each call to this routine overrides any prior callbacks registered
115380: ** on the same "db".  If xNotify==0 then any prior callbacks are immediately
115381: ** cancelled.
115382: */
115383: SQLITE_API int sqlite3_unlock_notify(
115384:   sqlite3 *db,
115385:   void (*xNotify)(void **, int),
115386:   void *pArg
115387: ){
115388:   int rc = SQLITE_OK;
115389: 
115390:   sqlite3_mutex_enter(db->mutex);
115391:   enterMutex();
115392: 
115393:   if( xNotify==0 ){
115394:     removeFromBlockedList(db);
115395:     db->pBlockingConnection = 0;
115396:     db->pUnlockConnection = 0;
115397:     db->xUnlockNotify = 0;
115398:     db->pUnlockArg = 0;
115399:   }else if( 0==db->pBlockingConnection ){
115400:     /* The blocking transaction has been concluded. Or there never was a 
115401:     ** blocking transaction. In either case, invoke the notify callback
115402:     ** immediately. 
115403:     */
115404:     xNotify(&pArg, 1);
115405:   }else{
115406:     sqlite3 *p;
115407: 
115408:     for(p=db->pBlockingConnection; p && p!=db; p=p->pUnlockConnection){}
115409:     if( p ){
115410:       rc = SQLITE_LOCKED;              /* Deadlock detected. */
115411:     }else{
115412:       db->pUnlockConnection = db->pBlockingConnection;
115413:       db->xUnlockNotify = xNotify;
115414:       db->pUnlockArg = pArg;
115415:       removeFromBlockedList(db);
115416:       addToBlockedList(db);
115417:     }
115418:   }
115419: 
115420:   leaveMutex();
115421:   assert( !db->mallocFailed );
115422:   sqlite3Error(db, rc, (rc?"database is deadlocked":0));
115423:   sqlite3_mutex_leave(db->mutex);
115424:   return rc;
115425: }
115426: 
115427: /*
115428: ** This function is called while stepping or preparing a statement 
115429: ** associated with connection db. The operation will return SQLITE_LOCKED
115430: ** to the user because it requires a lock that will not be available
115431: ** until connection pBlocker concludes its current transaction.
115432: */
115433: SQLITE_PRIVATE void sqlite3ConnectionBlocked(sqlite3 *db, sqlite3 *pBlocker){
115434:   enterMutex();
115435:   if( db->pBlockingConnection==0 && db->pUnlockConnection==0 ){
115436:     addToBlockedList(db);
115437:   }
115438:   db->pBlockingConnection = pBlocker;
115439:   leaveMutex();
115440: }
115441: 
115442: /*
115443: ** This function is called when
115444: ** the transaction opened by database db has just finished. Locks held 
115445: ** by database connection db have been released.
115446: **
115447: ** This function loops through each entry in the blocked connections
115448: ** list and does the following:
115449: **
115450: **   1) If the sqlite3.pBlockingConnection member of a list entry is
115451: **      set to db, then set pBlockingConnection=0.
115452: **
115453: **   2) If the sqlite3.pUnlockConnection member of a list entry is
115454: **      set to db, then invoke the configured unlock-notify callback and
115455: **      set pUnlockConnection=0.
115456: **
115457: **   3) If the two steps above mean that pBlockingConnection==0 and
115458: **      pUnlockConnection==0, remove the entry from the blocked connections
115459: **      list.
115460: */
115461: SQLITE_PRIVATE void sqlite3ConnectionUnlocked(sqlite3 *db){
115462:   void (*xUnlockNotify)(void **, int) = 0; /* Unlock-notify cb to invoke */
115463:   int nArg = 0;                            /* Number of entries in aArg[] */
115464:   sqlite3 **pp;                            /* Iterator variable */
115465:   void **aArg;               /* Arguments to the unlock callback */
115466:   void **aDyn = 0;           /* Dynamically allocated space for aArg[] */
115467:   void *aStatic[16];         /* Starter space for aArg[].  No malloc required */
115468: 
115469:   aArg = aStatic;
115470:   enterMutex();         /* Enter STATIC_MASTER mutex */
115471: 
115472:   /* This loop runs once for each entry in the blocked-connections list. */
115473:   for(pp=&sqlite3BlockedList; *pp; /* no-op */ ){
115474:     sqlite3 *p = *pp;
115475: 
115476:     /* Step 1. */
115477:     if( p->pBlockingConnection==db ){
115478:       p->pBlockingConnection = 0;
115479:     }
115480: 
115481:     /* Step 2. */
115482:     if( p->pUnlockConnection==db ){
115483:       assert( p->xUnlockNotify );
115484:       if( p->xUnlockNotify!=xUnlockNotify && nArg!=0 ){
115485:         xUnlockNotify(aArg, nArg);
115486:         nArg = 0;
115487:       }
115488: 
115489:       sqlite3BeginBenignMalloc();
115490:       assert( aArg==aDyn || (aDyn==0 && aArg==aStatic) );
115491:       assert( nArg<=(int)ArraySize(aStatic) || aArg==aDyn );
115492:       if( (!aDyn && nArg==(int)ArraySize(aStatic))
115493:        || (aDyn && nArg==(int)(sqlite3MallocSize(aDyn)/sizeof(void*)))
115494:       ){
115495:         /* The aArg[] array needs to grow. */
115496:         void **pNew = (void **)sqlite3Malloc(nArg*sizeof(void *)*2);
115497:         if( pNew ){
115498:           memcpy(pNew, aArg, nArg*sizeof(void *));
115499:           sqlite3_free(aDyn);
115500:           aDyn = aArg = pNew;
115501:         }else{
115502:           /* This occurs when the array of context pointers that need to
115503:           ** be passed to the unlock-notify callback is larger than the
115504:           ** aStatic[] array allocated on the stack and the attempt to 
115505:           ** allocate a larger array from the heap has failed.
115506:           **
115507:           ** This is a difficult situation to handle. Returning an error
115508:           ** code to the caller is insufficient, as even if an error code
115509:           ** is returned the transaction on connection db will still be
115510:           ** closed and the unlock-notify callbacks on blocked connections
115511:           ** will go unissued. This might cause the application to wait
115512:           ** indefinitely for an unlock-notify callback that will never 
115513:           ** arrive.
115514:           **
115515:           ** Instead, invoke the unlock-notify callback with the context
115516:           ** array already accumulated. We can then clear the array and
115517:           ** begin accumulating any further context pointers without 
115518:           ** requiring any dynamic allocation. This is sub-optimal because
115519:           ** it means that instead of one callback with a large array of
115520:           ** context pointers the application will receive two or more
115521:           ** callbacks with smaller arrays of context pointers, which will
115522:           ** reduce the applications ability to prioritize multiple 
115523:           ** connections. But it is the best that can be done under the
115524:           ** circumstances.
115525:           */
115526:           xUnlockNotify(aArg, nArg);
115527:           nArg = 0;
115528:         }
115529:       }
115530:       sqlite3EndBenignMalloc();
115531: 
115532:       aArg[nArg++] = p->pUnlockArg;
115533:       xUnlockNotify = p->xUnlockNotify;
115534:       p->pUnlockConnection = 0;
115535:       p->xUnlockNotify = 0;
115536:       p->pUnlockArg = 0;
115537:     }
115538: 
115539:     /* Step 3. */
115540:     if( p->pBlockingConnection==0 && p->pUnlockConnection==0 ){
115541:       /* Remove connection p from the blocked connections list. */
115542:       *pp = p->pNextBlocked;
115543:       p->pNextBlocked = 0;
115544:     }else{
115545:       pp = &p->pNextBlocked;
115546:     }
115547:   }
115548: 
115549:   if( nArg!=0 ){
115550:     xUnlockNotify(aArg, nArg);
115551:   }
115552:   sqlite3_free(aDyn);
115553:   leaveMutex();         /* Leave STATIC_MASTER mutex */
115554: }
115555: 
115556: /*
115557: ** This is called when the database connection passed as an argument is 
115558: ** being closed. The connection is removed from the blocked list.
115559: */
115560: SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db){
115561:   sqlite3ConnectionUnlocked(db);
115562:   enterMutex();
115563:   removeFromBlockedList(db);
115564:   checkListProperties(db);
115565:   leaveMutex();
115566: }
115567: #endif
115568: 
115569: /************** End of notify.c **********************************************/
115570: /************** Begin file fts3.c ********************************************/
115571: /*
115572: ** 2006 Oct 10
115573: **
115574: ** The author disclaims copyright to this source code.  In place of
115575: ** a legal notice, here is a blessing:
115576: **
115577: **    May you do good and not evil.
115578: **    May you find forgiveness for yourself and forgive others.
115579: **    May you share freely, never taking more than you give.
115580: **
115581: ******************************************************************************
115582: **
115583: ** This is an SQLite module implementing full-text search.
115584: */
115585: 
115586: /*
115587: ** The code in this file is only compiled if:
115588: **
115589: **     * The FTS3 module is being built as an extension
115590: **       (in which case SQLITE_CORE is not defined), or
115591: **
115592: **     * The FTS3 module is being built into the core of
115593: **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
115594: */
115595: 
115596: /* The full-text index is stored in a series of b+tree (-like)
115597: ** structures called segments which map terms to doclists.  The
115598: ** structures are like b+trees in layout, but are constructed from the
115599: ** bottom up in optimal fashion and are not updatable.  Since trees
115600: ** are built from the bottom up, things will be described from the
115601: ** bottom up.
115602: **
115603: **
115604: **** Varints ****
115605: ** The basic unit of encoding is a variable-length integer called a
115606: ** varint.  We encode variable-length integers in little-endian order
115607: ** using seven bits * per byte as follows:
115608: **
115609: ** KEY:
115610: **         A = 0xxxxxxx    7 bits of data and one flag bit
115611: **         B = 1xxxxxxx    7 bits of data and one flag bit
115612: **
115613: **  7 bits - A
115614: ** 14 bits - BA
115615: ** 21 bits - BBA
115616: ** and so on.
115617: **
115618: ** This is similar in concept to how sqlite encodes "varints" but
115619: ** the encoding is not the same.  SQLite varints are big-endian
115620: ** are are limited to 9 bytes in length whereas FTS3 varints are
115621: ** little-endian and can be up to 10 bytes in length (in theory).
115622: **
115623: ** Example encodings:
115624: **
115625: **     1:    0x01
115626: **   127:    0x7f
115627: **   128:    0x81 0x00
115628: **
115629: **
115630: **** Document lists ****
115631: ** A doclist (document list) holds a docid-sorted list of hits for a
115632: ** given term.  Doclists hold docids and associated token positions.
115633: ** A docid is the unique integer identifier for a single document.
115634: ** A position is the index of a word within the document.  The first 
115635: ** word of the document has a position of 0.
115636: **
115637: ** FTS3 used to optionally store character offsets using a compile-time
115638: ** option.  But that functionality is no longer supported.
115639: **
115640: ** A doclist is stored like this:
115641: **
115642: ** array {
115643: **   varint docid;
115644: **   array {                (position list for column 0)
115645: **     varint position;     (2 more than the delta from previous position)
115646: **   }
115647: **   array {
115648: **     varint POS_COLUMN;   (marks start of position list for new column)
115649: **     varint column;       (index of new column)
115650: **     array {
115651: **       varint position;   (2 more than the delta from previous position)
115652: **     }
115653: **   }
115654: **   varint POS_END;        (marks end of positions for this document.
115655: ** }
115656: **
115657: ** Here, array { X } means zero or more occurrences of X, adjacent in
115658: ** memory.  A "position" is an index of a token in the token stream
115659: ** generated by the tokenizer. Note that POS_END and POS_COLUMN occur 
115660: ** in the same logical place as the position element, and act as sentinals
115661: ** ending a position list array.  POS_END is 0.  POS_COLUMN is 1.
115662: ** The positions numbers are not stored literally but rather as two more
115663: ** than the difference from the prior position, or the just the position plus
115664: ** 2 for the first position.  Example:
115665: **
115666: **   label:       A B C D E  F  G H   I  J K
115667: **   value:     123 5 9 1 1 14 35 0 234 72 0
115668: **
115669: ** The 123 value is the first docid.  For column zero in this document
115670: ** there are two matches at positions 3 and 10 (5-2 and 9-2+3).  The 1
115671: ** at D signals the start of a new column; the 1 at E indicates that the
115672: ** new column is column number 1.  There are two positions at 12 and 45
115673: ** (14-2 and 35-2+12).  The 0 at H indicate the end-of-document.  The
115674: ** 234 at I is the next docid.  It has one position 72 (72-2) and then
115675: ** terminates with the 0 at K.
115676: **
115677: ** A "position-list" is the list of positions for multiple columns for
115678: ** a single docid.  A "column-list" is the set of positions for a single
115679: ** column.  Hence, a position-list consists of one or more column-lists,
115680: ** a document record consists of a docid followed by a position-list and
115681: ** a doclist consists of one or more document records.
115682: **
115683: ** A bare doclist omits the position information, becoming an 
115684: ** array of varint-encoded docids.
115685: **
115686: **** Segment leaf nodes ****
115687: ** Segment leaf nodes store terms and doclists, ordered by term.  Leaf
115688: ** nodes are written using LeafWriter, and read using LeafReader (to
115689: ** iterate through a single leaf node's data) and LeavesReader (to
115690: ** iterate through a segment's entire leaf layer).  Leaf nodes have
115691: ** the format:
115692: **
115693: ** varint iHeight;             (height from leaf level, always 0)
115694: ** varint nTerm;               (length of first term)
115695: ** char pTerm[nTerm];          (content of first term)
115696: ** varint nDoclist;            (length of term's associated doclist)
115697: ** char pDoclist[nDoclist];    (content of doclist)
115698: ** array {
115699: **                             (further terms are delta-encoded)
115700: **   varint nPrefix;           (length of prefix shared with previous term)
115701: **   varint nSuffix;           (length of unshared suffix)
115702: **   char pTermSuffix[nSuffix];(unshared suffix of next term)
115703: **   varint nDoclist;          (length of term's associated doclist)
115704: **   char pDoclist[nDoclist];  (content of doclist)
115705: ** }
115706: **
115707: ** Here, array { X } means zero or more occurrences of X, adjacent in
115708: ** memory.
115709: **
115710: ** Leaf nodes are broken into blocks which are stored contiguously in
115711: ** the %_segments table in sorted order.  This means that when the end
115712: ** of a node is reached, the next term is in the node with the next
115713: ** greater node id.
115714: **
115715: ** New data is spilled to a new leaf node when the current node
115716: ** exceeds LEAF_MAX bytes (default 2048).  New data which itself is
115717: ** larger than STANDALONE_MIN (default 1024) is placed in a standalone
115718: ** node (a leaf node with a single term and doclist).  The goal of
115719: ** these settings is to pack together groups of small doclists while
115720: ** making it efficient to directly access large doclists.  The
115721: ** assumption is that large doclists represent terms which are more
115722: ** likely to be query targets.
115723: **
115724: ** TODO(shess) It may be useful for blocking decisions to be more
115725: ** dynamic.  For instance, it may make more sense to have a 2.5k leaf
115726: ** node rather than splitting into 2k and .5k nodes.  My intuition is
115727: ** that this might extend through 2x or 4x the pagesize.
115728: **
115729: **
115730: **** Segment interior nodes ****
115731: ** Segment interior nodes store blockids for subtree nodes and terms
115732: ** to describe what data is stored by the each subtree.  Interior
115733: ** nodes are written using InteriorWriter, and read using
115734: ** InteriorReader.  InteriorWriters are created as needed when
115735: ** SegmentWriter creates new leaf nodes, or when an interior node
115736: ** itself grows too big and must be split.  The format of interior
115737: ** nodes:
115738: **
115739: ** varint iHeight;           (height from leaf level, always >0)
115740: ** varint iBlockid;          (block id of node's leftmost subtree)
115741: ** optional {
115742: **   varint nTerm;           (length of first term)
115743: **   char pTerm[nTerm];      (content of first term)
115744: **   array {
115745: **                                (further terms are delta-encoded)
115746: **     varint nPrefix;            (length of shared prefix with previous term)
115747: **     varint nSuffix;            (length of unshared suffix)
115748: **     char pTermSuffix[nSuffix]; (unshared suffix of next term)
115749: **   }
115750: ** }
115751: **
115752: ** Here, optional { X } means an optional element, while array { X }
115753: ** means zero or more occurrences of X, adjacent in memory.
115754: **
115755: ** An interior node encodes n terms separating n+1 subtrees.  The
115756: ** subtree blocks are contiguous, so only the first subtree's blockid
115757: ** is encoded.  The subtree at iBlockid will contain all terms less
115758: ** than the first term encoded (or all terms if no term is encoded).
115759: ** Otherwise, for terms greater than or equal to pTerm[i] but less
115760: ** than pTerm[i+1], the subtree for that term will be rooted at
115761: ** iBlockid+i.  Interior nodes only store enough term data to
115762: ** distinguish adjacent children (if the rightmost term of the left
115763: ** child is "something", and the leftmost term of the right child is
115764: ** "wicked", only "w" is stored).
115765: **
115766: ** New data is spilled to a new interior node at the same height when
115767: ** the current node exceeds INTERIOR_MAX bytes (default 2048).
115768: ** INTERIOR_MIN_TERMS (default 7) keeps large terms from monopolizing
115769: ** interior nodes and making the tree too skinny.  The interior nodes
115770: ** at a given height are naturally tracked by interior nodes at
115771: ** height+1, and so on.
115772: **
115773: **
115774: **** Segment directory ****
115775: ** The segment directory in table %_segdir stores meta-information for
115776: ** merging and deleting segments, and also the root node of the
115777: ** segment's tree.
115778: **
115779: ** The root node is the top node of the segment's tree after encoding
115780: ** the entire segment, restricted to ROOT_MAX bytes (default 1024).
115781: ** This could be either a leaf node or an interior node.  If the top
115782: ** node requires more than ROOT_MAX bytes, it is flushed to %_segments
115783: ** and a new root interior node is generated (which should always fit
115784: ** within ROOT_MAX because it only needs space for 2 varints, the
115785: ** height and the blockid of the previous root).
115786: **
115787: ** The meta-information in the segment directory is:
115788: **   level               - segment level (see below)
115789: **   idx                 - index within level
115790: **                       - (level,idx uniquely identify a segment)
115791: **   start_block         - first leaf node
115792: **   leaves_end_block    - last leaf node
115793: **   end_block           - last block (including interior nodes)
115794: **   root                - contents of root node
115795: **
115796: ** If the root node is a leaf node, then start_block,
115797: ** leaves_end_block, and end_block are all 0.
115798: **
115799: **
115800: **** Segment merging ****
115801: ** To amortize update costs, segments are grouped into levels and
115802: ** merged in batches.  Each increase in level represents exponentially
115803: ** more documents.
115804: **
115805: ** New documents (actually, document updates) are tokenized and
115806: ** written individually (using LeafWriter) to a level 0 segment, with
115807: ** incrementing idx.  When idx reaches MERGE_COUNT (default 16), all
115808: ** level 0 segments are merged into a single level 1 segment.  Level 1
115809: ** is populated like level 0, and eventually MERGE_COUNT level 1
115810: ** segments are merged to a single level 2 segment (representing
115811: ** MERGE_COUNT^2 updates), and so on.
115812: **
115813: ** A segment merge traverses all segments at a given level in
115814: ** parallel, performing a straightforward sorted merge.  Since segment
115815: ** leaf nodes are written in to the %_segments table in order, this
115816: ** merge traverses the underlying sqlite disk structures efficiently.
115817: ** After the merge, all segment blocks from the merged level are
115818: ** deleted.
115819: **
115820: ** MERGE_COUNT controls how often we merge segments.  16 seems to be
115821: ** somewhat of a sweet spot for insertion performance.  32 and 64 show
115822: ** very similar performance numbers to 16 on insertion, though they're
115823: ** a tiny bit slower (perhaps due to more overhead in merge-time
115824: ** sorting).  8 is about 20% slower than 16, 4 about 50% slower than
115825: ** 16, 2 about 66% slower than 16.
115826: **
115827: ** At query time, high MERGE_COUNT increases the number of segments
115828: ** which need to be scanned and merged.  For instance, with 100k docs
115829: ** inserted:
115830: **
115831: **    MERGE_COUNT   segments
115832: **       16           25
115833: **        8           12
115834: **        4           10
115835: **        2            6
115836: **
115837: ** This appears to have only a moderate impact on queries for very
115838: ** frequent terms (which are somewhat dominated by segment merge
115839: ** costs), and infrequent and non-existent terms still seem to be fast
115840: ** even with many segments.
115841: **
115842: ** TODO(shess) That said, it would be nice to have a better query-side
115843: ** argument for MERGE_COUNT of 16.  Also, it is possible/likely that
115844: ** optimizations to things like doclist merging will swing the sweet
115845: ** spot around.
115846: **
115847: **
115848: **
115849: **** Handling of deletions and updates ****
115850: ** Since we're using a segmented structure, with no docid-oriented
115851: ** index into the term index, we clearly cannot simply update the term
115852: ** index when a document is deleted or updated.  For deletions, we
115853: ** write an empty doclist (varint(docid) varint(POS_END)), for updates
115854: ** we simply write the new doclist.  Segment merges overwrite older
115855: ** data for a particular docid with newer data, so deletes or updates
115856: ** will eventually overtake the earlier data and knock it out.  The
115857: ** query logic likewise merges doclists so that newer data knocks out
115858: ** older data.
115859: **
115860: ** TODO(shess) Provide a VACUUM type operation to clear out all
115861: ** deletions and duplications.  This would basically be a forced merge
115862: ** into a single segment.
115863: */
115864: 
115865: /************** Include fts3Int.h in the middle of fts3.c ********************/
115866: /************** Begin file fts3Int.h *****************************************/
115867: /*
115868: ** 2009 Nov 12
115869: **
115870: ** The author disclaims copyright to this source code.  In place of
115871: ** a legal notice, here is a blessing:
115872: **
115873: **    May you do good and not evil.
115874: **    May you find forgiveness for yourself and forgive others.
115875: **    May you share freely, never taking more than you give.
115876: **
115877: ******************************************************************************
115878: **
115879: */
115880: #ifndef _FTSINT_H
115881: #define _FTSINT_H
115882: 
115883: #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
115884: # define NDEBUG 1
115885: #endif
115886: 
115887: /*
115888: ** FTS4 is really an extension for FTS3.  It is enabled using the
115889: ** SQLITE_ENABLE_FTS3 macro.  But to avoid confusion we also all
115890: ** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3.
115891: */
115892: #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3)
115893: # define SQLITE_ENABLE_FTS3
115894: #endif
115895: 
115896: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
115897: 
115898: /* If not building as part of the core, include sqlite3ext.h. */
115899: #ifndef SQLITE_CORE
115900: SQLITE_API extern const sqlite3_api_routines *sqlite3_api;
115901: #endif
115902: 
115903: /************** Include fts3_tokenizer.h in the middle of fts3Int.h **********/
115904: /************** Begin file fts3_tokenizer.h **********************************/
115905: /*
115906: ** 2006 July 10
115907: **
115908: ** The author disclaims copyright to this source code.
115909: **
115910: *************************************************************************
115911: ** Defines the interface to tokenizers used by fulltext-search.  There
115912: ** are three basic components:
115913: **
115914: ** sqlite3_tokenizer_module is a singleton defining the tokenizer
115915: ** interface functions.  This is essentially the class structure for
115916: ** tokenizers.
115917: **
115918: ** sqlite3_tokenizer is used to define a particular tokenizer, perhaps
115919: ** including customization information defined at creation time.
115920: **
115921: ** sqlite3_tokenizer_cursor is generated by a tokenizer to generate
115922: ** tokens from a particular input.
115923: */
115924: #ifndef _FTS3_TOKENIZER_H_
115925: #define _FTS3_TOKENIZER_H_
115926: 
115927: /* TODO(shess) Only used for SQLITE_OK and SQLITE_DONE at this time.
115928: ** If tokenizers are to be allowed to call sqlite3_*() functions, then
115929: ** we will need a way to register the API consistently.
115930: */
115931: 
115932: /*
115933: ** Structures used by the tokenizer interface. When a new tokenizer
115934: ** implementation is registered, the caller provides a pointer to
115935: ** an sqlite3_tokenizer_module containing pointers to the callback
115936: ** functions that make up an implementation.
115937: **
115938: ** When an fts3 table is created, it passes any arguments passed to
115939: ** the tokenizer clause of the CREATE VIRTUAL TABLE statement to the
115940: ** sqlite3_tokenizer_module.xCreate() function of the requested tokenizer
115941: ** implementation. The xCreate() function in turn returns an 
115942: ** sqlite3_tokenizer structure representing the specific tokenizer to
115943: ** be used for the fts3 table (customized by the tokenizer clause arguments).
115944: **
115945: ** To tokenize an input buffer, the sqlite3_tokenizer_module.xOpen()
115946: ** method is called. It returns an sqlite3_tokenizer_cursor object
115947: ** that may be used to tokenize a specific input buffer based on
115948: ** the tokenization rules supplied by a specific sqlite3_tokenizer
115949: ** object.
115950: */
115951: typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module;
115952: typedef struct sqlite3_tokenizer sqlite3_tokenizer;
115953: typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor;
115954: 
115955: struct sqlite3_tokenizer_module {
115956: 
115957:   /*
115958:   ** Structure version. Should always be set to 0.
115959:   */
115960:   int iVersion;
115961: 
115962:   /*
115963:   ** Create a new tokenizer. The values in the argv[] array are the
115964:   ** arguments passed to the "tokenizer" clause of the CREATE VIRTUAL
115965:   ** TABLE statement that created the fts3 table. For example, if
115966:   ** the following SQL is executed:
115967:   **
115968:   **   CREATE .. USING fts3( ... , tokenizer <tokenizer-name> arg1 arg2)
115969:   **
115970:   ** then argc is set to 2, and the argv[] array contains pointers
115971:   ** to the strings "arg1" and "arg2".
115972:   **
115973:   ** This method should return either SQLITE_OK (0), or an SQLite error 
115974:   ** code. If SQLITE_OK is returned, then *ppTokenizer should be set
115975:   ** to point at the newly created tokenizer structure. The generic
115976:   ** sqlite3_tokenizer.pModule variable should not be initialised by
115977:   ** this callback. The caller will do so.
115978:   */
115979:   int (*xCreate)(
115980:     int argc,                           /* Size of argv array */
115981:     const char *const*argv,             /* Tokenizer argument strings */
115982:     sqlite3_tokenizer **ppTokenizer     /* OUT: Created tokenizer */
115983:   );
115984: 
115985:   /*
115986:   ** Destroy an existing tokenizer. The fts3 module calls this method
115987:   ** exactly once for each successful call to xCreate().
115988:   */
115989:   int (*xDestroy)(sqlite3_tokenizer *pTokenizer);
115990: 
115991:   /*
115992:   ** Create a tokenizer cursor to tokenize an input buffer. The caller
115993:   ** is responsible for ensuring that the input buffer remains valid
115994:   ** until the cursor is closed (using the xClose() method). 
115995:   */
115996:   int (*xOpen)(
115997:     sqlite3_tokenizer *pTokenizer,       /* Tokenizer object */
115998:     const char *pInput, int nBytes,      /* Input buffer */
115999:     sqlite3_tokenizer_cursor **ppCursor  /* OUT: Created tokenizer cursor */
116000:   );
116001: 
116002:   /*
116003:   ** Destroy an existing tokenizer cursor. The fts3 module calls this 
116004:   ** method exactly once for each successful call to xOpen().
116005:   */
116006:   int (*xClose)(sqlite3_tokenizer_cursor *pCursor);
116007: 
116008:   /*
116009:   ** Retrieve the next token from the tokenizer cursor pCursor. This
116010:   ** method should either return SQLITE_OK and set the values of the
116011:   ** "OUT" variables identified below, or SQLITE_DONE to indicate that
116012:   ** the end of the buffer has been reached, or an SQLite error code.
116013:   **
116014:   ** *ppToken should be set to point at a buffer containing the 
116015:   ** normalized version of the token (i.e. after any case-folding and/or
116016:   ** stemming has been performed). *pnBytes should be set to the length
116017:   ** of this buffer in bytes. The input text that generated the token is
116018:   ** identified by the byte offsets returned in *piStartOffset and
116019:   ** *piEndOffset. *piStartOffset should be set to the index of the first
116020:   ** byte of the token in the input buffer. *piEndOffset should be set
116021:   ** to the index of the first byte just past the end of the token in
116022:   ** the input buffer.
116023:   **
116024:   ** The buffer *ppToken is set to point at is managed by the tokenizer
116025:   ** implementation. It is only required to be valid until the next call
116026:   ** to xNext() or xClose(). 
116027:   */
116028:   /* TODO(shess) current implementation requires pInput to be
116029:   ** nul-terminated.  This should either be fixed, or pInput/nBytes
116030:   ** should be converted to zInput.
116031:   */
116032:   int (*xNext)(
116033:     sqlite3_tokenizer_cursor *pCursor,   /* Tokenizer cursor */
116034:     const char **ppToken, int *pnBytes,  /* OUT: Normalized text for token */
116035:     int *piStartOffset,  /* OUT: Byte offset of token in input buffer */
116036:     int *piEndOffset,    /* OUT: Byte offset of end of token in input buffer */
116037:     int *piPosition      /* OUT: Number of tokens returned before this one */
116038:   );
116039: };
116040: 
116041: struct sqlite3_tokenizer {
116042:   const sqlite3_tokenizer_module *pModule;  /* The module for this tokenizer */
116043:   /* Tokenizer implementations will typically add additional fields */
116044: };
116045: 
116046: struct sqlite3_tokenizer_cursor {
116047:   sqlite3_tokenizer *pTokenizer;       /* Tokenizer for this cursor. */
116048:   /* Tokenizer implementations will typically add additional fields */
116049: };
116050: 
116051: int fts3_global_term_cnt(int iTerm, int iCol);
116052: int fts3_term_cnt(int iTerm, int iCol);
116053: 
116054: 
116055: #endif /* _FTS3_TOKENIZER_H_ */
116056: 
116057: /************** End of fts3_tokenizer.h **************************************/
116058: /************** Continuing where we left off in fts3Int.h ********************/
116059: /************** Include fts3_hash.h in the middle of fts3Int.h ***************/
116060: /************** Begin file fts3_hash.h ***************************************/
116061: /*
116062: ** 2001 September 22
116063: **
116064: ** The author disclaims copyright to this source code.  In place of
116065: ** a legal notice, here is a blessing:
116066: **
116067: **    May you do good and not evil.
116068: **    May you find forgiveness for yourself and forgive others.
116069: **    May you share freely, never taking more than you give.
116070: **
116071: *************************************************************************
116072: ** This is the header file for the generic hash-table implemenation
116073: ** used in SQLite.  We've modified it slightly to serve as a standalone
116074: ** hash table implementation for the full-text indexing module.
116075: **
116076: */
116077: #ifndef _FTS3_HASH_H_
116078: #define _FTS3_HASH_H_
116079: 
116080: /* Forward declarations of structures. */
116081: typedef struct Fts3Hash Fts3Hash;
116082: typedef struct Fts3HashElem Fts3HashElem;
116083: 
116084: /* A complete hash table is an instance of the following structure.
116085: ** The internals of this structure are intended to be opaque -- client
116086: ** code should not attempt to access or modify the fields of this structure
116087: ** directly.  Change this structure only by using the routines below.
116088: ** However, many of the "procedures" and "functions" for modifying and
116089: ** accessing this structure are really macros, so we can't really make
116090: ** this structure opaque.
116091: */
116092: struct Fts3Hash {
116093:   char keyClass;          /* HASH_INT, _POINTER, _STRING, _BINARY */
116094:   char copyKey;           /* True if copy of key made on insert */
116095:   int count;              /* Number of entries in this table */
116096:   Fts3HashElem *first;    /* The first element of the array */
116097:   int htsize;             /* Number of buckets in the hash table */
116098:   struct _fts3ht {        /* the hash table */
116099:     int count;               /* Number of entries with this hash */
116100:     Fts3HashElem *chain;     /* Pointer to first entry with this hash */
116101:   } *ht;
116102: };
116103: 
116104: /* Each element in the hash table is an instance of the following 
116105: ** structure.  All elements are stored on a single doubly-linked list.
116106: **
116107: ** Again, this structure is intended to be opaque, but it can't really
116108: ** be opaque because it is used by macros.
116109: */
116110: struct Fts3HashElem {
116111:   Fts3HashElem *next, *prev; /* Next and previous elements in the table */
116112:   void *data;                /* Data associated with this element */
116113:   void *pKey; int nKey;      /* Key associated with this element */
116114: };
116115: 
116116: /*
116117: ** There are 2 different modes of operation for a hash table:
116118: **
116119: **   FTS3_HASH_STRING        pKey points to a string that is nKey bytes long
116120: **                           (including the null-terminator, if any).  Case
116121: **                           is respected in comparisons.
116122: **
116123: **   FTS3_HASH_BINARY        pKey points to binary data nKey bytes long. 
116124: **                           memcmp() is used to compare keys.
116125: **
116126: ** A copy of the key is made if the copyKey parameter to fts3HashInit is 1.  
116127: */
116128: #define FTS3_HASH_STRING    1
116129: #define FTS3_HASH_BINARY    2
116130: 
116131: /*
116132: ** Access routines.  To delete, insert a NULL pointer.
116133: */
116134: SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey);
116135: SQLITE_PRIVATE void *sqlite3Fts3HashInsert(Fts3Hash*, const void *pKey, int nKey, void *pData);
116136: SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash*, const void *pKey, int nKey);
116137: SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash*);
116138: SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(const Fts3Hash *, const void *, int);
116139: 
116140: /*
116141: ** Shorthand for the functions above
116142: */
116143: #define fts3HashInit     sqlite3Fts3HashInit
116144: #define fts3HashInsert   sqlite3Fts3HashInsert
116145: #define fts3HashFind     sqlite3Fts3HashFind
116146: #define fts3HashClear    sqlite3Fts3HashClear
116147: #define fts3HashFindElem sqlite3Fts3HashFindElem
116148: 
116149: /*
116150: ** Macros for looping over all elements of a hash table.  The idiom is
116151: ** like this:
116152: **
116153: **   Fts3Hash h;
116154: **   Fts3HashElem *p;
116155: **   ...
116156: **   for(p=fts3HashFirst(&h); p; p=fts3HashNext(p)){
116157: **     SomeStructure *pData = fts3HashData(p);
116158: **     // do something with pData
116159: **   }
116160: */
116161: #define fts3HashFirst(H)  ((H)->first)
116162: #define fts3HashNext(E)   ((E)->next)
116163: #define fts3HashData(E)   ((E)->data)
116164: #define fts3HashKey(E)    ((E)->pKey)
116165: #define fts3HashKeysize(E) ((E)->nKey)
116166: 
116167: /*
116168: ** Number of entries in a hash table
116169: */
116170: #define fts3HashCount(H)  ((H)->count)
116171: 
116172: #endif /* _FTS3_HASH_H_ */
116173: 
116174: /************** End of fts3_hash.h *******************************************/
116175: /************** Continuing where we left off in fts3Int.h ********************/
116176: 
116177: /*
116178: ** This constant controls how often segments are merged. Once there are
116179: ** FTS3_MERGE_COUNT segments of level N, they are merged into a single
116180: ** segment of level N+1.
116181: */
116182: #define FTS3_MERGE_COUNT 16
116183: 
116184: /*
116185: ** This is the maximum amount of data (in bytes) to store in the 
116186: ** Fts3Table.pendingTerms hash table. Normally, the hash table is
116187: ** populated as documents are inserted/updated/deleted in a transaction
116188: ** and used to create a new segment when the transaction is committed.
116189: ** However if this limit is reached midway through a transaction, a new 
116190: ** segment is created and the hash table cleared immediately.
116191: */
116192: #define FTS3_MAX_PENDING_DATA (1*1024*1024)
116193: 
116194: /*
116195: ** Macro to return the number of elements in an array. SQLite has a
116196: ** similar macro called ArraySize(). Use a different name to avoid
116197: ** a collision when building an amalgamation with built-in FTS3.
116198: */
116199: #define SizeofArray(X) ((int)(sizeof(X)/sizeof(X[0])))
116200: 
116201: 
116202: #ifndef MIN
116203: # define MIN(x,y) ((x)<(y)?(x):(y))
116204: #endif
116205: 
116206: /*
116207: ** Maximum length of a varint encoded integer. The varint format is different
116208: ** from that used by SQLite, so the maximum length is 10, not 9.
116209: */
116210: #define FTS3_VARINT_MAX 10
116211: 
116212: /*
116213: ** FTS4 virtual tables may maintain multiple indexes - one index of all terms
116214: ** in the document set and zero or more prefix indexes. All indexes are stored
116215: ** as one or more b+-trees in the %_segments and %_segdir tables. 
116216: **
116217: ** It is possible to determine which index a b+-tree belongs to based on the
116218: ** value stored in the "%_segdir.level" column. Given this value L, the index
116219: ** that the b+-tree belongs to is (L<<10). In other words, all b+-trees with
116220: ** level values between 0 and 1023 (inclusive) belong to index 0, all levels
116221: ** between 1024 and 2047 to index 1, and so on.
116222: **
116223: ** It is considered impossible for an index to use more than 1024 levels. In 
116224: ** theory though this may happen, but only after at least 
116225: ** (FTS3_MERGE_COUNT^1024) separate flushes of the pending-terms tables.
116226: */
116227: #define FTS3_SEGDIR_MAXLEVEL      1024
116228: #define FTS3_SEGDIR_MAXLEVEL_STR "1024"
116229: 
116230: /*
116231: ** The testcase() macro is only used by the amalgamation.  If undefined,
116232: ** make it a no-op.
116233: */
116234: #ifndef testcase
116235: # define testcase(X)
116236: #endif
116237: 
116238: /*
116239: ** Terminator values for position-lists and column-lists.
116240: */
116241: #define POS_COLUMN  (1)     /* Column-list terminator */
116242: #define POS_END     (0)     /* Position-list terminator */ 
116243: 
116244: /*
116245: ** This section provides definitions to allow the
116246: ** FTS3 extension to be compiled outside of the 
116247: ** amalgamation.
116248: */
116249: #ifndef SQLITE_AMALGAMATION
116250: /*
116251: ** Macros indicating that conditional expressions are always true or
116252: ** false.
116253: */
116254: #ifdef SQLITE_COVERAGE_TEST
116255: # define ALWAYS(x) (1)
116256: # define NEVER(X)  (0)
116257: #else
116258: # define ALWAYS(x) (x)
116259: # define NEVER(X)  (x)
116260: #endif
116261: 
116262: /*
116263: ** Internal types used by SQLite.
116264: */
116265: typedef unsigned char u8;         /* 1-byte (or larger) unsigned integer */
116266: typedef short int i16;            /* 2-byte (or larger) signed integer */
116267: typedef unsigned int u32;         /* 4-byte unsigned integer */
116268: typedef sqlite3_uint64 u64;       /* 8-byte unsigned integer */
116269: 
116270: /*
116271: ** Macro used to suppress compiler warnings for unused parameters.
116272: */
116273: #define UNUSED_PARAMETER(x) (void)(x)
116274: 
116275: /*
116276: ** Activate assert() only if SQLITE_TEST is enabled.
116277: */
116278: #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
116279: # define NDEBUG 1
116280: #endif
116281: 
116282: /*
116283: ** The TESTONLY macro is used to enclose variable declarations or
116284: ** other bits of code that are needed to support the arguments
116285: ** within testcase() and assert() macros.
116286: */
116287: #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
116288: # define TESTONLY(X)  X
116289: #else
116290: # define TESTONLY(X)
116291: #endif
116292: 
116293: #endif /* SQLITE_AMALGAMATION */
116294: 
116295: #ifdef SQLITE_DEBUG
116296: SQLITE_PRIVATE int sqlite3Fts3Corrupt(void);
116297: # define FTS_CORRUPT_VTAB sqlite3Fts3Corrupt()
116298: #else
116299: # define FTS_CORRUPT_VTAB SQLITE_CORRUPT_VTAB
116300: #endif
116301: 
116302: typedef struct Fts3Table Fts3Table;
116303: typedef struct Fts3Cursor Fts3Cursor;
116304: typedef struct Fts3Expr Fts3Expr;
116305: typedef struct Fts3Phrase Fts3Phrase;
116306: typedef struct Fts3PhraseToken Fts3PhraseToken;
116307: 
116308: typedef struct Fts3Doclist Fts3Doclist;
116309: typedef struct Fts3SegFilter Fts3SegFilter;
116310: typedef struct Fts3DeferredToken Fts3DeferredToken;
116311: typedef struct Fts3SegReader Fts3SegReader;
116312: typedef struct Fts3MultiSegReader Fts3MultiSegReader;
116313: 
116314: /*
116315: ** A connection to a fulltext index is an instance of the following
116316: ** structure. The xCreate and xConnect methods create an instance
116317: ** of this structure and xDestroy and xDisconnect free that instance.
116318: ** All other methods receive a pointer to the structure as one of their
116319: ** arguments.
116320: */
116321: struct Fts3Table {
116322:   sqlite3_vtab base;              /* Base class used by SQLite core */
116323:   sqlite3 *db;                    /* The database connection */
116324:   const char *zDb;                /* logical database name */
116325:   const char *zName;              /* virtual table name */
116326:   int nColumn;                    /* number of named columns in virtual table */
116327:   char **azColumn;                /* column names.  malloced */
116328:   sqlite3_tokenizer *pTokenizer;  /* tokenizer for inserts and queries */
116329:   char *zContentTbl;              /* content=xxx option, or NULL */
116330: 
116331:   /* Precompiled statements used by the implementation. Each of these 
116332:   ** statements is run and reset within a single virtual table API call. 
116333:   */
116334:   sqlite3_stmt *aStmt[27];
116335: 
116336:   char *zReadExprlist;
116337:   char *zWriteExprlist;
116338: 
116339:   int nNodeSize;                  /* Soft limit for node size */
116340:   u8 bHasStat;                    /* True if %_stat table exists */
116341:   u8 bHasDocsize;                 /* True if %_docsize table exists */
116342:   u8 bDescIdx;                    /* True if doclists are in reverse order */
116343:   int nPgsz;                      /* Page size for host database */
116344:   char *zSegmentsTbl;             /* Name of %_segments table */
116345:   sqlite3_blob *pSegments;        /* Blob handle open on %_segments table */
116346: 
116347:   /* TODO: Fix the first paragraph of this comment.
116348:   **
116349:   ** The following hash table is used to buffer pending index updates during
116350:   ** transactions. Variable nPendingData estimates the memory size of the 
116351:   ** pending data, including hash table overhead, but not malloc overhead. 
116352:   ** When nPendingData exceeds nMaxPendingData, the buffer is flushed 
116353:   ** automatically. Variable iPrevDocid is the docid of the most recently
116354:   ** inserted record.
116355:   **
116356:   ** A single FTS4 table may have multiple full-text indexes. For each index
116357:   ** there is an entry in the aIndex[] array. Index 0 is an index of all the
116358:   ** terms that appear in the document set. Each subsequent index in aIndex[]
116359:   ** is an index of prefixes of a specific length.
116360:   */
116361:   int nIndex;                     /* Size of aIndex[] */
116362:   struct Fts3Index {
116363:     int nPrefix;                  /* Prefix length (0 for main terms index) */
116364:     Fts3Hash hPending;            /* Pending terms table for this index */
116365:   } *aIndex;
116366:   int nMaxPendingData;            /* Max pending data before flush to disk */
116367:   int nPendingData;               /* Current bytes of pending data */
116368:   sqlite_int64 iPrevDocid;        /* Docid of most recently inserted document */
116369: 
116370: #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
116371:   /* State variables used for validating that the transaction control
116372:   ** methods of the virtual table are called at appropriate times.  These
116373:   ** values do not contribution to the FTS computation; they are used for
116374:   ** verifying the SQLite core.
116375:   */
116376:   int inTransaction;     /* True after xBegin but before xCommit/xRollback */
116377:   int mxSavepoint;       /* Largest valid xSavepoint integer */
116378: #endif
116379: };
116380: 
116381: /*
116382: ** When the core wants to read from the virtual table, it creates a
116383: ** virtual table cursor (an instance of the following structure) using
116384: ** the xOpen method. Cursors are destroyed using the xClose method.
116385: */
116386: struct Fts3Cursor {
116387:   sqlite3_vtab_cursor base;       /* Base class used by SQLite core */
116388:   i16 eSearch;                    /* Search strategy (see below) */
116389:   u8 isEof;                       /* True if at End Of Results */
116390:   u8 isRequireSeek;               /* True if must seek pStmt to %_content row */
116391:   sqlite3_stmt *pStmt;            /* Prepared statement in use by the cursor */
116392:   Fts3Expr *pExpr;                /* Parsed MATCH query string */
116393:   int nPhrase;                    /* Number of matchable phrases in query */
116394:   Fts3DeferredToken *pDeferred;   /* Deferred search tokens, if any */
116395:   sqlite3_int64 iPrevId;          /* Previous id read from aDoclist */
116396:   char *pNextId;                  /* Pointer into the body of aDoclist */
116397:   char *aDoclist;                 /* List of docids for full-text queries */
116398:   int nDoclist;                   /* Size of buffer at aDoclist */
116399:   u8 bDesc;                       /* True to sort in descending order */
116400:   int eEvalmode;                  /* An FTS3_EVAL_XX constant */
116401:   int nRowAvg;                    /* Average size of database rows, in pages */
116402:   sqlite3_int64 nDoc;             /* Documents in table */
116403: 
116404:   int isMatchinfoNeeded;          /* True when aMatchinfo[] needs filling in */
116405:   u32 *aMatchinfo;                /* Information about most recent match */
116406:   int nMatchinfo;                 /* Number of elements in aMatchinfo[] */
116407:   char *zMatchinfo;               /* Matchinfo specification */
116408: };
116409: 
116410: #define FTS3_EVAL_FILTER    0
116411: #define FTS3_EVAL_NEXT      1
116412: #define FTS3_EVAL_MATCHINFO 2
116413: 
116414: /*
116415: ** The Fts3Cursor.eSearch member is always set to one of the following.
116416: ** Actualy, Fts3Cursor.eSearch can be greater than or equal to
116417: ** FTS3_FULLTEXT_SEARCH.  If so, then Fts3Cursor.eSearch - 2 is the index
116418: ** of the column to be searched.  For example, in
116419: **
116420: **     CREATE VIRTUAL TABLE ex1 USING fts3(a,b,c,d);
116421: **     SELECT docid FROM ex1 WHERE b MATCH 'one two three';
116422: ** 
116423: ** Because the LHS of the MATCH operator is 2nd column "b",
116424: ** Fts3Cursor.eSearch will be set to FTS3_FULLTEXT_SEARCH+1.  (+0 for a,
116425: ** +1 for b, +2 for c, +3 for d.)  If the LHS of MATCH were "ex1" 
116426: ** indicating that all columns should be searched,
116427: ** then eSearch would be set to FTS3_FULLTEXT_SEARCH+4.
116428: */
116429: #define FTS3_FULLSCAN_SEARCH 0    /* Linear scan of %_content table */
116430: #define FTS3_DOCID_SEARCH    1    /* Lookup by rowid on %_content table */
116431: #define FTS3_FULLTEXT_SEARCH 2    /* Full-text index search */
116432: 
116433: 
116434: struct Fts3Doclist {
116435:   char *aAll;                    /* Array containing doclist (or NULL) */
116436:   int nAll;                      /* Size of a[] in bytes */
116437:   char *pNextDocid;              /* Pointer to next docid */
116438: 
116439:   sqlite3_int64 iDocid;          /* Current docid (if pList!=0) */
116440:   int bFreeList;                 /* True if pList should be sqlite3_free()d */
116441:   char *pList;                   /* Pointer to position list following iDocid */
116442:   int nList;                     /* Length of position list */
116443: };
116444: 
116445: /*
116446: ** A "phrase" is a sequence of one or more tokens that must match in
116447: ** sequence.  A single token is the base case and the most common case.
116448: ** For a sequence of tokens contained in double-quotes (i.e. "one two three")
116449: ** nToken will be the number of tokens in the string.
116450: */
116451: struct Fts3PhraseToken {
116452:   char *z;                        /* Text of the token */
116453:   int n;                          /* Number of bytes in buffer z */
116454:   int isPrefix;                   /* True if token ends with a "*" character */
116455:   int bFirst;                     /* True if token must appear at position 0 */
116456: 
116457:   /* Variables above this point are populated when the expression is
116458:   ** parsed (by code in fts3_expr.c). Below this point the variables are
116459:   ** used when evaluating the expression. */
116460:   Fts3DeferredToken *pDeferred;   /* Deferred token object for this token */
116461:   Fts3MultiSegReader *pSegcsr;    /* Segment-reader for this token */
116462: };
116463: 
116464: struct Fts3Phrase {
116465:   /* Cache of doclist for this phrase. */
116466:   Fts3Doclist doclist;
116467:   int bIncr;                 /* True if doclist is loaded incrementally */
116468:   int iDoclistToken;
116469: 
116470:   /* Variables below this point are populated by fts3_expr.c when parsing 
116471:   ** a MATCH expression. Everything above is part of the evaluation phase. 
116472:   */
116473:   int nToken;                /* Number of tokens in the phrase */
116474:   int iColumn;               /* Index of column this phrase must match */
116475:   Fts3PhraseToken aToken[1]; /* One entry for each token in the phrase */
116476: };
116477: 
116478: /*
116479: ** A tree of these objects forms the RHS of a MATCH operator.
116480: **
116481: ** If Fts3Expr.eType is FTSQUERY_PHRASE and isLoaded is true, then aDoclist 
116482: ** points to a malloced buffer, size nDoclist bytes, containing the results 
116483: ** of this phrase query in FTS3 doclist format. As usual, the initial 
116484: ** "Length" field found in doclists stored on disk is omitted from this 
116485: ** buffer.
116486: **
116487: ** Variable aMI is used only for FTSQUERY_NEAR nodes to store the global
116488: ** matchinfo data. If it is not NULL, it points to an array of size nCol*3,
116489: ** where nCol is the number of columns in the queried FTS table. The array
116490: ** is populated as follows:
116491: **
116492: **   aMI[iCol*3 + 0] = Undefined
116493: **   aMI[iCol*3 + 1] = Number of occurrences
116494: **   aMI[iCol*3 + 2] = Number of rows containing at least one instance
116495: **
116496: ** The aMI array is allocated using sqlite3_malloc(). It should be freed 
116497: ** when the expression node is.
116498: */
116499: struct Fts3Expr {
116500:   int eType;                 /* One of the FTSQUERY_XXX values defined below */
116501:   int nNear;                 /* Valid if eType==FTSQUERY_NEAR */
116502:   Fts3Expr *pParent;         /* pParent->pLeft==this or pParent->pRight==this */
116503:   Fts3Expr *pLeft;           /* Left operand */
116504:   Fts3Expr *pRight;          /* Right operand */
116505:   Fts3Phrase *pPhrase;       /* Valid if eType==FTSQUERY_PHRASE */
116506: 
116507:   /* The following are used by the fts3_eval.c module. */
116508:   sqlite3_int64 iDocid;      /* Current docid */
116509:   u8 bEof;                   /* True this expression is at EOF already */
116510:   u8 bStart;                 /* True if iDocid is valid */
116511:   u8 bDeferred;              /* True if this expression is entirely deferred */
116512: 
116513:   u32 *aMI;
116514: };
116515: 
116516: /*
116517: ** Candidate values for Fts3Query.eType. Note that the order of the first
116518: ** four values is in order of precedence when parsing expressions. For 
116519: ** example, the following:
116520: **
116521: **   "a OR b AND c NOT d NEAR e"
116522: **
116523: ** is equivalent to:
116524: **
116525: **   "a OR (b AND (c NOT (d NEAR e)))"
116526: */
116527: #define FTSQUERY_NEAR   1
116528: #define FTSQUERY_NOT    2
116529: #define FTSQUERY_AND    3
116530: #define FTSQUERY_OR     4
116531: #define FTSQUERY_PHRASE 5
116532: 
116533: 
116534: /* fts3_write.c */
116535: SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(sqlite3_vtab*,int,sqlite3_value**,sqlite3_int64*);
116536: SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *);
116537: SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *);
116538: SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *);
116539: SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(int, sqlite3_int64,
116540:   sqlite3_int64, sqlite3_int64, const char *, int, Fts3SegReader**);
116541: SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(
116542:   Fts3Table*,int,const char*,int,int,Fts3SegReader**);
116543: SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *);
116544: SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(Fts3Table*, int, int, sqlite3_stmt **);
116545: SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *);
116546: SQLITE_PRIVATE int sqlite3Fts3ReadBlock(Fts3Table*, sqlite3_int64, char **, int*, int*);
116547: 
116548: SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(Fts3Table *, sqlite3_stmt **);
116549: SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(Fts3Table *, sqlite3_int64, sqlite3_stmt **);
116550: 
116551: SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *);
116552: SQLITE_PRIVATE int sqlite3Fts3DeferToken(Fts3Cursor *, Fts3PhraseToken *, int);
116553: SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *);
116554: SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *);
116555: SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *);
116556: 
116557: /* Special values interpreted by sqlite3SegReaderCursor() */
116558: #define FTS3_SEGCURSOR_PENDING        -1
116559: #define FTS3_SEGCURSOR_ALL            -2
116560: 
116561: SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(Fts3Table*, Fts3MultiSegReader*, Fts3SegFilter*);
116562: SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(Fts3Table *, Fts3MultiSegReader *);
116563: SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish(Fts3MultiSegReader *);
116564: 
116565: SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor(
116566:     Fts3Table *, int, int, const char *, int, int, int, Fts3MultiSegReader *);
116567: 
116568: /* Flags allowed as part of the 4th argument to SegmentReaderIterate() */
116569: #define FTS3_SEGMENT_REQUIRE_POS   0x00000001
116570: #define FTS3_SEGMENT_IGNORE_EMPTY  0x00000002
116571: #define FTS3_SEGMENT_COLUMN_FILTER 0x00000004
116572: #define FTS3_SEGMENT_PREFIX        0x00000008
116573: #define FTS3_SEGMENT_SCAN          0x00000010
116574: #define FTS3_SEGMENT_FIRST         0x00000020
116575: 
116576: /* Type passed as 4th argument to SegmentReaderIterate() */
116577: struct Fts3SegFilter {
116578:   const char *zTerm;
116579:   int nTerm;
116580:   int iCol;
116581:   int flags;
116582: };
116583: 
116584: struct Fts3MultiSegReader {
116585:   /* Used internally by sqlite3Fts3SegReaderXXX() calls */
116586:   Fts3SegReader **apSegment;      /* Array of Fts3SegReader objects */
116587:   int nSegment;                   /* Size of apSegment array */
116588:   int nAdvance;                   /* How many seg-readers to advance */
116589:   Fts3SegFilter *pFilter;         /* Pointer to filter object */
116590:   char *aBuffer;                  /* Buffer to merge doclists in */
116591:   int nBuffer;                    /* Allocated size of aBuffer[] in bytes */
116592: 
116593:   int iColFilter;                 /* If >=0, filter for this column */
116594:   int bRestart;
116595: 
116596:   /* Used by fts3.c only. */
116597:   int nCost;                      /* Cost of running iterator */
116598:   int bLookup;                    /* True if a lookup of a single entry. */
116599: 
116600:   /* Output values. Valid only after Fts3SegReaderStep() returns SQLITE_ROW. */
116601:   char *zTerm;                    /* Pointer to term buffer */
116602:   int nTerm;                      /* Size of zTerm in bytes */
116603:   char *aDoclist;                 /* Pointer to doclist buffer */
116604:   int nDoclist;                   /* Size of aDoclist[] in bytes */
116605: };
116606: 
116607: /* fts3.c */
116608: SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *, sqlite3_int64);
116609: SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *, sqlite_int64 *);
116610: SQLITE_PRIVATE int sqlite3Fts3GetVarint32(const char *, int *);
116611: SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64);
116612: SQLITE_PRIVATE void sqlite3Fts3Dequote(char *);
116613: SQLITE_PRIVATE void sqlite3Fts3DoclistPrev(int,char*,int,char**,sqlite3_int64*,int*,u8*);
116614: SQLITE_PRIVATE int sqlite3Fts3EvalPhraseStats(Fts3Cursor *, Fts3Expr *, u32 *);
116615: SQLITE_PRIVATE int sqlite3Fts3FirstFilter(sqlite3_int64, char *, int, char *);
116616: 
116617: /* fts3_tokenizer.c */
116618: SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *, int *);
116619: SQLITE_PRIVATE int sqlite3Fts3InitHashTable(sqlite3 *, Fts3Hash *, const char *);
116620: SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(Fts3Hash *pHash, const char *, 
116621:     sqlite3_tokenizer **, char **
116622: );
116623: SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char);
116624: 
116625: /* fts3_snippet.c */
116626: SQLITE_PRIVATE void sqlite3Fts3Offsets(sqlite3_context*, Fts3Cursor*);
116627: SQLITE_PRIVATE void sqlite3Fts3Snippet(sqlite3_context *, Fts3Cursor *, const char *,
116628:   const char *, const char *, int, int
116629: );
116630: SQLITE_PRIVATE void sqlite3Fts3Matchinfo(sqlite3_context *, Fts3Cursor *, const char *);
116631: 
116632: /* fts3_expr.c */
116633: SQLITE_PRIVATE int sqlite3Fts3ExprParse(sqlite3_tokenizer *, 
116634:   char **, int, int, int, const char *, int, Fts3Expr **
116635: );
116636: SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *);
116637: #ifdef SQLITE_TEST
116638: SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3 *db);
116639: SQLITE_PRIVATE int sqlite3Fts3InitTerm(sqlite3 *db);
116640: #endif
116641: 
116642: /* fts3_aux.c */
116643: SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db);
116644: 
116645: SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *);
116646: 
116647: SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart(
116648:     Fts3Table*, Fts3MultiSegReader*, int, const char*, int);
116649: SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext(
116650:     Fts3Table *, Fts3MultiSegReader *, sqlite3_int64 *, char **, int *);
116651: SQLITE_PRIVATE char *sqlite3Fts3EvalPhrasePoslist(Fts3Cursor *, Fts3Expr *, int iCol); 
116652: SQLITE_PRIVATE int sqlite3Fts3MsrOvfl(Fts3Cursor *, Fts3MultiSegReader *, int *);
116653: SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr);
116654: 
116655: SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList(Fts3DeferredToken *, char **, int *);
116656: 
116657: #endif /* !SQLITE_CORE || SQLITE_ENABLE_FTS3 */
116658: #endif /* _FTSINT_H */
116659: 
116660: /************** End of fts3Int.h *********************************************/
116661: /************** Continuing where we left off in fts3.c ***********************/
116662: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
116663: 
116664: #if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE)
116665: # define SQLITE_CORE 1
116666: #endif
116667: 
116668: /* #include <assert.h> */
116669: /* #include <stdlib.h> */
116670: /* #include <stddef.h> */
116671: /* #include <stdio.h> */
116672: /* #include <string.h> */
116673: /* #include <stdarg.h> */
116674: 
116675: #ifndef SQLITE_CORE 
116676:   SQLITE_EXTENSION_INIT1
116677: #endif
116678: 
116679: static int fts3EvalNext(Fts3Cursor *pCsr);
116680: static int fts3EvalStart(Fts3Cursor *pCsr);
116681: static int fts3TermSegReaderCursor(
116682:     Fts3Cursor *, const char *, int, int, Fts3MultiSegReader **);
116683: 
116684: /* 
116685: ** Write a 64-bit variable-length integer to memory starting at p[0].
116686: ** The length of data written will be between 1 and FTS3_VARINT_MAX bytes.
116687: ** The number of bytes written is returned.
116688: */
116689: SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *p, sqlite_int64 v){
116690:   unsigned char *q = (unsigned char *) p;
116691:   sqlite_uint64 vu = v;
116692:   do{
116693:     *q++ = (unsigned char) ((vu & 0x7f) | 0x80);
116694:     vu >>= 7;
116695:   }while( vu!=0 );
116696:   q[-1] &= 0x7f;  /* turn off high bit in final byte */
116697:   assert( q - (unsigned char *)p <= FTS3_VARINT_MAX );
116698:   return (int) (q - (unsigned char *)p);
116699: }
116700: 
116701: /* 
116702: ** Read a 64-bit variable-length integer from memory starting at p[0].
116703: ** Return the number of bytes read, or 0 on error.
116704: ** The value is stored in *v.
116705: */
116706: SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){
116707:   const unsigned char *q = (const unsigned char *) p;
116708:   sqlite_uint64 x = 0, y = 1;
116709:   while( (*q&0x80)==0x80 && q-(unsigned char *)p<FTS3_VARINT_MAX ){
116710:     x += y * (*q++ & 0x7f);
116711:     y <<= 7;
116712:   }
116713:   x += y * (*q++);
116714:   *v = (sqlite_int64) x;
116715:   return (int) (q - (unsigned char *)p);
116716: }
116717: 
116718: /*
116719: ** Similar to sqlite3Fts3GetVarint(), except that the output is truncated to a
116720: ** 32-bit integer before it is returned.
116721: */
116722: SQLITE_PRIVATE int sqlite3Fts3GetVarint32(const char *p, int *pi){
116723:  sqlite_int64 i;
116724:  int ret = sqlite3Fts3GetVarint(p, &i);
116725:  *pi = (int) i;
116726:  return ret;
116727: }
116728: 
116729: /*
116730: ** Return the number of bytes required to encode v as a varint
116731: */
116732: SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64 v){
116733:   int i = 0;
116734:   do{
116735:     i++;
116736:     v >>= 7;
116737:   }while( v!=0 );
116738:   return i;
116739: }
116740: 
116741: /*
116742: ** Convert an SQL-style quoted string into a normal string by removing
116743: ** the quote characters.  The conversion is done in-place.  If the
116744: ** input does not begin with a quote character, then this routine
116745: ** is a no-op.
116746: **
116747: ** Examples:
116748: **
116749: **     "abc"   becomes   abc
116750: **     'xyz'   becomes   xyz
116751: **     [pqr]   becomes   pqr
116752: **     `mno`   becomes   mno
116753: **
116754: */
116755: SQLITE_PRIVATE void sqlite3Fts3Dequote(char *z){
116756:   char quote;                     /* Quote character (if any ) */
116757: 
116758:   quote = z[0];
116759:   if( quote=='[' || quote=='\'' || quote=='"' || quote=='`' ){
116760:     int iIn = 1;                  /* Index of next byte to read from input */
116761:     int iOut = 0;                 /* Index of next byte to write to output */
116762: 
116763:     /* If the first byte was a '[', then the close-quote character is a ']' */
116764:     if( quote=='[' ) quote = ']';  
116765: 
116766:     while( ALWAYS(z[iIn]) ){
116767:       if( z[iIn]==quote ){
116768:         if( z[iIn+1]!=quote ) break;
116769:         z[iOut++] = quote;
116770:         iIn += 2;
116771:       }else{
116772:         z[iOut++] = z[iIn++];
116773:       }
116774:     }
116775:     z[iOut] = '\0';
116776:   }
116777: }
116778: 
116779: /*
116780: ** Read a single varint from the doclist at *pp and advance *pp to point
116781: ** to the first byte past the end of the varint.  Add the value of the varint
116782: ** to *pVal.
116783: */
116784: static void fts3GetDeltaVarint(char **pp, sqlite3_int64 *pVal){
116785:   sqlite3_int64 iVal;
116786:   *pp += sqlite3Fts3GetVarint(*pp, &iVal);
116787:   *pVal += iVal;
116788: }
116789: 
116790: /*
116791: ** When this function is called, *pp points to the first byte following a
116792: ** varint that is part of a doclist (or position-list, or any other list
116793: ** of varints). This function moves *pp to point to the start of that varint,
116794: ** and sets *pVal by the varint value.
116795: **
116796: ** Argument pStart points to the first byte of the doclist that the
116797: ** varint is part of.
116798: */
116799: static void fts3GetReverseVarint(
116800:   char **pp, 
116801:   char *pStart, 
116802:   sqlite3_int64 *pVal
116803: ){
116804:   sqlite3_int64 iVal;
116805:   char *p;
116806: 
116807:   /* Pointer p now points at the first byte past the varint we are 
116808:   ** interested in. So, unless the doclist is corrupt, the 0x80 bit is
116809:   ** clear on character p[-1]. */
116810:   for(p = (*pp)-2; p>=pStart && *p&0x80; p--);
116811:   p++;
116812:   *pp = p;
116813: 
116814:   sqlite3Fts3GetVarint(p, &iVal);
116815:   *pVal = iVal;
116816: }
116817: 
116818: /*
116819: ** The xDisconnect() virtual table method.
116820: */
116821: static int fts3DisconnectMethod(sqlite3_vtab *pVtab){
116822:   Fts3Table *p = (Fts3Table *)pVtab;
116823:   int i;
116824: 
116825:   assert( p->nPendingData==0 );
116826:   assert( p->pSegments==0 );
116827: 
116828:   /* Free any prepared statements held */
116829:   for(i=0; i<SizeofArray(p->aStmt); i++){
116830:     sqlite3_finalize(p->aStmt[i]);
116831:   }
116832:   sqlite3_free(p->zSegmentsTbl);
116833:   sqlite3_free(p->zReadExprlist);
116834:   sqlite3_free(p->zWriteExprlist);
116835:   sqlite3_free(p->zContentTbl);
116836: 
116837:   /* Invoke the tokenizer destructor to free the tokenizer. */
116838:   p->pTokenizer->pModule->xDestroy(p->pTokenizer);
116839: 
116840:   sqlite3_free(p);
116841:   return SQLITE_OK;
116842: }
116843: 
116844: /*
116845: ** Construct one or more SQL statements from the format string given
116846: ** and then evaluate those statements. The success code is written
116847: ** into *pRc.
116848: **
116849: ** If *pRc is initially non-zero then this routine is a no-op.
116850: */
116851: static void fts3DbExec(
116852:   int *pRc,              /* Success code */
116853:   sqlite3 *db,           /* Database in which to run SQL */
116854:   const char *zFormat,   /* Format string for SQL */
116855:   ...                    /* Arguments to the format string */
116856: ){
116857:   va_list ap;
116858:   char *zSql;
116859:   if( *pRc ) return;
116860:   va_start(ap, zFormat);
116861:   zSql = sqlite3_vmprintf(zFormat, ap);
116862:   va_end(ap);
116863:   if( zSql==0 ){
116864:     *pRc = SQLITE_NOMEM;
116865:   }else{
116866:     *pRc = sqlite3_exec(db, zSql, 0, 0, 0);
116867:     sqlite3_free(zSql);
116868:   }
116869: }
116870: 
116871: /*
116872: ** The xDestroy() virtual table method.
116873: */
116874: static int fts3DestroyMethod(sqlite3_vtab *pVtab){
116875:   Fts3Table *p = (Fts3Table *)pVtab;
116876:   int rc = SQLITE_OK;              /* Return code */
116877:   const char *zDb = p->zDb;        /* Name of database (e.g. "main", "temp") */
116878:   sqlite3 *db = p->db;             /* Database handle */
116879: 
116880:   /* Drop the shadow tables */
116881:   if( p->zContentTbl==0 ){
116882:     fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_content'", zDb, p->zName);
116883:   }
116884:   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_segments'", zDb,p->zName);
116885:   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_segdir'", zDb, p->zName);
116886:   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_docsize'", zDb, p->zName);
116887:   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_stat'", zDb, p->zName);
116888: 
116889:   /* If everything has worked, invoke fts3DisconnectMethod() to free the
116890:   ** memory associated with the Fts3Table structure and return SQLITE_OK.
116891:   ** Otherwise, return an SQLite error code.
116892:   */
116893:   return (rc==SQLITE_OK ? fts3DisconnectMethod(pVtab) : rc);
116894: }
116895: 
116896: 
116897: /*
116898: ** Invoke sqlite3_declare_vtab() to declare the schema for the FTS3 table
116899: ** passed as the first argument. This is done as part of the xConnect()
116900: ** and xCreate() methods.
116901: **
116902: ** If *pRc is non-zero when this function is called, it is a no-op. 
116903: ** Otherwise, if an error occurs, an SQLite error code is stored in *pRc
116904: ** before returning.
116905: */
116906: static void fts3DeclareVtab(int *pRc, Fts3Table *p){
116907:   if( *pRc==SQLITE_OK ){
116908:     int i;                        /* Iterator variable */
116909:     int rc;                       /* Return code */
116910:     char *zSql;                   /* SQL statement passed to declare_vtab() */
116911:     char *zCols;                  /* List of user defined columns */
116912: 
116913:     sqlite3_vtab_config(p->db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
116914: 
116915:     /* Create a list of user columns for the virtual table */
116916:     zCols = sqlite3_mprintf("%Q, ", p->azColumn[0]);
116917:     for(i=1; zCols && i<p->nColumn; i++){
116918:       zCols = sqlite3_mprintf("%z%Q, ", zCols, p->azColumn[i]);
116919:     }
116920: 
116921:     /* Create the whole "CREATE TABLE" statement to pass to SQLite */
116922:     zSql = sqlite3_mprintf(
116923:         "CREATE TABLE x(%s %Q HIDDEN, docid HIDDEN)", zCols, p->zName
116924:     );
116925:     if( !zCols || !zSql ){
116926:       rc = SQLITE_NOMEM;
116927:     }else{
116928:       rc = sqlite3_declare_vtab(p->db, zSql);
116929:     }
116930: 
116931:     sqlite3_free(zSql);
116932:     sqlite3_free(zCols);
116933:     *pRc = rc;
116934:   }
116935: }
116936: 
116937: /*
116938: ** Create the backing store tables (%_content, %_segments and %_segdir)
116939: ** required by the FTS3 table passed as the only argument. This is done
116940: ** as part of the vtab xCreate() method.
116941: **
116942: ** If the p->bHasDocsize boolean is true (indicating that this is an
116943: ** FTS4 table, not an FTS3 table) then also create the %_docsize and
116944: ** %_stat tables required by FTS4.
116945: */
116946: static int fts3CreateTables(Fts3Table *p){
116947:   int rc = SQLITE_OK;             /* Return code */
116948:   int i;                          /* Iterator variable */
116949:   sqlite3 *db = p->db;            /* The database connection */
116950: 
116951:   if( p->zContentTbl==0 ){
116952:     char *zContentCols;           /* Columns of %_content table */
116953: 
116954:     /* Create a list of user columns for the content table */
116955:     zContentCols = sqlite3_mprintf("docid INTEGER PRIMARY KEY");
116956:     for(i=0; zContentCols && i<p->nColumn; i++){
116957:       char *z = p->azColumn[i];
116958:       zContentCols = sqlite3_mprintf("%z, 'c%d%q'", zContentCols, i, z);
116959:     }
116960:     if( zContentCols==0 ) rc = SQLITE_NOMEM;
116961:   
116962:     /* Create the content table */
116963:     fts3DbExec(&rc, db, 
116964:        "CREATE TABLE %Q.'%q_content'(%s)",
116965:        p->zDb, p->zName, zContentCols
116966:     );
116967:     sqlite3_free(zContentCols);
116968:   }
116969: 
116970:   /* Create other tables */
116971:   fts3DbExec(&rc, db, 
116972:       "CREATE TABLE %Q.'%q_segments'(blockid INTEGER PRIMARY KEY, block BLOB);",
116973:       p->zDb, p->zName
116974:   );
116975:   fts3DbExec(&rc, db, 
116976:       "CREATE TABLE %Q.'%q_segdir'("
116977:         "level INTEGER,"
116978:         "idx INTEGER,"
116979:         "start_block INTEGER,"
116980:         "leaves_end_block INTEGER,"
116981:         "end_block INTEGER,"
116982:         "root BLOB,"
116983:         "PRIMARY KEY(level, idx)"
116984:       ");",
116985:       p->zDb, p->zName
116986:   );
116987:   if( p->bHasDocsize ){
116988:     fts3DbExec(&rc, db, 
116989:         "CREATE TABLE %Q.'%q_docsize'(docid INTEGER PRIMARY KEY, size BLOB);",
116990:         p->zDb, p->zName
116991:     );
116992:   }
116993:   if( p->bHasStat ){
116994:     fts3DbExec(&rc, db, 
116995:         "CREATE TABLE %Q.'%q_stat'(id INTEGER PRIMARY KEY, value BLOB);",
116996:         p->zDb, p->zName
116997:     );
116998:   }
116999:   return rc;
117000: }
117001: 
117002: /*
117003: ** Store the current database page-size in bytes in p->nPgsz.
117004: **
117005: ** If *pRc is non-zero when this function is called, it is a no-op. 
117006: ** Otherwise, if an error occurs, an SQLite error code is stored in *pRc
117007: ** before returning.
117008: */
117009: static void fts3DatabasePageSize(int *pRc, Fts3Table *p){
117010:   if( *pRc==SQLITE_OK ){
117011:     int rc;                       /* Return code */
117012:     char *zSql;                   /* SQL text "PRAGMA %Q.page_size" */
117013:     sqlite3_stmt *pStmt;          /* Compiled "PRAGMA %Q.page_size" statement */
117014:   
117015:     zSql = sqlite3_mprintf("PRAGMA %Q.page_size", p->zDb);
117016:     if( !zSql ){
117017:       rc = SQLITE_NOMEM;
117018:     }else{
117019:       rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
117020:       if( rc==SQLITE_OK ){
117021:         sqlite3_step(pStmt);
117022:         p->nPgsz = sqlite3_column_int(pStmt, 0);
117023:         rc = sqlite3_finalize(pStmt);
117024:       }else if( rc==SQLITE_AUTH ){
117025:         p->nPgsz = 1024;
117026:         rc = SQLITE_OK;
117027:       }
117028:     }
117029:     assert( p->nPgsz>0 || rc!=SQLITE_OK );
117030:     sqlite3_free(zSql);
117031:     *pRc = rc;
117032:   }
117033: }
117034: 
117035: /*
117036: ** "Special" FTS4 arguments are column specifications of the following form:
117037: **
117038: **   <key> = <value>
117039: **
117040: ** There may not be whitespace surrounding the "=" character. The <value> 
117041: ** term may be quoted, but the <key> may not.
117042: */
117043: static int fts3IsSpecialColumn(
117044:   const char *z, 
117045:   int *pnKey,
117046:   char **pzValue
117047: ){
117048:   char *zValue;
117049:   const char *zCsr = z;
117050: 
117051:   while( *zCsr!='=' ){
117052:     if( *zCsr=='\0' ) return 0;
117053:     zCsr++;
117054:   }
117055: 
117056:   *pnKey = (int)(zCsr-z);
117057:   zValue = sqlite3_mprintf("%s", &zCsr[1]);
117058:   if( zValue ){
117059:     sqlite3Fts3Dequote(zValue);
117060:   }
117061:   *pzValue = zValue;
117062:   return 1;
117063: }
117064: 
117065: /*
117066: ** Append the output of a printf() style formatting to an existing string.
117067: */
117068: static void fts3Appendf(
117069:   int *pRc,                       /* IN/OUT: Error code */
117070:   char **pz,                      /* IN/OUT: Pointer to string buffer */
117071:   const char *zFormat,            /* Printf format string to append */
117072:   ...                             /* Arguments for printf format string */
117073: ){
117074:   if( *pRc==SQLITE_OK ){
117075:     va_list ap;
117076:     char *z;
117077:     va_start(ap, zFormat);
117078:     z = sqlite3_vmprintf(zFormat, ap);
117079:     va_end(ap);
117080:     if( z && *pz ){
117081:       char *z2 = sqlite3_mprintf("%s%s", *pz, z);
117082:       sqlite3_free(z);
117083:       z = z2;
117084:     }
117085:     if( z==0 ) *pRc = SQLITE_NOMEM;
117086:     sqlite3_free(*pz);
117087:     *pz = z;
117088:   }
117089: }
117090: 
117091: /*
117092: ** Return a copy of input string zInput enclosed in double-quotes (") and
117093: ** with all double quote characters escaped. For example:
117094: **
117095: **     fts3QuoteId("un \"zip\"")   ->    "un \"\"zip\"\""
117096: **
117097: ** The pointer returned points to memory obtained from sqlite3_malloc(). It
117098: ** is the callers responsibility to call sqlite3_free() to release this
117099: ** memory.
117100: */
117101: static char *fts3QuoteId(char const *zInput){
117102:   int nRet;
117103:   char *zRet;
117104:   nRet = 2 + strlen(zInput)*2 + 1;
117105:   zRet = sqlite3_malloc(nRet);
117106:   if( zRet ){
117107:     int i;
117108:     char *z = zRet;
117109:     *(z++) = '"';
117110:     for(i=0; zInput[i]; i++){
117111:       if( zInput[i]=='"' ) *(z++) = '"';
117112:       *(z++) = zInput[i];
117113:     }
117114:     *(z++) = '"';
117115:     *(z++) = '\0';
117116:   }
117117:   return zRet;
117118: }
117119: 
117120: /*
117121: ** Return a list of comma separated SQL expressions and a FROM clause that 
117122: ** could be used in a SELECT statement such as the following:
117123: **
117124: **     SELECT <list of expressions> FROM %_content AS x ...
117125: **
117126: ** to return the docid, followed by each column of text data in order
117127: ** from left to write. If parameter zFunc is not NULL, then instead of
117128: ** being returned directly each column of text data is passed to an SQL
117129: ** function named zFunc first. For example, if zFunc is "unzip" and the
117130: ** table has the three user-defined columns "a", "b", and "c", the following
117131: ** string is returned:
117132: **
117133: **     "docid, unzip(x.'a'), unzip(x.'b'), unzip(x.'c') FROM %_content AS x"
117134: **
117135: ** The pointer returned points to a buffer allocated by sqlite3_malloc(). It
117136: ** is the responsibility of the caller to eventually free it.
117137: **
117138: ** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and
117139: ** a NULL pointer is returned). Otherwise, if an OOM error is encountered
117140: ** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If
117141: ** no error occurs, *pRc is left unmodified.
117142: */
117143: static char *fts3ReadExprList(Fts3Table *p, const char *zFunc, int *pRc){
117144:   char *zRet = 0;
117145:   char *zFree = 0;
117146:   char *zFunction;
117147:   int i;
117148: 
117149:   if( p->zContentTbl==0 ){
117150:     if( !zFunc ){
117151:       zFunction = "";
117152:     }else{
117153:       zFree = zFunction = fts3QuoteId(zFunc);
117154:     }
117155:     fts3Appendf(pRc, &zRet, "docid");
117156:     for(i=0; i<p->nColumn; i++){
117157:       fts3Appendf(pRc, &zRet, ",%s(x.'c%d%q')", zFunction, i, p->azColumn[i]);
117158:     }
117159:     sqlite3_free(zFree);
117160:   }else{
117161:     fts3Appendf(pRc, &zRet, "rowid");
117162:     for(i=0; i<p->nColumn; i++){
117163:       fts3Appendf(pRc, &zRet, ", x.'%q'", p->azColumn[i]);
117164:     }
117165:   }
117166:   fts3Appendf(pRc, &zRet, "FROM '%q'.'%q%s' AS x", 
117167:       p->zDb,
117168:       (p->zContentTbl ? p->zContentTbl : p->zName),
117169:       (p->zContentTbl ? "" : "_content")
117170:   );
117171:   return zRet;
117172: }
117173: 
117174: /*
117175: ** Return a list of N comma separated question marks, where N is the number
117176: ** of columns in the %_content table (one for the docid plus one for each
117177: ** user-defined text column).
117178: **
117179: ** If argument zFunc is not NULL, then all but the first question mark
117180: ** is preceded by zFunc and an open bracket, and followed by a closed
117181: ** bracket. For example, if zFunc is "zip" and the FTS3 table has three 
117182: ** user-defined text columns, the following string is returned:
117183: **
117184: **     "?, zip(?), zip(?), zip(?)"
117185: **
117186: ** The pointer returned points to a buffer allocated by sqlite3_malloc(). It
117187: ** is the responsibility of the caller to eventually free it.
117188: **
117189: ** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and
117190: ** a NULL pointer is returned). Otherwise, if an OOM error is encountered
117191: ** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If
117192: ** no error occurs, *pRc is left unmodified.
117193: */
117194: static char *fts3WriteExprList(Fts3Table *p, const char *zFunc, int *pRc){
117195:   char *zRet = 0;
117196:   char *zFree = 0;
117197:   char *zFunction;
117198:   int i;
117199: 
117200:   if( !zFunc ){
117201:     zFunction = "";
117202:   }else{
117203:     zFree = zFunction = fts3QuoteId(zFunc);
117204:   }
117205:   fts3Appendf(pRc, &zRet, "?");
117206:   for(i=0; i<p->nColumn; i++){
117207:     fts3Appendf(pRc, &zRet, ",%s(?)", zFunction);
117208:   }
117209:   sqlite3_free(zFree);
117210:   return zRet;
117211: }
117212: 
117213: /*
117214: ** This function interprets the string at (*pp) as a non-negative integer
117215: ** value. It reads the integer and sets *pnOut to the value read, then 
117216: ** sets *pp to point to the byte immediately following the last byte of
117217: ** the integer value.
117218: **
117219: ** Only decimal digits ('0'..'9') may be part of an integer value. 
117220: **
117221: ** If *pp does not being with a decimal digit SQLITE_ERROR is returned and
117222: ** the output value undefined. Otherwise SQLITE_OK is returned.
117223: **
117224: ** This function is used when parsing the "prefix=" FTS4 parameter.
117225: */
117226: static int fts3GobbleInt(const char **pp, int *pnOut){
117227:   const char *p;                  /* Iterator pointer */
117228:   int nInt = 0;                   /* Output value */
117229: 
117230:   for(p=*pp; p[0]>='0' && p[0]<='9'; p++){
117231:     nInt = nInt * 10 + (p[0] - '0');
117232:   }
117233:   if( p==*pp ) return SQLITE_ERROR;
117234:   *pnOut = nInt;
117235:   *pp = p;
117236:   return SQLITE_OK;
117237: }
117238: 
117239: /*
117240: ** This function is called to allocate an array of Fts3Index structures
117241: ** representing the indexes maintained by the current FTS table. FTS tables
117242: ** always maintain the main "terms" index, but may also maintain one or
117243: ** more "prefix" indexes, depending on the value of the "prefix=" parameter
117244: ** (if any) specified as part of the CREATE VIRTUAL TABLE statement.
117245: **
117246: ** Argument zParam is passed the value of the "prefix=" option if one was
117247: ** specified, or NULL otherwise.
117248: **
117249: ** If no error occurs, SQLITE_OK is returned and *apIndex set to point to
117250: ** the allocated array. *pnIndex is set to the number of elements in the
117251: ** array. If an error does occur, an SQLite error code is returned.
117252: **
117253: ** Regardless of whether or not an error is returned, it is the responsibility
117254: ** of the caller to call sqlite3_free() on the output array to free it.
117255: */
117256: static int fts3PrefixParameter(
117257:   const char *zParam,             /* ABC in prefix=ABC parameter to parse */
117258:   int *pnIndex,                   /* OUT: size of *apIndex[] array */
117259:   struct Fts3Index **apIndex      /* OUT: Array of indexes for this table */
117260: ){
117261:   struct Fts3Index *aIndex;       /* Allocated array */
117262:   int nIndex = 1;                 /* Number of entries in array */
117263: 
117264:   if( zParam && zParam[0] ){
117265:     const char *p;
117266:     nIndex++;
117267:     for(p=zParam; *p; p++){
117268:       if( *p==',' ) nIndex++;
117269:     }
117270:   }
117271: 
117272:   aIndex = sqlite3_malloc(sizeof(struct Fts3Index) * nIndex);
117273:   *apIndex = aIndex;
117274:   *pnIndex = nIndex;
117275:   if( !aIndex ){
117276:     return SQLITE_NOMEM;
117277:   }
117278: 
117279:   memset(aIndex, 0, sizeof(struct Fts3Index) * nIndex);
117280:   if( zParam ){
117281:     const char *p = zParam;
117282:     int i;
117283:     for(i=1; i<nIndex; i++){
117284:       int nPrefix;
117285:       if( fts3GobbleInt(&p, &nPrefix) ) return SQLITE_ERROR;
117286:       aIndex[i].nPrefix = nPrefix;
117287:       p++;
117288:     }
117289:   }
117290: 
117291:   return SQLITE_OK;
117292: }
117293: 
117294: /*
117295: ** This function is called when initializing an FTS4 table that uses the
117296: ** content=xxx option. It determines the number of and names of the columns
117297: ** of the new FTS4 table.
117298: **
117299: ** The third argument passed to this function is the value passed to the
117300: ** config=xxx option (i.e. "xxx"). This function queries the database for
117301: ** a table of that name. If found, the output variables are populated
117302: ** as follows:
117303: **
117304: **   *pnCol:   Set to the number of columns table xxx has,
117305: **
117306: **   *pnStr:   Set to the total amount of space required to store a copy
117307: **             of each columns name, including the nul-terminator.
117308: **
117309: **   *pazCol:  Set to point to an array of *pnCol strings. Each string is
117310: **             the name of the corresponding column in table xxx. The array
117311: **             and its contents are allocated using a single allocation. It
117312: **             is the responsibility of the caller to free this allocation
117313: **             by eventually passing the *pazCol value to sqlite3_free().
117314: **
117315: ** If the table cannot be found, an error code is returned and the output
117316: ** variables are undefined. Or, if an OOM is encountered, SQLITE_NOMEM is
117317: ** returned (and the output variables are undefined).
117318: */
117319: static int fts3ContentColumns(
117320:   sqlite3 *db,                    /* Database handle */
117321:   const char *zDb,                /* Name of db (i.e. "main", "temp" etc.) */
117322:   const char *zTbl,               /* Name of content table */
117323:   const char ***pazCol,           /* OUT: Malloc'd array of column names */
117324:   int *pnCol,                     /* OUT: Size of array *pazCol */
117325:   int *pnStr                      /* OUT: Bytes of string content */
117326: ){
117327:   int rc = SQLITE_OK;             /* Return code */
117328:   char *zSql;                     /* "SELECT *" statement on zTbl */  
117329:   sqlite3_stmt *pStmt = 0;        /* Compiled version of zSql */
117330: 
117331:   zSql = sqlite3_mprintf("SELECT * FROM %Q.%Q", zDb, zTbl);
117332:   if( !zSql ){
117333:     rc = SQLITE_NOMEM;
117334:   }else{
117335:     rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
117336:   }
117337:   sqlite3_free(zSql);
117338: 
117339:   if( rc==SQLITE_OK ){
117340:     const char **azCol;           /* Output array */
117341:     int nStr = 0;                 /* Size of all column names (incl. 0x00) */
117342:     int nCol;                     /* Number of table columns */
117343:     int i;                        /* Used to iterate through columns */
117344: 
117345:     /* Loop through the returned columns. Set nStr to the number of bytes of
117346:     ** space required to store a copy of each column name, including the
117347:     ** nul-terminator byte.  */
117348:     nCol = sqlite3_column_count(pStmt);
117349:     for(i=0; i<nCol; i++){
117350:       const char *zCol = sqlite3_column_name(pStmt, i);
117351:       nStr += strlen(zCol) + 1;
117352:     }
117353: 
117354:     /* Allocate and populate the array to return. */
117355:     azCol = (const char **)sqlite3_malloc(sizeof(char *) * nCol + nStr);
117356:     if( azCol==0 ){
117357:       rc = SQLITE_NOMEM;
117358:     }else{
117359:       char *p = (char *)&azCol[nCol];
117360:       for(i=0; i<nCol; i++){
117361:         const char *zCol = sqlite3_column_name(pStmt, i);
117362:         int n = strlen(zCol)+1;
117363:         memcpy(p, zCol, n);
117364:         azCol[i] = p;
117365:         p += n;
117366:       }
117367:     }
117368:     sqlite3_finalize(pStmt);
117369: 
117370:     /* Set the output variables. */
117371:     *pnCol = nCol;
117372:     *pnStr = nStr;
117373:     *pazCol = azCol;
117374:   }
117375: 
117376:   return rc;
117377: }
117378: 
117379: /*
117380: ** This function is the implementation of both the xConnect and xCreate
117381: ** methods of the FTS3 virtual table.
117382: **
117383: ** The argv[] array contains the following:
117384: **
117385: **   argv[0]   -> module name  ("fts3" or "fts4")
117386: **   argv[1]   -> database name
117387: **   argv[2]   -> table name
117388: **   argv[...] -> "column name" and other module argument fields.
117389: */
117390: static int fts3InitVtab(
117391:   int isCreate,                   /* True for xCreate, false for xConnect */
117392:   sqlite3 *db,                    /* The SQLite database connection */
117393:   void *pAux,                     /* Hash table containing tokenizers */
117394:   int argc,                       /* Number of elements in argv array */
117395:   const char * const *argv,       /* xCreate/xConnect argument array */
117396:   sqlite3_vtab **ppVTab,          /* Write the resulting vtab structure here */
117397:   char **pzErr                    /* Write any error message here */
117398: ){
117399:   Fts3Hash *pHash = (Fts3Hash *)pAux;
117400:   Fts3Table *p = 0;               /* Pointer to allocated vtab */
117401:   int rc = SQLITE_OK;             /* Return code */
117402:   int i;                          /* Iterator variable */
117403:   int nByte;                      /* Size of allocation used for *p */
117404:   int iCol;                       /* Column index */
117405:   int nString = 0;                /* Bytes required to hold all column names */
117406:   int nCol = 0;                   /* Number of columns in the FTS table */
117407:   char *zCsr;                     /* Space for holding column names */
117408:   int nDb;                        /* Bytes required to hold database name */
117409:   int nName;                      /* Bytes required to hold table name */
117410:   int isFts4 = (argv[0][3]=='4'); /* True for FTS4, false for FTS3 */
117411:   const char **aCol;              /* Array of column names */
117412:   sqlite3_tokenizer *pTokenizer = 0;        /* Tokenizer for this table */
117413: 
117414:   int nIndex;                     /* Size of aIndex[] array */
117415:   struct Fts3Index *aIndex = 0;   /* Array of indexes for this table */
117416: 
117417:   /* The results of parsing supported FTS4 key=value options: */
117418:   int bNoDocsize = 0;             /* True to omit %_docsize table */
117419:   int bDescIdx = 0;               /* True to store descending indexes */
117420:   char *zPrefix = 0;              /* Prefix parameter value (or NULL) */
117421:   char *zCompress = 0;            /* compress=? parameter (or NULL) */
117422:   char *zUncompress = 0;          /* uncompress=? parameter (or NULL) */
117423:   char *zContent = 0;             /* content=? parameter (or NULL) */
117424: 
117425:   assert( strlen(argv[0])==4 );
117426:   assert( (sqlite3_strnicmp(argv[0], "fts4", 4)==0 && isFts4)
117427:        || (sqlite3_strnicmp(argv[0], "fts3", 4)==0 && !isFts4)
117428:   );
117429: 
117430:   nDb = (int)strlen(argv[1]) + 1;
117431:   nName = (int)strlen(argv[2]) + 1;
117432: 
117433:   aCol = (const char **)sqlite3_malloc(sizeof(const char *) * (argc-2) );
117434:   if( !aCol ) return SQLITE_NOMEM;
117435:   memset((void *)aCol, 0, sizeof(const char *) * (argc-2));
117436: 
117437:   /* Loop through all of the arguments passed by the user to the FTS3/4
117438:   ** module (i.e. all the column names and special arguments). This loop
117439:   ** does the following:
117440:   **
117441:   **   + Figures out the number of columns the FTSX table will have, and
117442:   **     the number of bytes of space that must be allocated to store copies
117443:   **     of the column names.
117444:   **
117445:   **   + If there is a tokenizer specification included in the arguments,
117446:   **     initializes the tokenizer pTokenizer.
117447:   */
117448:   for(i=3; rc==SQLITE_OK && i<argc; i++){
117449:     char const *z = argv[i];
117450:     int nKey;
117451:     char *zVal;
117452: 
117453:     /* Check if this is a tokenizer specification */
117454:     if( !pTokenizer 
117455:      && strlen(z)>8
117456:      && 0==sqlite3_strnicmp(z, "tokenize", 8) 
117457:      && 0==sqlite3Fts3IsIdChar(z[8])
117458:     ){
117459:       rc = sqlite3Fts3InitTokenizer(pHash, &z[9], &pTokenizer, pzErr);
117460:     }
117461: 
117462:     /* Check if it is an FTS4 special argument. */
117463:     else if( isFts4 && fts3IsSpecialColumn(z, &nKey, &zVal) ){
117464:       struct Fts4Option {
117465:         const char *zOpt;
117466:         int nOpt;
117467:       } aFts4Opt[] = {
117468:         { "matchinfo",   9 },     /* 0 -> MATCHINFO */
117469:         { "prefix",      6 },     /* 1 -> PREFIX */
117470:         { "compress",    8 },     /* 2 -> COMPRESS */
117471:         { "uncompress", 10 },     /* 3 -> UNCOMPRESS */
117472:         { "order",       5 },     /* 4 -> ORDER */
117473:         { "content",     7 }      /* 5 -> CONTENT */
117474:       };
117475: 
117476:       int iOpt;
117477:       if( !zVal ){
117478:         rc = SQLITE_NOMEM;
117479:       }else{
117480:         for(iOpt=0; iOpt<SizeofArray(aFts4Opt); iOpt++){
117481:           struct Fts4Option *pOp = &aFts4Opt[iOpt];
117482:           if( nKey==pOp->nOpt && !sqlite3_strnicmp(z, pOp->zOpt, pOp->nOpt) ){
117483:             break;
117484:           }
117485:         }
117486:         if( iOpt==SizeofArray(aFts4Opt) ){
117487:           *pzErr = sqlite3_mprintf("unrecognized parameter: %s", z);
117488:           rc = SQLITE_ERROR;
117489:         }else{
117490:           switch( iOpt ){
117491:             case 0:               /* MATCHINFO */
117492:               if( strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "fts3", 4) ){
117493:                 *pzErr = sqlite3_mprintf("unrecognized matchinfo: %s", zVal);
117494:                 rc = SQLITE_ERROR;
117495:               }
117496:               bNoDocsize = 1;
117497:               break;
117498: 
117499:             case 1:               /* PREFIX */
117500:               sqlite3_free(zPrefix);
117501:               zPrefix = zVal;
117502:               zVal = 0;
117503:               break;
117504: 
117505:             case 2:               /* COMPRESS */
117506:               sqlite3_free(zCompress);
117507:               zCompress = zVal;
117508:               zVal = 0;
117509:               break;
117510: 
117511:             case 3:               /* UNCOMPRESS */
117512:               sqlite3_free(zUncompress);
117513:               zUncompress = zVal;
117514:               zVal = 0;
117515:               break;
117516: 
117517:             case 4:               /* ORDER */
117518:               if( (strlen(zVal)!=3 || sqlite3_strnicmp(zVal, "asc", 3)) 
117519:                && (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 4)) 
117520:               ){
117521:                 *pzErr = sqlite3_mprintf("unrecognized order: %s", zVal);
117522:                 rc = SQLITE_ERROR;
117523:               }
117524:               bDescIdx = (zVal[0]=='d' || zVal[0]=='D');
117525:               break;
117526: 
117527:             default:              /* CONTENT */
117528:               assert( iOpt==5 );
117529:               sqlite3_free(zUncompress);
117530:               zContent = zVal;
117531:               zVal = 0;
117532:               break;
117533:           }
117534:         }
117535:         sqlite3_free(zVal);
117536:       }
117537:     }
117538: 
117539:     /* Otherwise, the argument is a column name. */
117540:     else {
117541:       nString += (int)(strlen(z) + 1);
117542:       aCol[nCol++] = z;
117543:     }
117544:   }
117545: 
117546:   /* If a content=xxx option was specified, the following:
117547:   **
117548:   **   1. Ignore any compress= and uncompress= options.
117549:   **
117550:   **   2. If no column names were specified as part of the CREATE VIRTUAL
117551:   **      TABLE statement, use all columns from the content table.
117552:   */
117553:   if( rc==SQLITE_OK && zContent ){
117554:     sqlite3_free(zCompress); 
117555:     sqlite3_free(zUncompress); 
117556:     zCompress = 0;
117557:     zUncompress = 0;
117558:     if( nCol==0 ){
117559:       sqlite3_free((void*)aCol); 
117560:       aCol = 0;
117561:       rc = fts3ContentColumns(db, argv[1], zContent, &aCol, &nCol, &nString);
117562:     }
117563:     assert( rc!=SQLITE_OK || nCol>0 );
117564:   }
117565:   if( rc!=SQLITE_OK ) goto fts3_init_out;
117566: 
117567:   if( nCol==0 ){
117568:     assert( nString==0 );
117569:     aCol[0] = "content";
117570:     nString = 8;
117571:     nCol = 1;
117572:   }
117573: 
117574:   if( pTokenizer==0 ){
117575:     rc = sqlite3Fts3InitTokenizer(pHash, "simple", &pTokenizer, pzErr);
117576:     if( rc!=SQLITE_OK ) goto fts3_init_out;
117577:   }
117578:   assert( pTokenizer );
117579: 
117580:   rc = fts3PrefixParameter(zPrefix, &nIndex, &aIndex);
117581:   if( rc==SQLITE_ERROR ){
117582:     assert( zPrefix );
117583:     *pzErr = sqlite3_mprintf("error parsing prefix parameter: %s", zPrefix);
117584:   }
117585:   if( rc!=SQLITE_OK ) goto fts3_init_out;
117586: 
117587:   /* Allocate and populate the Fts3Table structure. */
117588:   nByte = sizeof(Fts3Table) +                  /* Fts3Table */
117589:           nCol * sizeof(char *) +              /* azColumn */
117590:           nIndex * sizeof(struct Fts3Index) +  /* aIndex */
117591:           nName +                              /* zName */
117592:           nDb +                                /* zDb */
117593:           nString;                             /* Space for azColumn strings */
117594:   p = (Fts3Table*)sqlite3_malloc(nByte);
117595:   if( p==0 ){
117596:     rc = SQLITE_NOMEM;
117597:     goto fts3_init_out;
117598:   }
117599:   memset(p, 0, nByte);
117600:   p->db = db;
117601:   p->nColumn = nCol;
117602:   p->nPendingData = 0;
117603:   p->azColumn = (char **)&p[1];
117604:   p->pTokenizer = pTokenizer;
117605:   p->nMaxPendingData = FTS3_MAX_PENDING_DATA;
117606:   p->bHasDocsize = (isFts4 && bNoDocsize==0);
117607:   p->bHasStat = isFts4;
117608:   p->bDescIdx = bDescIdx;
117609:   p->zContentTbl = zContent;
117610:   zContent = 0;
117611:   TESTONLY( p->inTransaction = -1 );
117612:   TESTONLY( p->mxSavepoint = -1 );
117613: 
117614:   p->aIndex = (struct Fts3Index *)&p->azColumn[nCol];
117615:   memcpy(p->aIndex, aIndex, sizeof(struct Fts3Index) * nIndex);
117616:   p->nIndex = nIndex;
117617:   for(i=0; i<nIndex; i++){
117618:     fts3HashInit(&p->aIndex[i].hPending, FTS3_HASH_STRING, 1);
117619:   }
117620: 
117621:   /* Fill in the zName and zDb fields of the vtab structure. */
117622:   zCsr = (char *)&p->aIndex[nIndex];
117623:   p->zName = zCsr;
117624:   memcpy(zCsr, argv[2], nName);
117625:   zCsr += nName;
117626:   p->zDb = zCsr;
117627:   memcpy(zCsr, argv[1], nDb);
117628:   zCsr += nDb;
117629: 
117630:   /* Fill in the azColumn array */
117631:   for(iCol=0; iCol<nCol; iCol++){
117632:     char *z; 
117633:     int n = 0;
117634:     z = (char *)sqlite3Fts3NextToken(aCol[iCol], &n);
117635:     memcpy(zCsr, z, n);
117636:     zCsr[n] = '\0';
117637:     sqlite3Fts3Dequote(zCsr);
117638:     p->azColumn[iCol] = zCsr;
117639:     zCsr += n+1;
117640:     assert( zCsr <= &((char *)p)[nByte] );
117641:   }
117642: 
117643:   if( (zCompress==0)!=(zUncompress==0) ){
117644:     char const *zMiss = (zCompress==0 ? "compress" : "uncompress");
117645:     rc = SQLITE_ERROR;
117646:     *pzErr = sqlite3_mprintf("missing %s parameter in fts4 constructor", zMiss);
117647:   }
117648:   p->zReadExprlist = fts3ReadExprList(p, zUncompress, &rc);
117649:   p->zWriteExprlist = fts3WriteExprList(p, zCompress, &rc);
117650:   if( rc!=SQLITE_OK ) goto fts3_init_out;
117651: 
117652:   /* If this is an xCreate call, create the underlying tables in the 
117653:   ** database. TODO: For xConnect(), it could verify that said tables exist.
117654:   */
117655:   if( isCreate ){
117656:     rc = fts3CreateTables(p);
117657:   }
117658: 
117659:   /* Figure out the page-size for the database. This is required in order to
117660:   ** estimate the cost of loading large doclists from the database.  */
117661:   fts3DatabasePageSize(&rc, p);
117662:   p->nNodeSize = p->nPgsz-35;
117663: 
117664:   /* Declare the table schema to SQLite. */
117665:   fts3DeclareVtab(&rc, p);
117666: 
117667: fts3_init_out:
117668:   sqlite3_free(zPrefix);
117669:   sqlite3_free(aIndex);
117670:   sqlite3_free(zCompress);
117671:   sqlite3_free(zUncompress);
117672:   sqlite3_free(zContent);
117673:   sqlite3_free((void *)aCol);
117674:   if( rc!=SQLITE_OK ){
117675:     if( p ){
117676:       fts3DisconnectMethod((sqlite3_vtab *)p);
117677:     }else if( pTokenizer ){
117678:       pTokenizer->pModule->xDestroy(pTokenizer);
117679:     }
117680:   }else{
117681:     assert( p->pSegments==0 );
117682:     *ppVTab = &p->base;
117683:   }
117684:   return rc;
117685: }
117686: 
117687: /*
117688: ** The xConnect() and xCreate() methods for the virtual table. All the
117689: ** work is done in function fts3InitVtab().
117690: */
117691: static int fts3ConnectMethod(
117692:   sqlite3 *db,                    /* Database connection */
117693:   void *pAux,                     /* Pointer to tokenizer hash table */
117694:   int argc,                       /* Number of elements in argv array */
117695:   const char * const *argv,       /* xCreate/xConnect argument array */
117696:   sqlite3_vtab **ppVtab,          /* OUT: New sqlite3_vtab object */
117697:   char **pzErr                    /* OUT: sqlite3_malloc'd error message */
117698: ){
117699:   return fts3InitVtab(0, db, pAux, argc, argv, ppVtab, pzErr);
117700: }
117701: static int fts3CreateMethod(
117702:   sqlite3 *db,                    /* Database connection */
117703:   void *pAux,                     /* Pointer to tokenizer hash table */
117704:   int argc,                       /* Number of elements in argv array */
117705:   const char * const *argv,       /* xCreate/xConnect argument array */
117706:   sqlite3_vtab **ppVtab,          /* OUT: New sqlite3_vtab object */
117707:   char **pzErr                    /* OUT: sqlite3_malloc'd error message */
117708: ){
117709:   return fts3InitVtab(1, db, pAux, argc, argv, ppVtab, pzErr);
117710: }
117711: 
117712: /* 
117713: ** Implementation of the xBestIndex method for FTS3 tables. There
117714: ** are three possible strategies, in order of preference:
117715: **
117716: **   1. Direct lookup by rowid or docid. 
117717: **   2. Full-text search using a MATCH operator on a non-docid column.
117718: **   3. Linear scan of %_content table.
117719: */
117720: static int fts3BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
117721:   Fts3Table *p = (Fts3Table *)pVTab;
117722:   int i;                          /* Iterator variable */
117723:   int iCons = -1;                 /* Index of constraint to use */
117724: 
117725:   /* By default use a full table scan. This is an expensive option,
117726:   ** so search through the constraints to see if a more efficient 
117727:   ** strategy is possible.
117728:   */
117729:   pInfo->idxNum = FTS3_FULLSCAN_SEARCH;
117730:   pInfo->estimatedCost = 500000;
117731:   for(i=0; i<pInfo->nConstraint; i++){
117732:     struct sqlite3_index_constraint *pCons = &pInfo->aConstraint[i];
117733:     if( pCons->usable==0 ) continue;
117734: 
117735:     /* A direct lookup on the rowid or docid column. Assign a cost of 1.0. */
117736:     if( pCons->op==SQLITE_INDEX_CONSTRAINT_EQ 
117737:      && (pCons->iColumn<0 || pCons->iColumn==p->nColumn+1 )
117738:     ){
117739:       pInfo->idxNum = FTS3_DOCID_SEARCH;
117740:       pInfo->estimatedCost = 1.0;
117741:       iCons = i;
117742:     }
117743: 
117744:     /* A MATCH constraint. Use a full-text search.
117745:     **
117746:     ** If there is more than one MATCH constraint available, use the first
117747:     ** one encountered. If there is both a MATCH constraint and a direct
117748:     ** rowid/docid lookup, prefer the MATCH strategy. This is done even 
117749:     ** though the rowid/docid lookup is faster than a MATCH query, selecting
117750:     ** it would lead to an "unable to use function MATCH in the requested 
117751:     ** context" error.
117752:     */
117753:     if( pCons->op==SQLITE_INDEX_CONSTRAINT_MATCH 
117754:      && pCons->iColumn>=0 && pCons->iColumn<=p->nColumn
117755:     ){
117756:       pInfo->idxNum = FTS3_FULLTEXT_SEARCH + pCons->iColumn;
117757:       pInfo->estimatedCost = 2.0;
117758:       iCons = i;
117759:       break;
117760:     }
117761:   }
117762: 
117763:   if( iCons>=0 ){
117764:     pInfo->aConstraintUsage[iCons].argvIndex = 1;
117765:     pInfo->aConstraintUsage[iCons].omit = 1;
117766:   } 
117767: 
117768:   /* Regardless of the strategy selected, FTS can deliver rows in rowid (or
117769:   ** docid) order. Both ascending and descending are possible. 
117770:   */
117771:   if( pInfo->nOrderBy==1 ){
117772:     struct sqlite3_index_orderby *pOrder = &pInfo->aOrderBy[0];
117773:     if( pOrder->iColumn<0 || pOrder->iColumn==p->nColumn+1 ){
117774:       if( pOrder->desc ){
117775:         pInfo->idxStr = "DESC";
117776:       }else{
117777:         pInfo->idxStr = "ASC";
117778:       }
117779:       pInfo->orderByConsumed = 1;
117780:     }
117781:   }
117782: 
117783:   assert( p->pSegments==0 );
117784:   return SQLITE_OK;
117785: }
117786: 
117787: /*
117788: ** Implementation of xOpen method.
117789: */
117790: static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
117791:   sqlite3_vtab_cursor *pCsr;               /* Allocated cursor */
117792: 
117793:   UNUSED_PARAMETER(pVTab);
117794: 
117795:   /* Allocate a buffer large enough for an Fts3Cursor structure. If the
117796:   ** allocation succeeds, zero it and return SQLITE_OK. Otherwise, 
117797:   ** if the allocation fails, return SQLITE_NOMEM.
117798:   */
117799:   *ppCsr = pCsr = (sqlite3_vtab_cursor *)sqlite3_malloc(sizeof(Fts3Cursor));
117800:   if( !pCsr ){
117801:     return SQLITE_NOMEM;
117802:   }
117803:   memset(pCsr, 0, sizeof(Fts3Cursor));
117804:   return SQLITE_OK;
117805: }
117806: 
117807: /*
117808: ** Close the cursor.  For additional information see the documentation
117809: ** on the xClose method of the virtual table interface.
117810: */
117811: static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){
117812:   Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
117813:   assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
117814:   sqlite3_finalize(pCsr->pStmt);
117815:   sqlite3Fts3ExprFree(pCsr->pExpr);
117816:   sqlite3Fts3FreeDeferredTokens(pCsr);
117817:   sqlite3_free(pCsr->aDoclist);
117818:   sqlite3_free(pCsr->aMatchinfo);
117819:   assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
117820:   sqlite3_free(pCsr);
117821:   return SQLITE_OK;
117822: }
117823: 
117824: /*
117825: ** If pCsr->pStmt has not been prepared (i.e. if pCsr->pStmt==0), then
117826: ** compose and prepare an SQL statement of the form:
117827: **
117828: **    "SELECT <columns> FROM %_content WHERE rowid = ?"
117829: **
117830: ** (or the equivalent for a content=xxx table) and set pCsr->pStmt to
117831: ** it. If an error occurs, return an SQLite error code.
117832: **
117833: ** Otherwise, set *ppStmt to point to pCsr->pStmt and return SQLITE_OK.
117834: */
117835: static int fts3CursorSeekStmt(Fts3Cursor *pCsr, sqlite3_stmt **ppStmt){
117836:   int rc = SQLITE_OK;
117837:   if( pCsr->pStmt==0 ){
117838:     Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
117839:     char *zSql;
117840:     zSql = sqlite3_mprintf("SELECT %s WHERE rowid = ?", p->zReadExprlist);
117841:     if( !zSql ) return SQLITE_NOMEM;
117842:     rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
117843:     sqlite3_free(zSql);
117844:   }
117845:   *ppStmt = pCsr->pStmt;
117846:   return rc;
117847: }
117848: 
117849: /*
117850: ** Position the pCsr->pStmt statement so that it is on the row
117851: ** of the %_content table that contains the last match.  Return
117852: ** SQLITE_OK on success.  
117853: */
117854: static int fts3CursorSeek(sqlite3_context *pContext, Fts3Cursor *pCsr){
117855:   int rc = SQLITE_OK;
117856:   if( pCsr->isRequireSeek ){
117857:     sqlite3_stmt *pStmt = 0;
117858: 
117859:     rc = fts3CursorSeekStmt(pCsr, &pStmt);
117860:     if( rc==SQLITE_OK ){
117861:       sqlite3_bind_int64(pCsr->pStmt, 1, pCsr->iPrevId);
117862:       pCsr->isRequireSeek = 0;
117863:       if( SQLITE_ROW==sqlite3_step(pCsr->pStmt) ){
117864:         return SQLITE_OK;
117865:       }else{
117866:         rc = sqlite3_reset(pCsr->pStmt);
117867:         if( rc==SQLITE_OK && ((Fts3Table *)pCsr->base.pVtab)->zContentTbl==0 ){
117868:           /* If no row was found and no error has occured, then the %_content
117869:           ** table is missing a row that is present in the full-text index.
117870:           ** The data structures are corrupt.  */
117871:           rc = FTS_CORRUPT_VTAB;
117872:           pCsr->isEof = 1;
117873:         }
117874:       }
117875:     }
117876:   }
117877: 
117878:   if( rc!=SQLITE_OK && pContext ){
117879:     sqlite3_result_error_code(pContext, rc);
117880:   }
117881:   return rc;
117882: }
117883: 
117884: /*
117885: ** This function is used to process a single interior node when searching
117886: ** a b-tree for a term or term prefix. The node data is passed to this 
117887: ** function via the zNode/nNode parameters. The term to search for is
117888: ** passed in zTerm/nTerm.
117889: **
117890: ** If piFirst is not NULL, then this function sets *piFirst to the blockid
117891: ** of the child node that heads the sub-tree that may contain the term.
117892: **
117893: ** If piLast is not NULL, then *piLast is set to the right-most child node
117894: ** that heads a sub-tree that may contain a term for which zTerm/nTerm is
117895: ** a prefix.
117896: **
117897: ** If an OOM error occurs, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK.
117898: */
117899: static int fts3ScanInteriorNode(
117900:   const char *zTerm,              /* Term to select leaves for */
117901:   int nTerm,                      /* Size of term zTerm in bytes */
117902:   const char *zNode,              /* Buffer containing segment interior node */
117903:   int nNode,                      /* Size of buffer at zNode */
117904:   sqlite3_int64 *piFirst,         /* OUT: Selected child node */
117905:   sqlite3_int64 *piLast           /* OUT: Selected child node */
117906: ){
117907:   int rc = SQLITE_OK;             /* Return code */
117908:   const char *zCsr = zNode;       /* Cursor to iterate through node */
117909:   const char *zEnd = &zCsr[nNode];/* End of interior node buffer */
117910:   char *zBuffer = 0;              /* Buffer to load terms into */
117911:   int nAlloc = 0;                 /* Size of allocated buffer */
117912:   int isFirstTerm = 1;            /* True when processing first term on page */
117913:   sqlite3_int64 iChild;           /* Block id of child node to descend to */
117914: 
117915:   /* Skip over the 'height' varint that occurs at the start of every 
117916:   ** interior node. Then load the blockid of the left-child of the b-tree
117917:   ** node into variable iChild.  
117918:   **
117919:   ** Even if the data structure on disk is corrupted, this (reading two
117920:   ** varints from the buffer) does not risk an overread. If zNode is a
117921:   ** root node, then the buffer comes from a SELECT statement. SQLite does
117922:   ** not make this guarantee explicitly, but in practice there are always
117923:   ** either more than 20 bytes of allocated space following the nNode bytes of
117924:   ** contents, or two zero bytes. Or, if the node is read from the %_segments
117925:   ** table, then there are always 20 bytes of zeroed padding following the
117926:   ** nNode bytes of content (see sqlite3Fts3ReadBlock() for details).
117927:   */
117928:   zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
117929:   zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
117930:   if( zCsr>zEnd ){
117931:     return FTS_CORRUPT_VTAB;
117932:   }
117933:   
117934:   while( zCsr<zEnd && (piFirst || piLast) ){
117935:     int cmp;                      /* memcmp() result */
117936:     int nSuffix;                  /* Size of term suffix */
117937:     int nPrefix = 0;              /* Size of term prefix */
117938:     int nBuffer;                  /* Total term size */
117939:   
117940:     /* Load the next term on the node into zBuffer. Use realloc() to expand
117941:     ** the size of zBuffer if required.  */
117942:     if( !isFirstTerm ){
117943:       zCsr += sqlite3Fts3GetVarint32(zCsr, &nPrefix);
117944:     }
117945:     isFirstTerm = 0;
117946:     zCsr += sqlite3Fts3GetVarint32(zCsr, &nSuffix);
117947:     
117948:     if( nPrefix<0 || nSuffix<0 || &zCsr[nSuffix]>zEnd ){
117949:       rc = FTS_CORRUPT_VTAB;
117950:       goto finish_scan;
117951:     }
117952:     if( nPrefix+nSuffix>nAlloc ){
117953:       char *zNew;
117954:       nAlloc = (nPrefix+nSuffix) * 2;
117955:       zNew = (char *)sqlite3_realloc(zBuffer, nAlloc);
117956:       if( !zNew ){
117957:         rc = SQLITE_NOMEM;
117958:         goto finish_scan;
117959:       }
117960:       zBuffer = zNew;
117961:     }
117962:     assert( zBuffer );
117963:     memcpy(&zBuffer[nPrefix], zCsr, nSuffix);
117964:     nBuffer = nPrefix + nSuffix;
117965:     zCsr += nSuffix;
117966: 
117967:     /* Compare the term we are searching for with the term just loaded from
117968:     ** the interior node. If the specified term is greater than or equal
117969:     ** to the term from the interior node, then all terms on the sub-tree 
117970:     ** headed by node iChild are smaller than zTerm. No need to search 
117971:     ** iChild.
117972:     **
117973:     ** If the interior node term is larger than the specified term, then
117974:     ** the tree headed by iChild may contain the specified term.
117975:     */
117976:     cmp = memcmp(zTerm, zBuffer, (nBuffer>nTerm ? nTerm : nBuffer));
117977:     if( piFirst && (cmp<0 || (cmp==0 && nBuffer>nTerm)) ){
117978:       *piFirst = iChild;
117979:       piFirst = 0;
117980:     }
117981: 
117982:     if( piLast && cmp<0 ){
117983:       *piLast = iChild;
117984:       piLast = 0;
117985:     }
117986: 
117987:     iChild++;
117988:   };
117989: 
117990:   if( piFirst ) *piFirst = iChild;
117991:   if( piLast ) *piLast = iChild;
117992: 
117993:  finish_scan:
117994:   sqlite3_free(zBuffer);
117995:   return rc;
117996: }
117997: 
117998: 
117999: /*
118000: ** The buffer pointed to by argument zNode (size nNode bytes) contains an
118001: ** interior node of a b-tree segment. The zTerm buffer (size nTerm bytes)
118002: ** contains a term. This function searches the sub-tree headed by the zNode
118003: ** node for the range of leaf nodes that may contain the specified term
118004: ** or terms for which the specified term is a prefix.
118005: **
118006: ** If piLeaf is not NULL, then *piLeaf is set to the blockid of the 
118007: ** left-most leaf node in the tree that may contain the specified term.
118008: ** If piLeaf2 is not NULL, then *piLeaf2 is set to the blockid of the
118009: ** right-most leaf node that may contain a term for which the specified
118010: ** term is a prefix.
118011: **
118012: ** It is possible that the range of returned leaf nodes does not contain 
118013: ** the specified term or any terms for which it is a prefix. However, if the 
118014: ** segment does contain any such terms, they are stored within the identified
118015: ** range. Because this function only inspects interior segment nodes (and
118016: ** never loads leaf nodes into memory), it is not possible to be sure.
118017: **
118018: ** If an error occurs, an error code other than SQLITE_OK is returned.
118019: */ 
118020: static int fts3SelectLeaf(
118021:   Fts3Table *p,                   /* Virtual table handle */
118022:   const char *zTerm,              /* Term to select leaves for */
118023:   int nTerm,                      /* Size of term zTerm in bytes */
118024:   const char *zNode,              /* Buffer containing segment interior node */
118025:   int nNode,                      /* Size of buffer at zNode */
118026:   sqlite3_int64 *piLeaf,          /* Selected leaf node */
118027:   sqlite3_int64 *piLeaf2          /* Selected leaf node */
118028: ){
118029:   int rc;                         /* Return code */
118030:   int iHeight;                    /* Height of this node in tree */
118031: 
118032:   assert( piLeaf || piLeaf2 );
118033: 
118034:   sqlite3Fts3GetVarint32(zNode, &iHeight);
118035:   rc = fts3ScanInteriorNode(zTerm, nTerm, zNode, nNode, piLeaf, piLeaf2);
118036:   assert( !piLeaf2 || !piLeaf || rc!=SQLITE_OK || (*piLeaf<=*piLeaf2) );
118037: 
118038:   if( rc==SQLITE_OK && iHeight>1 ){
118039:     char *zBlob = 0;              /* Blob read from %_segments table */
118040:     int nBlob;                    /* Size of zBlob in bytes */
118041: 
118042:     if( piLeaf && piLeaf2 && (*piLeaf!=*piLeaf2) ){
118043:       rc = sqlite3Fts3ReadBlock(p, *piLeaf, &zBlob, &nBlob, 0);
118044:       if( rc==SQLITE_OK ){
118045:         rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, 0);
118046:       }
118047:       sqlite3_free(zBlob);
118048:       piLeaf = 0;
118049:       zBlob = 0;
118050:     }
118051: 
118052:     if( rc==SQLITE_OK ){
118053:       rc = sqlite3Fts3ReadBlock(p, piLeaf?*piLeaf:*piLeaf2, &zBlob, &nBlob, 0);
118054:     }
118055:     if( rc==SQLITE_OK ){
118056:       rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, piLeaf2);
118057:     }
118058:     sqlite3_free(zBlob);
118059:   }
118060: 
118061:   return rc;
118062: }
118063: 
118064: /*
118065: ** This function is used to create delta-encoded serialized lists of FTS3 
118066: ** varints. Each call to this function appends a single varint to a list.
118067: */
118068: static void fts3PutDeltaVarint(
118069:   char **pp,                      /* IN/OUT: Output pointer */
118070:   sqlite3_int64 *piPrev,          /* IN/OUT: Previous value written to list */
118071:   sqlite3_int64 iVal              /* Write this value to the list */
118072: ){
118073:   assert( iVal-*piPrev > 0 || (*piPrev==0 && iVal==0) );
118074:   *pp += sqlite3Fts3PutVarint(*pp, iVal-*piPrev);
118075:   *piPrev = iVal;
118076: }
118077: 
118078: /*
118079: ** When this function is called, *ppPoslist is assumed to point to the 
118080: ** start of a position-list. After it returns, *ppPoslist points to the
118081: ** first byte after the position-list.
118082: **
118083: ** A position list is list of positions (delta encoded) and columns for 
118084: ** a single document record of a doclist.  So, in other words, this
118085: ** routine advances *ppPoslist so that it points to the next docid in
118086: ** the doclist, or to the first byte past the end of the doclist.
118087: **
118088: ** If pp is not NULL, then the contents of the position list are copied
118089: ** to *pp. *pp is set to point to the first byte past the last byte copied
118090: ** before this function returns.
118091: */
118092: static void fts3PoslistCopy(char **pp, char **ppPoslist){
118093:   char *pEnd = *ppPoslist;
118094:   char c = 0;
118095: 
118096:   /* The end of a position list is marked by a zero encoded as an FTS3 
118097:   ** varint. A single POS_END (0) byte. Except, if the 0 byte is preceded by
118098:   ** a byte with the 0x80 bit set, then it is not a varint 0, but the tail
118099:   ** of some other, multi-byte, value.
118100:   **
118101:   ** The following while-loop moves pEnd to point to the first byte that is not 
118102:   ** immediately preceded by a byte with the 0x80 bit set. Then increments
118103:   ** pEnd once more so that it points to the byte immediately following the
118104:   ** last byte in the position-list.
118105:   */
118106:   while( *pEnd | c ){
118107:     c = *pEnd++ & 0x80;
118108:     testcase( c!=0 && (*pEnd)==0 );
118109:   }
118110:   pEnd++;  /* Advance past the POS_END terminator byte */
118111: 
118112:   if( pp ){
118113:     int n = (int)(pEnd - *ppPoslist);
118114:     char *p = *pp;
118115:     memcpy(p, *ppPoslist, n);
118116:     p += n;
118117:     *pp = p;
118118:   }
118119:   *ppPoslist = pEnd;
118120: }
118121: 
118122: /*
118123: ** When this function is called, *ppPoslist is assumed to point to the 
118124: ** start of a column-list. After it returns, *ppPoslist points to the
118125: ** to the terminator (POS_COLUMN or POS_END) byte of the column-list.
118126: **
118127: ** A column-list is list of delta-encoded positions for a single column
118128: ** within a single document within a doclist.
118129: **
118130: ** The column-list is terminated either by a POS_COLUMN varint (1) or
118131: ** a POS_END varint (0).  This routine leaves *ppPoslist pointing to
118132: ** the POS_COLUMN or POS_END that terminates the column-list.
118133: **
118134: ** If pp is not NULL, then the contents of the column-list are copied
118135: ** to *pp. *pp is set to point to the first byte past the last byte copied
118136: ** before this function returns.  The POS_COLUMN or POS_END terminator
118137: ** is not copied into *pp.
118138: */
118139: static void fts3ColumnlistCopy(char **pp, char **ppPoslist){
118140:   char *pEnd = *ppPoslist;
118141:   char c = 0;
118142: 
118143:   /* A column-list is terminated by either a 0x01 or 0x00 byte that is
118144:   ** not part of a multi-byte varint.
118145:   */
118146:   while( 0xFE & (*pEnd | c) ){
118147:     c = *pEnd++ & 0x80;
118148:     testcase( c!=0 && ((*pEnd)&0xfe)==0 );
118149:   }
118150:   if( pp ){
118151:     int n = (int)(pEnd - *ppPoslist);
118152:     char *p = *pp;
118153:     memcpy(p, *ppPoslist, n);
118154:     p += n;
118155:     *pp = p;
118156:   }
118157:   *ppPoslist = pEnd;
118158: }
118159: 
118160: /*
118161: ** Value used to signify the end of an position-list. This is safe because
118162: ** it is not possible to have a document with 2^31 terms.
118163: */
118164: #define POSITION_LIST_END 0x7fffffff
118165: 
118166: /*
118167: ** This function is used to help parse position-lists. When this function is
118168: ** called, *pp may point to the start of the next varint in the position-list
118169: ** being parsed, or it may point to 1 byte past the end of the position-list
118170: ** (in which case **pp will be a terminator bytes POS_END (0) or
118171: ** (1)).
118172: **
118173: ** If *pp points past the end of the current position-list, set *pi to 
118174: ** POSITION_LIST_END and return. Otherwise, read the next varint from *pp,
118175: ** increment the current value of *pi by the value read, and set *pp to
118176: ** point to the next value before returning.
118177: **
118178: ** Before calling this routine *pi must be initialized to the value of
118179: ** the previous position, or zero if we are reading the first position
118180: ** in the position-list.  Because positions are delta-encoded, the value
118181: ** of the previous position is needed in order to compute the value of
118182: ** the next position.
118183: */
118184: static void fts3ReadNextPos(
118185:   char **pp,                    /* IN/OUT: Pointer into position-list buffer */
118186:   sqlite3_int64 *pi             /* IN/OUT: Value read from position-list */
118187: ){
118188:   if( (**pp)&0xFE ){
118189:     fts3GetDeltaVarint(pp, pi);
118190:     *pi -= 2;
118191:   }else{
118192:     *pi = POSITION_LIST_END;
118193:   }
118194: }
118195: 
118196: /*
118197: ** If parameter iCol is not 0, write an POS_COLUMN (1) byte followed by
118198: ** the value of iCol encoded as a varint to *pp.   This will start a new
118199: ** column list.
118200: **
118201: ** Set *pp to point to the byte just after the last byte written before 
118202: ** returning (do not modify it if iCol==0). Return the total number of bytes
118203: ** written (0 if iCol==0).
118204: */
118205: static int fts3PutColNumber(char **pp, int iCol){
118206:   int n = 0;                      /* Number of bytes written */
118207:   if( iCol ){
118208:     char *p = *pp;                /* Output pointer */
118209:     n = 1 + sqlite3Fts3PutVarint(&p[1], iCol);
118210:     *p = 0x01;
118211:     *pp = &p[n];
118212:   }
118213:   return n;
118214: }
118215: 
118216: /*
118217: ** Compute the union of two position lists.  The output written
118218: ** into *pp contains all positions of both *pp1 and *pp2 in sorted
118219: ** order and with any duplicates removed.  All pointers are
118220: ** updated appropriately.   The caller is responsible for insuring
118221: ** that there is enough space in *pp to hold the complete output.
118222: */
118223: static void fts3PoslistMerge(
118224:   char **pp,                      /* Output buffer */
118225:   char **pp1,                     /* Left input list */
118226:   char **pp2                      /* Right input list */
118227: ){
118228:   char *p = *pp;
118229:   char *p1 = *pp1;
118230:   char *p2 = *pp2;
118231: 
118232:   while( *p1 || *p2 ){
118233:     int iCol1;         /* The current column index in pp1 */
118234:     int iCol2;         /* The current column index in pp2 */
118235: 
118236:     if( *p1==POS_COLUMN ) sqlite3Fts3GetVarint32(&p1[1], &iCol1);
118237:     else if( *p1==POS_END ) iCol1 = POSITION_LIST_END;
118238:     else iCol1 = 0;
118239: 
118240:     if( *p2==POS_COLUMN ) sqlite3Fts3GetVarint32(&p2[1], &iCol2);
118241:     else if( *p2==POS_END ) iCol2 = POSITION_LIST_END;
118242:     else iCol2 = 0;
118243: 
118244:     if( iCol1==iCol2 ){
118245:       sqlite3_int64 i1 = 0;       /* Last position from pp1 */
118246:       sqlite3_int64 i2 = 0;       /* Last position from pp2 */
118247:       sqlite3_int64 iPrev = 0;
118248:       int n = fts3PutColNumber(&p, iCol1);
118249:       p1 += n;
118250:       p2 += n;
118251: 
118252:       /* At this point, both p1 and p2 point to the start of column-lists
118253:       ** for the same column (the column with index iCol1 and iCol2).
118254:       ** A column-list is a list of non-negative delta-encoded varints, each 
118255:       ** incremented by 2 before being stored. Each list is terminated by a
118256:       ** POS_END (0) or POS_COLUMN (1). The following block merges the two lists
118257:       ** and writes the results to buffer p. p is left pointing to the byte
118258:       ** after the list written. No terminator (POS_END or POS_COLUMN) is
118259:       ** written to the output.
118260:       */
118261:       fts3GetDeltaVarint(&p1, &i1);
118262:       fts3GetDeltaVarint(&p2, &i2);
118263:       do {
118264:         fts3PutDeltaVarint(&p, &iPrev, (i1<i2) ? i1 : i2); 
118265:         iPrev -= 2;
118266:         if( i1==i2 ){
118267:           fts3ReadNextPos(&p1, &i1);
118268:           fts3ReadNextPos(&p2, &i2);
118269:         }else if( i1<i2 ){
118270:           fts3ReadNextPos(&p1, &i1);
118271:         }else{
118272:           fts3ReadNextPos(&p2, &i2);
118273:         }
118274:       }while( i1!=POSITION_LIST_END || i2!=POSITION_LIST_END );
118275:     }else if( iCol1<iCol2 ){
118276:       p1 += fts3PutColNumber(&p, iCol1);
118277:       fts3ColumnlistCopy(&p, &p1);
118278:     }else{
118279:       p2 += fts3PutColNumber(&p, iCol2);
118280:       fts3ColumnlistCopy(&p, &p2);
118281:     }
118282:   }
118283: 
118284:   *p++ = POS_END;
118285:   *pp = p;
118286:   *pp1 = p1 + 1;
118287:   *pp2 = p2 + 1;
118288: }
118289: 
118290: /*
118291: ** This function is used to merge two position lists into one. When it is
118292: ** called, *pp1 and *pp2 must both point to position lists. A position-list is
118293: ** the part of a doclist that follows each document id. For example, if a row
118294: ** contains:
118295: **
118296: **     'a b c'|'x y z'|'a b b a'
118297: **
118298: ** Then the position list for this row for token 'b' would consist of:
118299: **
118300: **     0x02 0x01 0x02 0x03 0x03 0x00
118301: **
118302: ** When this function returns, both *pp1 and *pp2 are left pointing to the
118303: ** byte following the 0x00 terminator of their respective position lists.
118304: **
118305: ** If isSaveLeft is 0, an entry is added to the output position list for 
118306: ** each position in *pp2 for which there exists one or more positions in
118307: ** *pp1 so that (pos(*pp2)>pos(*pp1) && pos(*pp2)-pos(*pp1)<=nToken). i.e.
118308: ** when the *pp1 token appears before the *pp2 token, but not more than nToken
118309: ** slots before it.
118310: **
118311: ** e.g. nToken==1 searches for adjacent positions.
118312: */
118313: static int fts3PoslistPhraseMerge(
118314:   char **pp,                      /* IN/OUT: Preallocated output buffer */
118315:   int nToken,                     /* Maximum difference in token positions */
118316:   int isSaveLeft,                 /* Save the left position */
118317:   int isExact,                    /* If *pp1 is exactly nTokens before *pp2 */
118318:   char **pp1,                     /* IN/OUT: Left input list */
118319:   char **pp2                      /* IN/OUT: Right input list */
118320: ){
118321:   char *p = *pp;
118322:   char *p1 = *pp1;
118323:   char *p2 = *pp2;
118324:   int iCol1 = 0;
118325:   int iCol2 = 0;
118326: 
118327:   /* Never set both isSaveLeft and isExact for the same invocation. */
118328:   assert( isSaveLeft==0 || isExact==0 );
118329: 
118330:   assert( p!=0 && *p1!=0 && *p2!=0 );
118331:   if( *p1==POS_COLUMN ){ 
118332:     p1++;
118333:     p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
118334:   }
118335:   if( *p2==POS_COLUMN ){ 
118336:     p2++;
118337:     p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
118338:   }
118339: 
118340:   while( 1 ){
118341:     if( iCol1==iCol2 ){
118342:       char *pSave = p;
118343:       sqlite3_int64 iPrev = 0;
118344:       sqlite3_int64 iPos1 = 0;
118345:       sqlite3_int64 iPos2 = 0;
118346: 
118347:       if( iCol1 ){
118348:         *p++ = POS_COLUMN;
118349:         p += sqlite3Fts3PutVarint(p, iCol1);
118350:       }
118351: 
118352:       assert( *p1!=POS_END && *p1!=POS_COLUMN );
118353:       assert( *p2!=POS_END && *p2!=POS_COLUMN );
118354:       fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2;
118355:       fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2;
118356: 
118357:       while( 1 ){
118358:         if( iPos2==iPos1+nToken 
118359:          || (isExact==0 && iPos2>iPos1 && iPos2<=iPos1+nToken) 
118360:         ){
118361:           sqlite3_int64 iSave;
118362:           iSave = isSaveLeft ? iPos1 : iPos2;
118363:           fts3PutDeltaVarint(&p, &iPrev, iSave+2); iPrev -= 2;
118364:           pSave = 0;
118365:           assert( p );
118366:         }
118367:         if( (!isSaveLeft && iPos2<=(iPos1+nToken)) || iPos2<=iPos1 ){
118368:           if( (*p2&0xFE)==0 ) break;
118369:           fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2;
118370:         }else{
118371:           if( (*p1&0xFE)==0 ) break;
118372:           fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2;
118373:         }
118374:       }
118375: 
118376:       if( pSave ){
118377:         assert( pp && p );
118378:         p = pSave;
118379:       }
118380: 
118381:       fts3ColumnlistCopy(0, &p1);
118382:       fts3ColumnlistCopy(0, &p2);
118383:       assert( (*p1&0xFE)==0 && (*p2&0xFE)==0 );
118384:       if( 0==*p1 || 0==*p2 ) break;
118385: 
118386:       p1++;
118387:       p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
118388:       p2++;
118389:       p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
118390:     }
118391: 
118392:     /* Advance pointer p1 or p2 (whichever corresponds to the smaller of
118393:     ** iCol1 and iCol2) so that it points to either the 0x00 that marks the
118394:     ** end of the position list, or the 0x01 that precedes the next 
118395:     ** column-number in the position list. 
118396:     */
118397:     else if( iCol1<iCol2 ){
118398:       fts3ColumnlistCopy(0, &p1);
118399:       if( 0==*p1 ) break;
118400:       p1++;
118401:       p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
118402:     }else{
118403:       fts3ColumnlistCopy(0, &p2);
118404:       if( 0==*p2 ) break;
118405:       p2++;
118406:       p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
118407:     }
118408:   }
118409: 
118410:   fts3PoslistCopy(0, &p2);
118411:   fts3PoslistCopy(0, &p1);
118412:   *pp1 = p1;
118413:   *pp2 = p2;
118414:   if( *pp==p ){
118415:     return 0;
118416:   }
118417:   *p++ = 0x00;
118418:   *pp = p;
118419:   return 1;
118420: }
118421: 
118422: /*
118423: ** Merge two position-lists as required by the NEAR operator. The argument
118424: ** position lists correspond to the left and right phrases of an expression 
118425: ** like:
118426: **
118427: **     "phrase 1" NEAR "phrase number 2"
118428: **
118429: ** Position list *pp1 corresponds to the left-hand side of the NEAR 
118430: ** expression and *pp2 to the right. As usual, the indexes in the position 
118431: ** lists are the offsets of the last token in each phrase (tokens "1" and "2" 
118432: ** in the example above).
118433: **
118434: ** The output position list - written to *pp - is a copy of *pp2 with those
118435: ** entries that are not sufficiently NEAR entries in *pp1 removed.
118436: */
118437: static int fts3PoslistNearMerge(
118438:   char **pp,                      /* Output buffer */
118439:   char *aTmp,                     /* Temporary buffer space */
118440:   int nRight,                     /* Maximum difference in token positions */
118441:   int nLeft,                      /* Maximum difference in token positions */
118442:   char **pp1,                     /* IN/OUT: Left input list */
118443:   char **pp2                      /* IN/OUT: Right input list */
118444: ){
118445:   char *p1 = *pp1;
118446:   char *p2 = *pp2;
118447: 
118448:   char *pTmp1 = aTmp;
118449:   char *pTmp2;
118450:   char *aTmp2;
118451:   int res = 1;
118452: 
118453:   fts3PoslistPhraseMerge(&pTmp1, nRight, 0, 0, pp1, pp2);
118454:   aTmp2 = pTmp2 = pTmp1;
118455:   *pp1 = p1;
118456:   *pp2 = p2;
118457:   fts3PoslistPhraseMerge(&pTmp2, nLeft, 1, 0, pp2, pp1);
118458:   if( pTmp1!=aTmp && pTmp2!=aTmp2 ){
118459:     fts3PoslistMerge(pp, &aTmp, &aTmp2);
118460:   }else if( pTmp1!=aTmp ){
118461:     fts3PoslistCopy(pp, &aTmp);
118462:   }else if( pTmp2!=aTmp2 ){
118463:     fts3PoslistCopy(pp, &aTmp2);
118464:   }else{
118465:     res = 0;
118466:   }
118467: 
118468:   return res;
118469: }
118470: 
118471: /* 
118472: ** An instance of this function is used to merge together the (potentially
118473: ** large number of) doclists for each term that matches a prefix query.
118474: ** See function fts3TermSelectMerge() for details.
118475: */
118476: typedef struct TermSelect TermSelect;
118477: struct TermSelect {
118478:   char *aaOutput[16];             /* Malloc'd output buffers */
118479:   int anOutput[16];               /* Size each output buffer in bytes */
118480: };
118481: 
118482: /*
118483: ** This function is used to read a single varint from a buffer. Parameter
118484: ** pEnd points 1 byte past the end of the buffer. When this function is
118485: ** called, if *pp points to pEnd or greater, then the end of the buffer
118486: ** has been reached. In this case *pp is set to 0 and the function returns.
118487: **
118488: ** If *pp does not point to or past pEnd, then a single varint is read
118489: ** from *pp. *pp is then set to point 1 byte past the end of the read varint.
118490: **
118491: ** If bDescIdx is false, the value read is added to *pVal before returning.
118492: ** If it is true, the value read is subtracted from *pVal before this 
118493: ** function returns.
118494: */
118495: static void fts3GetDeltaVarint3(
118496:   char **pp,                      /* IN/OUT: Point to read varint from */
118497:   char *pEnd,                     /* End of buffer */
118498:   int bDescIdx,                   /* True if docids are descending */
118499:   sqlite3_int64 *pVal             /* IN/OUT: Integer value */
118500: ){
118501:   if( *pp>=pEnd ){
118502:     *pp = 0;
118503:   }else{
118504:     sqlite3_int64 iVal;
118505:     *pp += sqlite3Fts3GetVarint(*pp, &iVal);
118506:     if( bDescIdx ){
118507:       *pVal -= iVal;
118508:     }else{
118509:       *pVal += iVal;
118510:     }
118511:   }
118512: }
118513: 
118514: /*
118515: ** This function is used to write a single varint to a buffer. The varint
118516: ** is written to *pp. Before returning, *pp is set to point 1 byte past the
118517: ** end of the value written.
118518: **
118519: ** If *pbFirst is zero when this function is called, the value written to
118520: ** the buffer is that of parameter iVal. 
118521: **
118522: ** If *pbFirst is non-zero when this function is called, then the value 
118523: ** written is either (iVal-*piPrev) (if bDescIdx is zero) or (*piPrev-iVal)
118524: ** (if bDescIdx is non-zero).
118525: **
118526: ** Before returning, this function always sets *pbFirst to 1 and *piPrev
118527: ** to the value of parameter iVal.
118528: */
118529: static void fts3PutDeltaVarint3(
118530:   char **pp,                      /* IN/OUT: Output pointer */
118531:   int bDescIdx,                   /* True for descending docids */
118532:   sqlite3_int64 *piPrev,          /* IN/OUT: Previous value written to list */
118533:   int *pbFirst,                   /* IN/OUT: True after first int written */
118534:   sqlite3_int64 iVal              /* Write this value to the list */
118535: ){
118536:   sqlite3_int64 iWrite;
118537:   if( bDescIdx==0 || *pbFirst==0 ){
118538:     iWrite = iVal - *piPrev;
118539:   }else{
118540:     iWrite = *piPrev - iVal;
118541:   }
118542:   assert( *pbFirst || *piPrev==0 );
118543:   assert( *pbFirst==0 || iWrite>0 );
118544:   *pp += sqlite3Fts3PutVarint(*pp, iWrite);
118545:   *piPrev = iVal;
118546:   *pbFirst = 1;
118547: }
118548: 
118549: 
118550: /*
118551: ** This macro is used by various functions that merge doclists. The two
118552: ** arguments are 64-bit docid values. If the value of the stack variable
118553: ** bDescDoclist is 0 when this macro is invoked, then it returns (i1-i2). 
118554: ** Otherwise, (i2-i1).
118555: **
118556: ** Using this makes it easier to write code that can merge doclists that are
118557: ** sorted in either ascending or descending order.
118558: */
118559: #define DOCID_CMP(i1, i2) ((bDescDoclist?-1:1) * (i1-i2))
118560: 
118561: /*
118562: ** This function does an "OR" merge of two doclists (output contains all
118563: ** positions contained in either argument doclist). If the docids in the 
118564: ** input doclists are sorted in ascending order, parameter bDescDoclist
118565: ** should be false. If they are sorted in ascending order, it should be
118566: ** passed a non-zero value.
118567: **
118568: ** If no error occurs, *paOut is set to point at an sqlite3_malloc'd buffer
118569: ** containing the output doclist and SQLITE_OK is returned. In this case
118570: ** *pnOut is set to the number of bytes in the output doclist.
118571: **
118572: ** If an error occurs, an SQLite error code is returned. The output values
118573: ** are undefined in this case.
118574: */
118575: static int fts3DoclistOrMerge(
118576:   int bDescDoclist,               /* True if arguments are desc */
118577:   char *a1, int n1,               /* First doclist */
118578:   char *a2, int n2,               /* Second doclist */
118579:   char **paOut, int *pnOut        /* OUT: Malloc'd doclist */
118580: ){
118581:   sqlite3_int64 i1 = 0;
118582:   sqlite3_int64 i2 = 0;
118583:   sqlite3_int64 iPrev = 0;
118584:   char *pEnd1 = &a1[n1];
118585:   char *pEnd2 = &a2[n2];
118586:   char *p1 = a1;
118587:   char *p2 = a2;
118588:   char *p;
118589:   char *aOut;
118590:   int bFirstOut = 0;
118591: 
118592:   *paOut = 0;
118593:   *pnOut = 0;
118594: 
118595:   /* Allocate space for the output. Both the input and output doclists
118596:   ** are delta encoded. If they are in ascending order (bDescDoclist==0),
118597:   ** then the first docid in each list is simply encoded as a varint. For
118598:   ** each subsequent docid, the varint stored is the difference between the
118599:   ** current and previous docid (a positive number - since the list is in
118600:   ** ascending order).
118601:   **
118602:   ** The first docid written to the output is therefore encoded using the 
118603:   ** same number of bytes as it is in whichever of the input lists it is
118604:   ** read from. And each subsequent docid read from the same input list 
118605:   ** consumes either the same or less bytes as it did in the input (since
118606:   ** the difference between it and the previous value in the output must
118607:   ** be a positive value less than or equal to the delta value read from 
118608:   ** the input list). The same argument applies to all but the first docid
118609:   ** read from the 'other' list. And to the contents of all position lists
118610:   ** that will be copied and merged from the input to the output.
118611:   **
118612:   ** However, if the first docid copied to the output is a negative number,
118613:   ** then the encoding of the first docid from the 'other' input list may
118614:   ** be larger in the output than it was in the input (since the delta value
118615:   ** may be a larger positive integer than the actual docid).
118616:   **
118617:   ** The space required to store the output is therefore the sum of the
118618:   ** sizes of the two inputs, plus enough space for exactly one of the input
118619:   ** docids to grow. 
118620:   **
118621:   ** A symetric argument may be made if the doclists are in descending 
118622:   ** order.
118623:   */
118624:   aOut = sqlite3_malloc(n1+n2+FTS3_VARINT_MAX-1);
118625:   if( !aOut ) return SQLITE_NOMEM;
118626: 
118627:   p = aOut;
118628:   fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1);
118629:   fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2);
118630:   while( p1 || p2 ){
118631:     sqlite3_int64 iDiff = DOCID_CMP(i1, i2);
118632: 
118633:     if( p2 && p1 && iDiff==0 ){
118634:       fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1);
118635:       fts3PoslistMerge(&p, &p1, &p2);
118636:       fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
118637:       fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
118638:     }else if( !p2 || (p1 && iDiff<0) ){
118639:       fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1);
118640:       fts3PoslistCopy(&p, &p1);
118641:       fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
118642:     }else{
118643:       fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i2);
118644:       fts3PoslistCopy(&p, &p2);
118645:       fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
118646:     }
118647:   }
118648: 
118649:   *paOut = aOut;
118650:   *pnOut = (p-aOut);
118651:   assert( *pnOut<=n1+n2+FTS3_VARINT_MAX-1 );
118652:   return SQLITE_OK;
118653: }
118654: 
118655: /*
118656: ** This function does a "phrase" merge of two doclists. In a phrase merge,
118657: ** the output contains a copy of each position from the right-hand input
118658: ** doclist for which there is a position in the left-hand input doclist
118659: ** exactly nDist tokens before it.
118660: **
118661: ** If the docids in the input doclists are sorted in ascending order,
118662: ** parameter bDescDoclist should be false. If they are sorted in ascending 
118663: ** order, it should be passed a non-zero value.
118664: **
118665: ** The right-hand input doclist is overwritten by this function.
118666: */
118667: static void fts3DoclistPhraseMerge(
118668:   int bDescDoclist,               /* True if arguments are desc */
118669:   int nDist,                      /* Distance from left to right (1=adjacent) */
118670:   char *aLeft, int nLeft,         /* Left doclist */
118671:   char *aRight, int *pnRight      /* IN/OUT: Right/output doclist */
118672: ){
118673:   sqlite3_int64 i1 = 0;
118674:   sqlite3_int64 i2 = 0;
118675:   sqlite3_int64 iPrev = 0;
118676:   char *pEnd1 = &aLeft[nLeft];
118677:   char *pEnd2 = &aRight[*pnRight];
118678:   char *p1 = aLeft;
118679:   char *p2 = aRight;
118680:   char *p;
118681:   int bFirstOut = 0;
118682:   char *aOut = aRight;
118683: 
118684:   assert( nDist>0 );
118685: 
118686:   p = aOut;
118687:   fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1);
118688:   fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2);
118689: 
118690:   while( p1 && p2 ){
118691:     sqlite3_int64 iDiff = DOCID_CMP(i1, i2);
118692:     if( iDiff==0 ){
118693:       char *pSave = p;
118694:       sqlite3_int64 iPrevSave = iPrev;
118695:       int bFirstOutSave = bFirstOut;
118696: 
118697:       fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1);
118698:       if( 0==fts3PoslistPhraseMerge(&p, nDist, 0, 1, &p1, &p2) ){
118699:         p = pSave;
118700:         iPrev = iPrevSave;
118701:         bFirstOut = bFirstOutSave;
118702:       }
118703:       fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
118704:       fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
118705:     }else if( iDiff<0 ){
118706:       fts3PoslistCopy(0, &p1);
118707:       fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
118708:     }else{
118709:       fts3PoslistCopy(0, &p2);
118710:       fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
118711:     }
118712:   }
118713: 
118714:   *pnRight = p - aOut;
118715: }
118716: 
118717: /*
118718: ** Argument pList points to a position list nList bytes in size. This
118719: ** function checks to see if the position list contains any entries for
118720: ** a token in position 0 (of any column). If so, it writes argument iDelta
118721: ** to the output buffer pOut, followed by a position list consisting only
118722: ** of the entries from pList at position 0, and terminated by an 0x00 byte.
118723: ** The value returned is the number of bytes written to pOut (if any).
118724: */
118725: SQLITE_PRIVATE int sqlite3Fts3FirstFilter(
118726:   sqlite3_int64 iDelta,           /* Varint that may be written to pOut */
118727:   char *pList,                    /* Position list (no 0x00 term) */
118728:   int nList,                      /* Size of pList in bytes */
118729:   char *pOut                      /* Write output here */
118730: ){
118731:   int nOut = 0;
118732:   int bWritten = 0;               /* True once iDelta has been written */
118733:   char *p = pList;
118734:   char *pEnd = &pList[nList];
118735: 
118736:   if( *p!=0x01 ){
118737:     if( *p==0x02 ){
118738:       nOut += sqlite3Fts3PutVarint(&pOut[nOut], iDelta);
118739:       pOut[nOut++] = 0x02;
118740:       bWritten = 1;
118741:     }
118742:     fts3ColumnlistCopy(0, &p);
118743:   }
118744: 
118745:   while( p<pEnd && *p==0x01 ){
118746:     sqlite3_int64 iCol;
118747:     p++;
118748:     p += sqlite3Fts3GetVarint(p, &iCol);
118749:     if( *p==0x02 ){
118750:       if( bWritten==0 ){
118751:         nOut += sqlite3Fts3PutVarint(&pOut[nOut], iDelta);
118752:         bWritten = 1;
118753:       }
118754:       pOut[nOut++] = 0x01;
118755:       nOut += sqlite3Fts3PutVarint(&pOut[nOut], iCol);
118756:       pOut[nOut++] = 0x02;
118757:     }
118758:     fts3ColumnlistCopy(0, &p);
118759:   }
118760:   if( bWritten ){
118761:     pOut[nOut++] = 0x00;
118762:   }
118763: 
118764:   return nOut;
118765: }
118766: 
118767: 
118768: /*
118769: ** Merge all doclists in the TermSelect.aaOutput[] array into a single
118770: ** doclist stored in TermSelect.aaOutput[0]. If successful, delete all
118771: ** other doclists (except the aaOutput[0] one) and return SQLITE_OK.
118772: **
118773: ** If an OOM error occurs, return SQLITE_NOMEM. In this case it is
118774: ** the responsibility of the caller to free any doclists left in the
118775: ** TermSelect.aaOutput[] array.
118776: */
118777: static int fts3TermSelectFinishMerge(Fts3Table *p, TermSelect *pTS){
118778:   char *aOut = 0;
118779:   int nOut = 0;
118780:   int i;
118781: 
118782:   /* Loop through the doclists in the aaOutput[] array. Merge them all
118783:   ** into a single doclist.
118784:   */
118785:   for(i=0; i<SizeofArray(pTS->aaOutput); i++){
118786:     if( pTS->aaOutput[i] ){
118787:       if( !aOut ){
118788:         aOut = pTS->aaOutput[i];
118789:         nOut = pTS->anOutput[i];
118790:         pTS->aaOutput[i] = 0;
118791:       }else{
118792:         int nNew;
118793:         char *aNew;
118794: 
118795:         int rc = fts3DoclistOrMerge(p->bDescIdx, 
118796:             pTS->aaOutput[i], pTS->anOutput[i], aOut, nOut, &aNew, &nNew
118797:         );
118798:         if( rc!=SQLITE_OK ){
118799:           sqlite3_free(aOut);
118800:           return rc;
118801:         }
118802: 
118803:         sqlite3_free(pTS->aaOutput[i]);
118804:         sqlite3_free(aOut);
118805:         pTS->aaOutput[i] = 0;
118806:         aOut = aNew;
118807:         nOut = nNew;
118808:       }
118809:     }
118810:   }
118811: 
118812:   pTS->aaOutput[0] = aOut;
118813:   pTS->anOutput[0] = nOut;
118814:   return SQLITE_OK;
118815: }
118816: 
118817: /*
118818: ** Merge the doclist aDoclist/nDoclist into the TermSelect object passed
118819: ** as the first argument. The merge is an "OR" merge (see function
118820: ** fts3DoclistOrMerge() for details).
118821: **
118822: ** This function is called with the doclist for each term that matches
118823: ** a queried prefix. It merges all these doclists into one, the doclist
118824: ** for the specified prefix. Since there can be a very large number of
118825: ** doclists to merge, the merging is done pair-wise using the TermSelect
118826: ** object.
118827: **
118828: ** This function returns SQLITE_OK if the merge is successful, or an
118829: ** SQLite error code (SQLITE_NOMEM) if an error occurs.
118830: */
118831: static int fts3TermSelectMerge(
118832:   Fts3Table *p,                   /* FTS table handle */
118833:   TermSelect *pTS,                /* TermSelect object to merge into */
118834:   char *aDoclist,                 /* Pointer to doclist */
118835:   int nDoclist                    /* Size of aDoclist in bytes */
118836: ){
118837:   if( pTS->aaOutput[0]==0 ){
118838:     /* If this is the first term selected, copy the doclist to the output
118839:     ** buffer using memcpy(). */
118840:     pTS->aaOutput[0] = sqlite3_malloc(nDoclist);
118841:     pTS->anOutput[0] = nDoclist;
118842:     if( pTS->aaOutput[0] ){
118843:       memcpy(pTS->aaOutput[0], aDoclist, nDoclist);
118844:     }else{
118845:       return SQLITE_NOMEM;
118846:     }
118847:   }else{
118848:     char *aMerge = aDoclist;
118849:     int nMerge = nDoclist;
118850:     int iOut;
118851: 
118852:     for(iOut=0; iOut<SizeofArray(pTS->aaOutput); iOut++){
118853:       if( pTS->aaOutput[iOut]==0 ){
118854:         assert( iOut>0 );
118855:         pTS->aaOutput[iOut] = aMerge;
118856:         pTS->anOutput[iOut] = nMerge;
118857:         break;
118858:       }else{
118859:         char *aNew;
118860:         int nNew;
118861: 
118862:         int rc = fts3DoclistOrMerge(p->bDescIdx, aMerge, nMerge, 
118863:             pTS->aaOutput[iOut], pTS->anOutput[iOut], &aNew, &nNew
118864:         );
118865:         if( rc!=SQLITE_OK ){
118866:           if( aMerge!=aDoclist ) sqlite3_free(aMerge);
118867:           return rc;
118868:         }
118869: 
118870:         if( aMerge!=aDoclist ) sqlite3_free(aMerge);
118871:         sqlite3_free(pTS->aaOutput[iOut]);
118872:         pTS->aaOutput[iOut] = 0;
118873:   
118874:         aMerge = aNew;
118875:         nMerge = nNew;
118876:         if( (iOut+1)==SizeofArray(pTS->aaOutput) ){
118877:           pTS->aaOutput[iOut] = aMerge;
118878:           pTS->anOutput[iOut] = nMerge;
118879:         }
118880:       }
118881:     }
118882:   }
118883:   return SQLITE_OK;
118884: }
118885: 
118886: /*
118887: ** Append SegReader object pNew to the end of the pCsr->apSegment[] array.
118888: */
118889: static int fts3SegReaderCursorAppend(
118890:   Fts3MultiSegReader *pCsr, 
118891:   Fts3SegReader *pNew
118892: ){
118893:   if( (pCsr->nSegment%16)==0 ){
118894:     Fts3SegReader **apNew;
118895:     int nByte = (pCsr->nSegment + 16)*sizeof(Fts3SegReader*);
118896:     apNew = (Fts3SegReader **)sqlite3_realloc(pCsr->apSegment, nByte);
118897:     if( !apNew ){
118898:       sqlite3Fts3SegReaderFree(pNew);
118899:       return SQLITE_NOMEM;
118900:     }
118901:     pCsr->apSegment = apNew;
118902:   }
118903:   pCsr->apSegment[pCsr->nSegment++] = pNew;
118904:   return SQLITE_OK;
118905: }
118906: 
118907: /*
118908: ** Add seg-reader objects to the Fts3MultiSegReader object passed as the
118909: ** 8th argument.
118910: **
118911: ** This function returns SQLITE_OK if successful, or an SQLite error code
118912: ** otherwise.
118913: */
118914: static int fts3SegReaderCursor(
118915:   Fts3Table *p,                   /* FTS3 table handle */
118916:   int iIndex,                     /* Index to search (from 0 to p->nIndex-1) */
118917:   int iLevel,                     /* Level of segments to scan */
118918:   const char *zTerm,              /* Term to query for */
118919:   int nTerm,                      /* Size of zTerm in bytes */
118920:   int isPrefix,                   /* True for a prefix search */
118921:   int isScan,                     /* True to scan from zTerm to EOF */
118922:   Fts3MultiSegReader *pCsr        /* Cursor object to populate */
118923: ){
118924:   int rc = SQLITE_OK;             /* Error code */
118925:   sqlite3_stmt *pStmt = 0;        /* Statement to iterate through segments */
118926:   int rc2;                        /* Result of sqlite3_reset() */
118927: 
118928:   /* If iLevel is less than 0 and this is not a scan, include a seg-reader 
118929:   ** for the pending-terms. If this is a scan, then this call must be being
118930:   ** made by an fts4aux module, not an FTS table. In this case calling
118931:   ** Fts3SegReaderPending might segfault, as the data structures used by 
118932:   ** fts4aux are not completely populated. So it's easiest to filter these
118933:   ** calls out here.  */
118934:   if( iLevel<0 && p->aIndex ){
118935:     Fts3SegReader *pSeg = 0;
118936:     rc = sqlite3Fts3SegReaderPending(p, iIndex, zTerm, nTerm, isPrefix, &pSeg);
118937:     if( rc==SQLITE_OK && pSeg ){
118938:       rc = fts3SegReaderCursorAppend(pCsr, pSeg);
118939:     }
118940:   }
118941: 
118942:   if( iLevel!=FTS3_SEGCURSOR_PENDING ){
118943:     if( rc==SQLITE_OK ){
118944:       rc = sqlite3Fts3AllSegdirs(p, iIndex, iLevel, &pStmt);
118945:     }
118946: 
118947:     while( rc==SQLITE_OK && SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){
118948:       Fts3SegReader *pSeg = 0;
118949: 
118950:       /* Read the values returned by the SELECT into local variables. */
118951:       sqlite3_int64 iStartBlock = sqlite3_column_int64(pStmt, 1);
118952:       sqlite3_int64 iLeavesEndBlock = sqlite3_column_int64(pStmt, 2);
118953:       sqlite3_int64 iEndBlock = sqlite3_column_int64(pStmt, 3);
118954:       int nRoot = sqlite3_column_bytes(pStmt, 4);
118955:       char const *zRoot = sqlite3_column_blob(pStmt, 4);
118956: 
118957:       /* If zTerm is not NULL, and this segment is not stored entirely on its
118958:       ** root node, the range of leaves scanned can be reduced. Do this. */
118959:       if( iStartBlock && zTerm ){
118960:         sqlite3_int64 *pi = (isPrefix ? &iLeavesEndBlock : 0);
118961:         rc = fts3SelectLeaf(p, zTerm, nTerm, zRoot, nRoot, &iStartBlock, pi);
118962:         if( rc!=SQLITE_OK ) goto finished;
118963:         if( isPrefix==0 && isScan==0 ) iLeavesEndBlock = iStartBlock;
118964:       }
118965:  
118966:       rc = sqlite3Fts3SegReaderNew(pCsr->nSegment+1, 
118967:           iStartBlock, iLeavesEndBlock, iEndBlock, zRoot, nRoot, &pSeg
118968:       );
118969:       if( rc!=SQLITE_OK ) goto finished;
118970:       rc = fts3SegReaderCursorAppend(pCsr, pSeg);
118971:     }
118972:   }
118973: 
118974:  finished:
118975:   rc2 = sqlite3_reset(pStmt);
118976:   if( rc==SQLITE_DONE ) rc = rc2;
118977: 
118978:   return rc;
118979: }
118980: 
118981: /*
118982: ** Set up a cursor object for iterating through a full-text index or a 
118983: ** single level therein.
118984: */
118985: SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor(
118986:   Fts3Table *p,                   /* FTS3 table handle */
118987:   int iIndex,                     /* Index to search (from 0 to p->nIndex-1) */
118988:   int iLevel,                     /* Level of segments to scan */
118989:   const char *zTerm,              /* Term to query for */
118990:   int nTerm,                      /* Size of zTerm in bytes */
118991:   int isPrefix,                   /* True for a prefix search */
118992:   int isScan,                     /* True to scan from zTerm to EOF */
118993:   Fts3MultiSegReader *pCsr       /* Cursor object to populate */
118994: ){
118995:   assert( iIndex>=0 && iIndex<p->nIndex );
118996:   assert( iLevel==FTS3_SEGCURSOR_ALL
118997:       ||  iLevel==FTS3_SEGCURSOR_PENDING 
118998:       ||  iLevel>=0
118999:   );
119000:   assert( iLevel<FTS3_SEGDIR_MAXLEVEL );
119001:   assert( FTS3_SEGCURSOR_ALL<0 && FTS3_SEGCURSOR_PENDING<0 );
119002:   assert( isPrefix==0 || isScan==0 );
119003: 
119004:   /* "isScan" is only set to true by the ft4aux module, an ordinary
119005:   ** full-text tables. */
119006:   assert( isScan==0 || p->aIndex==0 );
119007: 
119008:   memset(pCsr, 0, sizeof(Fts3MultiSegReader));
119009: 
119010:   return fts3SegReaderCursor(
119011:       p, iIndex, iLevel, zTerm, nTerm, isPrefix, isScan, pCsr
119012:   );
119013: }
119014: 
119015: /*
119016: ** In addition to its current configuration, have the Fts3MultiSegReader
119017: ** passed as the 4th argument also scan the doclist for term zTerm/nTerm.
119018: **
119019: ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
119020: */
119021: static int fts3SegReaderCursorAddZero(
119022:   Fts3Table *p,                   /* FTS virtual table handle */
119023:   const char *zTerm,              /* Term to scan doclist of */
119024:   int nTerm,                      /* Number of bytes in zTerm */
119025:   Fts3MultiSegReader *pCsr        /* Fts3MultiSegReader to modify */
119026: ){
119027:   return fts3SegReaderCursor(p, 0, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 0, 0,pCsr);
119028: }
119029: 
119030: /*
119031: ** Open an Fts3MultiSegReader to scan the doclist for term zTerm/nTerm. Or,
119032: ** if isPrefix is true, to scan the doclist for all terms for which 
119033: ** zTerm/nTerm is a prefix. If successful, return SQLITE_OK and write
119034: ** a pointer to the new Fts3MultiSegReader to *ppSegcsr. Otherwise, return
119035: ** an SQLite error code.
119036: **
119037: ** It is the responsibility of the caller to free this object by eventually
119038: ** passing it to fts3SegReaderCursorFree() 
119039: **
119040: ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
119041: ** Output parameter *ppSegcsr is set to 0 if an error occurs.
119042: */
119043: static int fts3TermSegReaderCursor(
119044:   Fts3Cursor *pCsr,               /* Virtual table cursor handle */
119045:   const char *zTerm,              /* Term to query for */
119046:   int nTerm,                      /* Size of zTerm in bytes */
119047:   int isPrefix,                   /* True for a prefix search */
119048:   Fts3MultiSegReader **ppSegcsr   /* OUT: Allocated seg-reader cursor */
119049: ){
119050:   Fts3MultiSegReader *pSegcsr;    /* Object to allocate and return */
119051:   int rc = SQLITE_NOMEM;          /* Return code */
119052: 
119053:   pSegcsr = sqlite3_malloc(sizeof(Fts3MultiSegReader));
119054:   if( pSegcsr ){
119055:     int i;
119056:     int bFound = 0;               /* True once an index has been found */
119057:     Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
119058: 
119059:     if( isPrefix ){
119060:       for(i=1; bFound==0 && i<p->nIndex; i++){
119061:         if( p->aIndex[i].nPrefix==nTerm ){
119062:           bFound = 1;
119063:           rc = sqlite3Fts3SegReaderCursor(
119064:               p, i, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 0, 0, pSegcsr);
119065:           pSegcsr->bLookup = 1;
119066:         }
119067:       }
119068: 
119069:       for(i=1; bFound==0 && i<p->nIndex; i++){
119070:         if( p->aIndex[i].nPrefix==nTerm+1 ){
119071:           bFound = 1;
119072:           rc = sqlite3Fts3SegReaderCursor(
119073:               p, i, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 1, 0, pSegcsr
119074:           );
119075:           if( rc==SQLITE_OK ){
119076:             rc = fts3SegReaderCursorAddZero(p, zTerm, nTerm, pSegcsr);
119077:           }
119078:         }
119079:       }
119080:     }
119081: 
119082:     if( bFound==0 ){
119083:       rc = sqlite3Fts3SegReaderCursor(
119084:           p, 0, FTS3_SEGCURSOR_ALL, zTerm, nTerm, isPrefix, 0, pSegcsr
119085:       );
119086:       pSegcsr->bLookup = !isPrefix;
119087:     }
119088:   }
119089: 
119090:   *ppSegcsr = pSegcsr;
119091:   return rc;
119092: }
119093: 
119094: /*
119095: ** Free an Fts3MultiSegReader allocated by fts3TermSegReaderCursor().
119096: */
119097: static void fts3SegReaderCursorFree(Fts3MultiSegReader *pSegcsr){
119098:   sqlite3Fts3SegReaderFinish(pSegcsr);
119099:   sqlite3_free(pSegcsr);
119100: }
119101: 
119102: /*
119103: ** This function retreives the doclist for the specified term (or term
119104: ** prefix) from the database.
119105: */
119106: static int fts3TermSelect(
119107:   Fts3Table *p,                   /* Virtual table handle */
119108:   Fts3PhraseToken *pTok,          /* Token to query for */
119109:   int iColumn,                    /* Column to query (or -ve for all columns) */
119110:   int *pnOut,                     /* OUT: Size of buffer at *ppOut */
119111:   char **ppOut                    /* OUT: Malloced result buffer */
119112: ){
119113:   int rc;                         /* Return code */
119114:   Fts3MultiSegReader *pSegcsr;    /* Seg-reader cursor for this term */
119115:   TermSelect tsc;                 /* Object for pair-wise doclist merging */
119116:   Fts3SegFilter filter;           /* Segment term filter configuration */
119117: 
119118:   pSegcsr = pTok->pSegcsr;
119119:   memset(&tsc, 0, sizeof(TermSelect));
119120: 
119121:   filter.flags = FTS3_SEGMENT_IGNORE_EMPTY | FTS3_SEGMENT_REQUIRE_POS
119122:         | (pTok->isPrefix ? FTS3_SEGMENT_PREFIX : 0)
119123:         | (pTok->bFirst ? FTS3_SEGMENT_FIRST : 0)
119124:         | (iColumn<p->nColumn ? FTS3_SEGMENT_COLUMN_FILTER : 0);
119125:   filter.iCol = iColumn;
119126:   filter.zTerm = pTok->z;
119127:   filter.nTerm = pTok->n;
119128: 
119129:   rc = sqlite3Fts3SegReaderStart(p, pSegcsr, &filter);
119130:   while( SQLITE_OK==rc
119131:       && SQLITE_ROW==(rc = sqlite3Fts3SegReaderStep(p, pSegcsr)) 
119132:   ){
119133:     rc = fts3TermSelectMerge(p, &tsc, pSegcsr->aDoclist, pSegcsr->nDoclist);
119134:   }
119135: 
119136:   if( rc==SQLITE_OK ){
119137:     rc = fts3TermSelectFinishMerge(p, &tsc);
119138:   }
119139:   if( rc==SQLITE_OK ){
119140:     *ppOut = tsc.aaOutput[0];
119141:     *pnOut = tsc.anOutput[0];
119142:   }else{
119143:     int i;
119144:     for(i=0; i<SizeofArray(tsc.aaOutput); i++){
119145:       sqlite3_free(tsc.aaOutput[i]);
119146:     }
119147:   }
119148: 
119149:   fts3SegReaderCursorFree(pSegcsr);
119150:   pTok->pSegcsr = 0;
119151:   return rc;
119152: }
119153: 
119154: /*
119155: ** This function counts the total number of docids in the doclist stored
119156: ** in buffer aList[], size nList bytes.
119157: **
119158: ** If the isPoslist argument is true, then it is assumed that the doclist
119159: ** contains a position-list following each docid. Otherwise, it is assumed
119160: ** that the doclist is simply a list of docids stored as delta encoded 
119161: ** varints.
119162: */
119163: static int fts3DoclistCountDocids(char *aList, int nList){
119164:   int nDoc = 0;                   /* Return value */
119165:   if( aList ){
119166:     char *aEnd = &aList[nList];   /* Pointer to one byte after EOF */
119167:     char *p = aList;              /* Cursor */
119168:     while( p<aEnd ){
119169:       nDoc++;
119170:       while( (*p++)&0x80 );     /* Skip docid varint */
119171:       fts3PoslistCopy(0, &p);   /* Skip over position list */
119172:     }
119173:   }
119174: 
119175:   return nDoc;
119176: }
119177: 
119178: /*
119179: ** Advance the cursor to the next row in the %_content table that
119180: ** matches the search criteria.  For a MATCH search, this will be
119181: ** the next row that matches. For a full-table scan, this will be
119182: ** simply the next row in the %_content table.  For a docid lookup,
119183: ** this routine simply sets the EOF flag.
119184: **
119185: ** Return SQLITE_OK if nothing goes wrong.  SQLITE_OK is returned
119186: ** even if we reach end-of-file.  The fts3EofMethod() will be called
119187: ** subsequently to determine whether or not an EOF was hit.
119188: */
119189: static int fts3NextMethod(sqlite3_vtab_cursor *pCursor){
119190:   int rc;
119191:   Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
119192:   if( pCsr->eSearch==FTS3_DOCID_SEARCH || pCsr->eSearch==FTS3_FULLSCAN_SEARCH ){
119193:     if( SQLITE_ROW!=sqlite3_step(pCsr->pStmt) ){
119194:       pCsr->isEof = 1;
119195:       rc = sqlite3_reset(pCsr->pStmt);
119196:     }else{
119197:       pCsr->iPrevId = sqlite3_column_int64(pCsr->pStmt, 0);
119198:       rc = SQLITE_OK;
119199:     }
119200:   }else{
119201:     rc = fts3EvalNext((Fts3Cursor *)pCursor);
119202:   }
119203:   assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
119204:   return rc;
119205: }
119206: 
119207: /*
119208: ** This is the xFilter interface for the virtual table.  See
119209: ** the virtual table xFilter method documentation for additional
119210: ** information.
119211: **
119212: ** If idxNum==FTS3_FULLSCAN_SEARCH then do a full table scan against
119213: ** the %_content table.
119214: **
119215: ** If idxNum==FTS3_DOCID_SEARCH then do a docid lookup for a single entry
119216: ** in the %_content table.
119217: **
119218: ** If idxNum>=FTS3_FULLTEXT_SEARCH then use the full text index.  The
119219: ** column on the left-hand side of the MATCH operator is column
119220: ** number idxNum-FTS3_FULLTEXT_SEARCH, 0 indexed.  argv[0] is the right-hand
119221: ** side of the MATCH operator.
119222: */
119223: static int fts3FilterMethod(
119224:   sqlite3_vtab_cursor *pCursor,   /* The cursor used for this query */
119225:   int idxNum,                     /* Strategy index */
119226:   const char *idxStr,             /* Unused */
119227:   int nVal,                       /* Number of elements in apVal */
119228:   sqlite3_value **apVal           /* Arguments for the indexing scheme */
119229: ){
119230:   int rc;
119231:   char *zSql;                     /* SQL statement used to access %_content */
119232:   Fts3Table *p = (Fts3Table *)pCursor->pVtab;
119233:   Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
119234: 
119235:   UNUSED_PARAMETER(idxStr);
119236:   UNUSED_PARAMETER(nVal);
119237: 
119238:   assert( idxNum>=0 && idxNum<=(FTS3_FULLTEXT_SEARCH+p->nColumn) );
119239:   assert( nVal==0 || nVal==1 );
119240:   assert( (nVal==0)==(idxNum==FTS3_FULLSCAN_SEARCH) );
119241:   assert( p->pSegments==0 );
119242: 
119243:   /* In case the cursor has been used before, clear it now. */
119244:   sqlite3_finalize(pCsr->pStmt);
119245:   sqlite3_free(pCsr->aDoclist);
119246:   sqlite3Fts3ExprFree(pCsr->pExpr);
119247:   memset(&pCursor[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor));
119248: 
119249:   if( idxStr ){
119250:     pCsr->bDesc = (idxStr[0]=='D');
119251:   }else{
119252:     pCsr->bDesc = p->bDescIdx;
119253:   }
119254:   pCsr->eSearch = (i16)idxNum;
119255: 
119256:   if( idxNum!=FTS3_DOCID_SEARCH && idxNum!=FTS3_FULLSCAN_SEARCH ){
119257:     int iCol = idxNum-FTS3_FULLTEXT_SEARCH;
119258:     const char *zQuery = (const char *)sqlite3_value_text(apVal[0]);
119259: 
119260:     if( zQuery==0 && sqlite3_value_type(apVal[0])!=SQLITE_NULL ){
119261:       return SQLITE_NOMEM;
119262:     }
119263: 
119264:     rc = sqlite3Fts3ExprParse(p->pTokenizer, p->azColumn, p->bHasStat, 
119265:         p->nColumn, iCol, zQuery, -1, &pCsr->pExpr
119266:     );
119267:     if( rc!=SQLITE_OK ){
119268:       if( rc==SQLITE_ERROR ){
119269:         static const char *zErr = "malformed MATCH expression: [%s]";
119270:         p->base.zErrMsg = sqlite3_mprintf(zErr, zQuery);
119271:       }
119272:       return rc;
119273:     }
119274: 
119275:     rc = sqlite3Fts3ReadLock(p);
119276:     if( rc!=SQLITE_OK ) return rc;
119277: 
119278:     rc = fts3EvalStart(pCsr);
119279: 
119280:     sqlite3Fts3SegmentsClose(p);
119281:     if( rc!=SQLITE_OK ) return rc;
119282:     pCsr->pNextId = pCsr->aDoclist;
119283:     pCsr->iPrevId = 0;
119284:   }
119285: 
119286:   /* Compile a SELECT statement for this cursor. For a full-table-scan, the
119287:   ** statement loops through all rows of the %_content table. For a
119288:   ** full-text query or docid lookup, the statement retrieves a single
119289:   ** row by docid.
119290:   */
119291:   if( idxNum==FTS3_FULLSCAN_SEARCH ){
119292:     zSql = sqlite3_mprintf(
119293:         "SELECT %s ORDER BY rowid %s",
119294:         p->zReadExprlist, (pCsr->bDesc ? "DESC" : "ASC")
119295:     );
119296:     if( zSql ){
119297:       rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
119298:       sqlite3_free(zSql);
119299:     }else{
119300:       rc = SQLITE_NOMEM;
119301:     }
119302:   }else if( idxNum==FTS3_DOCID_SEARCH ){
119303:     rc = fts3CursorSeekStmt(pCsr, &pCsr->pStmt);
119304:     if( rc==SQLITE_OK ){
119305:       rc = sqlite3_bind_value(pCsr->pStmt, 1, apVal[0]);
119306:     }
119307:   }
119308:   if( rc!=SQLITE_OK ) return rc;
119309: 
119310:   return fts3NextMethod(pCursor);
119311: }
119312: 
119313: /* 
119314: ** This is the xEof method of the virtual table. SQLite calls this 
119315: ** routine to find out if it has reached the end of a result set.
119316: */
119317: static int fts3EofMethod(sqlite3_vtab_cursor *pCursor){
119318:   return ((Fts3Cursor *)pCursor)->isEof;
119319: }
119320: 
119321: /* 
119322: ** This is the xRowid method. The SQLite core calls this routine to
119323: ** retrieve the rowid for the current row of the result set. fts3
119324: ** exposes %_content.docid as the rowid for the virtual table. The
119325: ** rowid should be written to *pRowid.
119326: */
119327: static int fts3RowidMethod(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){
119328:   Fts3Cursor *pCsr = (Fts3Cursor *) pCursor;
119329:   *pRowid = pCsr->iPrevId;
119330:   return SQLITE_OK;
119331: }
119332: 
119333: /* 
119334: ** This is the xColumn method, called by SQLite to request a value from
119335: ** the row that the supplied cursor currently points to.
119336: */
119337: static int fts3ColumnMethod(
119338:   sqlite3_vtab_cursor *pCursor,   /* Cursor to retrieve value from */
119339:   sqlite3_context *pContext,      /* Context for sqlite3_result_xxx() calls */
119340:   int iCol                        /* Index of column to read value from */
119341: ){
119342:   int rc = SQLITE_OK;             /* Return Code */
119343:   Fts3Cursor *pCsr = (Fts3Cursor *) pCursor;
119344:   Fts3Table *p = (Fts3Table *)pCursor->pVtab;
119345: 
119346:   /* The column value supplied by SQLite must be in range. */
119347:   assert( iCol>=0 && iCol<=p->nColumn+1 );
119348: 
119349:   if( iCol==p->nColumn+1 ){
119350:     /* This call is a request for the "docid" column. Since "docid" is an 
119351:     ** alias for "rowid", use the xRowid() method to obtain the value.
119352:     */
119353:     sqlite3_result_int64(pContext, pCsr->iPrevId);
119354:   }else if( iCol==p->nColumn ){
119355:     /* The extra column whose name is the same as the table.
119356:     ** Return a blob which is a pointer to the cursor.
119357:     */
119358:     sqlite3_result_blob(pContext, &pCsr, sizeof(pCsr), SQLITE_TRANSIENT);
119359:   }else{
119360:     rc = fts3CursorSeek(0, pCsr);
119361:     if( rc==SQLITE_OK && sqlite3_data_count(pCsr->pStmt)>(iCol+1) ){
119362:       sqlite3_result_value(pContext, sqlite3_column_value(pCsr->pStmt, iCol+1));
119363:     }
119364:   }
119365: 
119366:   assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
119367:   return rc;
119368: }
119369: 
119370: /* 
119371: ** This function is the implementation of the xUpdate callback used by 
119372: ** FTS3 virtual tables. It is invoked by SQLite each time a row is to be
119373: ** inserted, updated or deleted.
119374: */
119375: static int fts3UpdateMethod(
119376:   sqlite3_vtab *pVtab,            /* Virtual table handle */
119377:   int nArg,                       /* Size of argument array */
119378:   sqlite3_value **apVal,          /* Array of arguments */
119379:   sqlite_int64 *pRowid            /* OUT: The affected (or effected) rowid */
119380: ){
119381:   return sqlite3Fts3UpdateMethod(pVtab, nArg, apVal, pRowid);
119382: }
119383: 
119384: /*
119385: ** Implementation of xSync() method. Flush the contents of the pending-terms
119386: ** hash-table to the database.
119387: */
119388: static int fts3SyncMethod(sqlite3_vtab *pVtab){
119389:   int rc = sqlite3Fts3PendingTermsFlush((Fts3Table *)pVtab);
119390:   sqlite3Fts3SegmentsClose((Fts3Table *)pVtab);
119391:   return rc;
119392: }
119393: 
119394: /*
119395: ** Implementation of xBegin() method. This is a no-op.
119396: */
119397: static int fts3BeginMethod(sqlite3_vtab *pVtab){
119398:   TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
119399:   UNUSED_PARAMETER(pVtab);
119400:   assert( p->pSegments==0 );
119401:   assert( p->nPendingData==0 );
119402:   assert( p->inTransaction!=1 );
119403:   TESTONLY( p->inTransaction = 1 );
119404:   TESTONLY( p->mxSavepoint = -1; );
119405:   return SQLITE_OK;
119406: }
119407: 
119408: /*
119409: ** Implementation of xCommit() method. This is a no-op. The contents of
119410: ** the pending-terms hash-table have already been flushed into the database
119411: ** by fts3SyncMethod().
119412: */
119413: static int fts3CommitMethod(sqlite3_vtab *pVtab){
119414:   TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
119415:   UNUSED_PARAMETER(pVtab);
119416:   assert( p->nPendingData==0 );
119417:   assert( p->inTransaction!=0 );
119418:   assert( p->pSegments==0 );
119419:   TESTONLY( p->inTransaction = 0 );
119420:   TESTONLY( p->mxSavepoint = -1; );
119421:   return SQLITE_OK;
119422: }
119423: 
119424: /*
119425: ** Implementation of xRollback(). Discard the contents of the pending-terms
119426: ** hash-table. Any changes made to the database are reverted by SQLite.
119427: */
119428: static int fts3RollbackMethod(sqlite3_vtab *pVtab){
119429:   Fts3Table *p = (Fts3Table*)pVtab;
119430:   sqlite3Fts3PendingTermsClear(p);
119431:   assert( p->inTransaction!=0 );
119432:   TESTONLY( p->inTransaction = 0 );
119433:   TESTONLY( p->mxSavepoint = -1; );
119434:   return SQLITE_OK;
119435: }
119436: 
119437: /*
119438: ** When called, *ppPoslist must point to the byte immediately following the
119439: ** end of a position-list. i.e. ( (*ppPoslist)[-1]==POS_END ). This function
119440: ** moves *ppPoslist so that it instead points to the first byte of the
119441: ** same position list.
119442: */
119443: static void fts3ReversePoslist(char *pStart, char **ppPoslist){
119444:   char *p = &(*ppPoslist)[-2];
119445:   char c = 0;
119446: 
119447:   while( p>pStart && (c=*p--)==0 );
119448:   while( p>pStart && (*p & 0x80) | c ){ 
119449:     c = *p--; 
119450:   }
119451:   if( p>pStart ){ p = &p[2]; }
119452:   while( *p++&0x80 );
119453:   *ppPoslist = p;
119454: }
119455: 
119456: /*
119457: ** Helper function used by the implementation of the overloaded snippet(),
119458: ** offsets() and optimize() SQL functions.
119459: **
119460: ** If the value passed as the third argument is a blob of size
119461: ** sizeof(Fts3Cursor*), then the blob contents are copied to the 
119462: ** output variable *ppCsr and SQLITE_OK is returned. Otherwise, an error
119463: ** message is written to context pContext and SQLITE_ERROR returned. The
119464: ** string passed via zFunc is used as part of the error message.
119465: */
119466: static int fts3FunctionArg(
119467:   sqlite3_context *pContext,      /* SQL function call context */
119468:   const char *zFunc,              /* Function name */
119469:   sqlite3_value *pVal,            /* argv[0] passed to function */
119470:   Fts3Cursor **ppCsr              /* OUT: Store cursor handle here */
119471: ){
119472:   Fts3Cursor *pRet;
119473:   if( sqlite3_value_type(pVal)!=SQLITE_BLOB 
119474:    || sqlite3_value_bytes(pVal)!=sizeof(Fts3Cursor *)
119475:   ){
119476:     char *zErr = sqlite3_mprintf("illegal first argument to %s", zFunc);
119477:     sqlite3_result_error(pContext, zErr, -1);
119478:     sqlite3_free(zErr);
119479:     return SQLITE_ERROR;
119480:   }
119481:   memcpy(&pRet, sqlite3_value_blob(pVal), sizeof(Fts3Cursor *));
119482:   *ppCsr = pRet;
119483:   return SQLITE_OK;
119484: }
119485: 
119486: /*
119487: ** Implementation of the snippet() function for FTS3
119488: */
119489: static void fts3SnippetFunc(
119490:   sqlite3_context *pContext,      /* SQLite function call context */
119491:   int nVal,                       /* Size of apVal[] array */
119492:   sqlite3_value **apVal           /* Array of arguments */
119493: ){
119494:   Fts3Cursor *pCsr;               /* Cursor handle passed through apVal[0] */
119495:   const char *zStart = "<b>";
119496:   const char *zEnd = "</b>";
119497:   const char *zEllipsis = "<b>...</b>";
119498:   int iCol = -1;
119499:   int nToken = 15;                /* Default number of tokens in snippet */
119500: 
119501:   /* There must be at least one argument passed to this function (otherwise
119502:   ** the non-overloaded version would have been called instead of this one).
119503:   */
119504:   assert( nVal>=1 );
119505: 
119506:   if( nVal>6 ){
119507:     sqlite3_result_error(pContext, 
119508:         "wrong number of arguments to function snippet()", -1);
119509:     return;
119510:   }
119511:   if( fts3FunctionArg(pContext, "snippet", apVal[0], &pCsr) ) return;
119512: 
119513:   switch( nVal ){
119514:     case 6: nToken = sqlite3_value_int(apVal[5]);
119515:     case 5: iCol = sqlite3_value_int(apVal[4]);
119516:     case 4: zEllipsis = (const char*)sqlite3_value_text(apVal[3]);
119517:     case 3: zEnd = (const char*)sqlite3_value_text(apVal[2]);
119518:     case 2: zStart = (const char*)sqlite3_value_text(apVal[1]);
119519:   }
119520:   if( !zEllipsis || !zEnd || !zStart ){
119521:     sqlite3_result_error_nomem(pContext);
119522:   }else if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){
119523:     sqlite3Fts3Snippet(pContext, pCsr, zStart, zEnd, zEllipsis, iCol, nToken);
119524:   }
119525: }
119526: 
119527: /*
119528: ** Implementation of the offsets() function for FTS3
119529: */
119530: static void fts3OffsetsFunc(
119531:   sqlite3_context *pContext,      /* SQLite function call context */
119532:   int nVal,                       /* Size of argument array */
119533:   sqlite3_value **apVal           /* Array of arguments */
119534: ){
119535:   Fts3Cursor *pCsr;               /* Cursor handle passed through apVal[0] */
119536: 
119537:   UNUSED_PARAMETER(nVal);
119538: 
119539:   assert( nVal==1 );
119540:   if( fts3FunctionArg(pContext, "offsets", apVal[0], &pCsr) ) return;
119541:   assert( pCsr );
119542:   if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){
119543:     sqlite3Fts3Offsets(pContext, pCsr);
119544:   }
119545: }
119546: 
119547: /* 
119548: ** Implementation of the special optimize() function for FTS3. This 
119549: ** function merges all segments in the database to a single segment.
119550: ** Example usage is:
119551: **
119552: **   SELECT optimize(t) FROM t LIMIT 1;
119553: **
119554: ** where 't' is the name of an FTS3 table.
119555: */
119556: static void fts3OptimizeFunc(
119557:   sqlite3_context *pContext,      /* SQLite function call context */
119558:   int nVal,                       /* Size of argument array */
119559:   sqlite3_value **apVal           /* Array of arguments */
119560: ){
119561:   int rc;                         /* Return code */
119562:   Fts3Table *p;                   /* Virtual table handle */
119563:   Fts3Cursor *pCursor;            /* Cursor handle passed through apVal[0] */
119564: 
119565:   UNUSED_PARAMETER(nVal);
119566: 
119567:   assert( nVal==1 );
119568:   if( fts3FunctionArg(pContext, "optimize", apVal[0], &pCursor) ) return;
119569:   p = (Fts3Table *)pCursor->base.pVtab;
119570:   assert( p );
119571: 
119572:   rc = sqlite3Fts3Optimize(p);
119573: 
119574:   switch( rc ){
119575:     case SQLITE_OK:
119576:       sqlite3_result_text(pContext, "Index optimized", -1, SQLITE_STATIC);
119577:       break;
119578:     case SQLITE_DONE:
119579:       sqlite3_result_text(pContext, "Index already optimal", -1, SQLITE_STATIC);
119580:       break;
119581:     default:
119582:       sqlite3_result_error_code(pContext, rc);
119583:       break;
119584:   }
119585: }
119586: 
119587: /*
119588: ** Implementation of the matchinfo() function for FTS3
119589: */
119590: static void fts3MatchinfoFunc(
119591:   sqlite3_context *pContext,      /* SQLite function call context */
119592:   int nVal,                       /* Size of argument array */
119593:   sqlite3_value **apVal           /* Array of arguments */
119594: ){
119595:   Fts3Cursor *pCsr;               /* Cursor handle passed through apVal[0] */
119596:   assert( nVal==1 || nVal==2 );
119597:   if( SQLITE_OK==fts3FunctionArg(pContext, "matchinfo", apVal[0], &pCsr) ){
119598:     const char *zArg = 0;
119599:     if( nVal>1 ){
119600:       zArg = (const char *)sqlite3_value_text(apVal[1]);
119601:     }
119602:     sqlite3Fts3Matchinfo(pContext, pCsr, zArg);
119603:   }
119604: }
119605: 
119606: /*
119607: ** This routine implements the xFindFunction method for the FTS3
119608: ** virtual table.
119609: */
119610: static int fts3FindFunctionMethod(
119611:   sqlite3_vtab *pVtab,            /* Virtual table handle */
119612:   int nArg,                       /* Number of SQL function arguments */
119613:   const char *zName,              /* Name of SQL function */
119614:   void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), /* OUT: Result */
119615:   void **ppArg                    /* Unused */
119616: ){
119617:   struct Overloaded {
119618:     const char *zName;
119619:     void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
119620:   } aOverload[] = {
119621:     { "snippet", fts3SnippetFunc },
119622:     { "offsets", fts3OffsetsFunc },
119623:     { "optimize", fts3OptimizeFunc },
119624:     { "matchinfo", fts3MatchinfoFunc },
119625:   };
119626:   int i;                          /* Iterator variable */
119627: 
119628:   UNUSED_PARAMETER(pVtab);
119629:   UNUSED_PARAMETER(nArg);
119630:   UNUSED_PARAMETER(ppArg);
119631: 
119632:   for(i=0; i<SizeofArray(aOverload); i++){
119633:     if( strcmp(zName, aOverload[i].zName)==0 ){
119634:       *pxFunc = aOverload[i].xFunc;
119635:       return 1;
119636:     }
119637:   }
119638: 
119639:   /* No function of the specified name was found. Return 0. */
119640:   return 0;
119641: }
119642: 
119643: /*
119644: ** Implementation of FTS3 xRename method. Rename an fts3 table.
119645: */
119646: static int fts3RenameMethod(
119647:   sqlite3_vtab *pVtab,            /* Virtual table handle */
119648:   const char *zName               /* New name of table */
119649: ){
119650:   Fts3Table *p = (Fts3Table *)pVtab;
119651:   sqlite3 *db = p->db;            /* Database connection */
119652:   int rc;                         /* Return Code */
119653: 
119654:   /* As it happens, the pending terms table is always empty here. This is
119655:   ** because an "ALTER TABLE RENAME TABLE" statement inside a transaction 
119656:   ** always opens a savepoint transaction. And the xSavepoint() method 
119657:   ** flushes the pending terms table. But leave the (no-op) call to
119658:   ** PendingTermsFlush() in in case that changes.
119659:   */
119660:   assert( p->nPendingData==0 );
119661:   rc = sqlite3Fts3PendingTermsFlush(p);
119662: 
119663:   if( p->zContentTbl==0 ){
119664:     fts3DbExec(&rc, db,
119665:       "ALTER TABLE %Q.'%q_content'  RENAME TO '%q_content';",
119666:       p->zDb, p->zName, zName
119667:     );
119668:   }
119669: 
119670:   if( p->bHasDocsize ){
119671:     fts3DbExec(&rc, db,
119672:       "ALTER TABLE %Q.'%q_docsize'  RENAME TO '%q_docsize';",
119673:       p->zDb, p->zName, zName
119674:     );
119675:   }
119676:   if( p->bHasStat ){
119677:     fts3DbExec(&rc, db,
119678:       "ALTER TABLE %Q.'%q_stat'  RENAME TO '%q_stat';",
119679:       p->zDb, p->zName, zName
119680:     );
119681:   }
119682:   fts3DbExec(&rc, db,
119683:     "ALTER TABLE %Q.'%q_segments' RENAME TO '%q_segments';",
119684:     p->zDb, p->zName, zName
119685:   );
119686:   fts3DbExec(&rc, db,
119687:     "ALTER TABLE %Q.'%q_segdir'   RENAME TO '%q_segdir';",
119688:     p->zDb, p->zName, zName
119689:   );
119690:   return rc;
119691: }
119692: 
119693: /*
119694: ** The xSavepoint() method.
119695: **
119696: ** Flush the contents of the pending-terms table to disk.
119697: */
119698: static int fts3SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){
119699:   UNUSED_PARAMETER(iSavepoint);
119700:   assert( ((Fts3Table *)pVtab)->inTransaction );
119701:   assert( ((Fts3Table *)pVtab)->mxSavepoint < iSavepoint );
119702:   TESTONLY( ((Fts3Table *)pVtab)->mxSavepoint = iSavepoint );
119703:   return fts3SyncMethod(pVtab);
119704: }
119705: 
119706: /*
119707: ** The xRelease() method.
119708: **
119709: ** This is a no-op.
119710: */
119711: static int fts3ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){
119712:   TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
119713:   UNUSED_PARAMETER(iSavepoint);
119714:   UNUSED_PARAMETER(pVtab);
119715:   assert( p->inTransaction );
119716:   assert( p->mxSavepoint >= iSavepoint );
119717:   TESTONLY( p->mxSavepoint = iSavepoint-1 );
119718:   return SQLITE_OK;
119719: }
119720: 
119721: /*
119722: ** The xRollbackTo() method.
119723: **
119724: ** Discard the contents of the pending terms table.
119725: */
119726: static int fts3RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){
119727:   Fts3Table *p = (Fts3Table*)pVtab;
119728:   UNUSED_PARAMETER(iSavepoint);
119729:   assert( p->inTransaction );
119730:   assert( p->mxSavepoint >= iSavepoint );
119731:   TESTONLY( p->mxSavepoint = iSavepoint );
119732:   sqlite3Fts3PendingTermsClear(p);
119733:   return SQLITE_OK;
119734: }
119735: 
119736: static const sqlite3_module fts3Module = {
119737:   /* iVersion      */ 2,
119738:   /* xCreate       */ fts3CreateMethod,
119739:   /* xConnect      */ fts3ConnectMethod,
119740:   /* xBestIndex    */ fts3BestIndexMethod,
119741:   /* xDisconnect   */ fts3DisconnectMethod,
119742:   /* xDestroy      */ fts3DestroyMethod,
119743:   /* xOpen         */ fts3OpenMethod,
119744:   /* xClose        */ fts3CloseMethod,
119745:   /* xFilter       */ fts3FilterMethod,
119746:   /* xNext         */ fts3NextMethod,
119747:   /* xEof          */ fts3EofMethod,
119748:   /* xColumn       */ fts3ColumnMethod,
119749:   /* xRowid        */ fts3RowidMethod,
119750:   /* xUpdate       */ fts3UpdateMethod,
119751:   /* xBegin        */ fts3BeginMethod,
119752:   /* xSync         */ fts3SyncMethod,
119753:   /* xCommit       */ fts3CommitMethod,
119754:   /* xRollback     */ fts3RollbackMethod,
119755:   /* xFindFunction */ fts3FindFunctionMethod,
119756:   /* xRename */       fts3RenameMethod,
119757:   /* xSavepoint    */ fts3SavepointMethod,
119758:   /* xRelease      */ fts3ReleaseMethod,
119759:   /* xRollbackTo   */ fts3RollbackToMethod,
119760: };
119761: 
119762: /*
119763: ** This function is registered as the module destructor (called when an
119764: ** FTS3 enabled database connection is closed). It frees the memory
119765: ** allocated for the tokenizer hash table.
119766: */
119767: static void hashDestroy(void *p){
119768:   Fts3Hash *pHash = (Fts3Hash *)p;
119769:   sqlite3Fts3HashClear(pHash);
119770:   sqlite3_free(pHash);
119771: }
119772: 
119773: /*
119774: ** The fts3 built-in tokenizers - "simple", "porter" and "icu"- are 
119775: ** implemented in files fts3_tokenizer1.c, fts3_porter.c and fts3_icu.c
119776: ** respectively. The following three forward declarations are for functions
119777: ** declared in these files used to retrieve the respective implementations.
119778: **
119779: ** Calling sqlite3Fts3SimpleTokenizerModule() sets the value pointed
119780: ** to by the argument to point to the "simple" tokenizer implementation.
119781: ** And so on.
119782: */
119783: SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule);
119784: SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule);
119785: #ifdef SQLITE_ENABLE_ICU
119786: SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(sqlite3_tokenizer_module const**ppModule);
119787: #endif
119788: 
119789: /*
119790: ** Initialise the fts3 extension. If this extension is built as part
119791: ** of the sqlite library, then this function is called directly by
119792: ** SQLite. If fts3 is built as a dynamically loadable extension, this
119793: ** function is called by the sqlite3_extension_init() entry point.
119794: */
119795: SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){
119796:   int rc = SQLITE_OK;
119797:   Fts3Hash *pHash = 0;
119798:   const sqlite3_tokenizer_module *pSimple = 0;
119799:   const sqlite3_tokenizer_module *pPorter = 0;
119800: 
119801: #ifdef SQLITE_ENABLE_ICU
119802:   const sqlite3_tokenizer_module *pIcu = 0;
119803:   sqlite3Fts3IcuTokenizerModule(&pIcu);
119804: #endif
119805: 
119806: #ifdef SQLITE_TEST
119807:   rc = sqlite3Fts3InitTerm(db);
119808:   if( rc!=SQLITE_OK ) return rc;
119809: #endif
119810: 
119811:   rc = sqlite3Fts3InitAux(db);
119812:   if( rc!=SQLITE_OK ) return rc;
119813: 
119814:   sqlite3Fts3SimpleTokenizerModule(&pSimple);
119815:   sqlite3Fts3PorterTokenizerModule(&pPorter);
119816: 
119817:   /* Allocate and initialise the hash-table used to store tokenizers. */
119818:   pHash = sqlite3_malloc(sizeof(Fts3Hash));
119819:   if( !pHash ){
119820:     rc = SQLITE_NOMEM;
119821:   }else{
119822:     sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
119823:   }
119824: 
119825:   /* Load the built-in tokenizers into the hash table */
119826:   if( rc==SQLITE_OK ){
119827:     if( sqlite3Fts3HashInsert(pHash, "simple", 7, (void *)pSimple)
119828:      || sqlite3Fts3HashInsert(pHash, "porter", 7, (void *)pPorter) 
119829: #ifdef SQLITE_ENABLE_ICU
119830:      || (pIcu && sqlite3Fts3HashInsert(pHash, "icu", 4, (void *)pIcu))
119831: #endif
119832:     ){
119833:       rc = SQLITE_NOMEM;
119834:     }
119835:   }
119836: 
119837: #ifdef SQLITE_TEST
119838:   if( rc==SQLITE_OK ){
119839:     rc = sqlite3Fts3ExprInitTestInterface(db);
119840:   }
119841: #endif
119842: 
119843:   /* Create the virtual table wrapper around the hash-table and overload 
119844:   ** the two scalar functions. If this is successful, register the
119845:   ** module with sqlite.
119846:   */
119847:   if( SQLITE_OK==rc 
119848:    && SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "fts3_tokenizer"))
119849:    && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
119850:    && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
119851:    && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
119852:    && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2))
119853:    && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1))
119854:   ){
119855:     rc = sqlite3_create_module_v2(
119856:         db, "fts3", &fts3Module, (void *)pHash, hashDestroy
119857:     );
119858:     if( rc==SQLITE_OK ){
119859:       rc = sqlite3_create_module_v2(
119860:           db, "fts4", &fts3Module, (void *)pHash, 0
119861:       );
119862:     }
119863:     return rc;
119864:   }
119865: 
119866:   /* An error has occurred. Delete the hash table and return the error code. */
119867:   assert( rc!=SQLITE_OK );
119868:   if( pHash ){
119869:     sqlite3Fts3HashClear(pHash);
119870:     sqlite3_free(pHash);
119871:   }
119872:   return rc;
119873: }
119874: 
119875: /*
119876: ** Allocate an Fts3MultiSegReader for each token in the expression headed
119877: ** by pExpr. 
119878: **
119879: ** An Fts3SegReader object is a cursor that can seek or scan a range of
119880: ** entries within a single segment b-tree. An Fts3MultiSegReader uses multiple
119881: ** Fts3SegReader objects internally to provide an interface to seek or scan
119882: ** within the union of all segments of a b-tree. Hence the name.
119883: **
119884: ** If the allocated Fts3MultiSegReader just seeks to a single entry in a
119885: ** segment b-tree (if the term is not a prefix or it is a prefix for which
119886: ** there exists prefix b-tree of the right length) then it may be traversed
119887: ** and merged incrementally. Otherwise, it has to be merged into an in-memory 
119888: ** doclist and then traversed.
119889: */
119890: static void fts3EvalAllocateReaders(
119891:   Fts3Cursor *pCsr,               /* FTS cursor handle */
119892:   Fts3Expr *pExpr,                /* Allocate readers for this expression */
119893:   int *pnToken,                   /* OUT: Total number of tokens in phrase. */
119894:   int *pnOr,                      /* OUT: Total number of OR nodes in expr. */
119895:   int *pRc                        /* IN/OUT: Error code */
119896: ){
119897:   if( pExpr && SQLITE_OK==*pRc ){
119898:     if( pExpr->eType==FTSQUERY_PHRASE ){
119899:       int i;
119900:       int nToken = pExpr->pPhrase->nToken;
119901:       *pnToken += nToken;
119902:       for(i=0; i<nToken; i++){
119903:         Fts3PhraseToken *pToken = &pExpr->pPhrase->aToken[i];
119904:         int rc = fts3TermSegReaderCursor(pCsr, 
119905:             pToken->z, pToken->n, pToken->isPrefix, &pToken->pSegcsr
119906:         );
119907:         if( rc!=SQLITE_OK ){
119908:           *pRc = rc;
119909:           return;
119910:         }
119911:       }
119912:       assert( pExpr->pPhrase->iDoclistToken==0 );
119913:       pExpr->pPhrase->iDoclistToken = -1;
119914:     }else{
119915:       *pnOr += (pExpr->eType==FTSQUERY_OR);
119916:       fts3EvalAllocateReaders(pCsr, pExpr->pLeft, pnToken, pnOr, pRc);
119917:       fts3EvalAllocateReaders(pCsr, pExpr->pRight, pnToken, pnOr, pRc);
119918:     }
119919:   }
119920: }
119921: 
119922: /*
119923: ** Arguments pList/nList contain the doclist for token iToken of phrase p.
119924: ** It is merged into the main doclist stored in p->doclist.aAll/nAll.
119925: **
119926: ** This function assumes that pList points to a buffer allocated using
119927: ** sqlite3_malloc(). This function takes responsibility for eventually
119928: ** freeing the buffer.
119929: */
119930: static void fts3EvalPhraseMergeToken(
119931:   Fts3Table *pTab,                /* FTS Table pointer */
119932:   Fts3Phrase *p,                  /* Phrase to merge pList/nList into */
119933:   int iToken,                     /* Token pList/nList corresponds to */
119934:   char *pList,                    /* Pointer to doclist */
119935:   int nList                       /* Number of bytes in pList */
119936: ){
119937:   assert( iToken!=p->iDoclistToken );
119938: 
119939:   if( pList==0 ){
119940:     sqlite3_free(p->doclist.aAll);
119941:     p->doclist.aAll = 0;
119942:     p->doclist.nAll = 0;
119943:   }
119944: 
119945:   else if( p->iDoclistToken<0 ){
119946:     p->doclist.aAll = pList;
119947:     p->doclist.nAll = nList;
119948:   }
119949: 
119950:   else if( p->doclist.aAll==0 ){
119951:     sqlite3_free(pList);
119952:   }
119953: 
119954:   else {
119955:     char *pLeft;
119956:     char *pRight;
119957:     int nLeft;
119958:     int nRight;
119959:     int nDiff;
119960: 
119961:     if( p->iDoclistToken<iToken ){
119962:       pLeft = p->doclist.aAll;
119963:       nLeft = p->doclist.nAll;
119964:       pRight = pList;
119965:       nRight = nList;
119966:       nDiff = iToken - p->iDoclistToken;
119967:     }else{
119968:       pRight = p->doclist.aAll;
119969:       nRight = p->doclist.nAll;
119970:       pLeft = pList;
119971:       nLeft = nList;
119972:       nDiff = p->iDoclistToken - iToken;
119973:     }
119974: 
119975:     fts3DoclistPhraseMerge(pTab->bDescIdx, nDiff, pLeft, nLeft, pRight,&nRight);
119976:     sqlite3_free(pLeft);
119977:     p->doclist.aAll = pRight;
119978:     p->doclist.nAll = nRight;
119979:   }
119980: 
119981:   if( iToken>p->iDoclistToken ) p->iDoclistToken = iToken;
119982: }
119983: 
119984: /*
119985: ** Load the doclist for phrase p into p->doclist.aAll/nAll. The loaded doclist
119986: ** does not take deferred tokens into account.
119987: **
119988: ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
119989: */
119990: static int fts3EvalPhraseLoad(
119991:   Fts3Cursor *pCsr,               /* FTS Cursor handle */
119992:   Fts3Phrase *p                   /* Phrase object */
119993: ){
119994:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
119995:   int iToken;
119996:   int rc = SQLITE_OK;
119997: 
119998:   for(iToken=0; rc==SQLITE_OK && iToken<p->nToken; iToken++){
119999:     Fts3PhraseToken *pToken = &p->aToken[iToken];
120000:     assert( pToken->pDeferred==0 || pToken->pSegcsr==0 );
120001: 
120002:     if( pToken->pSegcsr ){
120003:       int nThis = 0;
120004:       char *pThis = 0;
120005:       rc = fts3TermSelect(pTab, pToken, p->iColumn, &nThis, &pThis);
120006:       if( rc==SQLITE_OK ){
120007:         fts3EvalPhraseMergeToken(pTab, p, iToken, pThis, nThis);
120008:       }
120009:     }
120010:     assert( pToken->pSegcsr==0 );
120011:   }
120012: 
120013:   return rc;
120014: }
120015: 
120016: /*
120017: ** This function is called on each phrase after the position lists for
120018: ** any deferred tokens have been loaded into memory. It updates the phrases
120019: ** current position list to include only those positions that are really
120020: ** instances of the phrase (after considering deferred tokens). If this
120021: ** means that the phrase does not appear in the current row, doclist.pList
120022: ** and doclist.nList are both zeroed.
120023: **
120024: ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
120025: */
120026: static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
120027:   int iToken;                     /* Used to iterate through phrase tokens */
120028:   char *aPoslist = 0;             /* Position list for deferred tokens */
120029:   int nPoslist = 0;               /* Number of bytes in aPoslist */
120030:   int iPrev = -1;                 /* Token number of previous deferred token */
120031: 
120032:   assert( pPhrase->doclist.bFreeList==0 );
120033: 
120034:   for(iToken=0; iToken<pPhrase->nToken; iToken++){
120035:     Fts3PhraseToken *pToken = &pPhrase->aToken[iToken];
120036:     Fts3DeferredToken *pDeferred = pToken->pDeferred;
120037: 
120038:     if( pDeferred ){
120039:       char *pList;
120040:       int nList;
120041:       int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList);
120042:       if( rc!=SQLITE_OK ) return rc;
120043: 
120044:       if( pList==0 ){
120045:         sqlite3_free(aPoslist);
120046:         pPhrase->doclist.pList = 0;
120047:         pPhrase->doclist.nList = 0;
120048:         return SQLITE_OK;
120049: 
120050:       }else if( aPoslist==0 ){
120051:         aPoslist = pList;
120052:         nPoslist = nList;
120053: 
120054:       }else{
120055:         char *aOut = pList;
120056:         char *p1 = aPoslist;
120057:         char *p2 = aOut;
120058: 
120059:         assert( iPrev>=0 );
120060:         fts3PoslistPhraseMerge(&aOut, iToken-iPrev, 0, 1, &p1, &p2);
120061:         sqlite3_free(aPoslist);
120062:         aPoslist = pList;
120063:         nPoslist = aOut - aPoslist;
120064:         if( nPoslist==0 ){
120065:           sqlite3_free(aPoslist);
120066:           pPhrase->doclist.pList = 0;
120067:           pPhrase->doclist.nList = 0;
120068:           return SQLITE_OK;
120069:         }
120070:       }
120071:       iPrev = iToken;
120072:     }
120073:   }
120074: 
120075:   if( iPrev>=0 ){
120076:     int nMaxUndeferred = pPhrase->iDoclistToken;
120077:     if( nMaxUndeferred<0 ){
120078:       pPhrase->doclist.pList = aPoslist;
120079:       pPhrase->doclist.nList = nPoslist;
120080:       pPhrase->doclist.iDocid = pCsr->iPrevId;
120081:       pPhrase->doclist.bFreeList = 1;
120082:     }else{
120083:       int nDistance;
120084:       char *p1;
120085:       char *p2;
120086:       char *aOut;
120087: 
120088:       if( nMaxUndeferred>iPrev ){
120089:         p1 = aPoslist;
120090:         p2 = pPhrase->doclist.pList;
120091:         nDistance = nMaxUndeferred - iPrev;
120092:       }else{
120093:         p1 = pPhrase->doclist.pList;
120094:         p2 = aPoslist;
120095:         nDistance = iPrev - nMaxUndeferred;
120096:       }
120097: 
120098:       aOut = (char *)sqlite3_malloc(nPoslist+8);
120099:       if( !aOut ){
120100:         sqlite3_free(aPoslist);
120101:         return SQLITE_NOMEM;
120102:       }
120103:       
120104:       pPhrase->doclist.pList = aOut;
120105:       if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){
120106:         pPhrase->doclist.bFreeList = 1;
120107:         pPhrase->doclist.nList = (aOut - pPhrase->doclist.pList);
120108:       }else{
120109:         sqlite3_free(aOut);
120110:         pPhrase->doclist.pList = 0;
120111:         pPhrase->doclist.nList = 0;
120112:       }
120113:       sqlite3_free(aPoslist);
120114:     }
120115:   }
120116: 
120117:   return SQLITE_OK;
120118: }
120119: 
120120: /*
120121: ** This function is called for each Fts3Phrase in a full-text query 
120122: ** expression to initialize the mechanism for returning rows. Once this
120123: ** function has been called successfully on an Fts3Phrase, it may be
120124: ** used with fts3EvalPhraseNext() to iterate through the matching docids.
120125: **
120126: ** If parameter bOptOk is true, then the phrase may (or may not) use the
120127: ** incremental loading strategy. Otherwise, the entire doclist is loaded into
120128: ** memory within this call.
120129: **
120130: ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
120131: */
120132: static int fts3EvalPhraseStart(Fts3Cursor *pCsr, int bOptOk, Fts3Phrase *p){
120133:   int rc;                         /* Error code */
120134:   Fts3PhraseToken *pFirst = &p->aToken[0];
120135:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
120136: 
120137:   if( pCsr->bDesc==pTab->bDescIdx 
120138:    && bOptOk==1 
120139:    && p->nToken==1 
120140:    && pFirst->pSegcsr 
120141:    && pFirst->pSegcsr->bLookup 
120142:    && pFirst->bFirst==0
120143:   ){
120144:     /* Use the incremental approach. */
120145:     int iCol = (p->iColumn >= pTab->nColumn ? -1 : p->iColumn);
120146:     rc = sqlite3Fts3MsrIncrStart(
120147:         pTab, pFirst->pSegcsr, iCol, pFirst->z, pFirst->n);
120148:     p->bIncr = 1;
120149: 
120150:   }else{
120151:     /* Load the full doclist for the phrase into memory. */
120152:     rc = fts3EvalPhraseLoad(pCsr, p);
120153:     p->bIncr = 0;
120154:   }
120155: 
120156:   assert( rc!=SQLITE_OK || p->nToken<1 || p->aToken[0].pSegcsr==0 || p->bIncr );
120157:   return rc;
120158: }
120159: 
120160: /*
120161: ** This function is used to iterate backwards (from the end to start) 
120162: ** through doclists. It is used by this module to iterate through phrase
120163: ** doclists in reverse and by the fts3_write.c module to iterate through
120164: ** pending-terms lists when writing to databases with "order=desc".
120165: **
120166: ** The doclist may be sorted in ascending (parameter bDescIdx==0) or 
120167: ** descending (parameter bDescIdx==1) order of docid. Regardless, this
120168: ** function iterates from the end of the doclist to the beginning.
120169: */
120170: SQLITE_PRIVATE void sqlite3Fts3DoclistPrev(
120171:   int bDescIdx,                   /* True if the doclist is desc */
120172:   char *aDoclist,                 /* Pointer to entire doclist */
120173:   int nDoclist,                   /* Length of aDoclist in bytes */
120174:   char **ppIter,                  /* IN/OUT: Iterator pointer */
120175:   sqlite3_int64 *piDocid,         /* IN/OUT: Docid pointer */
120176:   int *pnList,                    /* IN/OUT: List length pointer */
120177:   u8 *pbEof                       /* OUT: End-of-file flag */
120178: ){
120179:   char *p = *ppIter;
120180: 
120181:   assert( nDoclist>0 );
120182:   assert( *pbEof==0 );
120183:   assert( p || *piDocid==0 );
120184:   assert( !p || (p>aDoclist && p<&aDoclist[nDoclist]) );
120185: 
120186:   if( p==0 ){
120187:     sqlite3_int64 iDocid = 0;
120188:     char *pNext = 0;
120189:     char *pDocid = aDoclist;
120190:     char *pEnd = &aDoclist[nDoclist];
120191:     int iMul = 1;
120192: 
120193:     while( pDocid<pEnd ){
120194:       sqlite3_int64 iDelta;
120195:       pDocid += sqlite3Fts3GetVarint(pDocid, &iDelta);
120196:       iDocid += (iMul * iDelta);
120197:       pNext = pDocid;
120198:       fts3PoslistCopy(0, &pDocid);
120199:       while( pDocid<pEnd && *pDocid==0 ) pDocid++;
120200:       iMul = (bDescIdx ? -1 : 1);
120201:     }
120202: 
120203:     *pnList = pEnd - pNext;
120204:     *ppIter = pNext;
120205:     *piDocid = iDocid;
120206:   }else{
120207:     int iMul = (bDescIdx ? -1 : 1);
120208:     sqlite3_int64 iDelta;
120209:     fts3GetReverseVarint(&p, aDoclist, &iDelta);
120210:     *piDocid -= (iMul * iDelta);
120211: 
120212:     if( p==aDoclist ){
120213:       *pbEof = 1;
120214:     }else{
120215:       char *pSave = p;
120216:       fts3ReversePoslist(aDoclist, &p);
120217:       *pnList = (pSave - p);
120218:     }
120219:     *ppIter = p;
120220:   }
120221: }
120222: 
120223: /*
120224: ** Attempt to move the phrase iterator to point to the next matching docid. 
120225: ** If an error occurs, return an SQLite error code. Otherwise, return 
120226: ** SQLITE_OK.
120227: **
120228: ** If there is no "next" entry and no error occurs, then *pbEof is set to
120229: ** 1 before returning. Otherwise, if no error occurs and the iterator is
120230: ** successfully advanced, *pbEof is set to 0.
120231: */
120232: static int fts3EvalPhraseNext(
120233:   Fts3Cursor *pCsr,               /* FTS Cursor handle */
120234:   Fts3Phrase *p,                  /* Phrase object to advance to next docid */
120235:   u8 *pbEof                       /* OUT: Set to 1 if EOF */
120236: ){
120237:   int rc = SQLITE_OK;
120238:   Fts3Doclist *pDL = &p->doclist;
120239:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
120240: 
120241:   if( p->bIncr ){
120242:     assert( p->nToken==1 );
120243:     assert( pDL->pNextDocid==0 );
120244:     rc = sqlite3Fts3MsrIncrNext(pTab, p->aToken[0].pSegcsr, 
120245:         &pDL->iDocid, &pDL->pList, &pDL->nList
120246:     );
120247:     if( rc==SQLITE_OK && !pDL->pList ){
120248:       *pbEof = 1;
120249:     }
120250:   }else if( pCsr->bDesc!=pTab->bDescIdx && pDL->nAll ){
120251:     sqlite3Fts3DoclistPrev(pTab->bDescIdx, pDL->aAll, pDL->nAll, 
120252:         &pDL->pNextDocid, &pDL->iDocid, &pDL->nList, pbEof
120253:     );
120254:     pDL->pList = pDL->pNextDocid;
120255:   }else{
120256:     char *pIter;                            /* Used to iterate through aAll */
120257:     char *pEnd = &pDL->aAll[pDL->nAll];     /* 1 byte past end of aAll */
120258:     if( pDL->pNextDocid ){
120259:       pIter = pDL->pNextDocid;
120260:     }else{
120261:       pIter = pDL->aAll;
120262:     }
120263: 
120264:     if( pIter>=pEnd ){
120265:       /* We have already reached the end of this doclist. EOF. */
120266:       *pbEof = 1;
120267:     }else{
120268:       sqlite3_int64 iDelta;
120269:       pIter += sqlite3Fts3GetVarint(pIter, &iDelta);
120270:       if( pTab->bDescIdx==0 || pDL->pNextDocid==0 ){
120271:         pDL->iDocid += iDelta;
120272:       }else{
120273:         pDL->iDocid -= iDelta;
120274:       }
120275:       pDL->pList = pIter;
120276:       fts3PoslistCopy(0, &pIter);
120277:       pDL->nList = (pIter - pDL->pList);
120278: 
120279:       /* pIter now points just past the 0x00 that terminates the position-
120280:       ** list for document pDL->iDocid. However, if this position-list was
120281:       ** edited in place by fts3EvalNearTrim(), then pIter may not actually
120282:       ** point to the start of the next docid value. The following line deals
120283:       ** with this case by advancing pIter past the zero-padding added by
120284:       ** fts3EvalNearTrim().  */
120285:       while( pIter<pEnd && *pIter==0 ) pIter++;
120286: 
120287:       pDL->pNextDocid = pIter;
120288:       assert( pIter>=&pDL->aAll[pDL->nAll] || *pIter );
120289:       *pbEof = 0;
120290:     }
120291:   }
120292: 
120293:   return rc;
120294: }
120295: 
120296: /*
120297: **
120298: ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
120299: ** Otherwise, fts3EvalPhraseStart() is called on all phrases within the
120300: ** expression. Also the Fts3Expr.bDeferred variable is set to true for any
120301: ** expressions for which all descendent tokens are deferred.
120302: **
120303: ** If parameter bOptOk is zero, then it is guaranteed that the
120304: ** Fts3Phrase.doclist.aAll/nAll variables contain the entire doclist for
120305: ** each phrase in the expression (subject to deferred token processing).
120306: ** Or, if bOptOk is non-zero, then one or more tokens within the expression
120307: ** may be loaded incrementally, meaning doclist.aAll/nAll is not available.
120308: **
120309: ** If an error occurs within this function, *pRc is set to an SQLite error
120310: ** code before returning.
120311: */
120312: static void fts3EvalStartReaders(
120313:   Fts3Cursor *pCsr,               /* FTS Cursor handle */
120314:   Fts3Expr *pExpr,                /* Expression to initialize phrases in */
120315:   int bOptOk,                     /* True to enable incremental loading */
120316:   int *pRc                        /* IN/OUT: Error code */
120317: ){
120318:   if( pExpr && SQLITE_OK==*pRc ){
120319:     if( pExpr->eType==FTSQUERY_PHRASE ){
120320:       int i;
120321:       int nToken = pExpr->pPhrase->nToken;
120322:       for(i=0; i<nToken; i++){
120323:         if( pExpr->pPhrase->aToken[i].pDeferred==0 ) break;
120324:       }
120325:       pExpr->bDeferred = (i==nToken);
120326:       *pRc = fts3EvalPhraseStart(pCsr, bOptOk, pExpr->pPhrase);
120327:     }else{
120328:       fts3EvalStartReaders(pCsr, pExpr->pLeft, bOptOk, pRc);
120329:       fts3EvalStartReaders(pCsr, pExpr->pRight, bOptOk, pRc);
120330:       pExpr->bDeferred = (pExpr->pLeft->bDeferred && pExpr->pRight->bDeferred);
120331:     }
120332:   }
120333: }
120334: 
120335: /*
120336: ** An array of the following structures is assembled as part of the process
120337: ** of selecting tokens to defer before the query starts executing (as part
120338: ** of the xFilter() method). There is one element in the array for each
120339: ** token in the FTS expression.
120340: **
120341: ** Tokens are divided into AND/NEAR clusters. All tokens in a cluster belong
120342: ** to phrases that are connected only by AND and NEAR operators (not OR or
120343: ** NOT). When determining tokens to defer, each AND/NEAR cluster is considered
120344: ** separately. The root of a tokens AND/NEAR cluster is stored in 
120345: ** Fts3TokenAndCost.pRoot.
120346: */
120347: typedef struct Fts3TokenAndCost Fts3TokenAndCost;
120348: struct Fts3TokenAndCost {
120349:   Fts3Phrase *pPhrase;            /* The phrase the token belongs to */
120350:   int iToken;                     /* Position of token in phrase */
120351:   Fts3PhraseToken *pToken;        /* The token itself */
120352:   Fts3Expr *pRoot;                /* Root of NEAR/AND cluster */
120353:   int nOvfl;                      /* Number of overflow pages to load doclist */
120354:   int iCol;                       /* The column the token must match */
120355: };
120356: 
120357: /*
120358: ** This function is used to populate an allocated Fts3TokenAndCost array.
120359: **
120360: ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
120361: ** Otherwise, if an error occurs during execution, *pRc is set to an
120362: ** SQLite error code.
120363: */
120364: static void fts3EvalTokenCosts(
120365:   Fts3Cursor *pCsr,               /* FTS Cursor handle */
120366:   Fts3Expr *pRoot,                /* Root of current AND/NEAR cluster */
120367:   Fts3Expr *pExpr,                /* Expression to consider */
120368:   Fts3TokenAndCost **ppTC,        /* Write new entries to *(*ppTC)++ */
120369:   Fts3Expr ***ppOr,               /* Write new OR root to *(*ppOr)++ */
120370:   int *pRc                        /* IN/OUT: Error code */
120371: ){
120372:   if( *pRc==SQLITE_OK ){
120373:     if( pExpr->eType==FTSQUERY_PHRASE ){
120374:       Fts3Phrase *pPhrase = pExpr->pPhrase;
120375:       int i;
120376:       for(i=0; *pRc==SQLITE_OK && i<pPhrase->nToken; i++){
120377:         Fts3TokenAndCost *pTC = (*ppTC)++;
120378:         pTC->pPhrase = pPhrase;
120379:         pTC->iToken = i;
120380:         pTC->pRoot = pRoot;
120381:         pTC->pToken = &pPhrase->aToken[i];
120382:         pTC->iCol = pPhrase->iColumn;
120383:         *pRc = sqlite3Fts3MsrOvfl(pCsr, pTC->pToken->pSegcsr, &pTC->nOvfl);
120384:       }
120385:     }else if( pExpr->eType!=FTSQUERY_NOT ){
120386:       assert( pExpr->eType==FTSQUERY_OR
120387:            || pExpr->eType==FTSQUERY_AND
120388:            || pExpr->eType==FTSQUERY_NEAR
120389:       );
120390:       assert( pExpr->pLeft && pExpr->pRight );
120391:       if( pExpr->eType==FTSQUERY_OR ){
120392:         pRoot = pExpr->pLeft;
120393:         **ppOr = pRoot;
120394:         (*ppOr)++;
120395:       }
120396:       fts3EvalTokenCosts(pCsr, pRoot, pExpr->pLeft, ppTC, ppOr, pRc);
120397:       if( pExpr->eType==FTSQUERY_OR ){
120398:         pRoot = pExpr->pRight;
120399:         **ppOr = pRoot;
120400:         (*ppOr)++;
120401:       }
120402:       fts3EvalTokenCosts(pCsr, pRoot, pExpr->pRight, ppTC, ppOr, pRc);
120403:     }
120404:   }
120405: }
120406: 
120407: /*
120408: ** Determine the average document (row) size in pages. If successful,
120409: ** write this value to *pnPage and return SQLITE_OK. Otherwise, return
120410: ** an SQLite error code.
120411: **
120412: ** The average document size in pages is calculated by first calculating 
120413: ** determining the average size in bytes, B. If B is less than the amount
120414: ** of data that will fit on a single leaf page of an intkey table in
120415: ** this database, then the average docsize is 1. Otherwise, it is 1 plus
120416: ** the number of overflow pages consumed by a record B bytes in size.
120417: */
120418: static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){
120419:   if( pCsr->nRowAvg==0 ){
120420:     /* The average document size, which is required to calculate the cost
120421:     ** of each doclist, has not yet been determined. Read the required 
120422:     ** data from the %_stat table to calculate it.
120423:     **
120424:     ** Entry 0 of the %_stat table is a blob containing (nCol+1) FTS3 
120425:     ** varints, where nCol is the number of columns in the FTS3 table.
120426:     ** The first varint is the number of documents currently stored in
120427:     ** the table. The following nCol varints contain the total amount of
120428:     ** data stored in all rows of each column of the table, from left
120429:     ** to right.
120430:     */
120431:     int rc;
120432:     Fts3Table *p = (Fts3Table*)pCsr->base.pVtab;
120433:     sqlite3_stmt *pStmt;
120434:     sqlite3_int64 nDoc = 0;
120435:     sqlite3_int64 nByte = 0;
120436:     const char *pEnd;
120437:     const char *a;
120438: 
120439:     rc = sqlite3Fts3SelectDoctotal(p, &pStmt);
120440:     if( rc!=SQLITE_OK ) return rc;
120441:     a = sqlite3_column_blob(pStmt, 0);
120442:     assert( a );
120443: 
120444:     pEnd = &a[sqlite3_column_bytes(pStmt, 0)];
120445:     a += sqlite3Fts3GetVarint(a, &nDoc);
120446:     while( a<pEnd ){
120447:       a += sqlite3Fts3GetVarint(a, &nByte);
120448:     }
120449:     if( nDoc==0 || nByte==0 ){
120450:       sqlite3_reset(pStmt);
120451:       return FTS_CORRUPT_VTAB;
120452:     }
120453: 
120454:     pCsr->nDoc = nDoc;
120455:     pCsr->nRowAvg = (int)(((nByte / nDoc) + p->nPgsz) / p->nPgsz);
120456:     assert( pCsr->nRowAvg>0 ); 
120457:     rc = sqlite3_reset(pStmt);
120458:     if( rc!=SQLITE_OK ) return rc;
120459:   }
120460: 
120461:   *pnPage = pCsr->nRowAvg;
120462:   return SQLITE_OK;
120463: }
120464: 
120465: /*
120466: ** This function is called to select the tokens (if any) that will be 
120467: ** deferred. The array aTC[] has already been populated when this is
120468: ** called.
120469: **
120470: ** This function is called once for each AND/NEAR cluster in the 
120471: ** expression. Each invocation determines which tokens to defer within
120472: ** the cluster with root node pRoot. See comments above the definition
120473: ** of struct Fts3TokenAndCost for more details.
120474: **
120475: ** If no error occurs, SQLITE_OK is returned and sqlite3Fts3DeferToken()
120476: ** called on each token to defer. Otherwise, an SQLite error code is
120477: ** returned.
120478: */
120479: static int fts3EvalSelectDeferred(
120480:   Fts3Cursor *pCsr,               /* FTS Cursor handle */
120481:   Fts3Expr *pRoot,                /* Consider tokens with this root node */
120482:   Fts3TokenAndCost *aTC,          /* Array of expression tokens and costs */
120483:   int nTC                         /* Number of entries in aTC[] */
120484: ){
120485:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
120486:   int nDocSize = 0;               /* Number of pages per doc loaded */
120487:   int rc = SQLITE_OK;             /* Return code */
120488:   int ii;                         /* Iterator variable for various purposes */
120489:   int nOvfl = 0;                  /* Total overflow pages used by doclists */
120490:   int nToken = 0;                 /* Total number of tokens in cluster */
120491: 
120492:   int nMinEst = 0;                /* The minimum count for any phrase so far. */
120493:   int nLoad4 = 1;                 /* (Phrases that will be loaded)^4. */
120494: 
120495:   /* Tokens are never deferred for FTS tables created using the content=xxx
120496:   ** option. The reason being that it is not guaranteed that the content
120497:   ** table actually contains the same data as the index. To prevent this from
120498:   ** causing any problems, the deferred token optimization is completely
120499:   ** disabled for content=xxx tables. */
120500:   if( pTab->zContentTbl ){
120501:     return SQLITE_OK;
120502:   }
120503: 
120504:   /* Count the tokens in this AND/NEAR cluster. If none of the doclists
120505:   ** associated with the tokens spill onto overflow pages, or if there is
120506:   ** only 1 token, exit early. No tokens to defer in this case. */
120507:   for(ii=0; ii<nTC; ii++){
120508:     if( aTC[ii].pRoot==pRoot ){
120509:       nOvfl += aTC[ii].nOvfl;
120510:       nToken++;
120511:     }
120512:   }
120513:   if( nOvfl==0 || nToken<2 ) return SQLITE_OK;
120514: 
120515:   /* Obtain the average docsize (in pages). */
120516:   rc = fts3EvalAverageDocsize(pCsr, &nDocSize);
120517:   assert( rc!=SQLITE_OK || nDocSize>0 );
120518: 
120519: 
120520:   /* Iterate through all tokens in this AND/NEAR cluster, in ascending order 
120521:   ** of the number of overflow pages that will be loaded by the pager layer 
120522:   ** to retrieve the entire doclist for the token from the full-text index.
120523:   ** Load the doclists for tokens that are either:
120524:   **
120525:   **   a. The cheapest token in the entire query (i.e. the one visited by the
120526:   **      first iteration of this loop), or
120527:   **
120528:   **   b. Part of a multi-token phrase.
120529:   **
120530:   ** After each token doclist is loaded, merge it with the others from the
120531:   ** same phrase and count the number of documents that the merged doclist
120532:   ** contains. Set variable "nMinEst" to the smallest number of documents in 
120533:   ** any phrase doclist for which 1 or more token doclists have been loaded.
120534:   ** Let nOther be the number of other phrases for which it is certain that
120535:   ** one or more tokens will not be deferred.
120536:   **
120537:   ** Then, for each token, defer it if loading the doclist would result in
120538:   ** loading N or more overflow pages into memory, where N is computed as:
120539:   **
120540:   **    (nMinEst + 4^nOther - 1) / (4^nOther)
120541:   */
120542:   for(ii=0; ii<nToken && rc==SQLITE_OK; ii++){
120543:     int iTC;                      /* Used to iterate through aTC[] array. */
120544:     Fts3TokenAndCost *pTC = 0;    /* Set to cheapest remaining token. */
120545: 
120546:     /* Set pTC to point to the cheapest remaining token. */
120547:     for(iTC=0; iTC<nTC; iTC++){
120548:       if( aTC[iTC].pToken && aTC[iTC].pRoot==pRoot 
120549:        && (!pTC || aTC[iTC].nOvfl<pTC->nOvfl) 
120550:       ){
120551:         pTC = &aTC[iTC];
120552:       }
120553:     }
120554:     assert( pTC );
120555: 
120556:     if( ii && pTC->nOvfl>=((nMinEst+(nLoad4/4)-1)/(nLoad4/4))*nDocSize ){
120557:       /* The number of overflow pages to load for this (and therefore all
120558:       ** subsequent) tokens is greater than the estimated number of pages 
120559:       ** that will be loaded if all subsequent tokens are deferred.
120560:       */
120561:       Fts3PhraseToken *pToken = pTC->pToken;
120562:       rc = sqlite3Fts3DeferToken(pCsr, pToken, pTC->iCol);
120563:       fts3SegReaderCursorFree(pToken->pSegcsr);
120564:       pToken->pSegcsr = 0;
120565:     }else{
120566:       /* Set nLoad4 to the value of (4^nOther) for the next iteration of the
120567:       ** for-loop. Except, limit the value to 2^24 to prevent it from 
120568:       ** overflowing the 32-bit integer it is stored in. */
120569:       if( ii<12 ) nLoad4 = nLoad4*4;
120570: 
120571:       if( ii==0 || pTC->pPhrase->nToken>1 ){
120572:         /* Either this is the cheapest token in the entire query, or it is
120573:         ** part of a multi-token phrase. Either way, the entire doclist will
120574:         ** (eventually) be loaded into memory. It may as well be now. */
120575:         Fts3PhraseToken *pToken = pTC->pToken;
120576:         int nList = 0;
120577:         char *pList = 0;
120578:         rc = fts3TermSelect(pTab, pToken, pTC->iCol, &nList, &pList);
120579:         assert( rc==SQLITE_OK || pList==0 );
120580:         if( rc==SQLITE_OK ){
120581:           int nCount;
120582:           fts3EvalPhraseMergeToken(pTab, pTC->pPhrase, pTC->iToken,pList,nList);
120583:           nCount = fts3DoclistCountDocids(
120584:               pTC->pPhrase->doclist.aAll, pTC->pPhrase->doclist.nAll
120585:           );
120586:           if( ii==0 || nCount<nMinEst ) nMinEst = nCount;
120587:         }
120588:       }
120589:     }
120590:     pTC->pToken = 0;
120591:   }
120592: 
120593:   return rc;
120594: }
120595: 
120596: /*
120597: ** This function is called from within the xFilter method. It initializes
120598: ** the full-text query currently stored in pCsr->pExpr. To iterate through
120599: ** the results of a query, the caller does:
120600: **
120601: **    fts3EvalStart(pCsr);
120602: **    while( 1 ){
120603: **      fts3EvalNext(pCsr);
120604: **      if( pCsr->bEof ) break;
120605: **      ... return row pCsr->iPrevId to the caller ...
120606: **    }
120607: */
120608: static int fts3EvalStart(Fts3Cursor *pCsr){
120609:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
120610:   int rc = SQLITE_OK;
120611:   int nToken = 0;
120612:   int nOr = 0;
120613: 
120614:   /* Allocate a MultiSegReader for each token in the expression. */
120615:   fts3EvalAllocateReaders(pCsr, pCsr->pExpr, &nToken, &nOr, &rc);
120616: 
120617:   /* Determine which, if any, tokens in the expression should be deferred. */
120618:   if( rc==SQLITE_OK && nToken>1 && pTab->bHasStat ){
120619:     Fts3TokenAndCost *aTC;
120620:     Fts3Expr **apOr;
120621:     aTC = (Fts3TokenAndCost *)sqlite3_malloc(
120622:         sizeof(Fts3TokenAndCost) * nToken
120623:       + sizeof(Fts3Expr *) * nOr * 2
120624:     );
120625:     apOr = (Fts3Expr **)&aTC[nToken];
120626: 
120627:     if( !aTC ){
120628:       rc = SQLITE_NOMEM;
120629:     }else{
120630:       int ii;
120631:       Fts3TokenAndCost *pTC = aTC;
120632:       Fts3Expr **ppOr = apOr;
120633: 
120634:       fts3EvalTokenCosts(pCsr, 0, pCsr->pExpr, &pTC, &ppOr, &rc);
120635:       nToken = pTC-aTC;
120636:       nOr = ppOr-apOr;
120637: 
120638:       if( rc==SQLITE_OK ){
120639:         rc = fts3EvalSelectDeferred(pCsr, 0, aTC, nToken);
120640:         for(ii=0; rc==SQLITE_OK && ii<nOr; ii++){
120641:           rc = fts3EvalSelectDeferred(pCsr, apOr[ii], aTC, nToken);
120642:         }
120643:       }
120644: 
120645:       sqlite3_free(aTC);
120646:     }
120647:   }
120648: 
120649:   fts3EvalStartReaders(pCsr, pCsr->pExpr, 1, &rc);
120650:   return rc;
120651: }
120652: 
120653: /*
120654: ** Invalidate the current position list for phrase pPhrase.
120655: */
120656: static void fts3EvalInvalidatePoslist(Fts3Phrase *pPhrase){
120657:   if( pPhrase->doclist.bFreeList ){
120658:     sqlite3_free(pPhrase->doclist.pList);
120659:   }
120660:   pPhrase->doclist.pList = 0;
120661:   pPhrase->doclist.nList = 0;
120662:   pPhrase->doclist.bFreeList = 0;
120663: }
120664: 
120665: /*
120666: ** This function is called to edit the position list associated with
120667: ** the phrase object passed as the fifth argument according to a NEAR
120668: ** condition. For example:
120669: **
120670: **     abc NEAR/5 "def ghi"
120671: **
120672: ** Parameter nNear is passed the NEAR distance of the expression (5 in
120673: ** the example above). When this function is called, *paPoslist points to
120674: ** the position list, and *pnToken is the number of phrase tokens in, the
120675: ** phrase on the other side of the NEAR operator to pPhrase. For example,
120676: ** if pPhrase refers to the "def ghi" phrase, then *paPoslist points to
120677: ** the position list associated with phrase "abc".
120678: **
120679: ** All positions in the pPhrase position list that are not sufficiently
120680: ** close to a position in the *paPoslist position list are removed. If this
120681: ** leaves 0 positions, zero is returned. Otherwise, non-zero.
120682: **
120683: ** Before returning, *paPoslist is set to point to the position lsit 
120684: ** associated with pPhrase. And *pnToken is set to the number of tokens in
120685: ** pPhrase.
120686: */
120687: static int fts3EvalNearTrim(
120688:   int nNear,                      /* NEAR distance. As in "NEAR/nNear". */
120689:   char *aTmp,                     /* Temporary space to use */
120690:   char **paPoslist,               /* IN/OUT: Position list */
120691:   int *pnToken,                   /* IN/OUT: Tokens in phrase of *paPoslist */
120692:   Fts3Phrase *pPhrase             /* The phrase object to trim the doclist of */
120693: ){
120694:   int nParam1 = nNear + pPhrase->nToken;
120695:   int nParam2 = nNear + *pnToken;
120696:   int nNew;
120697:   char *p2; 
120698:   char *pOut; 
120699:   int res;
120700: 
120701:   assert( pPhrase->doclist.pList );
120702: 
120703:   p2 = pOut = pPhrase->doclist.pList;
120704:   res = fts3PoslistNearMerge(
120705:     &pOut, aTmp, nParam1, nParam2, paPoslist, &p2
120706:   );
120707:   if( res ){
120708:     nNew = (pOut - pPhrase->doclist.pList) - 1;
120709:     assert( pPhrase->doclist.pList[nNew]=='\0' );
120710:     assert( nNew<=pPhrase->doclist.nList && nNew>0 );
120711:     memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew);
120712:     pPhrase->doclist.nList = nNew;
120713:     *paPoslist = pPhrase->doclist.pList;
120714:     *pnToken = pPhrase->nToken;
120715:   }
120716: 
120717:   return res;
120718: }
120719: 
120720: /*
120721: ** This function is a no-op if *pRc is other than SQLITE_OK when it is called.
120722: ** Otherwise, it advances the expression passed as the second argument to
120723: ** point to the next matching row in the database. Expressions iterate through
120724: ** matching rows in docid order. Ascending order if Fts3Cursor.bDesc is zero,
120725: ** or descending if it is non-zero.
120726: **
120727: ** If an error occurs, *pRc is set to an SQLite error code. Otherwise, if
120728: ** successful, the following variables in pExpr are set:
120729: **
120730: **   Fts3Expr.bEof                (non-zero if EOF - there is no next row)
120731: **   Fts3Expr.iDocid              (valid if bEof==0. The docid of the next row)
120732: **
120733: ** If the expression is of type FTSQUERY_PHRASE, and the expression is not
120734: ** at EOF, then the following variables are populated with the position list
120735: ** for the phrase for the visited row:
120736: **
120737: **   FTs3Expr.pPhrase->doclist.nList        (length of pList in bytes)
120738: **   FTs3Expr.pPhrase->doclist.pList        (pointer to position list)
120739: **
120740: ** It says above that this function advances the expression to the next
120741: ** matching row. This is usually true, but there are the following exceptions:
120742: **
120743: **   1. Deferred tokens are not taken into account. If a phrase consists
120744: **      entirely of deferred tokens, it is assumed to match every row in
120745: **      the db. In this case the position-list is not populated at all. 
120746: **
120747: **      Or, if a phrase contains one or more deferred tokens and one or
120748: **      more non-deferred tokens, then the expression is advanced to the 
120749: **      next possible match, considering only non-deferred tokens. In other
120750: **      words, if the phrase is "A B C", and "B" is deferred, the expression
120751: **      is advanced to the next row that contains an instance of "A * C", 
120752: **      where "*" may match any single token. The position list in this case
120753: **      is populated as for "A * C" before returning.
120754: **
120755: **   2. NEAR is treated as AND. If the expression is "x NEAR y", it is 
120756: **      advanced to point to the next row that matches "x AND y".
120757: ** 
120758: ** See fts3EvalTestDeferredAndNear() for details on testing if a row is
120759: ** really a match, taking into account deferred tokens and NEAR operators.
120760: */
120761: static void fts3EvalNextRow(
120762:   Fts3Cursor *pCsr,               /* FTS Cursor handle */
120763:   Fts3Expr *pExpr,                /* Expr. to advance to next matching row */
120764:   int *pRc                        /* IN/OUT: Error code */
120765: ){
120766:   if( *pRc==SQLITE_OK ){
120767:     int bDescDoclist = pCsr->bDesc;         /* Used by DOCID_CMP() macro */
120768:     assert( pExpr->bEof==0 );
120769:     pExpr->bStart = 1;
120770: 
120771:     switch( pExpr->eType ){
120772:       case FTSQUERY_NEAR:
120773:       case FTSQUERY_AND: {
120774:         Fts3Expr *pLeft = pExpr->pLeft;
120775:         Fts3Expr *pRight = pExpr->pRight;
120776:         assert( !pLeft->bDeferred || !pRight->bDeferred );
120777: 
120778:         if( pLeft->bDeferred ){
120779:           /* LHS is entirely deferred. So we assume it matches every row.
120780:           ** Advance the RHS iterator to find the next row visited. */
120781:           fts3EvalNextRow(pCsr, pRight, pRc);
120782:           pExpr->iDocid = pRight->iDocid;
120783:           pExpr->bEof = pRight->bEof;
120784:         }else if( pRight->bDeferred ){
120785:           /* RHS is entirely deferred. So we assume it matches every row.
120786:           ** Advance the LHS iterator to find the next row visited. */
120787:           fts3EvalNextRow(pCsr, pLeft, pRc);
120788:           pExpr->iDocid = pLeft->iDocid;
120789:           pExpr->bEof = pLeft->bEof;
120790:         }else{
120791:           /* Neither the RHS or LHS are deferred. */
120792:           fts3EvalNextRow(pCsr, pLeft, pRc);
120793:           fts3EvalNextRow(pCsr, pRight, pRc);
120794:           while( !pLeft->bEof && !pRight->bEof && *pRc==SQLITE_OK ){
120795:             sqlite3_int64 iDiff = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
120796:             if( iDiff==0 ) break;
120797:             if( iDiff<0 ){
120798:               fts3EvalNextRow(pCsr, pLeft, pRc);
120799:             }else{
120800:               fts3EvalNextRow(pCsr, pRight, pRc);
120801:             }
120802:           }
120803:           pExpr->iDocid = pLeft->iDocid;
120804:           pExpr->bEof = (pLeft->bEof || pRight->bEof);
120805:         }
120806:         break;
120807:       }
120808:   
120809:       case FTSQUERY_OR: {
120810:         Fts3Expr *pLeft = pExpr->pLeft;
120811:         Fts3Expr *pRight = pExpr->pRight;
120812:         sqlite3_int64 iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
120813: 
120814:         assert( pLeft->bStart || pLeft->iDocid==pRight->iDocid );
120815:         assert( pRight->bStart || pLeft->iDocid==pRight->iDocid );
120816: 
120817:         if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){
120818:           fts3EvalNextRow(pCsr, pLeft, pRc);
120819:         }else if( pLeft->bEof || (pRight->bEof==0 && iCmp>0) ){
120820:           fts3EvalNextRow(pCsr, pRight, pRc);
120821:         }else{
120822:           fts3EvalNextRow(pCsr, pLeft, pRc);
120823:           fts3EvalNextRow(pCsr, pRight, pRc);
120824:         }
120825: 
120826:         pExpr->bEof = (pLeft->bEof && pRight->bEof);
120827:         iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
120828:         if( pRight->bEof || (pLeft->bEof==0 &&  iCmp<0) ){
120829:           pExpr->iDocid = pLeft->iDocid;
120830:         }else{
120831:           pExpr->iDocid = pRight->iDocid;
120832:         }
120833: 
120834:         break;
120835:       }
120836: 
120837:       case FTSQUERY_NOT: {
120838:         Fts3Expr *pLeft = pExpr->pLeft;
120839:         Fts3Expr *pRight = pExpr->pRight;
120840: 
120841:         if( pRight->bStart==0 ){
120842:           fts3EvalNextRow(pCsr, pRight, pRc);
120843:           assert( *pRc!=SQLITE_OK || pRight->bStart );
120844:         }
120845: 
120846:         fts3EvalNextRow(pCsr, pLeft, pRc);
120847:         if( pLeft->bEof==0 ){
120848:           while( !*pRc 
120849:               && !pRight->bEof 
120850:               && DOCID_CMP(pLeft->iDocid, pRight->iDocid)>0 
120851:           ){
120852:             fts3EvalNextRow(pCsr, pRight, pRc);
120853:           }
120854:         }
120855:         pExpr->iDocid = pLeft->iDocid;
120856:         pExpr->bEof = pLeft->bEof;
120857:         break;
120858:       }
120859: 
120860:       default: {
120861:         Fts3Phrase *pPhrase = pExpr->pPhrase;
120862:         fts3EvalInvalidatePoslist(pPhrase);
120863:         *pRc = fts3EvalPhraseNext(pCsr, pPhrase, &pExpr->bEof);
120864:         pExpr->iDocid = pPhrase->doclist.iDocid;
120865:         break;
120866:       }
120867:     }
120868:   }
120869: }
120870: 
120871: /*
120872: ** If *pRc is not SQLITE_OK, or if pExpr is not the root node of a NEAR
120873: ** cluster, then this function returns 1 immediately.
120874: **
120875: ** Otherwise, it checks if the current row really does match the NEAR 
120876: ** expression, using the data currently stored in the position lists 
120877: ** (Fts3Expr->pPhrase.doclist.pList/nList) for each phrase in the expression. 
120878: **
120879: ** If the current row is a match, the position list associated with each
120880: ** phrase in the NEAR expression is edited in place to contain only those
120881: ** phrase instances sufficiently close to their peers to satisfy all NEAR
120882: ** constraints. In this case it returns 1. If the NEAR expression does not 
120883: ** match the current row, 0 is returned. The position lists may or may not
120884: ** be edited if 0 is returned.
120885: */
120886: static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){
120887:   int res = 1;
120888: 
120889:   /* The following block runs if pExpr is the root of a NEAR query.
120890:   ** For example, the query:
120891:   **
120892:   **         "w" NEAR "x" NEAR "y" NEAR "z"
120893:   **
120894:   ** which is represented in tree form as:
120895:   **
120896:   **                               |
120897:   **                          +--NEAR--+      <-- root of NEAR query
120898:   **                          |        |
120899:   **                     +--NEAR--+   "z"
120900:   **                     |        |
120901:   **                +--NEAR--+   "y"
120902:   **                |        |
120903:   **               "w"      "x"
120904:   **
120905:   ** The right-hand child of a NEAR node is always a phrase. The 
120906:   ** left-hand child may be either a phrase or a NEAR node. There are
120907:   ** no exceptions to this - it's the way the parser in fts3_expr.c works.
120908:   */
120909:   if( *pRc==SQLITE_OK 
120910:    && pExpr->eType==FTSQUERY_NEAR 
120911:    && pExpr->bEof==0
120912:    && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR)
120913:   ){
120914:     Fts3Expr *p; 
120915:     int nTmp = 0;                 /* Bytes of temp space */
120916:     char *aTmp;                   /* Temp space for PoslistNearMerge() */
120917: 
120918:     /* Allocate temporary working space. */
120919:     for(p=pExpr; p->pLeft; p=p->pLeft){
120920:       nTmp += p->pRight->pPhrase->doclist.nList;
120921:     }
120922:     nTmp += p->pPhrase->doclist.nList;
120923:     aTmp = sqlite3_malloc(nTmp*2);
120924:     if( !aTmp ){
120925:       *pRc = SQLITE_NOMEM;
120926:       res = 0;
120927:     }else{
120928:       char *aPoslist = p->pPhrase->doclist.pList;
120929:       int nToken = p->pPhrase->nToken;
120930: 
120931:       for(p=p->pParent;res && p && p->eType==FTSQUERY_NEAR; p=p->pParent){
120932:         Fts3Phrase *pPhrase = p->pRight->pPhrase;
120933:         int nNear = p->nNear;
120934:         res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
120935:       }
120936:   
120937:       aPoslist = pExpr->pRight->pPhrase->doclist.pList;
120938:       nToken = pExpr->pRight->pPhrase->nToken;
120939:       for(p=pExpr->pLeft; p && res; p=p->pLeft){
120940:         int nNear;
120941:         Fts3Phrase *pPhrase;
120942:         assert( p->pParent && p->pParent->pLeft==p );
120943:         nNear = p->pParent->nNear;
120944:         pPhrase = (
120945:             p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase
120946:         );
120947:         res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
120948:       }
120949:     }
120950: 
120951:     sqlite3_free(aTmp);
120952:   }
120953: 
120954:   return res;
120955: }
120956: 
120957: /*
120958: ** This function is a helper function for fts3EvalTestDeferredAndNear().
120959: ** Assuming no error occurs or has occurred, It returns non-zero if the
120960: ** expression passed as the second argument matches the row that pCsr 
120961: ** currently points to, or zero if it does not.
120962: **
120963: ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
120964: ** If an error occurs during execution of this function, *pRc is set to 
120965: ** the appropriate SQLite error code. In this case the returned value is 
120966: ** undefined.
120967: */
120968: static int fts3EvalTestExpr(
120969:   Fts3Cursor *pCsr,               /* FTS cursor handle */
120970:   Fts3Expr *pExpr,                /* Expr to test. May or may not be root. */
120971:   int *pRc                        /* IN/OUT: Error code */
120972: ){
120973:   int bHit = 1;                   /* Return value */
120974:   if( *pRc==SQLITE_OK ){
120975:     switch( pExpr->eType ){
120976:       case FTSQUERY_NEAR:
120977:       case FTSQUERY_AND:
120978:         bHit = (
120979:             fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc)
120980:          && fts3EvalTestExpr(pCsr, pExpr->pRight, pRc)
120981:          && fts3EvalNearTest(pExpr, pRc)
120982:         );
120983: 
120984:         /* If the NEAR expression does not match any rows, zero the doclist for 
120985:         ** all phrases involved in the NEAR. This is because the snippet(),
120986:         ** offsets() and matchinfo() functions are not supposed to recognize 
120987:         ** any instances of phrases that are part of unmatched NEAR queries. 
120988:         ** For example if this expression:
120989:         **
120990:         **    ... MATCH 'a OR (b NEAR c)'
120991:         **
120992:         ** is matched against a row containing:
120993:         **
120994:         **        'a b d e'
120995:         **
120996:         ** then any snippet() should ony highlight the "a" term, not the "b"
120997:         ** (as "b" is part of a non-matching NEAR clause).
120998:         */
120999:         if( bHit==0 
121000:          && pExpr->eType==FTSQUERY_NEAR 
121001:          && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR)
121002:         ){
121003:           Fts3Expr *p;
121004:           for(p=pExpr; p->pPhrase==0; p=p->pLeft){
121005:             if( p->pRight->iDocid==pCsr->iPrevId ){
121006:               fts3EvalInvalidatePoslist(p->pRight->pPhrase);
121007:             }
121008:           }
121009:           if( p->iDocid==pCsr->iPrevId ){
121010:             fts3EvalInvalidatePoslist(p->pPhrase);
121011:           }
121012:         }
121013: 
121014:         break;
121015: 
121016:       case FTSQUERY_OR: {
121017:         int bHit1 = fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc);
121018:         int bHit2 = fts3EvalTestExpr(pCsr, pExpr->pRight, pRc);
121019:         bHit = bHit1 || bHit2;
121020:         break;
121021:       }
121022: 
121023:       case FTSQUERY_NOT:
121024:         bHit = (
121025:             fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc)
121026:          && !fts3EvalTestExpr(pCsr, pExpr->pRight, pRc)
121027:         );
121028:         break;
121029: 
121030:       default: {
121031:         if( pCsr->pDeferred 
121032:          && (pExpr->iDocid==pCsr->iPrevId || pExpr->bDeferred)
121033:         ){
121034:           Fts3Phrase *pPhrase = pExpr->pPhrase;
121035:           assert( pExpr->bDeferred || pPhrase->doclist.bFreeList==0 );
121036:           if( pExpr->bDeferred ){
121037:             fts3EvalInvalidatePoslist(pPhrase);
121038:           }
121039:           *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase);
121040:           bHit = (pPhrase->doclist.pList!=0);
121041:           pExpr->iDocid = pCsr->iPrevId;
121042:         }else{
121043:           bHit = (pExpr->bEof==0 && pExpr->iDocid==pCsr->iPrevId);
121044:         }
121045:         break;
121046:       }
121047:     }
121048:   }
121049:   return bHit;
121050: }
121051: 
121052: /*
121053: ** This function is called as the second part of each xNext operation when
121054: ** iterating through the results of a full-text query. At this point the
121055: ** cursor points to a row that matches the query expression, with the
121056: ** following caveats:
121057: **
121058: **   * Up until this point, "NEAR" operators in the expression have been
121059: **     treated as "AND".
121060: **
121061: **   * Deferred tokens have not yet been considered.
121062: **
121063: ** If *pRc is not SQLITE_OK when this function is called, it immediately
121064: ** returns 0. Otherwise, it tests whether or not after considering NEAR
121065: ** operators and deferred tokens the current row is still a match for the
121066: ** expression. It returns 1 if both of the following are true:
121067: **
121068: **   1. *pRc is SQLITE_OK when this function returns, and
121069: **
121070: **   2. After scanning the current FTS table row for the deferred tokens,
121071: **      it is determined that the row does *not* match the query.
121072: **
121073: ** Or, if no error occurs and it seems the current row does match the FTS
121074: ** query, return 0.
121075: */
121076: static int fts3EvalTestDeferredAndNear(Fts3Cursor *pCsr, int *pRc){
121077:   int rc = *pRc;
121078:   int bMiss = 0;
121079:   if( rc==SQLITE_OK ){
121080: 
121081:     /* If there are one or more deferred tokens, load the current row into
121082:     ** memory and scan it to determine the position list for each deferred
121083:     ** token. Then, see if this row is really a match, considering deferred
121084:     ** tokens and NEAR operators (neither of which were taken into account
121085:     ** earlier, by fts3EvalNextRow()). 
121086:     */
121087:     if( pCsr->pDeferred ){
121088:       rc = fts3CursorSeek(0, pCsr);
121089:       if( rc==SQLITE_OK ){
121090:         rc = sqlite3Fts3CacheDeferredDoclists(pCsr);
121091:       }
121092:     }
121093:     bMiss = (0==fts3EvalTestExpr(pCsr, pCsr->pExpr, &rc));
121094: 
121095:     /* Free the position-lists accumulated for each deferred token above. */
121096:     sqlite3Fts3FreeDeferredDoclists(pCsr);
121097:     *pRc = rc;
121098:   }
121099:   return (rc==SQLITE_OK && bMiss);
121100: }
121101: 
121102: /*
121103: ** Advance to the next document that matches the FTS expression in
121104: ** Fts3Cursor.pExpr.
121105: */
121106: static int fts3EvalNext(Fts3Cursor *pCsr){
121107:   int rc = SQLITE_OK;             /* Return Code */
121108:   Fts3Expr *pExpr = pCsr->pExpr;
121109:   assert( pCsr->isEof==0 );
121110:   if( pExpr==0 ){
121111:     pCsr->isEof = 1;
121112:   }else{
121113:     do {
121114:       if( pCsr->isRequireSeek==0 ){
121115:         sqlite3_reset(pCsr->pStmt);
121116:       }
121117:       assert( sqlite3_data_count(pCsr->pStmt)==0 );
121118:       fts3EvalNextRow(pCsr, pExpr, &rc);
121119:       pCsr->isEof = pExpr->bEof;
121120:       pCsr->isRequireSeek = 1;
121121:       pCsr->isMatchinfoNeeded = 1;
121122:       pCsr->iPrevId = pExpr->iDocid;
121123:     }while( pCsr->isEof==0 && fts3EvalTestDeferredAndNear(pCsr, &rc) );
121124:   }
121125:   return rc;
121126: }
121127: 
121128: /*
121129: ** Restart interation for expression pExpr so that the next call to
121130: ** fts3EvalNext() visits the first row. Do not allow incremental 
121131: ** loading or merging of phrase doclists for this iteration.
121132: **
121133: ** If *pRc is other than SQLITE_OK when this function is called, it is
121134: ** a no-op. If an error occurs within this function, *pRc is set to an
121135: ** SQLite error code before returning.
121136: */
121137: static void fts3EvalRestart(
121138:   Fts3Cursor *pCsr,
121139:   Fts3Expr *pExpr,
121140:   int *pRc
121141: ){
121142:   if( pExpr && *pRc==SQLITE_OK ){
121143:     Fts3Phrase *pPhrase = pExpr->pPhrase;
121144: 
121145:     if( pPhrase ){
121146:       fts3EvalInvalidatePoslist(pPhrase);
121147:       if( pPhrase->bIncr ){
121148:         assert( pPhrase->nToken==1 );
121149:         assert( pPhrase->aToken[0].pSegcsr );
121150:         sqlite3Fts3MsrIncrRestart(pPhrase->aToken[0].pSegcsr);
121151:         *pRc = fts3EvalPhraseStart(pCsr, 0, pPhrase);
121152:       }
121153: 
121154:       pPhrase->doclist.pNextDocid = 0;
121155:       pPhrase->doclist.iDocid = 0;
121156:     }
121157: 
121158:     pExpr->iDocid = 0;
121159:     pExpr->bEof = 0;
121160:     pExpr->bStart = 0;
121161: 
121162:     fts3EvalRestart(pCsr, pExpr->pLeft, pRc);
121163:     fts3EvalRestart(pCsr, pExpr->pRight, pRc);
121164:   }
121165: }
121166: 
121167: /*
121168: ** After allocating the Fts3Expr.aMI[] array for each phrase in the 
121169: ** expression rooted at pExpr, the cursor iterates through all rows matched
121170: ** by pExpr, calling this function for each row. This function increments
121171: ** the values in Fts3Expr.aMI[] according to the position-list currently
121172: ** found in Fts3Expr.pPhrase->doclist.pList for each of the phrase 
121173: ** expression nodes.
121174: */
121175: static void fts3EvalUpdateCounts(Fts3Expr *pExpr){
121176:   if( pExpr ){
121177:     Fts3Phrase *pPhrase = pExpr->pPhrase;
121178:     if( pPhrase && pPhrase->doclist.pList ){
121179:       int iCol = 0;
121180:       char *p = pPhrase->doclist.pList;
121181: 
121182:       assert( *p );
121183:       while( 1 ){
121184:         u8 c = 0;
121185:         int iCnt = 0;
121186:         while( 0xFE & (*p | c) ){
121187:           if( (c&0x80)==0 ) iCnt++;
121188:           c = *p++ & 0x80;
121189:         }
121190: 
121191:         /* aMI[iCol*3 + 1] = Number of occurrences
121192:         ** aMI[iCol*3 + 2] = Number of rows containing at least one instance
121193:         */
121194:         pExpr->aMI[iCol*3 + 1] += iCnt;
121195:         pExpr->aMI[iCol*3 + 2] += (iCnt>0);
121196:         if( *p==0x00 ) break;
121197:         p++;
121198:         p += sqlite3Fts3GetVarint32(p, &iCol);
121199:       }
121200:     }
121201: 
121202:     fts3EvalUpdateCounts(pExpr->pLeft);
121203:     fts3EvalUpdateCounts(pExpr->pRight);
121204:   }
121205: }
121206: 
121207: /*
121208: ** Expression pExpr must be of type FTSQUERY_PHRASE.
121209: **
121210: ** If it is not already allocated and populated, this function allocates and
121211: ** populates the Fts3Expr.aMI[] array for expression pExpr. If pExpr is part
121212: ** of a NEAR expression, then it also allocates and populates the same array
121213: ** for all other phrases that are part of the NEAR expression.
121214: **
121215: ** SQLITE_OK is returned if the aMI[] array is successfully allocated and
121216: ** populated. Otherwise, if an error occurs, an SQLite error code is returned.
121217: */
121218: static int fts3EvalGatherStats(
121219:   Fts3Cursor *pCsr,               /* Cursor object */
121220:   Fts3Expr *pExpr                 /* FTSQUERY_PHRASE expression */
121221: ){
121222:   int rc = SQLITE_OK;             /* Return code */
121223: 
121224:   assert( pExpr->eType==FTSQUERY_PHRASE );
121225:   if( pExpr->aMI==0 ){
121226:     Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
121227:     Fts3Expr *pRoot;                /* Root of NEAR expression */
121228:     Fts3Expr *p;                    /* Iterator used for several purposes */
121229: 
121230:     sqlite3_int64 iPrevId = pCsr->iPrevId;
121231:     sqlite3_int64 iDocid;
121232:     u8 bEof;
121233: 
121234:     /* Find the root of the NEAR expression */
121235:     pRoot = pExpr;
121236:     while( pRoot->pParent && pRoot->pParent->eType==FTSQUERY_NEAR ){
121237:       pRoot = pRoot->pParent;
121238:     }
121239:     iDocid = pRoot->iDocid;
121240:     bEof = pRoot->bEof;
121241:     assert( pRoot->bStart );
121242: 
121243:     /* Allocate space for the aMSI[] array of each FTSQUERY_PHRASE node */
121244:     for(p=pRoot; p; p=p->pLeft){
121245:       Fts3Expr *pE = (p->eType==FTSQUERY_PHRASE?p:p->pRight);
121246:       assert( pE->aMI==0 );
121247:       pE->aMI = (u32 *)sqlite3_malloc(pTab->nColumn * 3 * sizeof(u32));
121248:       if( !pE->aMI ) return SQLITE_NOMEM;
121249:       memset(pE->aMI, 0, pTab->nColumn * 3 * sizeof(u32));
121250:     }
121251: 
121252:     fts3EvalRestart(pCsr, pRoot, &rc);
121253: 
121254:     while( pCsr->isEof==0 && rc==SQLITE_OK ){
121255: 
121256:       do {
121257:         /* Ensure the %_content statement is reset. */
121258:         if( pCsr->isRequireSeek==0 ) sqlite3_reset(pCsr->pStmt);
121259:         assert( sqlite3_data_count(pCsr->pStmt)==0 );
121260: 
121261:         /* Advance to the next document */
121262:         fts3EvalNextRow(pCsr, pRoot, &rc);
121263:         pCsr->isEof = pRoot->bEof;
121264:         pCsr->isRequireSeek = 1;
121265:         pCsr->isMatchinfoNeeded = 1;
121266:         pCsr->iPrevId = pRoot->iDocid;
121267:       }while( pCsr->isEof==0 
121268:            && pRoot->eType==FTSQUERY_NEAR 
121269:            && fts3EvalTestDeferredAndNear(pCsr, &rc) 
121270:       );
121271: 
121272:       if( rc==SQLITE_OK && pCsr->isEof==0 ){
121273:         fts3EvalUpdateCounts(pRoot);
121274:       }
121275:     }
121276: 
121277:     pCsr->isEof = 0;
121278:     pCsr->iPrevId = iPrevId;
121279: 
121280:     if( bEof ){
121281:       pRoot->bEof = bEof;
121282:     }else{
121283:       /* Caution: pRoot may iterate through docids in ascending or descending
121284:       ** order. For this reason, even though it seems more defensive, the 
121285:       ** do loop can not be written:
121286:       **
121287:       **   do {...} while( pRoot->iDocid<iDocid && rc==SQLITE_OK );
121288:       */
121289:       fts3EvalRestart(pCsr, pRoot, &rc);
121290:       do {
121291:         fts3EvalNextRow(pCsr, pRoot, &rc);
121292:         assert( pRoot->bEof==0 );
121293:       }while( pRoot->iDocid!=iDocid && rc==SQLITE_OK );
121294:       fts3EvalTestDeferredAndNear(pCsr, &rc);
121295:     }
121296:   }
121297:   return rc;
121298: }
121299: 
121300: /*
121301: ** This function is used by the matchinfo() module to query a phrase 
121302: ** expression node for the following information:
121303: **
121304: **   1. The total number of occurrences of the phrase in each column of 
121305: **      the FTS table (considering all rows), and
121306: **
121307: **   2. For each column, the number of rows in the table for which the
121308: **      column contains at least one instance of the phrase.
121309: **
121310: ** If no error occurs, SQLITE_OK is returned and the values for each column
121311: ** written into the array aiOut as follows:
121312: **
121313: **   aiOut[iCol*3 + 1] = Number of occurrences
121314: **   aiOut[iCol*3 + 2] = Number of rows containing at least one instance
121315: **
121316: ** Caveats:
121317: **
121318: **   * If a phrase consists entirely of deferred tokens, then all output 
121319: **     values are set to the number of documents in the table. In other
121320: **     words we assume that very common tokens occur exactly once in each 
121321: **     column of each row of the table.
121322: **
121323: **   * If a phrase contains some deferred tokens (and some non-deferred 
121324: **     tokens), count the potential occurrence identified by considering
121325: **     the non-deferred tokens instead of actual phrase occurrences.
121326: **
121327: **   * If the phrase is part of a NEAR expression, then only phrase instances
121328: **     that meet the NEAR constraint are included in the counts.
121329: */
121330: SQLITE_PRIVATE int sqlite3Fts3EvalPhraseStats(
121331:   Fts3Cursor *pCsr,               /* FTS cursor handle */
121332:   Fts3Expr *pExpr,                /* Phrase expression */
121333:   u32 *aiOut                      /* Array to write results into (see above) */
121334: ){
121335:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
121336:   int rc = SQLITE_OK;
121337:   int iCol;
121338: 
121339:   if( pExpr->bDeferred && pExpr->pParent->eType!=FTSQUERY_NEAR ){
121340:     assert( pCsr->nDoc>0 );
121341:     for(iCol=0; iCol<pTab->nColumn; iCol++){
121342:       aiOut[iCol*3 + 1] = (u32)pCsr->nDoc;
121343:       aiOut[iCol*3 + 2] = (u32)pCsr->nDoc;
121344:     }
121345:   }else{
121346:     rc = fts3EvalGatherStats(pCsr, pExpr);
121347:     if( rc==SQLITE_OK ){
121348:       assert( pExpr->aMI );
121349:       for(iCol=0; iCol<pTab->nColumn; iCol++){
121350:         aiOut[iCol*3 + 1] = pExpr->aMI[iCol*3 + 1];
121351:         aiOut[iCol*3 + 2] = pExpr->aMI[iCol*3 + 2];
121352:       }
121353:     }
121354:   }
121355: 
121356:   return rc;
121357: }
121358: 
121359: /*
121360: ** The expression pExpr passed as the second argument to this function
121361: ** must be of type FTSQUERY_PHRASE. 
121362: **
121363: ** The returned value is either NULL or a pointer to a buffer containing
121364: ** a position-list indicating the occurrences of the phrase in column iCol
121365: ** of the current row. 
121366: **
121367: ** More specifically, the returned buffer contains 1 varint for each 
121368: ** occurence of the phrase in the column, stored using the normal (delta+2) 
121369: ** compression and is terminated by either an 0x01 or 0x00 byte. For example,
121370: ** if the requested column contains "a b X c d X X" and the position-list
121371: ** for 'X' is requested, the buffer returned may contain:
121372: **
121373: **     0x04 0x05 0x03 0x01   or   0x04 0x05 0x03 0x00
121374: **
121375: ** This function works regardless of whether or not the phrase is deferred,
121376: ** incremental, or neither.
121377: */
121378: SQLITE_PRIVATE char *sqlite3Fts3EvalPhrasePoslist(
121379:   Fts3Cursor *pCsr,               /* FTS3 cursor object */
121380:   Fts3Expr *pExpr,                /* Phrase to return doclist for */
121381:   int iCol                        /* Column to return position list for */
121382: ){
121383:   Fts3Phrase *pPhrase = pExpr->pPhrase;
121384:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
121385:   char *pIter = pPhrase->doclist.pList;
121386:   int iThis;
121387: 
121388:   assert( iCol>=0 && iCol<pTab->nColumn );
121389:   if( !pIter 
121390:    || pExpr->bEof 
121391:    || pExpr->iDocid!=pCsr->iPrevId
121392:    || (pPhrase->iColumn<pTab->nColumn && pPhrase->iColumn!=iCol) 
121393:   ){
121394:     return 0;
121395:   }
121396: 
121397:   assert( pPhrase->doclist.nList>0 );
121398:   if( *pIter==0x01 ){
121399:     pIter++;
121400:     pIter += sqlite3Fts3GetVarint32(pIter, &iThis);
121401:   }else{
121402:     iThis = 0;
121403:   }
121404:   while( iThis<iCol ){
121405:     fts3ColumnlistCopy(0, &pIter);
121406:     if( *pIter==0x00 ) return 0;
121407:     pIter++;
121408:     pIter += sqlite3Fts3GetVarint32(pIter, &iThis);
121409:   }
121410: 
121411:   return ((iCol==iThis)?pIter:0);
121412: }
121413: 
121414: /*
121415: ** Free all components of the Fts3Phrase structure that were allocated by
121416: ** the eval module. Specifically, this means to free:
121417: **
121418: **   * the contents of pPhrase->doclist, and
121419: **   * any Fts3MultiSegReader objects held by phrase tokens.
121420: */
121421: SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *pPhrase){
121422:   if( pPhrase ){
121423:     int i;
121424:     sqlite3_free(pPhrase->doclist.aAll);
121425:     fts3EvalInvalidatePoslist(pPhrase);
121426:     memset(&pPhrase->doclist, 0, sizeof(Fts3Doclist));
121427:     for(i=0; i<pPhrase->nToken; i++){
121428:       fts3SegReaderCursorFree(pPhrase->aToken[i].pSegcsr);
121429:       pPhrase->aToken[i].pSegcsr = 0;
121430:     }
121431:   }
121432: }
121433: 
121434: /*
121435: ** Return SQLITE_CORRUPT_VTAB.
121436: */
121437: #ifdef SQLITE_DEBUG
121438: SQLITE_PRIVATE int sqlite3Fts3Corrupt(){
121439:   return SQLITE_CORRUPT_VTAB;
121440: }
121441: #endif
121442: 
121443: #if !SQLITE_CORE
121444: /*
121445: ** Initialize API pointer table, if required.
121446: */
121447: SQLITE_API int sqlite3_extension_init(
121448:   sqlite3 *db, 
121449:   char **pzErrMsg,
121450:   const sqlite3_api_routines *pApi
121451: ){
121452:   SQLITE_EXTENSION_INIT2(pApi)
121453:   return sqlite3Fts3Init(db);
121454: }
121455: #endif
121456: 
121457: #endif
121458: 
121459: /************** End of fts3.c ************************************************/
121460: /************** Begin file fts3_aux.c ****************************************/
121461: /*
121462: ** 2011 Jan 27
121463: **
121464: ** The author disclaims copyright to this source code.  In place of
121465: ** a legal notice, here is a blessing:
121466: **
121467: **    May you do good and not evil.
121468: **    May you find forgiveness for yourself and forgive others.
121469: **    May you share freely, never taking more than you give.
121470: **
121471: ******************************************************************************
121472: **
121473: */
121474: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
121475: 
121476: /* #include <string.h> */
121477: /* #include <assert.h> */
121478: 
121479: typedef struct Fts3auxTable Fts3auxTable;
121480: typedef struct Fts3auxCursor Fts3auxCursor;
121481: 
121482: struct Fts3auxTable {
121483:   sqlite3_vtab base;              /* Base class used by SQLite core */
121484:   Fts3Table *pFts3Tab;
121485: };
121486: 
121487: struct Fts3auxCursor {
121488:   sqlite3_vtab_cursor base;       /* Base class used by SQLite core */
121489:   Fts3MultiSegReader csr;        /* Must be right after "base" */
121490:   Fts3SegFilter filter;
121491:   char *zStop;
121492:   int nStop;                      /* Byte-length of string zStop */
121493:   int isEof;                      /* True if cursor is at EOF */
121494:   sqlite3_int64 iRowid;           /* Current rowid */
121495: 
121496:   int iCol;                       /* Current value of 'col' column */
121497:   int nStat;                      /* Size of aStat[] array */
121498:   struct Fts3auxColstats {
121499:     sqlite3_int64 nDoc;           /* 'documents' values for current csr row */
121500:     sqlite3_int64 nOcc;           /* 'occurrences' values for current csr row */
121501:   } *aStat;
121502: };
121503: 
121504: /*
121505: ** Schema of the terms table.
121506: */
121507: #define FTS3_TERMS_SCHEMA "CREATE TABLE x(term, col, documents, occurrences)"
121508: 
121509: /*
121510: ** This function does all the work for both the xConnect and xCreate methods.
121511: ** These tables have no persistent representation of their own, so xConnect
121512: ** and xCreate are identical operations.
121513: */
121514: static int fts3auxConnectMethod(
121515:   sqlite3 *db,                    /* Database connection */
121516:   void *pUnused,                  /* Unused */
121517:   int argc,                       /* Number of elements in argv array */
121518:   const char * const *argv,       /* xCreate/xConnect argument array */
121519:   sqlite3_vtab **ppVtab,          /* OUT: New sqlite3_vtab object */
121520:   char **pzErr                    /* OUT: sqlite3_malloc'd error message */
121521: ){
121522:   char const *zDb;                /* Name of database (e.g. "main") */
121523:   char const *zFts3;              /* Name of fts3 table */
121524:   int nDb;                        /* Result of strlen(zDb) */
121525:   int nFts3;                      /* Result of strlen(zFts3) */
121526:   int nByte;                      /* Bytes of space to allocate here */
121527:   int rc;                         /* value returned by declare_vtab() */
121528:   Fts3auxTable *p;                /* Virtual table object to return */
121529: 
121530:   UNUSED_PARAMETER(pUnused);
121531: 
121532:   /* The user should specify a single argument - the name of an fts3 table. */
121533:   if( argc!=4 ){
121534:     *pzErr = sqlite3_mprintf(
121535:         "wrong number of arguments to fts4aux constructor"
121536:     );
121537:     return SQLITE_ERROR;
121538:   }
121539: 
121540:   zDb = argv[1]; 
121541:   nDb = strlen(zDb);
121542:   zFts3 = argv[3];
121543:   nFts3 = strlen(zFts3);
121544: 
121545:   rc = sqlite3_declare_vtab(db, FTS3_TERMS_SCHEMA);
121546:   if( rc!=SQLITE_OK ) return rc;
121547: 
121548:   nByte = sizeof(Fts3auxTable) + sizeof(Fts3Table) + nDb + nFts3 + 2;
121549:   p = (Fts3auxTable *)sqlite3_malloc(nByte);
121550:   if( !p ) return SQLITE_NOMEM;
121551:   memset(p, 0, nByte);
121552: 
121553:   p->pFts3Tab = (Fts3Table *)&p[1];
121554:   p->pFts3Tab->zDb = (char *)&p->pFts3Tab[1];
121555:   p->pFts3Tab->zName = &p->pFts3Tab->zDb[nDb+1];
121556:   p->pFts3Tab->db = db;
121557:   p->pFts3Tab->nIndex = 1;
121558: 
121559:   memcpy((char *)p->pFts3Tab->zDb, zDb, nDb);
121560:   memcpy((char *)p->pFts3Tab->zName, zFts3, nFts3);
121561:   sqlite3Fts3Dequote((char *)p->pFts3Tab->zName);
121562: 
121563:   *ppVtab = (sqlite3_vtab *)p;
121564:   return SQLITE_OK;
121565: }
121566: 
121567: /*
121568: ** This function does the work for both the xDisconnect and xDestroy methods.
121569: ** These tables have no persistent representation of their own, so xDisconnect
121570: ** and xDestroy are identical operations.
121571: */
121572: static int fts3auxDisconnectMethod(sqlite3_vtab *pVtab){
121573:   Fts3auxTable *p = (Fts3auxTable *)pVtab;
121574:   Fts3Table *pFts3 = p->pFts3Tab;
121575:   int i;
121576: 
121577:   /* Free any prepared statements held */
121578:   for(i=0; i<SizeofArray(pFts3->aStmt); i++){
121579:     sqlite3_finalize(pFts3->aStmt[i]);
121580:   }
121581:   sqlite3_free(pFts3->zSegmentsTbl);
121582:   sqlite3_free(p);
121583:   return SQLITE_OK;
121584: }
121585: 
121586: #define FTS4AUX_EQ_CONSTRAINT 1
121587: #define FTS4AUX_GE_CONSTRAINT 2
121588: #define FTS4AUX_LE_CONSTRAINT 4
121589: 
121590: /*
121591: ** xBestIndex - Analyze a WHERE and ORDER BY clause.
121592: */
121593: static int fts3auxBestIndexMethod(
121594:   sqlite3_vtab *pVTab, 
121595:   sqlite3_index_info *pInfo
121596: ){
121597:   int i;
121598:   int iEq = -1;
121599:   int iGe = -1;
121600:   int iLe = -1;
121601: 
121602:   UNUSED_PARAMETER(pVTab);
121603: 
121604:   /* This vtab delivers always results in "ORDER BY term ASC" order. */
121605:   if( pInfo->nOrderBy==1 
121606:    && pInfo->aOrderBy[0].iColumn==0 
121607:    && pInfo->aOrderBy[0].desc==0
121608:   ){
121609:     pInfo->orderByConsumed = 1;
121610:   }
121611: 
121612:   /* Search for equality and range constraints on the "term" column. */
121613:   for(i=0; i<pInfo->nConstraint; i++){
121614:     if( pInfo->aConstraint[i].usable && pInfo->aConstraint[i].iColumn==0 ){
121615:       int op = pInfo->aConstraint[i].op;
121616:       if( op==SQLITE_INDEX_CONSTRAINT_EQ ) iEq = i;
121617:       if( op==SQLITE_INDEX_CONSTRAINT_LT ) iLe = i;
121618:       if( op==SQLITE_INDEX_CONSTRAINT_LE ) iLe = i;
121619:       if( op==SQLITE_INDEX_CONSTRAINT_GT ) iGe = i;
121620:       if( op==SQLITE_INDEX_CONSTRAINT_GE ) iGe = i;
121621:     }
121622:   }
121623: 
121624:   if( iEq>=0 ){
121625:     pInfo->idxNum = FTS4AUX_EQ_CONSTRAINT;
121626:     pInfo->aConstraintUsage[iEq].argvIndex = 1;
121627:     pInfo->estimatedCost = 5;
121628:   }else{
121629:     pInfo->idxNum = 0;
121630:     pInfo->estimatedCost = 20000;
121631:     if( iGe>=0 ){
121632:       pInfo->idxNum += FTS4AUX_GE_CONSTRAINT;
121633:       pInfo->aConstraintUsage[iGe].argvIndex = 1;
121634:       pInfo->estimatedCost /= 2;
121635:     }
121636:     if( iLe>=0 ){
121637:       pInfo->idxNum += FTS4AUX_LE_CONSTRAINT;
121638:       pInfo->aConstraintUsage[iLe].argvIndex = 1 + (iGe>=0);
121639:       pInfo->estimatedCost /= 2;
121640:     }
121641:   }
121642: 
121643:   return SQLITE_OK;
121644: }
121645: 
121646: /*
121647: ** xOpen - Open a cursor.
121648: */
121649: static int fts3auxOpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
121650:   Fts3auxCursor *pCsr;            /* Pointer to cursor object to return */
121651: 
121652:   UNUSED_PARAMETER(pVTab);
121653: 
121654:   pCsr = (Fts3auxCursor *)sqlite3_malloc(sizeof(Fts3auxCursor));
121655:   if( !pCsr ) return SQLITE_NOMEM;
121656:   memset(pCsr, 0, sizeof(Fts3auxCursor));
121657: 
121658:   *ppCsr = (sqlite3_vtab_cursor *)pCsr;
121659:   return SQLITE_OK;
121660: }
121661: 
121662: /*
121663: ** xClose - Close a cursor.
121664: */
121665: static int fts3auxCloseMethod(sqlite3_vtab_cursor *pCursor){
121666:   Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
121667:   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
121668: 
121669:   sqlite3Fts3SegmentsClose(pFts3);
121670:   sqlite3Fts3SegReaderFinish(&pCsr->csr);
121671:   sqlite3_free((void *)pCsr->filter.zTerm);
121672:   sqlite3_free(pCsr->zStop);
121673:   sqlite3_free(pCsr->aStat);
121674:   sqlite3_free(pCsr);
121675:   return SQLITE_OK;
121676: }
121677: 
121678: static int fts3auxGrowStatArray(Fts3auxCursor *pCsr, int nSize){
121679:   if( nSize>pCsr->nStat ){
121680:     struct Fts3auxColstats *aNew;
121681:     aNew = (struct Fts3auxColstats *)sqlite3_realloc(pCsr->aStat, 
121682:         sizeof(struct Fts3auxColstats) * nSize
121683:     );
121684:     if( aNew==0 ) return SQLITE_NOMEM;
121685:     memset(&aNew[pCsr->nStat], 0, 
121686:         sizeof(struct Fts3auxColstats) * (nSize - pCsr->nStat)
121687:     );
121688:     pCsr->aStat = aNew;
121689:     pCsr->nStat = nSize;
121690:   }
121691:   return SQLITE_OK;
121692: }
121693: 
121694: /*
121695: ** xNext - Advance the cursor to the next row, if any.
121696: */
121697: static int fts3auxNextMethod(sqlite3_vtab_cursor *pCursor){
121698:   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
121699:   Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
121700:   int rc;
121701: 
121702:   /* Increment our pretend rowid value. */
121703:   pCsr->iRowid++;
121704: 
121705:   for(pCsr->iCol++; pCsr->iCol<pCsr->nStat; pCsr->iCol++){
121706:     if( pCsr->aStat[pCsr->iCol].nDoc>0 ) return SQLITE_OK;
121707:   }
121708: 
121709:   rc = sqlite3Fts3SegReaderStep(pFts3, &pCsr->csr);
121710:   if( rc==SQLITE_ROW ){
121711:     int i = 0;
121712:     int nDoclist = pCsr->csr.nDoclist;
121713:     char *aDoclist = pCsr->csr.aDoclist;
121714:     int iCol;
121715: 
121716:     int eState = 0;
121717: 
121718:     if( pCsr->zStop ){
121719:       int n = (pCsr->nStop<pCsr->csr.nTerm) ? pCsr->nStop : pCsr->csr.nTerm;
121720:       int mc = memcmp(pCsr->zStop, pCsr->csr.zTerm, n);
121721:       if( mc<0 || (mc==0 && pCsr->csr.nTerm>pCsr->nStop) ){
121722:         pCsr->isEof = 1;
121723:         return SQLITE_OK;
121724:       }
121725:     }
121726: 
121727:     if( fts3auxGrowStatArray(pCsr, 2) ) return SQLITE_NOMEM;
121728:     memset(pCsr->aStat, 0, sizeof(struct Fts3auxColstats) * pCsr->nStat);
121729:     iCol = 0;
121730: 
121731:     while( i<nDoclist ){
121732:       sqlite3_int64 v = 0;
121733: 
121734:       i += sqlite3Fts3GetVarint(&aDoclist[i], &v);
121735:       switch( eState ){
121736:         /* State 0. In this state the integer just read was a docid. */
121737:         case 0:
121738:           pCsr->aStat[0].nDoc++;
121739:           eState = 1;
121740:           iCol = 0;
121741:           break;
121742: 
121743:         /* State 1. In this state we are expecting either a 1, indicating
121744:         ** that the following integer will be a column number, or the
121745:         ** start of a position list for column 0.  
121746:         ** 
121747:         ** The only difference between state 1 and state 2 is that if the
121748:         ** integer encountered in state 1 is not 0 or 1, then we need to
121749:         ** increment the column 0 "nDoc" count for this term.
121750:         */
121751:         case 1:
121752:           assert( iCol==0 );
121753:           if( v>1 ){
121754:             pCsr->aStat[1].nDoc++;
121755:           }
121756:           eState = 2;
121757:           /* fall through */
121758: 
121759:         case 2:
121760:           if( v==0 ){       /* 0x00. Next integer will be a docid. */
121761:             eState = 0;
121762:           }else if( v==1 ){ /* 0x01. Next integer will be a column number. */
121763:             eState = 3;
121764:           }else{            /* 2 or greater. A position. */
121765:             pCsr->aStat[iCol+1].nOcc++;
121766:             pCsr->aStat[0].nOcc++;
121767:           }
121768:           break;
121769: 
121770:         /* State 3. The integer just read is a column number. */
121771:         default: assert( eState==3 );
121772:           iCol = (int)v;
121773:           if( fts3auxGrowStatArray(pCsr, iCol+2) ) return SQLITE_NOMEM;
121774:           pCsr->aStat[iCol+1].nDoc++;
121775:           eState = 2;
121776:           break;
121777:       }
121778:     }
121779: 
121780:     pCsr->iCol = 0;
121781:     rc = SQLITE_OK;
121782:   }else{
121783:     pCsr->isEof = 1;
121784:   }
121785:   return rc;
121786: }
121787: 
121788: /*
121789: ** xFilter - Initialize a cursor to point at the start of its data.
121790: */
121791: static int fts3auxFilterMethod(
121792:   sqlite3_vtab_cursor *pCursor,   /* The cursor used for this query */
121793:   int idxNum,                     /* Strategy index */
121794:   const char *idxStr,             /* Unused */
121795:   int nVal,                       /* Number of elements in apVal */
121796:   sqlite3_value **apVal           /* Arguments for the indexing scheme */
121797: ){
121798:   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
121799:   Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
121800:   int rc;
121801:   int isScan;
121802: 
121803:   UNUSED_PARAMETER(nVal);
121804:   UNUSED_PARAMETER(idxStr);
121805: 
121806:   assert( idxStr==0 );
121807:   assert( idxNum==FTS4AUX_EQ_CONSTRAINT || idxNum==0
121808:        || idxNum==FTS4AUX_LE_CONSTRAINT || idxNum==FTS4AUX_GE_CONSTRAINT
121809:        || idxNum==(FTS4AUX_LE_CONSTRAINT|FTS4AUX_GE_CONSTRAINT)
121810:   );
121811:   isScan = (idxNum!=FTS4AUX_EQ_CONSTRAINT);
121812: 
121813:   /* In case this cursor is being reused, close and zero it. */
121814:   testcase(pCsr->filter.zTerm);
121815:   sqlite3Fts3SegReaderFinish(&pCsr->csr);
121816:   sqlite3_free((void *)pCsr->filter.zTerm);
121817:   sqlite3_free(pCsr->aStat);
121818:   memset(&pCsr->csr, 0, ((u8*)&pCsr[1]) - (u8*)&pCsr->csr);
121819: 
121820:   pCsr->filter.flags = FTS3_SEGMENT_REQUIRE_POS|FTS3_SEGMENT_IGNORE_EMPTY;
121821:   if( isScan ) pCsr->filter.flags |= FTS3_SEGMENT_SCAN;
121822: 
121823:   if( idxNum&(FTS4AUX_EQ_CONSTRAINT|FTS4AUX_GE_CONSTRAINT) ){
121824:     const unsigned char *zStr = sqlite3_value_text(apVal[0]);
121825:     if( zStr ){
121826:       pCsr->filter.zTerm = sqlite3_mprintf("%s", zStr);
121827:       pCsr->filter.nTerm = sqlite3_value_bytes(apVal[0]);
121828:       if( pCsr->filter.zTerm==0 ) return SQLITE_NOMEM;
121829:     }
121830:   }
121831:   if( idxNum&FTS4AUX_LE_CONSTRAINT ){
121832:     int iIdx = (idxNum&FTS4AUX_GE_CONSTRAINT) ? 1 : 0;
121833:     pCsr->zStop = sqlite3_mprintf("%s", sqlite3_value_text(apVal[iIdx]));
121834:     pCsr->nStop = sqlite3_value_bytes(apVal[iIdx]);
121835:     if( pCsr->zStop==0 ) return SQLITE_NOMEM;
121836:   }
121837: 
121838:   rc = sqlite3Fts3SegReaderCursor(pFts3, 0, FTS3_SEGCURSOR_ALL,
121839:       pCsr->filter.zTerm, pCsr->filter.nTerm, 0, isScan, &pCsr->csr
121840:   );
121841:   if( rc==SQLITE_OK ){
121842:     rc = sqlite3Fts3SegReaderStart(pFts3, &pCsr->csr, &pCsr->filter);
121843:   }
121844: 
121845:   if( rc==SQLITE_OK ) rc = fts3auxNextMethod(pCursor);
121846:   return rc;
121847: }
121848: 
121849: /*
121850: ** xEof - Return true if the cursor is at EOF, or false otherwise.
121851: */
121852: static int fts3auxEofMethod(sqlite3_vtab_cursor *pCursor){
121853:   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
121854:   return pCsr->isEof;
121855: }
121856: 
121857: /*
121858: ** xColumn - Return a column value.
121859: */
121860: static int fts3auxColumnMethod(
121861:   sqlite3_vtab_cursor *pCursor,   /* Cursor to retrieve value from */
121862:   sqlite3_context *pContext,      /* Context for sqlite3_result_xxx() calls */
121863:   int iCol                        /* Index of column to read value from */
121864: ){
121865:   Fts3auxCursor *p = (Fts3auxCursor *)pCursor;
121866: 
121867:   assert( p->isEof==0 );
121868:   if( iCol==0 ){        /* Column "term" */
121869:     sqlite3_result_text(pContext, p->csr.zTerm, p->csr.nTerm, SQLITE_TRANSIENT);
121870:   }else if( iCol==1 ){  /* Column "col" */
121871:     if( p->iCol ){
121872:       sqlite3_result_int(pContext, p->iCol-1);
121873:     }else{
121874:       sqlite3_result_text(pContext, "*", -1, SQLITE_STATIC);
121875:     }
121876:   }else if( iCol==2 ){  /* Column "documents" */
121877:     sqlite3_result_int64(pContext, p->aStat[p->iCol].nDoc);
121878:   }else{                /* Column "occurrences" */
121879:     sqlite3_result_int64(pContext, p->aStat[p->iCol].nOcc);
121880:   }
121881: 
121882:   return SQLITE_OK;
121883: }
121884: 
121885: /*
121886: ** xRowid - Return the current rowid for the cursor.
121887: */
121888: static int fts3auxRowidMethod(
121889:   sqlite3_vtab_cursor *pCursor,   /* Cursor to retrieve value from */
121890:   sqlite_int64 *pRowid            /* OUT: Rowid value */
121891: ){
121892:   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
121893:   *pRowid = pCsr->iRowid;
121894:   return SQLITE_OK;
121895: }
121896: 
121897: /*
121898: ** Register the fts3aux module with database connection db. Return SQLITE_OK
121899: ** if successful or an error code if sqlite3_create_module() fails.
121900: */
121901: SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db){
121902:   static const sqlite3_module fts3aux_module = {
121903:      0,                           /* iVersion      */
121904:      fts3auxConnectMethod,        /* xCreate       */
121905:      fts3auxConnectMethod,        /* xConnect      */
121906:      fts3auxBestIndexMethod,      /* xBestIndex    */
121907:      fts3auxDisconnectMethod,     /* xDisconnect   */
121908:      fts3auxDisconnectMethod,     /* xDestroy      */
121909:      fts3auxOpenMethod,           /* xOpen         */
121910:      fts3auxCloseMethod,          /* xClose        */
121911:      fts3auxFilterMethod,         /* xFilter       */
121912:      fts3auxNextMethod,           /* xNext         */
121913:      fts3auxEofMethod,            /* xEof          */
121914:      fts3auxColumnMethod,         /* xColumn       */
121915:      fts3auxRowidMethod,          /* xRowid        */
121916:      0,                           /* xUpdate       */
121917:      0,                           /* xBegin        */
121918:      0,                           /* xSync         */
121919:      0,                           /* xCommit       */
121920:      0,                           /* xRollback     */
121921:      0,                           /* xFindFunction */
121922:      0,                           /* xRename       */
121923:      0,                           /* xSavepoint    */
121924:      0,                           /* xRelease      */
121925:      0                            /* xRollbackTo   */
121926:   };
121927:   int rc;                         /* Return code */
121928: 
121929:   rc = sqlite3_create_module(db, "fts4aux", &fts3aux_module, 0);
121930:   return rc;
121931: }
121932: 
121933: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
121934: 
121935: /************** End of fts3_aux.c ********************************************/
121936: /************** Begin file fts3_expr.c ***************************************/
121937: /*
121938: ** 2008 Nov 28
121939: **
121940: ** The author disclaims copyright to this source code.  In place of
121941: ** a legal notice, here is a blessing:
121942: **
121943: **    May you do good and not evil.
121944: **    May you find forgiveness for yourself and forgive others.
121945: **    May you share freely, never taking more than you give.
121946: **
121947: ******************************************************************************
121948: **
121949: ** This module contains code that implements a parser for fts3 query strings
121950: ** (the right-hand argument to the MATCH operator). Because the supported 
121951: ** syntax is relatively simple, the whole tokenizer/parser system is
121952: ** hand-coded. 
121953: */
121954: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
121955: 
121956: /*
121957: ** By default, this module parses the legacy syntax that has been 
121958: ** traditionally used by fts3. Or, if SQLITE_ENABLE_FTS3_PARENTHESIS
121959: ** is defined, then it uses the new syntax. The differences between
121960: ** the new and the old syntaxes are:
121961: **
121962: **  a) The new syntax supports parenthesis. The old does not.
121963: **
121964: **  b) The new syntax supports the AND and NOT operators. The old does not.
121965: **
121966: **  c) The old syntax supports the "-" token qualifier. This is not 
121967: **     supported by the new syntax (it is replaced by the NOT operator).
121968: **
121969: **  d) When using the old syntax, the OR operator has a greater precedence
121970: **     than an implicit AND. When using the new, both implicity and explicit
121971: **     AND operators have a higher precedence than OR.
121972: **
121973: ** If compiled with SQLITE_TEST defined, then this module exports the
121974: ** symbol "int sqlite3_fts3_enable_parentheses". Setting this variable
121975: ** to zero causes the module to use the old syntax. If it is set to 
121976: ** non-zero the new syntax is activated. This is so both syntaxes can
121977: ** be tested using a single build of testfixture.
121978: **
121979: ** The following describes the syntax supported by the fts3 MATCH
121980: ** operator in a similar format to that used by the lemon parser
121981: ** generator. This module does not use actually lemon, it uses a
121982: ** custom parser.
121983: **
121984: **   query ::= andexpr (OR andexpr)*.
121985: **
121986: **   andexpr ::= notexpr (AND? notexpr)*.
121987: **
121988: **   notexpr ::= nearexpr (NOT nearexpr|-TOKEN)*.
121989: **   notexpr ::= LP query RP.
121990: **
121991: **   nearexpr ::= phrase (NEAR distance_opt nearexpr)*.
121992: **
121993: **   distance_opt ::= .
121994: **   distance_opt ::= / INTEGER.
121995: **
121996: **   phrase ::= TOKEN.
121997: **   phrase ::= COLUMN:TOKEN.
121998: **   phrase ::= "TOKEN TOKEN TOKEN...".
121999: */
122000: 
122001: #ifdef SQLITE_TEST
122002: SQLITE_API int sqlite3_fts3_enable_parentheses = 0;
122003: #else
122004: # ifdef SQLITE_ENABLE_FTS3_PARENTHESIS 
122005: #  define sqlite3_fts3_enable_parentheses 1
122006: # else
122007: #  define sqlite3_fts3_enable_parentheses 0
122008: # endif
122009: #endif
122010: 
122011: /*
122012: ** Default span for NEAR operators.
122013: */
122014: #define SQLITE_FTS3_DEFAULT_NEAR_PARAM 10
122015: 
122016: /* #include <string.h> */
122017: /* #include <assert.h> */
122018: 
122019: /*
122020: ** isNot:
122021: **   This variable is used by function getNextNode(). When getNextNode() is
122022: **   called, it sets ParseContext.isNot to true if the 'next node' is a 
122023: **   FTSQUERY_PHRASE with a unary "-" attached to it. i.e. "mysql" in the
122024: **   FTS3 query "sqlite -mysql". Otherwise, ParseContext.isNot is set to
122025: **   zero.
122026: */
122027: typedef struct ParseContext ParseContext;
122028: struct ParseContext {
122029:   sqlite3_tokenizer *pTokenizer;      /* Tokenizer module */
122030:   const char **azCol;                 /* Array of column names for fts3 table */
122031:   int bFts4;                          /* True to allow FTS4-only syntax */
122032:   int nCol;                           /* Number of entries in azCol[] */
122033:   int iDefaultCol;                    /* Default column to query */
122034:   int isNot;                          /* True if getNextNode() sees a unary - */
122035:   sqlite3_context *pCtx;              /* Write error message here */
122036:   int nNest;                          /* Number of nested brackets */
122037: };
122038: 
122039: /*
122040: ** This function is equivalent to the standard isspace() function. 
122041: **
122042: ** The standard isspace() can be awkward to use safely, because although it
122043: ** is defined to accept an argument of type int, its behaviour when passed
122044: ** an integer that falls outside of the range of the unsigned char type
122045: ** is undefined (and sometimes, "undefined" means segfault). This wrapper
122046: ** is defined to accept an argument of type char, and always returns 0 for
122047: ** any values that fall outside of the range of the unsigned char type (i.e.
122048: ** negative values).
122049: */
122050: static int fts3isspace(char c){
122051:   return c==' ' || c=='\t' || c=='\n' || c=='\r' || c=='\v' || c=='\f';
122052: }
122053: 
122054: /*
122055: ** Allocate nByte bytes of memory using sqlite3_malloc(). If successful,
122056: ** zero the memory before returning a pointer to it. If unsuccessful, 
122057: ** return NULL.
122058: */
122059: static void *fts3MallocZero(int nByte){
122060:   void *pRet = sqlite3_malloc(nByte);
122061:   if( pRet ) memset(pRet, 0, nByte);
122062:   return pRet;
122063: }
122064: 
122065: 
122066: /*
122067: ** Extract the next token from buffer z (length n) using the tokenizer
122068: ** and other information (column names etc.) in pParse. Create an Fts3Expr
122069: ** structure of type FTSQUERY_PHRASE containing a phrase consisting of this
122070: ** single token and set *ppExpr to point to it. If the end of the buffer is
122071: ** reached before a token is found, set *ppExpr to zero. It is the
122072: ** responsibility of the caller to eventually deallocate the allocated 
122073: ** Fts3Expr structure (if any) by passing it to sqlite3_free().
122074: **
122075: ** Return SQLITE_OK if successful, or SQLITE_NOMEM if a memory allocation
122076: ** fails.
122077: */
122078: static int getNextToken(
122079:   ParseContext *pParse,                   /* fts3 query parse context */
122080:   int iCol,                               /* Value for Fts3Phrase.iColumn */
122081:   const char *z, int n,                   /* Input string */
122082:   Fts3Expr **ppExpr,                      /* OUT: expression */
122083:   int *pnConsumed                         /* OUT: Number of bytes consumed */
122084: ){
122085:   sqlite3_tokenizer *pTokenizer = pParse->pTokenizer;
122086:   sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
122087:   int rc;
122088:   sqlite3_tokenizer_cursor *pCursor;
122089:   Fts3Expr *pRet = 0;
122090:   int nConsumed = 0;
122091: 
122092:   rc = pModule->xOpen(pTokenizer, z, n, &pCursor);
122093:   if( rc==SQLITE_OK ){
122094:     const char *zToken;
122095:     int nToken, iStart, iEnd, iPosition;
122096:     int nByte;                               /* total space to allocate */
122097: 
122098:     pCursor->pTokenizer = pTokenizer;
122099:     rc = pModule->xNext(pCursor, &zToken, &nToken, &iStart, &iEnd, &iPosition);
122100: 
122101:     if( rc==SQLITE_OK ){
122102:       nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase) + nToken;
122103:       pRet = (Fts3Expr *)fts3MallocZero(nByte);
122104:       if( !pRet ){
122105:         rc = SQLITE_NOMEM;
122106:       }else{
122107:         pRet->eType = FTSQUERY_PHRASE;
122108:         pRet->pPhrase = (Fts3Phrase *)&pRet[1];
122109:         pRet->pPhrase->nToken = 1;
122110:         pRet->pPhrase->iColumn = iCol;
122111:         pRet->pPhrase->aToken[0].n = nToken;
122112:         pRet->pPhrase->aToken[0].z = (char *)&pRet->pPhrase[1];
122113:         memcpy(pRet->pPhrase->aToken[0].z, zToken, nToken);
122114: 
122115:         if( iEnd<n && z[iEnd]=='*' ){
122116:           pRet->pPhrase->aToken[0].isPrefix = 1;
122117:           iEnd++;
122118:         }
122119: 
122120:         while( 1 ){
122121:           if( !sqlite3_fts3_enable_parentheses 
122122:            && iStart>0 && z[iStart-1]=='-' 
122123:           ){
122124:             pParse->isNot = 1;
122125:             iStart--;
122126:           }else if( pParse->bFts4 && iStart>0 && z[iStart-1]=='^' ){
122127:             pRet->pPhrase->aToken[0].bFirst = 1;
122128:             iStart--;
122129:           }else{
122130:             break;
122131:           }
122132:         }
122133: 
122134:       }
122135:       nConsumed = iEnd;
122136:     }
122137: 
122138:     pModule->xClose(pCursor);
122139:   }
122140:   
122141:   *pnConsumed = nConsumed;
122142:   *ppExpr = pRet;
122143:   return rc;
122144: }
122145: 
122146: 
122147: /*
122148: ** Enlarge a memory allocation.  If an out-of-memory allocation occurs,
122149: ** then free the old allocation.
122150: */
122151: static void *fts3ReallocOrFree(void *pOrig, int nNew){
122152:   void *pRet = sqlite3_realloc(pOrig, nNew);
122153:   if( !pRet ){
122154:     sqlite3_free(pOrig);
122155:   }
122156:   return pRet;
122157: }
122158: 
122159: /*
122160: ** Buffer zInput, length nInput, contains the contents of a quoted string
122161: ** that appeared as part of an fts3 query expression. Neither quote character
122162: ** is included in the buffer. This function attempts to tokenize the entire
122163: ** input buffer and create an Fts3Expr structure of type FTSQUERY_PHRASE 
122164: ** containing the results.
122165: **
122166: ** If successful, SQLITE_OK is returned and *ppExpr set to point at the
122167: ** allocated Fts3Expr structure. Otherwise, either SQLITE_NOMEM (out of memory
122168: ** error) or SQLITE_ERROR (tokenization error) is returned and *ppExpr set
122169: ** to 0.
122170: */
122171: static int getNextString(
122172:   ParseContext *pParse,                   /* fts3 query parse context */
122173:   const char *zInput, int nInput,         /* Input string */
122174:   Fts3Expr **ppExpr                       /* OUT: expression */
122175: ){
122176:   sqlite3_tokenizer *pTokenizer = pParse->pTokenizer;
122177:   sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
122178:   int rc;
122179:   Fts3Expr *p = 0;
122180:   sqlite3_tokenizer_cursor *pCursor = 0;
122181:   char *zTemp = 0;
122182:   int nTemp = 0;
122183: 
122184:   const int nSpace = sizeof(Fts3Expr) + sizeof(Fts3Phrase);
122185:   int nToken = 0;
122186: 
122187:   /* The final Fts3Expr data structure, including the Fts3Phrase,
122188:   ** Fts3PhraseToken structures token buffers are all stored as a single 
122189:   ** allocation so that the expression can be freed with a single call to
122190:   ** sqlite3_free(). Setting this up requires a two pass approach.
122191:   **
122192:   ** The first pass, in the block below, uses a tokenizer cursor to iterate
122193:   ** through the tokens in the expression. This pass uses fts3ReallocOrFree()
122194:   ** to assemble data in two dynamic buffers:
122195:   **
122196:   **   Buffer p: Points to the Fts3Expr structure, followed by the Fts3Phrase
122197:   **             structure, followed by the array of Fts3PhraseToken 
122198:   **             structures. This pass only populates the Fts3PhraseToken array.
122199:   **
122200:   **   Buffer zTemp: Contains copies of all tokens.
122201:   **
122202:   ** The second pass, in the block that begins "if( rc==SQLITE_DONE )" below,
122203:   ** appends buffer zTemp to buffer p, and fills in the Fts3Expr and Fts3Phrase
122204:   ** structures.
122205:   */
122206:   rc = pModule->xOpen(pTokenizer, zInput, nInput, &pCursor);
122207:   if( rc==SQLITE_OK ){
122208:     int ii;
122209:     pCursor->pTokenizer = pTokenizer;
122210:     for(ii=0; rc==SQLITE_OK; ii++){
122211:       const char *zByte;
122212:       int nByte, iBegin, iEnd, iPos;
122213:       rc = pModule->xNext(pCursor, &zByte, &nByte, &iBegin, &iEnd, &iPos);
122214:       if( rc==SQLITE_OK ){
122215:         Fts3PhraseToken *pToken;
122216: 
122217:         p = fts3ReallocOrFree(p, nSpace + ii*sizeof(Fts3PhraseToken));
122218:         if( !p ) goto no_mem;
122219: 
122220:         zTemp = fts3ReallocOrFree(zTemp, nTemp + nByte);
122221:         if( !zTemp ) goto no_mem;
122222: 
122223:         assert( nToken==ii );
122224:         pToken = &((Fts3Phrase *)(&p[1]))->aToken[ii];
122225:         memset(pToken, 0, sizeof(Fts3PhraseToken));
122226: 
122227:         memcpy(&zTemp[nTemp], zByte, nByte);
122228:         nTemp += nByte;
122229: 
122230:         pToken->n = nByte;
122231:         pToken->isPrefix = (iEnd<nInput && zInput[iEnd]=='*');
122232:         pToken->bFirst = (iBegin>0 && zInput[iBegin-1]=='^');
122233:         nToken = ii+1;
122234:       }
122235:     }
122236: 
122237:     pModule->xClose(pCursor);
122238:     pCursor = 0;
122239:   }
122240: 
122241:   if( rc==SQLITE_DONE ){
122242:     int jj;
122243:     char *zBuf = 0;
122244: 
122245:     p = fts3ReallocOrFree(p, nSpace + nToken*sizeof(Fts3PhraseToken) + nTemp);
122246:     if( !p ) goto no_mem;
122247:     memset(p, 0, (char *)&(((Fts3Phrase *)&p[1])->aToken[0])-(char *)p);
122248:     p->eType = FTSQUERY_PHRASE;
122249:     p->pPhrase = (Fts3Phrase *)&p[1];
122250:     p->pPhrase->iColumn = pParse->iDefaultCol;
122251:     p->pPhrase->nToken = nToken;
122252: 
122253:     zBuf = (char *)&p->pPhrase->aToken[nToken];
122254:     if( zTemp ){
122255:       memcpy(zBuf, zTemp, nTemp);
122256:       sqlite3_free(zTemp);
122257:     }else{
122258:       assert( nTemp==0 );
122259:     }
122260: 
122261:     for(jj=0; jj<p->pPhrase->nToken; jj++){
122262:       p->pPhrase->aToken[jj].z = zBuf;
122263:       zBuf += p->pPhrase->aToken[jj].n;
122264:     }
122265:     rc = SQLITE_OK;
122266:   }
122267: 
122268:   *ppExpr = p;
122269:   return rc;
122270: no_mem:
122271: 
122272:   if( pCursor ){
122273:     pModule->xClose(pCursor);
122274:   }
122275:   sqlite3_free(zTemp);
122276:   sqlite3_free(p);
122277:   *ppExpr = 0;
122278:   return SQLITE_NOMEM;
122279: }
122280: 
122281: /*
122282: ** Function getNextNode(), which is called by fts3ExprParse(), may itself
122283: ** call fts3ExprParse(). So this forward declaration is required.
122284: */
122285: static int fts3ExprParse(ParseContext *, const char *, int, Fts3Expr **, int *);
122286: 
122287: /*
122288: ** The output variable *ppExpr is populated with an allocated Fts3Expr 
122289: ** structure, or set to 0 if the end of the input buffer is reached.
122290: **
122291: ** Returns an SQLite error code. SQLITE_OK if everything works, SQLITE_NOMEM
122292: ** if a malloc failure occurs, or SQLITE_ERROR if a parse error is encountered.
122293: ** If SQLITE_ERROR is returned, pContext is populated with an error message.
122294: */
122295: static int getNextNode(
122296:   ParseContext *pParse,                   /* fts3 query parse context */
122297:   const char *z, int n,                   /* Input string */
122298:   Fts3Expr **ppExpr,                      /* OUT: expression */
122299:   int *pnConsumed                         /* OUT: Number of bytes consumed */
122300: ){
122301:   static const struct Fts3Keyword {
122302:     char *z;                              /* Keyword text */
122303:     unsigned char n;                      /* Length of the keyword */
122304:     unsigned char parenOnly;              /* Only valid in paren mode */
122305:     unsigned char eType;                  /* Keyword code */
122306:   } aKeyword[] = {
122307:     { "OR" ,  2, 0, FTSQUERY_OR   },
122308:     { "AND",  3, 1, FTSQUERY_AND  },
122309:     { "NOT",  3, 1, FTSQUERY_NOT  },
122310:     { "NEAR", 4, 0, FTSQUERY_NEAR }
122311:   };
122312:   int ii;
122313:   int iCol;
122314:   int iColLen;
122315:   int rc;
122316:   Fts3Expr *pRet = 0;
122317: 
122318:   const char *zInput = z;
122319:   int nInput = n;
122320: 
122321:   pParse->isNot = 0;
122322: 
122323:   /* Skip over any whitespace before checking for a keyword, an open or
122324:   ** close bracket, or a quoted string. 
122325:   */
122326:   while( nInput>0 && fts3isspace(*zInput) ){
122327:     nInput--;
122328:     zInput++;
122329:   }
122330:   if( nInput==0 ){
122331:     return SQLITE_DONE;
122332:   }
122333: 
122334:   /* See if we are dealing with a keyword. */
122335:   for(ii=0; ii<(int)(sizeof(aKeyword)/sizeof(struct Fts3Keyword)); ii++){
122336:     const struct Fts3Keyword *pKey = &aKeyword[ii];
122337: 
122338:     if( (pKey->parenOnly & ~sqlite3_fts3_enable_parentheses)!=0 ){
122339:       continue;
122340:     }
122341: 
122342:     if( nInput>=pKey->n && 0==memcmp(zInput, pKey->z, pKey->n) ){
122343:       int nNear = SQLITE_FTS3_DEFAULT_NEAR_PARAM;
122344:       int nKey = pKey->n;
122345:       char cNext;
122346: 
122347:       /* If this is a "NEAR" keyword, check for an explicit nearness. */
122348:       if( pKey->eType==FTSQUERY_NEAR ){
122349:         assert( nKey==4 );
122350:         if( zInput[4]=='/' && zInput[5]>='0' && zInput[5]<='9' ){
122351:           nNear = 0;
122352:           for(nKey=5; zInput[nKey]>='0' && zInput[nKey]<='9'; nKey++){
122353:             nNear = nNear * 10 + (zInput[nKey] - '0');
122354:           }
122355:         }
122356:       }
122357: 
122358:       /* At this point this is probably a keyword. But for that to be true,
122359:       ** the next byte must contain either whitespace, an open or close
122360:       ** parenthesis, a quote character, or EOF. 
122361:       */
122362:       cNext = zInput[nKey];
122363:       if( fts3isspace(cNext) 
122364:        || cNext=='"' || cNext=='(' || cNext==')' || cNext==0
122365:       ){
122366:         pRet = (Fts3Expr *)fts3MallocZero(sizeof(Fts3Expr));
122367:         if( !pRet ){
122368:           return SQLITE_NOMEM;
122369:         }
122370:         pRet->eType = pKey->eType;
122371:         pRet->nNear = nNear;
122372:         *ppExpr = pRet;
122373:         *pnConsumed = (int)((zInput - z) + nKey);
122374:         return SQLITE_OK;
122375:       }
122376: 
122377:       /* Turns out that wasn't a keyword after all. This happens if the
122378:       ** user has supplied a token such as "ORacle". Continue.
122379:       */
122380:     }
122381:   }
122382: 
122383:   /* Check for an open bracket. */
122384:   if( sqlite3_fts3_enable_parentheses ){
122385:     if( *zInput=='(' ){
122386:       int nConsumed;
122387:       pParse->nNest++;
122388:       rc = fts3ExprParse(pParse, &zInput[1], nInput-1, ppExpr, &nConsumed);
122389:       if( rc==SQLITE_OK && !*ppExpr ){
122390:         rc = SQLITE_DONE;
122391:       }
122392:       *pnConsumed = (int)((zInput - z) + 1 + nConsumed);
122393:       return rc;
122394:     }
122395:   
122396:     /* Check for a close bracket. */
122397:     if( *zInput==')' ){
122398:       pParse->nNest--;
122399:       *pnConsumed = (int)((zInput - z) + 1);
122400:       return SQLITE_DONE;
122401:     }
122402:   }
122403: 
122404:   /* See if we are dealing with a quoted phrase. If this is the case, then
122405:   ** search for the closing quote and pass the whole string to getNextString()
122406:   ** for processing. This is easy to do, as fts3 has no syntax for escaping
122407:   ** a quote character embedded in a string.
122408:   */
122409:   if( *zInput=='"' ){
122410:     for(ii=1; ii<nInput && zInput[ii]!='"'; ii++);
122411:     *pnConsumed = (int)((zInput - z) + ii + 1);
122412:     if( ii==nInput ){
122413:       return SQLITE_ERROR;
122414:     }
122415:     return getNextString(pParse, &zInput[1], ii-1, ppExpr);
122416:   }
122417: 
122418: 
122419:   /* If control flows to this point, this must be a regular token, or 
122420:   ** the end of the input. Read a regular token using the sqlite3_tokenizer
122421:   ** interface. Before doing so, figure out if there is an explicit
122422:   ** column specifier for the token. 
122423:   **
122424:   ** TODO: Strangely, it is not possible to associate a column specifier
122425:   ** with a quoted phrase, only with a single token. Not sure if this was
122426:   ** an implementation artifact or an intentional decision when fts3 was
122427:   ** first implemented. Whichever it was, this module duplicates the 
122428:   ** limitation.
122429:   */
122430:   iCol = pParse->iDefaultCol;
122431:   iColLen = 0;
122432:   for(ii=0; ii<pParse->nCol; ii++){
122433:     const char *zStr = pParse->azCol[ii];
122434:     int nStr = (int)strlen(zStr);
122435:     if( nInput>nStr && zInput[nStr]==':' 
122436:      && sqlite3_strnicmp(zStr, zInput, nStr)==0 
122437:     ){
122438:       iCol = ii;
122439:       iColLen = (int)((zInput - z) + nStr + 1);
122440:       break;
122441:     }
122442:   }
122443:   rc = getNextToken(pParse, iCol, &z[iColLen], n-iColLen, ppExpr, pnConsumed);
122444:   *pnConsumed += iColLen;
122445:   return rc;
122446: }
122447: 
122448: /*
122449: ** The argument is an Fts3Expr structure for a binary operator (any type
122450: ** except an FTSQUERY_PHRASE). Return an integer value representing the
122451: ** precedence of the operator. Lower values have a higher precedence (i.e.
122452: ** group more tightly). For example, in the C language, the == operator
122453: ** groups more tightly than ||, and would therefore have a higher precedence.
122454: **
122455: ** When using the new fts3 query syntax (when SQLITE_ENABLE_FTS3_PARENTHESIS
122456: ** is defined), the order of the operators in precedence from highest to
122457: ** lowest is:
122458: **
122459: **   NEAR
122460: **   NOT
122461: **   AND (including implicit ANDs)
122462: **   OR
122463: **
122464: ** Note that when using the old query syntax, the OR operator has a higher
122465: ** precedence than the AND operator.
122466: */
122467: static int opPrecedence(Fts3Expr *p){
122468:   assert( p->eType!=FTSQUERY_PHRASE );
122469:   if( sqlite3_fts3_enable_parentheses ){
122470:     return p->eType;
122471:   }else if( p->eType==FTSQUERY_NEAR ){
122472:     return 1;
122473:   }else if( p->eType==FTSQUERY_OR ){
122474:     return 2;
122475:   }
122476:   assert( p->eType==FTSQUERY_AND );
122477:   return 3;
122478: }
122479: 
122480: /*
122481: ** Argument ppHead contains a pointer to the current head of a query 
122482: ** expression tree being parsed. pPrev is the expression node most recently
122483: ** inserted into the tree. This function adds pNew, which is always a binary
122484: ** operator node, into the expression tree based on the relative precedence
122485: ** of pNew and the existing nodes of the tree. This may result in the head
122486: ** of the tree changing, in which case *ppHead is set to the new root node.
122487: */
122488: static void insertBinaryOperator(
122489:   Fts3Expr **ppHead,       /* Pointer to the root node of a tree */
122490:   Fts3Expr *pPrev,         /* Node most recently inserted into the tree */
122491:   Fts3Expr *pNew           /* New binary node to insert into expression tree */
122492: ){
122493:   Fts3Expr *pSplit = pPrev;
122494:   while( pSplit->pParent && opPrecedence(pSplit->pParent)<=opPrecedence(pNew) ){
122495:     pSplit = pSplit->pParent;
122496:   }
122497: 
122498:   if( pSplit->pParent ){
122499:     assert( pSplit->pParent->pRight==pSplit );
122500:     pSplit->pParent->pRight = pNew;
122501:     pNew->pParent = pSplit->pParent;
122502:   }else{
122503:     *ppHead = pNew;
122504:   }
122505:   pNew->pLeft = pSplit;
122506:   pSplit->pParent = pNew;
122507: }
122508: 
122509: /*
122510: ** Parse the fts3 query expression found in buffer z, length n. This function
122511: ** returns either when the end of the buffer is reached or an unmatched 
122512: ** closing bracket - ')' - is encountered.
122513: **
122514: ** If successful, SQLITE_OK is returned, *ppExpr is set to point to the
122515: ** parsed form of the expression and *pnConsumed is set to the number of
122516: ** bytes read from buffer z. Otherwise, *ppExpr is set to 0 and SQLITE_NOMEM
122517: ** (out of memory error) or SQLITE_ERROR (parse error) is returned.
122518: */
122519: static int fts3ExprParse(
122520:   ParseContext *pParse,                   /* fts3 query parse context */
122521:   const char *z, int n,                   /* Text of MATCH query */
122522:   Fts3Expr **ppExpr,                      /* OUT: Parsed query structure */
122523:   int *pnConsumed                         /* OUT: Number of bytes consumed */
122524: ){
122525:   Fts3Expr *pRet = 0;
122526:   Fts3Expr *pPrev = 0;
122527:   Fts3Expr *pNotBranch = 0;               /* Only used in legacy parse mode */
122528:   int nIn = n;
122529:   const char *zIn = z;
122530:   int rc = SQLITE_OK;
122531:   int isRequirePhrase = 1;
122532: 
122533:   while( rc==SQLITE_OK ){
122534:     Fts3Expr *p = 0;
122535:     int nByte = 0;
122536:     rc = getNextNode(pParse, zIn, nIn, &p, &nByte);
122537:     if( rc==SQLITE_OK ){
122538:       int isPhrase;
122539: 
122540:       if( !sqlite3_fts3_enable_parentheses 
122541:        && p->eType==FTSQUERY_PHRASE && pParse->isNot 
122542:       ){
122543:         /* Create an implicit NOT operator. */
122544:         Fts3Expr *pNot = fts3MallocZero(sizeof(Fts3Expr));
122545:         if( !pNot ){
122546:           sqlite3Fts3ExprFree(p);
122547:           rc = SQLITE_NOMEM;
122548:           goto exprparse_out;
122549:         }
122550:         pNot->eType = FTSQUERY_NOT;
122551:         pNot->pRight = p;
122552:         if( pNotBranch ){
122553:           pNot->pLeft = pNotBranch;
122554:         }
122555:         pNotBranch = pNot;
122556:         p = pPrev;
122557:       }else{
122558:         int eType = p->eType;
122559:         isPhrase = (eType==FTSQUERY_PHRASE || p->pLeft);
122560: 
122561:         /* The isRequirePhrase variable is set to true if a phrase or
122562:         ** an expression contained in parenthesis is required. If a
122563:         ** binary operator (AND, OR, NOT or NEAR) is encounted when
122564:         ** isRequirePhrase is set, this is a syntax error.
122565:         */
122566:         if( !isPhrase && isRequirePhrase ){
122567:           sqlite3Fts3ExprFree(p);
122568:           rc = SQLITE_ERROR;
122569:           goto exprparse_out;
122570:         }
122571:   
122572:         if( isPhrase && !isRequirePhrase ){
122573:           /* Insert an implicit AND operator. */
122574:           Fts3Expr *pAnd;
122575:           assert( pRet && pPrev );
122576:           pAnd = fts3MallocZero(sizeof(Fts3Expr));
122577:           if( !pAnd ){
122578:             sqlite3Fts3ExprFree(p);
122579:             rc = SQLITE_NOMEM;
122580:             goto exprparse_out;
122581:           }
122582:           pAnd->eType = FTSQUERY_AND;
122583:           insertBinaryOperator(&pRet, pPrev, pAnd);
122584:           pPrev = pAnd;
122585:         }
122586: 
122587:         /* This test catches attempts to make either operand of a NEAR
122588:         ** operator something other than a phrase. For example, either of
122589:         ** the following:
122590:         **
122591:         **    (bracketed expression) NEAR phrase
122592:         **    phrase NEAR (bracketed expression)
122593:         **
122594:         ** Return an error in either case.
122595:         */
122596:         if( pPrev && (
122597:             (eType==FTSQUERY_NEAR && !isPhrase && pPrev->eType!=FTSQUERY_PHRASE)
122598:          || (eType!=FTSQUERY_PHRASE && isPhrase && pPrev->eType==FTSQUERY_NEAR)
122599:         )){
122600:           sqlite3Fts3ExprFree(p);
122601:           rc = SQLITE_ERROR;
122602:           goto exprparse_out;
122603:         }
122604:   
122605:         if( isPhrase ){
122606:           if( pRet ){
122607:             assert( pPrev && pPrev->pLeft && pPrev->pRight==0 );
122608:             pPrev->pRight = p;
122609:             p->pParent = pPrev;
122610:           }else{
122611:             pRet = p;
122612:           }
122613:         }else{
122614:           insertBinaryOperator(&pRet, pPrev, p);
122615:         }
122616:         isRequirePhrase = !isPhrase;
122617:       }
122618:       assert( nByte>0 );
122619:     }
122620:     assert( rc!=SQLITE_OK || (nByte>0 && nByte<=nIn) );
122621:     nIn -= nByte;
122622:     zIn += nByte;
122623:     pPrev = p;
122624:   }
122625: 
122626:   if( rc==SQLITE_DONE && pRet && isRequirePhrase ){
122627:     rc = SQLITE_ERROR;
122628:   }
122629: 
122630:   if( rc==SQLITE_DONE ){
122631:     rc = SQLITE_OK;
122632:     if( !sqlite3_fts3_enable_parentheses && pNotBranch ){
122633:       if( !pRet ){
122634:         rc = SQLITE_ERROR;
122635:       }else{
122636:         Fts3Expr *pIter = pNotBranch;
122637:         while( pIter->pLeft ){
122638:           pIter = pIter->pLeft;
122639:         }
122640:         pIter->pLeft = pRet;
122641:         pRet = pNotBranch;
122642:       }
122643:     }
122644:   }
122645:   *pnConsumed = n - nIn;
122646: 
122647: exprparse_out:
122648:   if( rc!=SQLITE_OK ){
122649:     sqlite3Fts3ExprFree(pRet);
122650:     sqlite3Fts3ExprFree(pNotBranch);
122651:     pRet = 0;
122652:   }
122653:   *ppExpr = pRet;
122654:   return rc;
122655: }
122656: 
122657: /*
122658: ** Parameters z and n contain a pointer to and length of a buffer containing
122659: ** an fts3 query expression, respectively. This function attempts to parse the
122660: ** query expression and create a tree of Fts3Expr structures representing the
122661: ** parsed expression. If successful, *ppExpr is set to point to the head
122662: ** of the parsed expression tree and SQLITE_OK is returned. If an error
122663: ** occurs, either SQLITE_NOMEM (out-of-memory error) or SQLITE_ERROR (parse
122664: ** error) is returned and *ppExpr is set to 0.
122665: **
122666: ** If parameter n is a negative number, then z is assumed to point to a
122667: ** nul-terminated string and the length is determined using strlen().
122668: **
122669: ** The first parameter, pTokenizer, is passed the fts3 tokenizer module to
122670: ** use to normalize query tokens while parsing the expression. The azCol[]
122671: ** array, which is assumed to contain nCol entries, should contain the names
122672: ** of each column in the target fts3 table, in order from left to right. 
122673: ** Column names must be nul-terminated strings.
122674: **
122675: ** The iDefaultCol parameter should be passed the index of the table column
122676: ** that appears on the left-hand-side of the MATCH operator (the default
122677: ** column to match against for tokens for which a column name is not explicitly
122678: ** specified as part of the query string), or -1 if tokens may by default
122679: ** match any table column.
122680: */
122681: SQLITE_PRIVATE int sqlite3Fts3ExprParse(
122682:   sqlite3_tokenizer *pTokenizer,      /* Tokenizer module */
122683:   char **azCol,                       /* Array of column names for fts3 table */
122684:   int bFts4,                          /* True to allow FTS4-only syntax */
122685:   int nCol,                           /* Number of entries in azCol[] */
122686:   int iDefaultCol,                    /* Default column to query */
122687:   const char *z, int n,               /* Text of MATCH query */
122688:   Fts3Expr **ppExpr                   /* OUT: Parsed query structure */
122689: ){
122690:   int nParsed;
122691:   int rc;
122692:   ParseContext sParse;
122693:   sParse.pTokenizer = pTokenizer;
122694:   sParse.azCol = (const char **)azCol;
122695:   sParse.nCol = nCol;
122696:   sParse.iDefaultCol = iDefaultCol;
122697:   sParse.nNest = 0;
122698:   sParse.bFts4 = bFts4;
122699:   if( z==0 ){
122700:     *ppExpr = 0;
122701:     return SQLITE_OK;
122702:   }
122703:   if( n<0 ){
122704:     n = (int)strlen(z);
122705:   }
122706:   rc = fts3ExprParse(&sParse, z, n, ppExpr, &nParsed);
122707: 
122708:   /* Check for mismatched parenthesis */
122709:   if( rc==SQLITE_OK && sParse.nNest ){
122710:     rc = SQLITE_ERROR;
122711:     sqlite3Fts3ExprFree(*ppExpr);
122712:     *ppExpr = 0;
122713:   }
122714: 
122715:   return rc;
122716: }
122717: 
122718: /*
122719: ** Free a parsed fts3 query expression allocated by sqlite3Fts3ExprParse().
122720: */
122721: SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *p){
122722:   if( p ){
122723:     assert( p->eType==FTSQUERY_PHRASE || p->pPhrase==0 );
122724:     sqlite3Fts3ExprFree(p->pLeft);
122725:     sqlite3Fts3ExprFree(p->pRight);
122726:     sqlite3Fts3EvalPhraseCleanup(p->pPhrase);
122727:     sqlite3_free(p->aMI);
122728:     sqlite3_free(p);
122729:   }
122730: }
122731: 
122732: /****************************************************************************
122733: *****************************************************************************
122734: ** Everything after this point is just test code.
122735: */
122736: 
122737: #ifdef SQLITE_TEST
122738: 
122739: /* #include <stdio.h> */
122740: 
122741: /*
122742: ** Function to query the hash-table of tokenizers (see README.tokenizers).
122743: */
122744: static int queryTestTokenizer(
122745:   sqlite3 *db, 
122746:   const char *zName,  
122747:   const sqlite3_tokenizer_module **pp
122748: ){
122749:   int rc;
122750:   sqlite3_stmt *pStmt;
122751:   const char zSql[] = "SELECT fts3_tokenizer(?)";
122752: 
122753:   *pp = 0;
122754:   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
122755:   if( rc!=SQLITE_OK ){
122756:     return rc;
122757:   }
122758: 
122759:   sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
122760:   if( SQLITE_ROW==sqlite3_step(pStmt) ){
122761:     if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){
122762:       memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp));
122763:     }
122764:   }
122765: 
122766:   return sqlite3_finalize(pStmt);
122767: }
122768: 
122769: /*
122770: ** Return a pointer to a buffer containing a text representation of the
122771: ** expression passed as the first argument. The buffer is obtained from
122772: ** sqlite3_malloc(). It is the responsibility of the caller to use 
122773: ** sqlite3_free() to release the memory. If an OOM condition is encountered,
122774: ** NULL is returned.
122775: **
122776: ** If the second argument is not NULL, then its contents are prepended to 
122777: ** the returned expression text and then freed using sqlite3_free().
122778: */
122779: static char *exprToString(Fts3Expr *pExpr, char *zBuf){
122780:   switch( pExpr->eType ){
122781:     case FTSQUERY_PHRASE: {
122782:       Fts3Phrase *pPhrase = pExpr->pPhrase;
122783:       int i;
122784:       zBuf = sqlite3_mprintf(
122785:           "%zPHRASE %d 0", zBuf, pPhrase->iColumn);
122786:       for(i=0; zBuf && i<pPhrase->nToken; i++){
122787:         zBuf = sqlite3_mprintf("%z %.*s%s", zBuf, 
122788:             pPhrase->aToken[i].n, pPhrase->aToken[i].z,
122789:             (pPhrase->aToken[i].isPrefix?"+":"")
122790:         );
122791:       }
122792:       return zBuf;
122793:     }
122794: 
122795:     case FTSQUERY_NEAR:
122796:       zBuf = sqlite3_mprintf("%zNEAR/%d ", zBuf, pExpr->nNear);
122797:       break;
122798:     case FTSQUERY_NOT:
122799:       zBuf = sqlite3_mprintf("%zNOT ", zBuf);
122800:       break;
122801:     case FTSQUERY_AND:
122802:       zBuf = sqlite3_mprintf("%zAND ", zBuf);
122803:       break;
122804:     case FTSQUERY_OR:
122805:       zBuf = sqlite3_mprintf("%zOR ", zBuf);
122806:       break;
122807:   }
122808: 
122809:   if( zBuf ) zBuf = sqlite3_mprintf("%z{", zBuf);
122810:   if( zBuf ) zBuf = exprToString(pExpr->pLeft, zBuf);
122811:   if( zBuf ) zBuf = sqlite3_mprintf("%z} {", zBuf);
122812: 
122813:   if( zBuf ) zBuf = exprToString(pExpr->pRight, zBuf);
122814:   if( zBuf ) zBuf = sqlite3_mprintf("%z}", zBuf);
122815: 
122816:   return zBuf;
122817: }
122818: 
122819: /*
122820: ** This is the implementation of a scalar SQL function used to test the 
122821: ** expression parser. It should be called as follows:
122822: **
122823: **   fts3_exprtest(<tokenizer>, <expr>, <column 1>, ...);
122824: **
122825: ** The first argument, <tokenizer>, is the name of the fts3 tokenizer used
122826: ** to parse the query expression (see README.tokenizers). The second argument
122827: ** is the query expression to parse. Each subsequent argument is the name
122828: ** of a column of the fts3 table that the query expression may refer to.
122829: ** For example:
122830: **
122831: **   SELECT fts3_exprtest('simple', 'Bill col2:Bloggs', 'col1', 'col2');
122832: */
122833: static void fts3ExprTest(
122834:   sqlite3_context *context,
122835:   int argc,
122836:   sqlite3_value **argv
122837: ){
122838:   sqlite3_tokenizer_module const *pModule = 0;
122839:   sqlite3_tokenizer *pTokenizer = 0;
122840:   int rc;
122841:   char **azCol = 0;
122842:   const char *zExpr;
122843:   int nExpr;
122844:   int nCol;
122845:   int ii;
122846:   Fts3Expr *pExpr;
122847:   char *zBuf = 0;
122848:   sqlite3 *db = sqlite3_context_db_handle(context);
122849: 
122850:   if( argc<3 ){
122851:     sqlite3_result_error(context, 
122852:         "Usage: fts3_exprtest(tokenizer, expr, col1, ...", -1
122853:     );
122854:     return;
122855:   }
122856: 
122857:   rc = queryTestTokenizer(db,
122858:                           (const char *)sqlite3_value_text(argv[0]), &pModule);
122859:   if( rc==SQLITE_NOMEM ){
122860:     sqlite3_result_error_nomem(context);
122861:     goto exprtest_out;
122862:   }else if( !pModule ){
122863:     sqlite3_result_error(context, "No such tokenizer module", -1);
122864:     goto exprtest_out;
122865:   }
122866: 
122867:   rc = pModule->xCreate(0, 0, &pTokenizer);
122868:   assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
122869:   if( rc==SQLITE_NOMEM ){
122870:     sqlite3_result_error_nomem(context);
122871:     goto exprtest_out;
122872:   }
122873:   pTokenizer->pModule = pModule;
122874: 
122875:   zExpr = (const char *)sqlite3_value_text(argv[1]);
122876:   nExpr = sqlite3_value_bytes(argv[1]);
122877:   nCol = argc-2;
122878:   azCol = (char **)sqlite3_malloc(nCol*sizeof(char *));
122879:   if( !azCol ){
122880:     sqlite3_result_error_nomem(context);
122881:     goto exprtest_out;
122882:   }
122883:   for(ii=0; ii<nCol; ii++){
122884:     azCol[ii] = (char *)sqlite3_value_text(argv[ii+2]);
122885:   }
122886: 
122887:   rc = sqlite3Fts3ExprParse(
122888:       pTokenizer, azCol, 0, nCol, nCol, zExpr, nExpr, &pExpr
122889:   );
122890:   if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM ){
122891:     sqlite3_result_error(context, "Error parsing expression", -1);
122892:   }else if( rc==SQLITE_NOMEM || !(zBuf = exprToString(pExpr, 0)) ){
122893:     sqlite3_result_error_nomem(context);
122894:   }else{
122895:     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
122896:     sqlite3_free(zBuf);
122897:   }
122898: 
122899:   sqlite3Fts3ExprFree(pExpr);
122900: 
122901: exprtest_out:
122902:   if( pModule && pTokenizer ){
122903:     rc = pModule->xDestroy(pTokenizer);
122904:   }
122905:   sqlite3_free(azCol);
122906: }
122907: 
122908: /*
122909: ** Register the query expression parser test function fts3_exprtest() 
122910: ** with database connection db. 
122911: */
122912: SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3* db){
122913:   return sqlite3_create_function(
122914:       db, "fts3_exprtest", -1, SQLITE_UTF8, 0, fts3ExprTest, 0, 0
122915:   );
122916: }
122917: 
122918: #endif
122919: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
122920: 
122921: /************** End of fts3_expr.c *******************************************/
122922: /************** Begin file fts3_hash.c ***************************************/
122923: /*
122924: ** 2001 September 22
122925: **
122926: ** The author disclaims copyright to this source code.  In place of
122927: ** a legal notice, here is a blessing:
122928: **
122929: **    May you do good and not evil.
122930: **    May you find forgiveness for yourself and forgive others.
122931: **    May you share freely, never taking more than you give.
122932: **
122933: *************************************************************************
122934: ** This is the implementation of generic hash-tables used in SQLite.
122935: ** We've modified it slightly to serve as a standalone hash table
122936: ** implementation for the full-text indexing module.
122937: */
122938: 
122939: /*
122940: ** The code in this file is only compiled if:
122941: **
122942: **     * The FTS3 module is being built as an extension
122943: **       (in which case SQLITE_CORE is not defined), or
122944: **
122945: **     * The FTS3 module is being built into the core of
122946: **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
122947: */
122948: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
122949: 
122950: /* #include <assert.h> */
122951: /* #include <stdlib.h> */
122952: /* #include <string.h> */
122953: 
122954: 
122955: /*
122956: ** Malloc and Free functions
122957: */
122958: static void *fts3HashMalloc(int n){
122959:   void *p = sqlite3_malloc(n);
122960:   if( p ){
122961:     memset(p, 0, n);
122962:   }
122963:   return p;
122964: }
122965: static void fts3HashFree(void *p){
122966:   sqlite3_free(p);
122967: }
122968: 
122969: /* Turn bulk memory into a hash table object by initializing the
122970: ** fields of the Hash structure.
122971: **
122972: ** "pNew" is a pointer to the hash table that is to be initialized.
122973: ** keyClass is one of the constants 
122974: ** FTS3_HASH_BINARY or FTS3_HASH_STRING.  The value of keyClass 
122975: ** determines what kind of key the hash table will use.  "copyKey" is
122976: ** true if the hash table should make its own private copy of keys and
122977: ** false if it should just use the supplied pointer.
122978: */
122979: SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey){
122980:   assert( pNew!=0 );
122981:   assert( keyClass>=FTS3_HASH_STRING && keyClass<=FTS3_HASH_BINARY );
122982:   pNew->keyClass = keyClass;
122983:   pNew->copyKey = copyKey;
122984:   pNew->first = 0;
122985:   pNew->count = 0;
122986:   pNew->htsize = 0;
122987:   pNew->ht = 0;
122988: }
122989: 
122990: /* Remove all entries from a hash table.  Reclaim all memory.
122991: ** Call this routine to delete a hash table or to reset a hash table
122992: ** to the empty state.
122993: */
122994: SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash *pH){
122995:   Fts3HashElem *elem;         /* For looping over all elements of the table */
122996: 
122997:   assert( pH!=0 );
122998:   elem = pH->first;
122999:   pH->first = 0;
123000:   fts3HashFree(pH->ht);
123001:   pH->ht = 0;
123002:   pH->htsize = 0;
123003:   while( elem ){
123004:     Fts3HashElem *next_elem = elem->next;
123005:     if( pH->copyKey && elem->pKey ){
123006:       fts3HashFree(elem->pKey);
123007:     }
123008:     fts3HashFree(elem);
123009:     elem = next_elem;
123010:   }
123011:   pH->count = 0;
123012: }
123013: 
123014: /*
123015: ** Hash and comparison functions when the mode is FTS3_HASH_STRING
123016: */
123017: static int fts3StrHash(const void *pKey, int nKey){
123018:   const char *z = (const char *)pKey;
123019:   int h = 0;
123020:   if( nKey<=0 ) nKey = (int) strlen(z);
123021:   while( nKey > 0  ){
123022:     h = (h<<3) ^ h ^ *z++;
123023:     nKey--;
123024:   }
123025:   return h & 0x7fffffff;
123026: }
123027: static int fts3StrCompare(const void *pKey1, int n1, const void *pKey2, int n2){
123028:   if( n1!=n2 ) return 1;
123029:   return strncmp((const char*)pKey1,(const char*)pKey2,n1);
123030: }
123031: 
123032: /*
123033: ** Hash and comparison functions when the mode is FTS3_HASH_BINARY
123034: */
123035: static int fts3BinHash(const void *pKey, int nKey){
123036:   int h = 0;
123037:   const char *z = (const char *)pKey;
123038:   while( nKey-- > 0 ){
123039:     h = (h<<3) ^ h ^ *(z++);
123040:   }
123041:   return h & 0x7fffffff;
123042: }
123043: static int fts3BinCompare(const void *pKey1, int n1, const void *pKey2, int n2){
123044:   if( n1!=n2 ) return 1;
123045:   return memcmp(pKey1,pKey2,n1);
123046: }
123047: 
123048: /*
123049: ** Return a pointer to the appropriate hash function given the key class.
123050: **
123051: ** The C syntax in this function definition may be unfamilar to some 
123052: ** programmers, so we provide the following additional explanation:
123053: **
123054: ** The name of the function is "ftsHashFunction".  The function takes a
123055: ** single parameter "keyClass".  The return value of ftsHashFunction()
123056: ** is a pointer to another function.  Specifically, the return value
123057: ** of ftsHashFunction() is a pointer to a function that takes two parameters
123058: ** with types "const void*" and "int" and returns an "int".
123059: */
123060: static int (*ftsHashFunction(int keyClass))(const void*,int){
123061:   if( keyClass==FTS3_HASH_STRING ){
123062:     return &fts3StrHash;
123063:   }else{
123064:     assert( keyClass==FTS3_HASH_BINARY );
123065:     return &fts3BinHash;
123066:   }
123067: }
123068: 
123069: /*
123070: ** Return a pointer to the appropriate hash function given the key class.
123071: **
123072: ** For help in interpreted the obscure C code in the function definition,
123073: ** see the header comment on the previous function.
123074: */
123075: static int (*ftsCompareFunction(int keyClass))(const void*,int,const void*,int){
123076:   if( keyClass==FTS3_HASH_STRING ){
123077:     return &fts3StrCompare;
123078:   }else{
123079:     assert( keyClass==FTS3_HASH_BINARY );
123080:     return &fts3BinCompare;
123081:   }
123082: }
123083: 
123084: /* Link an element into the hash table
123085: */
123086: static void fts3HashInsertElement(
123087:   Fts3Hash *pH,            /* The complete hash table */
123088:   struct _fts3ht *pEntry,  /* The entry into which pNew is inserted */
123089:   Fts3HashElem *pNew       /* The element to be inserted */
123090: ){
123091:   Fts3HashElem *pHead;     /* First element already in pEntry */
123092:   pHead = pEntry->chain;
123093:   if( pHead ){
123094:     pNew->next = pHead;
123095:     pNew->prev = pHead->prev;
123096:     if( pHead->prev ){ pHead->prev->next = pNew; }
123097:     else             { pH->first = pNew; }
123098:     pHead->prev = pNew;
123099:   }else{
123100:     pNew->next = pH->first;
123101:     if( pH->first ){ pH->first->prev = pNew; }
123102:     pNew->prev = 0;
123103:     pH->first = pNew;
123104:   }
123105:   pEntry->count++;
123106:   pEntry->chain = pNew;
123107: }
123108: 
123109: 
123110: /* Resize the hash table so that it cantains "new_size" buckets.
123111: ** "new_size" must be a power of 2.  The hash table might fail 
123112: ** to resize if sqliteMalloc() fails.
123113: **
123114: ** Return non-zero if a memory allocation error occurs.
123115: */
123116: static int fts3Rehash(Fts3Hash *pH, int new_size){
123117:   struct _fts3ht *new_ht;          /* The new hash table */
123118:   Fts3HashElem *elem, *next_elem;  /* For looping over existing elements */
123119:   int (*xHash)(const void*,int);   /* The hash function */
123120: 
123121:   assert( (new_size & (new_size-1))==0 );
123122:   new_ht = (struct _fts3ht *)fts3HashMalloc( new_size*sizeof(struct _fts3ht) );
123123:   if( new_ht==0 ) return 1;
123124:   fts3HashFree(pH->ht);
123125:   pH->ht = new_ht;
123126:   pH->htsize = new_size;
123127:   xHash = ftsHashFunction(pH->keyClass);
123128:   for(elem=pH->first, pH->first=0; elem; elem = next_elem){
123129:     int h = (*xHash)(elem->pKey, elem->nKey) & (new_size-1);
123130:     next_elem = elem->next;
123131:     fts3HashInsertElement(pH, &new_ht[h], elem);
123132:   }
123133:   return 0;
123134: }
123135: 
123136: /* This function (for internal use only) locates an element in an
123137: ** hash table that matches the given key.  The hash for this key has
123138: ** already been computed and is passed as the 4th parameter.
123139: */
123140: static Fts3HashElem *fts3FindElementByHash(
123141:   const Fts3Hash *pH, /* The pH to be searched */
123142:   const void *pKey,   /* The key we are searching for */
123143:   int nKey,
123144:   int h               /* The hash for this key. */
123145: ){
123146:   Fts3HashElem *elem;            /* Used to loop thru the element list */
123147:   int count;                     /* Number of elements left to test */
123148:   int (*xCompare)(const void*,int,const void*,int);  /* comparison function */
123149: 
123150:   if( pH->ht ){
123151:     struct _fts3ht *pEntry = &pH->ht[h];
123152:     elem = pEntry->chain;
123153:     count = pEntry->count;
123154:     xCompare = ftsCompareFunction(pH->keyClass);
123155:     while( count-- && elem ){
123156:       if( (*xCompare)(elem->pKey,elem->nKey,pKey,nKey)==0 ){ 
123157:         return elem;
123158:       }
123159:       elem = elem->next;
123160:     }
123161:   }
123162:   return 0;
123163: }
123164: 
123165: /* Remove a single entry from the hash table given a pointer to that
123166: ** element and a hash on the element's key.
123167: */
123168: static void fts3RemoveElementByHash(
123169:   Fts3Hash *pH,         /* The pH containing "elem" */
123170:   Fts3HashElem* elem,   /* The element to be removed from the pH */
123171:   int h                 /* Hash value for the element */
123172: ){
123173:   struct _fts3ht *pEntry;
123174:   if( elem->prev ){
123175:     elem->prev->next = elem->next; 
123176:   }else{
123177:     pH->first = elem->next;
123178:   }
123179:   if( elem->next ){
123180:     elem->next->prev = elem->prev;
123181:   }
123182:   pEntry = &pH->ht[h];
123183:   if( pEntry->chain==elem ){
123184:     pEntry->chain = elem->next;
123185:   }
123186:   pEntry->count--;
123187:   if( pEntry->count<=0 ){
123188:     pEntry->chain = 0;
123189:   }
123190:   if( pH->copyKey && elem->pKey ){
123191:     fts3HashFree(elem->pKey);
123192:   }
123193:   fts3HashFree( elem );
123194:   pH->count--;
123195:   if( pH->count<=0 ){
123196:     assert( pH->first==0 );
123197:     assert( pH->count==0 );
123198:     fts3HashClear(pH);
123199:   }
123200: }
123201: 
123202: SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(
123203:   const Fts3Hash *pH, 
123204:   const void *pKey, 
123205:   int nKey
123206: ){
123207:   int h;                          /* A hash on key */
123208:   int (*xHash)(const void*,int);  /* The hash function */
123209: 
123210:   if( pH==0 || pH->ht==0 ) return 0;
123211:   xHash = ftsHashFunction(pH->keyClass);
123212:   assert( xHash!=0 );
123213:   h = (*xHash)(pKey,nKey);
123214:   assert( (pH->htsize & (pH->htsize-1))==0 );
123215:   return fts3FindElementByHash(pH,pKey,nKey, h & (pH->htsize-1));
123216: }
123217: 
123218: /* 
123219: ** Attempt to locate an element of the hash table pH with a key
123220: ** that matches pKey,nKey.  Return the data for this element if it is
123221: ** found, or NULL if there is no match.
123222: */
123223: SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash *pH, const void *pKey, int nKey){
123224:   Fts3HashElem *pElem;            /* The element that matches key (if any) */
123225: 
123226:   pElem = sqlite3Fts3HashFindElem(pH, pKey, nKey);
123227:   return pElem ? pElem->data : 0;
123228: }
123229: 
123230: /* Insert an element into the hash table pH.  The key is pKey,nKey
123231: ** and the data is "data".
123232: **
123233: ** If no element exists with a matching key, then a new
123234: ** element is created.  A copy of the key is made if the copyKey
123235: ** flag is set.  NULL is returned.
123236: **
123237: ** If another element already exists with the same key, then the
123238: ** new data replaces the old data and the old data is returned.
123239: ** The key is not copied in this instance.  If a malloc fails, then
123240: ** the new data is returned and the hash table is unchanged.
123241: **
123242: ** If the "data" parameter to this function is NULL, then the
123243: ** element corresponding to "key" is removed from the hash table.
123244: */
123245: SQLITE_PRIVATE void *sqlite3Fts3HashInsert(
123246:   Fts3Hash *pH,        /* The hash table to insert into */
123247:   const void *pKey,    /* The key */
123248:   int nKey,            /* Number of bytes in the key */
123249:   void *data           /* The data */
123250: ){
123251:   int hraw;                 /* Raw hash value of the key */
123252:   int h;                    /* the hash of the key modulo hash table size */
123253:   Fts3HashElem *elem;       /* Used to loop thru the element list */
123254:   Fts3HashElem *new_elem;   /* New element added to the pH */
123255:   int (*xHash)(const void*,int);  /* The hash function */
123256: 
123257:   assert( pH!=0 );
123258:   xHash = ftsHashFunction(pH->keyClass);
123259:   assert( xHash!=0 );
123260:   hraw = (*xHash)(pKey, nKey);
123261:   assert( (pH->htsize & (pH->htsize-1))==0 );
123262:   h = hraw & (pH->htsize-1);
123263:   elem = fts3FindElementByHash(pH,pKey,nKey,h);
123264:   if( elem ){
123265:     void *old_data = elem->data;
123266:     if( data==0 ){
123267:       fts3RemoveElementByHash(pH,elem,h);
123268:     }else{
123269:       elem->data = data;
123270:     }
123271:     return old_data;
123272:   }
123273:   if( data==0 ) return 0;
123274:   if( (pH->htsize==0 && fts3Rehash(pH,8))
123275:    || (pH->count>=pH->htsize && fts3Rehash(pH, pH->htsize*2))
123276:   ){
123277:     pH->count = 0;
123278:     return data;
123279:   }
123280:   assert( pH->htsize>0 );
123281:   new_elem = (Fts3HashElem*)fts3HashMalloc( sizeof(Fts3HashElem) );
123282:   if( new_elem==0 ) return data;
123283:   if( pH->copyKey && pKey!=0 ){
123284:     new_elem->pKey = fts3HashMalloc( nKey );
123285:     if( new_elem->pKey==0 ){
123286:       fts3HashFree(new_elem);
123287:       return data;
123288:     }
123289:     memcpy((void*)new_elem->pKey, pKey, nKey);
123290:   }else{
123291:     new_elem->pKey = (void*)pKey;
123292:   }
123293:   new_elem->nKey = nKey;
123294:   pH->count++;
123295:   assert( pH->htsize>0 );
123296:   assert( (pH->htsize & (pH->htsize-1))==0 );
123297:   h = hraw & (pH->htsize-1);
123298:   fts3HashInsertElement(pH, &pH->ht[h], new_elem);
123299:   new_elem->data = data;
123300:   return 0;
123301: }
123302: 
123303: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
123304: 
123305: /************** End of fts3_hash.c *******************************************/
123306: /************** Begin file fts3_porter.c *************************************/
123307: /*
123308: ** 2006 September 30
123309: **
123310: ** The author disclaims copyright to this source code.  In place of
123311: ** a legal notice, here is a blessing:
123312: **
123313: **    May you do good and not evil.
123314: **    May you find forgiveness for yourself and forgive others.
123315: **    May you share freely, never taking more than you give.
123316: **
123317: *************************************************************************
123318: ** Implementation of the full-text-search tokenizer that implements
123319: ** a Porter stemmer.
123320: */
123321: 
123322: /*
123323: ** The code in this file is only compiled if:
123324: **
123325: **     * The FTS3 module is being built as an extension
123326: **       (in which case SQLITE_CORE is not defined), or
123327: **
123328: **     * The FTS3 module is being built into the core of
123329: **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
123330: */
123331: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
123332: 
123333: /* #include <assert.h> */
123334: /* #include <stdlib.h> */
123335: /* #include <stdio.h> */
123336: /* #include <string.h> */
123337: 
123338: 
123339: /*
123340: ** Class derived from sqlite3_tokenizer
123341: */
123342: typedef struct porter_tokenizer {
123343:   sqlite3_tokenizer base;      /* Base class */
123344: } porter_tokenizer;
123345: 
123346: /*
123347: ** Class derived from sqlite3_tokenizer_cursor
123348: */
123349: typedef struct porter_tokenizer_cursor {
123350:   sqlite3_tokenizer_cursor base;
123351:   const char *zInput;          /* input we are tokenizing */
123352:   int nInput;                  /* size of the input */
123353:   int iOffset;                 /* current position in zInput */
123354:   int iToken;                  /* index of next token to be returned */
123355:   char *zToken;                /* storage for current token */
123356:   int nAllocated;              /* space allocated to zToken buffer */
123357: } porter_tokenizer_cursor;
123358: 
123359: 
123360: /*
123361: ** Create a new tokenizer instance.
123362: */
123363: static int porterCreate(
123364:   int argc, const char * const *argv,
123365:   sqlite3_tokenizer **ppTokenizer
123366: ){
123367:   porter_tokenizer *t;
123368: 
123369:   UNUSED_PARAMETER(argc);
123370:   UNUSED_PARAMETER(argv);
123371: 
123372:   t = (porter_tokenizer *) sqlite3_malloc(sizeof(*t));
123373:   if( t==NULL ) return SQLITE_NOMEM;
123374:   memset(t, 0, sizeof(*t));
123375:   *ppTokenizer = &t->base;
123376:   return SQLITE_OK;
123377: }
123378: 
123379: /*
123380: ** Destroy a tokenizer
123381: */
123382: static int porterDestroy(sqlite3_tokenizer *pTokenizer){
123383:   sqlite3_free(pTokenizer);
123384:   return SQLITE_OK;
123385: }
123386: 
123387: /*
123388: ** Prepare to begin tokenizing a particular string.  The input
123389: ** string to be tokenized is zInput[0..nInput-1].  A cursor
123390: ** used to incrementally tokenize this string is returned in 
123391: ** *ppCursor.
123392: */
123393: static int porterOpen(
123394:   sqlite3_tokenizer *pTokenizer,         /* The tokenizer */
123395:   const char *zInput, int nInput,        /* String to be tokenized */
123396:   sqlite3_tokenizer_cursor **ppCursor    /* OUT: Tokenization cursor */
123397: ){
123398:   porter_tokenizer_cursor *c;
123399: 
123400:   UNUSED_PARAMETER(pTokenizer);
123401: 
123402:   c = (porter_tokenizer_cursor *) sqlite3_malloc(sizeof(*c));
123403:   if( c==NULL ) return SQLITE_NOMEM;
123404: 
123405:   c->zInput = zInput;
123406:   if( zInput==0 ){
123407:     c->nInput = 0;
123408:   }else if( nInput<0 ){
123409:     c->nInput = (int)strlen(zInput);
123410:   }else{
123411:     c->nInput = nInput;
123412:   }
123413:   c->iOffset = 0;                 /* start tokenizing at the beginning */
123414:   c->iToken = 0;
123415:   c->zToken = NULL;               /* no space allocated, yet. */
123416:   c->nAllocated = 0;
123417: 
123418:   *ppCursor = &c->base;
123419:   return SQLITE_OK;
123420: }
123421: 
123422: /*
123423: ** Close a tokenization cursor previously opened by a call to
123424: ** porterOpen() above.
123425: */
123426: static int porterClose(sqlite3_tokenizer_cursor *pCursor){
123427:   porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor;
123428:   sqlite3_free(c->zToken);
123429:   sqlite3_free(c);
123430:   return SQLITE_OK;
123431: }
123432: /*
123433: ** Vowel or consonant
123434: */
123435: static const char cType[] = {
123436:    0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
123437:    1, 1, 1, 2, 1
123438: };
123439: 
123440: /*
123441: ** isConsonant() and isVowel() determine if their first character in
123442: ** the string they point to is a consonant or a vowel, according
123443: ** to Porter ruls.  
123444: **
123445: ** A consonate is any letter other than 'a', 'e', 'i', 'o', or 'u'.
123446: ** 'Y' is a consonant unless it follows another consonant,
123447: ** in which case it is a vowel.
123448: **
123449: ** In these routine, the letters are in reverse order.  So the 'y' rule
123450: ** is that 'y' is a consonant unless it is followed by another
123451: ** consonent.
123452: */
123453: static int isVowel(const char*);
123454: static int isConsonant(const char *z){
123455:   int j;
123456:   char x = *z;
123457:   if( x==0 ) return 0;
123458:   assert( x>='a' && x<='z' );
123459:   j = cType[x-'a'];
123460:   if( j<2 ) return j;
123461:   return z[1]==0 || isVowel(z + 1);
123462: }
123463: static int isVowel(const char *z){
123464:   int j;
123465:   char x = *z;
123466:   if( x==0 ) return 0;
123467:   assert( x>='a' && x<='z' );
123468:   j = cType[x-'a'];
123469:   if( j<2 ) return 1-j;
123470:   return isConsonant(z + 1);
123471: }
123472: 
123473: /*
123474: ** Let any sequence of one or more vowels be represented by V and let
123475: ** C be sequence of one or more consonants.  Then every word can be
123476: ** represented as:
123477: **
123478: **           [C] (VC){m} [V]
123479: **
123480: ** In prose:  A word is an optional consonant followed by zero or
123481: ** vowel-consonant pairs followed by an optional vowel.  "m" is the
123482: ** number of vowel consonant pairs.  This routine computes the value
123483: ** of m for the first i bytes of a word.
123484: **
123485: ** Return true if the m-value for z is 1 or more.  In other words,
123486: ** return true if z contains at least one vowel that is followed
123487: ** by a consonant.
123488: **
123489: ** In this routine z[] is in reverse order.  So we are really looking
123490: ** for an instance of of a consonant followed by a vowel.
123491: */
123492: static int m_gt_0(const char *z){
123493:   while( isVowel(z) ){ z++; }
123494:   if( *z==0 ) return 0;
123495:   while( isConsonant(z) ){ z++; }
123496:   return *z!=0;
123497: }
123498: 
123499: /* Like mgt0 above except we are looking for a value of m which is
123500: ** exactly 1
123501: */
123502: static int m_eq_1(const char *z){
123503:   while( isVowel(z) ){ z++; }
123504:   if( *z==0 ) return 0;
123505:   while( isConsonant(z) ){ z++; }
123506:   if( *z==0 ) return 0;
123507:   while( isVowel(z) ){ z++; }
123508:   if( *z==0 ) return 1;
123509:   while( isConsonant(z) ){ z++; }
123510:   return *z==0;
123511: }
123512: 
123513: /* Like mgt0 above except we are looking for a value of m>1 instead
123514: ** or m>0
123515: */
123516: static int m_gt_1(const char *z){
123517:   while( isVowel(z) ){ z++; }
123518:   if( *z==0 ) return 0;
123519:   while( isConsonant(z) ){ z++; }
123520:   if( *z==0 ) return 0;
123521:   while( isVowel(z) ){ z++; }
123522:   if( *z==0 ) return 0;
123523:   while( isConsonant(z) ){ z++; }
123524:   return *z!=0;
123525: }
123526: 
123527: /*
123528: ** Return TRUE if there is a vowel anywhere within z[0..n-1]
123529: */
123530: static int hasVowel(const char *z){
123531:   while( isConsonant(z) ){ z++; }
123532:   return *z!=0;
123533: }
123534: 
123535: /*
123536: ** Return TRUE if the word ends in a double consonant.
123537: **
123538: ** The text is reversed here. So we are really looking at
123539: ** the first two characters of z[].
123540: */
123541: static int doubleConsonant(const char *z){
123542:   return isConsonant(z) && z[0]==z[1];
123543: }
123544: 
123545: /*
123546: ** Return TRUE if the word ends with three letters which
123547: ** are consonant-vowel-consonent and where the final consonant
123548: ** is not 'w', 'x', or 'y'.
123549: **
123550: ** The word is reversed here.  So we are really checking the
123551: ** first three letters and the first one cannot be in [wxy].
123552: */
123553: static int star_oh(const char *z){
123554:   return
123555:     isConsonant(z) &&
123556:     z[0]!='w' && z[0]!='x' && z[0]!='y' &&
123557:     isVowel(z+1) &&
123558:     isConsonant(z+2);
123559: }
123560: 
123561: /*
123562: ** If the word ends with zFrom and xCond() is true for the stem
123563: ** of the word that preceeds the zFrom ending, then change the 
123564: ** ending to zTo.
123565: **
123566: ** The input word *pz and zFrom are both in reverse order.  zTo
123567: ** is in normal order. 
123568: **
123569: ** Return TRUE if zFrom matches.  Return FALSE if zFrom does not
123570: ** match.  Not that TRUE is returned even if xCond() fails and
123571: ** no substitution occurs.
123572: */
123573: static int stem(
123574:   char **pz,             /* The word being stemmed (Reversed) */
123575:   const char *zFrom,     /* If the ending matches this... (Reversed) */
123576:   const char *zTo,       /* ... change the ending to this (not reversed) */
123577:   int (*xCond)(const char*)   /* Condition that must be true */
123578: ){
123579:   char *z = *pz;
123580:   while( *zFrom && *zFrom==*z ){ z++; zFrom++; }
123581:   if( *zFrom!=0 ) return 0;
123582:   if( xCond && !xCond(z) ) return 1;
123583:   while( *zTo ){
123584:     *(--z) = *(zTo++);
123585:   }
123586:   *pz = z;
123587:   return 1;
123588: }
123589: 
123590: /*
123591: ** This is the fallback stemmer used when the porter stemmer is
123592: ** inappropriate.  The input word is copied into the output with
123593: ** US-ASCII case folding.  If the input word is too long (more
123594: ** than 20 bytes if it contains no digits or more than 6 bytes if
123595: ** it contains digits) then word is truncated to 20 or 6 bytes
123596: ** by taking 10 or 3 bytes from the beginning and end.
123597: */
123598: static void copy_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
123599:   int i, mx, j;
123600:   int hasDigit = 0;
123601:   for(i=0; i<nIn; i++){
123602:     char c = zIn[i];
123603:     if( c>='A' && c<='Z' ){
123604:       zOut[i] = c - 'A' + 'a';
123605:     }else{
123606:       if( c>='0' && c<='9' ) hasDigit = 1;
123607:       zOut[i] = c;
123608:     }
123609:   }
123610:   mx = hasDigit ? 3 : 10;
123611:   if( nIn>mx*2 ){
123612:     for(j=mx, i=nIn-mx; i<nIn; i++, j++){
123613:       zOut[j] = zOut[i];
123614:     }
123615:     i = j;
123616:   }
123617:   zOut[i] = 0;
123618:   *pnOut = i;
123619: }
123620: 
123621: 
123622: /*
123623: ** Stem the input word zIn[0..nIn-1].  Store the output in zOut.
123624: ** zOut is at least big enough to hold nIn bytes.  Write the actual
123625: ** size of the output word (exclusive of the '\0' terminator) into *pnOut.
123626: **
123627: ** Any upper-case characters in the US-ASCII character set ([A-Z])
123628: ** are converted to lower case.  Upper-case UTF characters are
123629: ** unchanged.
123630: **
123631: ** Words that are longer than about 20 bytes are stemmed by retaining
123632: ** a few bytes from the beginning and the end of the word.  If the
123633: ** word contains digits, 3 bytes are taken from the beginning and
123634: ** 3 bytes from the end.  For long words without digits, 10 bytes
123635: ** are taken from each end.  US-ASCII case folding still applies.
123636: ** 
123637: ** If the input word contains not digits but does characters not 
123638: ** in [a-zA-Z] then no stemming is attempted and this routine just 
123639: ** copies the input into the input into the output with US-ASCII
123640: ** case folding.
123641: **
123642: ** Stemming never increases the length of the word.  So there is
123643: ** no chance of overflowing the zOut buffer.
123644: */
123645: static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
123646:   int i, j;
123647:   char zReverse[28];
123648:   char *z, *z2;
123649:   if( nIn<3 || nIn>=(int)sizeof(zReverse)-7 ){
123650:     /* The word is too big or too small for the porter stemmer.
123651:     ** Fallback to the copy stemmer */
123652:     copy_stemmer(zIn, nIn, zOut, pnOut);
123653:     return;
123654:   }
123655:   for(i=0, j=sizeof(zReverse)-6; i<nIn; i++, j--){
123656:     char c = zIn[i];
123657:     if( c>='A' && c<='Z' ){
123658:       zReverse[j] = c + 'a' - 'A';
123659:     }else if( c>='a' && c<='z' ){
123660:       zReverse[j] = c;
123661:     }else{
123662:       /* The use of a character not in [a-zA-Z] means that we fallback
123663:       ** to the copy stemmer */
123664:       copy_stemmer(zIn, nIn, zOut, pnOut);
123665:       return;
123666:     }
123667:   }
123668:   memset(&zReverse[sizeof(zReverse)-5], 0, 5);
123669:   z = &zReverse[j+1];
123670: 
123671: 
123672:   /* Step 1a */
123673:   if( z[0]=='s' ){
123674:     if(
123675:      !stem(&z, "sess", "ss", 0) &&
123676:      !stem(&z, "sei", "i", 0)  &&
123677:      !stem(&z, "ss", "ss", 0)
123678:     ){
123679:       z++;
123680:     }
123681:   }
123682: 
123683:   /* Step 1b */  
123684:   z2 = z;
123685:   if( stem(&z, "dee", "ee", m_gt_0) ){
123686:     /* Do nothing.  The work was all in the test */
123687:   }else if( 
123688:      (stem(&z, "gni", "", hasVowel) || stem(&z, "de", "", hasVowel))
123689:       && z!=z2
123690:   ){
123691:      if( stem(&z, "ta", "ate", 0) ||
123692:          stem(&z, "lb", "ble", 0) ||
123693:          stem(&z, "zi", "ize", 0) ){
123694:        /* Do nothing.  The work was all in the test */
123695:      }else if( doubleConsonant(z) && (*z!='l' && *z!='s' && *z!='z') ){
123696:        z++;
123697:      }else if( m_eq_1(z) && star_oh(z) ){
123698:        *(--z) = 'e';
123699:      }
123700:   }
123701: 
123702:   /* Step 1c */
123703:   if( z[0]=='y' && hasVowel(z+1) ){
123704:     z[0] = 'i';
123705:   }
123706: 
123707:   /* Step 2 */
123708:   switch( z[1] ){
123709:    case 'a':
123710:      stem(&z, "lanoita", "ate", m_gt_0) ||
123711:      stem(&z, "lanoit", "tion", m_gt_0);
123712:      break;
123713:    case 'c':
123714:      stem(&z, "icne", "ence", m_gt_0) ||
123715:      stem(&z, "icna", "ance", m_gt_0);
123716:      break;
123717:    case 'e':
123718:      stem(&z, "rezi", "ize", m_gt_0);
123719:      break;
123720:    case 'g':
123721:      stem(&z, "igol", "log", m_gt_0);
123722:      break;
123723:    case 'l':
123724:      stem(&z, "ilb", "ble", m_gt_0) ||
123725:      stem(&z, "illa", "al", m_gt_0) ||
123726:      stem(&z, "iltne", "ent", m_gt_0) ||
123727:      stem(&z, "ile", "e", m_gt_0) ||
123728:      stem(&z, "ilsuo", "ous", m_gt_0);
123729:      break;
123730:    case 'o':
123731:      stem(&z, "noitazi", "ize", m_gt_0) ||
123732:      stem(&z, "noita", "ate", m_gt_0) ||
123733:      stem(&z, "rota", "ate", m_gt_0);
123734:      break;
123735:    case 's':
123736:      stem(&z, "msila", "al", m_gt_0) ||
123737:      stem(&z, "ssenevi", "ive", m_gt_0) ||
123738:      stem(&z, "ssenluf", "ful", m_gt_0) ||
123739:      stem(&z, "ssensuo", "ous", m_gt_0);
123740:      break;
123741:    case 't':
123742:      stem(&z, "itila", "al", m_gt_0) ||
123743:      stem(&z, "itivi", "ive", m_gt_0) ||
123744:      stem(&z, "itilib", "ble", m_gt_0);
123745:      break;
123746:   }
123747: 
123748:   /* Step 3 */
123749:   switch( z[0] ){
123750:    case 'e':
123751:      stem(&z, "etaci", "ic", m_gt_0) ||
123752:      stem(&z, "evita", "", m_gt_0)   ||
123753:      stem(&z, "ezila", "al", m_gt_0);
123754:      break;
123755:    case 'i':
123756:      stem(&z, "itici", "ic", m_gt_0);
123757:      break;
123758:    case 'l':
123759:      stem(&z, "laci", "ic", m_gt_0) ||
123760:      stem(&z, "luf", "", m_gt_0);
123761:      break;
123762:    case 's':
123763:      stem(&z, "ssen", "", m_gt_0);
123764:      break;
123765:   }
123766: 
123767:   /* Step 4 */
123768:   switch( z[1] ){
123769:    case 'a':
123770:      if( z[0]=='l' && m_gt_1(z+2) ){
123771:        z += 2;
123772:      }
123773:      break;
123774:    case 'c':
123775:      if( z[0]=='e' && z[2]=='n' && (z[3]=='a' || z[3]=='e')  && m_gt_1(z+4)  ){
123776:        z += 4;
123777:      }
123778:      break;
123779:    case 'e':
123780:      if( z[0]=='r' && m_gt_1(z+2) ){
123781:        z += 2;
123782:      }
123783:      break;
123784:    case 'i':
123785:      if( z[0]=='c' && m_gt_1(z+2) ){
123786:        z += 2;
123787:      }
123788:      break;
123789:    case 'l':
123790:      if( z[0]=='e' && z[2]=='b' && (z[3]=='a' || z[3]=='i') && m_gt_1(z+4) ){
123791:        z += 4;
123792:      }
123793:      break;
123794:    case 'n':
123795:      if( z[0]=='t' ){
123796:        if( z[2]=='a' ){
123797:          if( m_gt_1(z+3) ){
123798:            z += 3;
123799:          }
123800:        }else if( z[2]=='e' ){
123801:          stem(&z, "tneme", "", m_gt_1) ||
123802:          stem(&z, "tnem", "", m_gt_1) ||
123803:          stem(&z, "tne", "", m_gt_1);
123804:        }
123805:      }
123806:      break;
123807:    case 'o':
123808:      if( z[0]=='u' ){
123809:        if( m_gt_1(z+2) ){
123810:          z += 2;
123811:        }
123812:      }else if( z[3]=='s' || z[3]=='t' ){
123813:        stem(&z, "noi", "", m_gt_1);
123814:      }
123815:      break;
123816:    case 's':
123817:      if( z[0]=='m' && z[2]=='i' && m_gt_1(z+3) ){
123818:        z += 3;
123819:      }
123820:      break;
123821:    case 't':
123822:      stem(&z, "eta", "", m_gt_1) ||
123823:      stem(&z, "iti", "", m_gt_1);
123824:      break;
123825:    case 'u':
123826:      if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){
123827:        z += 3;
123828:      }
123829:      break;
123830:    case 'v':
123831:    case 'z':
123832:      if( z[0]=='e' && z[2]=='i' && m_gt_1(z+3) ){
123833:        z += 3;
123834:      }
123835:      break;
123836:   }
123837: 
123838:   /* Step 5a */
123839:   if( z[0]=='e' ){
123840:     if( m_gt_1(z+1) ){
123841:       z++;
123842:     }else if( m_eq_1(z+1) && !star_oh(z+1) ){
123843:       z++;
123844:     }
123845:   }
123846: 
123847:   /* Step 5b */
123848:   if( m_gt_1(z) && z[0]=='l' && z[1]=='l' ){
123849:     z++;
123850:   }
123851: 
123852:   /* z[] is now the stemmed word in reverse order.  Flip it back
123853:   ** around into forward order and return.
123854:   */
123855:   *pnOut = i = (int)strlen(z);
123856:   zOut[i] = 0;
123857:   while( *z ){
123858:     zOut[--i] = *(z++);
123859:   }
123860: }
123861: 
123862: /*
123863: ** Characters that can be part of a token.  We assume any character
123864: ** whose value is greater than 0x80 (any UTF character) can be
123865: ** part of a token.  In other words, delimiters all must have
123866: ** values of 0x7f or lower.
123867: */
123868: static const char porterIdChar[] = {
123869: /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
123870:     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 3x */
123871:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 4x */
123872:     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,  /* 5x */
123873:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 6x */
123874:     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,  /* 7x */
123875: };
123876: #define isDelim(C) (((ch=C)&0x80)==0 && (ch<0x30 || !porterIdChar[ch-0x30]))
123877: 
123878: /*
123879: ** Extract the next token from a tokenization cursor.  The cursor must
123880: ** have been opened by a prior call to porterOpen().
123881: */
123882: static int porterNext(
123883:   sqlite3_tokenizer_cursor *pCursor,  /* Cursor returned by porterOpen */
123884:   const char **pzToken,               /* OUT: *pzToken is the token text */
123885:   int *pnBytes,                       /* OUT: Number of bytes in token */
123886:   int *piStartOffset,                 /* OUT: Starting offset of token */
123887:   int *piEndOffset,                   /* OUT: Ending offset of token */
123888:   int *piPosition                     /* OUT: Position integer of token */
123889: ){
123890:   porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor;
123891:   const char *z = c->zInput;
123892: 
123893:   while( c->iOffset<c->nInput ){
123894:     int iStartOffset, ch;
123895: 
123896:     /* Scan past delimiter characters */
123897:     while( c->iOffset<c->nInput && isDelim(z[c->iOffset]) ){
123898:       c->iOffset++;
123899:     }
123900: 
123901:     /* Count non-delimiter characters. */
123902:     iStartOffset = c->iOffset;
123903:     while( c->iOffset<c->nInput && !isDelim(z[c->iOffset]) ){
123904:       c->iOffset++;
123905:     }
123906: 
123907:     if( c->iOffset>iStartOffset ){
123908:       int n = c->iOffset-iStartOffset;
123909:       if( n>c->nAllocated ){
123910:         char *pNew;
123911:         c->nAllocated = n+20;
123912:         pNew = sqlite3_realloc(c->zToken, c->nAllocated);
123913:         if( !pNew ) return SQLITE_NOMEM;
123914:         c->zToken = pNew;
123915:       }
123916:       porter_stemmer(&z[iStartOffset], n, c->zToken, pnBytes);
123917:       *pzToken = c->zToken;
123918:       *piStartOffset = iStartOffset;
123919:       *piEndOffset = c->iOffset;
123920:       *piPosition = c->iToken++;
123921:       return SQLITE_OK;
123922:     }
123923:   }
123924:   return SQLITE_DONE;
123925: }
123926: 
123927: /*
123928: ** The set of routines that implement the porter-stemmer tokenizer
123929: */
123930: static const sqlite3_tokenizer_module porterTokenizerModule = {
123931:   0,
123932:   porterCreate,
123933:   porterDestroy,
123934:   porterOpen,
123935:   porterClose,
123936:   porterNext,
123937: };
123938: 
123939: /*
123940: ** Allocate a new porter tokenizer.  Return a pointer to the new
123941: ** tokenizer in *ppModule
123942: */
123943: SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(
123944:   sqlite3_tokenizer_module const**ppModule
123945: ){
123946:   *ppModule = &porterTokenizerModule;
123947: }
123948: 
123949: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
123950: 
123951: /************** End of fts3_porter.c *****************************************/
123952: /************** Begin file fts3_tokenizer.c **********************************/
123953: /*
123954: ** 2007 June 22
123955: **
123956: ** The author disclaims copyright to this source code.  In place of
123957: ** a legal notice, here is a blessing:
123958: **
123959: **    May you do good and not evil.
123960: **    May you find forgiveness for yourself and forgive others.
123961: **    May you share freely, never taking more than you give.
123962: **
123963: ******************************************************************************
123964: **
123965: ** This is part of an SQLite module implementing full-text search.
123966: ** This particular file implements the generic tokenizer interface.
123967: */
123968: 
123969: /*
123970: ** The code in this file is only compiled if:
123971: **
123972: **     * The FTS3 module is being built as an extension
123973: **       (in which case SQLITE_CORE is not defined), or
123974: **
123975: **     * The FTS3 module is being built into the core of
123976: **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
123977: */
123978: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
123979: 
123980: /* #include <assert.h> */
123981: /* #include <string.h> */
123982: 
123983: /*
123984: ** Implementation of the SQL scalar function for accessing the underlying 
123985: ** hash table. This function may be called as follows:
123986: **
123987: **   SELECT <function-name>(<key-name>);
123988: **   SELECT <function-name>(<key-name>, <pointer>);
123989: **
123990: ** where <function-name> is the name passed as the second argument
123991: ** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer').
123992: **
123993: ** If the <pointer> argument is specified, it must be a blob value
123994: ** containing a pointer to be stored as the hash data corresponding
123995: ** to the string <key-name>. If <pointer> is not specified, then
123996: ** the string <key-name> must already exist in the has table. Otherwise,
123997: ** an error is returned.
123998: **
123999: ** Whether or not the <pointer> argument is specified, the value returned
124000: ** is a blob containing the pointer stored as the hash data corresponding
124001: ** to string <key-name> (after the hash-table is updated, if applicable).
124002: */
124003: static void scalarFunc(
124004:   sqlite3_context *context,
124005:   int argc,
124006:   sqlite3_value **argv
124007: ){
124008:   Fts3Hash *pHash;
124009:   void *pPtr = 0;
124010:   const unsigned char *zName;
124011:   int nName;
124012: 
124013:   assert( argc==1 || argc==2 );
124014: 
124015:   pHash = (Fts3Hash *)sqlite3_user_data(context);
124016: 
124017:   zName = sqlite3_value_text(argv[0]);
124018:   nName = sqlite3_value_bytes(argv[0])+1;
124019: 
124020:   if( argc==2 ){
124021:     void *pOld;
124022:     int n = sqlite3_value_bytes(argv[1]);
124023:     if( n!=sizeof(pPtr) ){
124024:       sqlite3_result_error(context, "argument type mismatch", -1);
124025:       return;
124026:     }
124027:     pPtr = *(void **)sqlite3_value_blob(argv[1]);
124028:     pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);
124029:     if( pOld==pPtr ){
124030:       sqlite3_result_error(context, "out of memory", -1);
124031:       return;
124032:     }
124033:   }else{
124034:     pPtr = sqlite3Fts3HashFind(pHash, zName, nName);
124035:     if( !pPtr ){
124036:       char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
124037:       sqlite3_result_error(context, zErr, -1);
124038:       sqlite3_free(zErr);
124039:       return;
124040:     }
124041:   }
124042: 
124043:   sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);
124044: }
124045: 
124046: SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char c){
124047:   static const char isFtsIdChar[] = {
124048:       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 0x */
124049:       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 1x */
124050:       0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 2x */
124051:       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 3x */
124052:       0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 4x */
124053:       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,  /* 5x */
124054:       0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 6x */
124055:       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,  /* 7x */
124056:   };
124057:   return (c&0x80 || isFtsIdChar[(int)(c)]);
124058: }
124059: 
124060: SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *zStr, int *pn){
124061:   const char *z1;
124062:   const char *z2 = 0;
124063: 
124064:   /* Find the start of the next token. */
124065:   z1 = zStr;
124066:   while( z2==0 ){
124067:     char c = *z1;
124068:     switch( c ){
124069:       case '\0': return 0;        /* No more tokens here */
124070:       case '\'':
124071:       case '"':
124072:       case '`': {
124073:         z2 = z1;
124074:         while( *++z2 && (*z2!=c || *++z2==c) );
124075:         break;
124076:       }
124077:       case '[':
124078:         z2 = &z1[1];
124079:         while( *z2 && z2[0]!=']' ) z2++;
124080:         if( *z2 ) z2++;
124081:         break;
124082: 
124083:       default:
124084:         if( sqlite3Fts3IsIdChar(*z1) ){
124085:           z2 = &z1[1];
124086:           while( sqlite3Fts3IsIdChar(*z2) ) z2++;
124087:         }else{
124088:           z1++;
124089:         }
124090:     }
124091:   }
124092: 
124093:   *pn = (int)(z2-z1);
124094:   return z1;
124095: }
124096: 
124097: SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(
124098:   Fts3Hash *pHash,                /* Tokenizer hash table */
124099:   const char *zArg,               /* Tokenizer name */
124100:   sqlite3_tokenizer **ppTok,      /* OUT: Tokenizer (if applicable) */
124101:   char **pzErr                    /* OUT: Set to malloced error message */
124102: ){
124103:   int rc;
124104:   char *z = (char *)zArg;
124105:   int n = 0;
124106:   char *zCopy;
124107:   char *zEnd;                     /* Pointer to nul-term of zCopy */
124108:   sqlite3_tokenizer_module *m;
124109: 
124110:   zCopy = sqlite3_mprintf("%s", zArg);
124111:   if( !zCopy ) return SQLITE_NOMEM;
124112:   zEnd = &zCopy[strlen(zCopy)];
124113: 
124114:   z = (char *)sqlite3Fts3NextToken(zCopy, &n);
124115:   z[n] = '\0';
124116:   sqlite3Fts3Dequote(z);
124117: 
124118:   m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash,z,(int)strlen(z)+1);
124119:   if( !m ){
124120:     *pzErr = sqlite3_mprintf("unknown tokenizer: %s", z);
124121:     rc = SQLITE_ERROR;
124122:   }else{
124123:     char const **aArg = 0;
124124:     int iArg = 0;
124125:     z = &z[n+1];
124126:     while( z<zEnd && (NULL!=(z = (char *)sqlite3Fts3NextToken(z, &n))) ){
124127:       int nNew = sizeof(char *)*(iArg+1);
124128:       char const **aNew = (const char **)sqlite3_realloc((void *)aArg, nNew);
124129:       if( !aNew ){
124130:         sqlite3_free(zCopy);
124131:         sqlite3_free((void *)aArg);
124132:         return SQLITE_NOMEM;
124133:       }
124134:       aArg = aNew;
124135:       aArg[iArg++] = z;
124136:       z[n] = '\0';
124137:       sqlite3Fts3Dequote(z);
124138:       z = &z[n+1];
124139:     }
124140:     rc = m->xCreate(iArg, aArg, ppTok);
124141:     assert( rc!=SQLITE_OK || *ppTok );
124142:     if( rc!=SQLITE_OK ){
124143:       *pzErr = sqlite3_mprintf("unknown tokenizer");
124144:     }else{
124145:       (*ppTok)->pModule = m; 
124146:     }
124147:     sqlite3_free((void *)aArg);
124148:   }
124149: 
124150:   sqlite3_free(zCopy);
124151:   return rc;
124152: }
124153: 
124154: 
124155: #ifdef SQLITE_TEST
124156: 
124157: /* #include <tcl.h> */
124158: /* #include <string.h> */
124159: 
124160: /*
124161: ** Implementation of a special SQL scalar function for testing tokenizers 
124162: ** designed to be used in concert with the Tcl testing framework. This
124163: ** function must be called with two arguments:
124164: **
124165: **   SELECT <function-name>(<key-name>, <input-string>);
124166: **   SELECT <function-name>(<key-name>, <pointer>);
124167: **
124168: ** where <function-name> is the name passed as the second argument
124169: ** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer')
124170: ** concatenated with the string '_test' (e.g. 'fts3_tokenizer_test').
124171: **
124172: ** The return value is a string that may be interpreted as a Tcl
124173: ** list. For each token in the <input-string>, three elements are
124174: ** added to the returned list. The first is the token position, the 
124175: ** second is the token text (folded, stemmed, etc.) and the third is the
124176: ** substring of <input-string> associated with the token. For example, 
124177: ** using the built-in "simple" tokenizer:
124178: **
124179: **   SELECT fts_tokenizer_test('simple', 'I don't see how');
124180: **
124181: ** will return the string:
124182: **
124183: **   "{0 i I 1 dont don't 2 see see 3 how how}"
124184: **   
124185: */
124186: static void testFunc(
124187:   sqlite3_context *context,
124188:   int argc,
124189:   sqlite3_value **argv
124190: ){
124191:   Fts3Hash *pHash;
124192:   sqlite3_tokenizer_module *p;
124193:   sqlite3_tokenizer *pTokenizer = 0;
124194:   sqlite3_tokenizer_cursor *pCsr = 0;
124195: 
124196:   const char *zErr = 0;
124197: 
124198:   const char *zName;
124199:   int nName;
124200:   const char *zInput;
124201:   int nInput;
124202: 
124203:   const char *zArg = 0;
124204: 
124205:   const char *zToken;
124206:   int nToken;
124207:   int iStart;
124208:   int iEnd;
124209:   int iPos;
124210: 
124211:   Tcl_Obj *pRet;
124212: 
124213:   assert( argc==2 || argc==3 );
124214: 
124215:   nName = sqlite3_value_bytes(argv[0]);
124216:   zName = (const char *)sqlite3_value_text(argv[0]);
124217:   nInput = sqlite3_value_bytes(argv[argc-1]);
124218:   zInput = (const char *)sqlite3_value_text(argv[argc-1]);
124219: 
124220:   if( argc==3 ){
124221:     zArg = (const char *)sqlite3_value_text(argv[1]);
124222:   }
124223: 
124224:   pHash = (Fts3Hash *)sqlite3_user_data(context);
124225:   p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1);
124226: 
124227:   if( !p ){
124228:     char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
124229:     sqlite3_result_error(context, zErr, -1);
124230:     sqlite3_free(zErr);
124231:     return;
124232:   }
124233: 
124234:   pRet = Tcl_NewObj();
124235:   Tcl_IncrRefCount(pRet);
124236: 
124237:   if( SQLITE_OK!=p->xCreate(zArg ? 1 : 0, &zArg, &pTokenizer) ){
124238:     zErr = "error in xCreate()";
124239:     goto finish;
124240:   }
124241:   pTokenizer->pModule = p;
124242:   if( SQLITE_OK!=p->xOpen(pTokenizer, zInput, nInput, &pCsr) ){
124243:     zErr = "error in xOpen()";
124244:     goto finish;
124245:   }
124246:   pCsr->pTokenizer = pTokenizer;
124247: 
124248:   while( SQLITE_OK==p->xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos) ){
124249:     Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(iPos));
124250:     Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken));
124251:     zToken = &zInput[iStart];
124252:     nToken = iEnd-iStart;
124253:     Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken));
124254:   }
124255: 
124256:   if( SQLITE_OK!=p->xClose(pCsr) ){
124257:     zErr = "error in xClose()";
124258:     goto finish;
124259:   }
124260:   if( SQLITE_OK!=p->xDestroy(pTokenizer) ){
124261:     zErr = "error in xDestroy()";
124262:     goto finish;
124263:   }
124264: 
124265: finish:
124266:   if( zErr ){
124267:     sqlite3_result_error(context, zErr, -1);
124268:   }else{
124269:     sqlite3_result_text(context, Tcl_GetString(pRet), -1, SQLITE_TRANSIENT);
124270:   }
124271:   Tcl_DecrRefCount(pRet);
124272: }
124273: 
124274: static
124275: int registerTokenizer(
124276:   sqlite3 *db, 
124277:   char *zName, 
124278:   const sqlite3_tokenizer_module *p
124279: ){
124280:   int rc;
124281:   sqlite3_stmt *pStmt;
124282:   const char zSql[] = "SELECT fts3_tokenizer(?, ?)";
124283: 
124284:   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
124285:   if( rc!=SQLITE_OK ){
124286:     return rc;
124287:   }
124288: 
124289:   sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
124290:   sqlite3_bind_blob(pStmt, 2, &p, sizeof(p), SQLITE_STATIC);
124291:   sqlite3_step(pStmt);
124292: 
124293:   return sqlite3_finalize(pStmt);
124294: }
124295: 
124296: static
124297: int queryTokenizer(
124298:   sqlite3 *db, 
124299:   char *zName,  
124300:   const sqlite3_tokenizer_module **pp
124301: ){
124302:   int rc;
124303:   sqlite3_stmt *pStmt;
124304:   const char zSql[] = "SELECT fts3_tokenizer(?)";
124305: 
124306:   *pp = 0;
124307:   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
124308:   if( rc!=SQLITE_OK ){
124309:     return rc;
124310:   }
124311: 
124312:   sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
124313:   if( SQLITE_ROW==sqlite3_step(pStmt) ){
124314:     if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){
124315:       memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp));
124316:     }
124317:   }
124318: 
124319:   return sqlite3_finalize(pStmt);
124320: }
124321: 
124322: SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule);
124323: 
124324: /*
124325: ** Implementation of the scalar function fts3_tokenizer_internal_test().
124326: ** This function is used for testing only, it is not included in the
124327: ** build unless SQLITE_TEST is defined.
124328: **
124329: ** The purpose of this is to test that the fts3_tokenizer() function
124330: ** can be used as designed by the C-code in the queryTokenizer and
124331: ** registerTokenizer() functions above. These two functions are repeated
124332: ** in the README.tokenizer file as an example, so it is important to
124333: ** test them.
124334: **
124335: ** To run the tests, evaluate the fts3_tokenizer_internal_test() scalar
124336: ** function with no arguments. An assert() will fail if a problem is
124337: ** detected. i.e.:
124338: **
124339: **     SELECT fts3_tokenizer_internal_test();
124340: **
124341: */
124342: static void intTestFunc(
124343:   sqlite3_context *context,
124344:   int argc,
124345:   sqlite3_value **argv
124346: ){
124347:   int rc;
124348:   const sqlite3_tokenizer_module *p1;
124349:   const sqlite3_tokenizer_module *p2;
124350:   sqlite3 *db = (sqlite3 *)sqlite3_user_data(context);
124351: 
124352:   UNUSED_PARAMETER(argc);
124353:   UNUSED_PARAMETER(argv);
124354: 
124355:   /* Test the query function */
124356:   sqlite3Fts3SimpleTokenizerModule(&p1);
124357:   rc = queryTokenizer(db, "simple", &p2);
124358:   assert( rc==SQLITE_OK );
124359:   assert( p1==p2 );
124360:   rc = queryTokenizer(db, "nosuchtokenizer", &p2);
124361:   assert( rc==SQLITE_ERROR );
124362:   assert( p2==0 );
124363:   assert( 0==strcmp(sqlite3_errmsg(db), "unknown tokenizer: nosuchtokenizer") );
124364: 
124365:   /* Test the storage function */
124366:   rc = registerTokenizer(db, "nosuchtokenizer", p1);
124367:   assert( rc==SQLITE_OK );
124368:   rc = queryTokenizer(db, "nosuchtokenizer", &p2);
124369:   assert( rc==SQLITE_OK );
124370:   assert( p2==p1 );
124371: 
124372:   sqlite3_result_text(context, "ok", -1, SQLITE_STATIC);
124373: }
124374: 
124375: #endif
124376: 
124377: /*
124378: ** Set up SQL objects in database db used to access the contents of
124379: ** the hash table pointed to by argument pHash. The hash table must
124380: ** been initialised to use string keys, and to take a private copy 
124381: ** of the key when a value is inserted. i.e. by a call similar to:
124382: **
124383: **    sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
124384: **
124385: ** This function adds a scalar function (see header comment above
124386: ** scalarFunc() in this file for details) and, if ENABLE_TABLE is
124387: ** defined at compilation time, a temporary virtual table (see header 
124388: ** comment above struct HashTableVtab) to the database schema. Both 
124389: ** provide read/write access to the contents of *pHash.
124390: **
124391: ** The third argument to this function, zName, is used as the name
124392: ** of both the scalar and, if created, the virtual table.
124393: */
124394: SQLITE_PRIVATE int sqlite3Fts3InitHashTable(
124395:   sqlite3 *db, 
124396:   Fts3Hash *pHash, 
124397:   const char *zName
124398: ){
124399:   int rc = SQLITE_OK;
124400:   void *p = (void *)pHash;
124401:   const int any = SQLITE_ANY;
124402: 
124403: #ifdef SQLITE_TEST
124404:   char *zTest = 0;
124405:   char *zTest2 = 0;
124406:   void *pdb = (void *)db;
124407:   zTest = sqlite3_mprintf("%s_test", zName);
124408:   zTest2 = sqlite3_mprintf("%s_internal_test", zName);
124409:   if( !zTest || !zTest2 ){
124410:     rc = SQLITE_NOMEM;
124411:   }
124412: #endif
124413: 
124414:   if( SQLITE_OK==rc ){
124415:     rc = sqlite3_create_function(db, zName, 1, any, p, scalarFunc, 0, 0);
124416:   }
124417:   if( SQLITE_OK==rc ){
124418:     rc = sqlite3_create_function(db, zName, 2, any, p, scalarFunc, 0, 0);
124419:   }
124420: #ifdef SQLITE_TEST
124421:   if( SQLITE_OK==rc ){
124422:     rc = sqlite3_create_function(db, zTest, 2, any, p, testFunc, 0, 0);
124423:   }
124424:   if( SQLITE_OK==rc ){
124425:     rc = sqlite3_create_function(db, zTest, 3, any, p, testFunc, 0, 0);
124426:   }
124427:   if( SQLITE_OK==rc ){
124428:     rc = sqlite3_create_function(db, zTest2, 0, any, pdb, intTestFunc, 0, 0);
124429:   }
124430: #endif
124431: 
124432: #ifdef SQLITE_TEST
124433:   sqlite3_free(zTest);
124434:   sqlite3_free(zTest2);
124435: #endif
124436: 
124437:   return rc;
124438: }
124439: 
124440: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
124441: 
124442: /************** End of fts3_tokenizer.c **************************************/
124443: /************** Begin file fts3_tokenizer1.c *********************************/
124444: /*
124445: ** 2006 Oct 10
124446: **
124447: ** The author disclaims copyright to this source code.  In place of
124448: ** a legal notice, here is a blessing:
124449: **
124450: **    May you do good and not evil.
124451: **    May you find forgiveness for yourself and forgive others.
124452: **    May you share freely, never taking more than you give.
124453: **
124454: ******************************************************************************
124455: **
124456: ** Implementation of the "simple" full-text-search tokenizer.
124457: */
124458: 
124459: /*
124460: ** The code in this file is only compiled if:
124461: **
124462: **     * The FTS3 module is being built as an extension
124463: **       (in which case SQLITE_CORE is not defined), or
124464: **
124465: **     * The FTS3 module is being built into the core of
124466: **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
124467: */
124468: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
124469: 
124470: /* #include <assert.h> */
124471: /* #include <stdlib.h> */
124472: /* #include <stdio.h> */
124473: /* #include <string.h> */
124474: 
124475: 
124476: typedef struct simple_tokenizer {
124477:   sqlite3_tokenizer base;
124478:   char delim[128];             /* flag ASCII delimiters */
124479: } simple_tokenizer;
124480: 
124481: typedef struct simple_tokenizer_cursor {
124482:   sqlite3_tokenizer_cursor base;
124483:   const char *pInput;          /* input we are tokenizing */
124484:   int nBytes;                  /* size of the input */
124485:   int iOffset;                 /* current position in pInput */
124486:   int iToken;                  /* index of next token to be returned */
124487:   char *pToken;                /* storage for current token */
124488:   int nTokenAllocated;         /* space allocated to zToken buffer */
124489: } simple_tokenizer_cursor;
124490: 
124491: 
124492: static int simpleDelim(simple_tokenizer *t, unsigned char c){
124493:   return c<0x80 && t->delim[c];
124494: }
124495: static int fts3_isalnum(int x){
124496:   return (x>='0' && x<='9') || (x>='A' && x<='Z') || (x>='a' && x<='z');
124497: }
124498: 
124499: /*
124500: ** Create a new tokenizer instance.
124501: */
124502: static int simpleCreate(
124503:   int argc, const char * const *argv,
124504:   sqlite3_tokenizer **ppTokenizer
124505: ){
124506:   simple_tokenizer *t;
124507: 
124508:   t = (simple_tokenizer *) sqlite3_malloc(sizeof(*t));
124509:   if( t==NULL ) return SQLITE_NOMEM;
124510:   memset(t, 0, sizeof(*t));
124511: 
124512:   /* TODO(shess) Delimiters need to remain the same from run to run,
124513:   ** else we need to reindex.  One solution would be a meta-table to
124514:   ** track such information in the database, then we'd only want this
124515:   ** information on the initial create.
124516:   */
124517:   if( argc>1 ){
124518:     int i, n = (int)strlen(argv[1]);
124519:     for(i=0; i<n; i++){
124520:       unsigned char ch = argv[1][i];
124521:       /* We explicitly don't support UTF-8 delimiters for now. */
124522:       if( ch>=0x80 ){
124523:         sqlite3_free(t);
124524:         return SQLITE_ERROR;
124525:       }
124526:       t->delim[ch] = 1;
124527:     }
124528:   } else {
124529:     /* Mark non-alphanumeric ASCII characters as delimiters */
124530:     int i;
124531:     for(i=1; i<0x80; i++){
124532:       t->delim[i] = !fts3_isalnum(i) ? -1 : 0;
124533:     }
124534:   }
124535: 
124536:   *ppTokenizer = &t->base;
124537:   return SQLITE_OK;
124538: }
124539: 
124540: /*
124541: ** Destroy a tokenizer
124542: */
124543: static int simpleDestroy(sqlite3_tokenizer *pTokenizer){
124544:   sqlite3_free(pTokenizer);
124545:   return SQLITE_OK;
124546: }
124547: 
124548: /*
124549: ** Prepare to begin tokenizing a particular string.  The input
124550: ** string to be tokenized is pInput[0..nBytes-1].  A cursor
124551: ** used to incrementally tokenize this string is returned in 
124552: ** *ppCursor.
124553: */
124554: static int simpleOpen(
124555:   sqlite3_tokenizer *pTokenizer,         /* The tokenizer */
124556:   const char *pInput, int nBytes,        /* String to be tokenized */
124557:   sqlite3_tokenizer_cursor **ppCursor    /* OUT: Tokenization cursor */
124558: ){
124559:   simple_tokenizer_cursor *c;
124560: 
124561:   UNUSED_PARAMETER(pTokenizer);
124562: 
124563:   c = (simple_tokenizer_cursor *) sqlite3_malloc(sizeof(*c));
124564:   if( c==NULL ) return SQLITE_NOMEM;
124565: 
124566:   c->pInput = pInput;
124567:   if( pInput==0 ){
124568:     c->nBytes = 0;
124569:   }else if( nBytes<0 ){
124570:     c->nBytes = (int)strlen(pInput);
124571:   }else{
124572:     c->nBytes = nBytes;
124573:   }
124574:   c->iOffset = 0;                 /* start tokenizing at the beginning */
124575:   c->iToken = 0;
124576:   c->pToken = NULL;               /* no space allocated, yet. */
124577:   c->nTokenAllocated = 0;
124578: 
124579:   *ppCursor = &c->base;
124580:   return SQLITE_OK;
124581: }
124582: 
124583: /*
124584: ** Close a tokenization cursor previously opened by a call to
124585: ** simpleOpen() above.
124586: */
124587: static int simpleClose(sqlite3_tokenizer_cursor *pCursor){
124588:   simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor;
124589:   sqlite3_free(c->pToken);
124590:   sqlite3_free(c);
124591:   return SQLITE_OK;
124592: }
124593: 
124594: /*
124595: ** Extract the next token from a tokenization cursor.  The cursor must
124596: ** have been opened by a prior call to simpleOpen().
124597: */
124598: static int simpleNext(
124599:   sqlite3_tokenizer_cursor *pCursor,  /* Cursor returned by simpleOpen */
124600:   const char **ppToken,               /* OUT: *ppToken is the token text */
124601:   int *pnBytes,                       /* OUT: Number of bytes in token */
124602:   int *piStartOffset,                 /* OUT: Starting offset of token */
124603:   int *piEndOffset,                   /* OUT: Ending offset of token */
124604:   int *piPosition                     /* OUT: Position integer of token */
124605: ){
124606:   simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor;
124607:   simple_tokenizer *t = (simple_tokenizer *) pCursor->pTokenizer;
124608:   unsigned char *p = (unsigned char *)c->pInput;
124609: 
124610:   while( c->iOffset<c->nBytes ){
124611:     int iStartOffset;
124612: 
124613:     /* Scan past delimiter characters */
124614:     while( c->iOffset<c->nBytes && simpleDelim(t, p[c->iOffset]) ){
124615:       c->iOffset++;
124616:     }
124617: 
124618:     /* Count non-delimiter characters. */
124619:     iStartOffset = c->iOffset;
124620:     while( c->iOffset<c->nBytes && !simpleDelim(t, p[c->iOffset]) ){
124621:       c->iOffset++;
124622:     }
124623: 
124624:     if( c->iOffset>iStartOffset ){
124625:       int i, n = c->iOffset-iStartOffset;
124626:       if( n>c->nTokenAllocated ){
124627:         char *pNew;
124628:         c->nTokenAllocated = n+20;
124629:         pNew = sqlite3_realloc(c->pToken, c->nTokenAllocated);
124630:         if( !pNew ) return SQLITE_NOMEM;
124631:         c->pToken = pNew;
124632:       }
124633:       for(i=0; i<n; i++){
124634:         /* TODO(shess) This needs expansion to handle UTF-8
124635:         ** case-insensitivity.
124636:         */
124637:         unsigned char ch = p[iStartOffset+i];
124638:         c->pToken[i] = (char)((ch>='A' && ch<='Z') ? ch-'A'+'a' : ch);
124639:       }
124640:       *ppToken = c->pToken;
124641:       *pnBytes = n;
124642:       *piStartOffset = iStartOffset;
124643:       *piEndOffset = c->iOffset;
124644:       *piPosition = c->iToken++;
124645: 
124646:       return SQLITE_OK;
124647:     }
124648:   }
124649:   return SQLITE_DONE;
124650: }
124651: 
124652: /*
124653: ** The set of routines that implement the simple tokenizer
124654: */
124655: static const sqlite3_tokenizer_module simpleTokenizerModule = {
124656:   0,
124657:   simpleCreate,
124658:   simpleDestroy,
124659:   simpleOpen,
124660:   simpleClose,
124661:   simpleNext,
124662: };
124663: 
124664: /*
124665: ** Allocate a new simple tokenizer.  Return a pointer to the new
124666: ** tokenizer in *ppModule
124667: */
124668: SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(
124669:   sqlite3_tokenizer_module const**ppModule
124670: ){
124671:   *ppModule = &simpleTokenizerModule;
124672: }
124673: 
124674: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
124675: 
124676: /************** End of fts3_tokenizer1.c *************************************/
124677: /************** Begin file fts3_write.c **************************************/
124678: /*
124679: ** 2009 Oct 23
124680: **
124681: ** The author disclaims copyright to this source code.  In place of
124682: ** a legal notice, here is a blessing:
124683: **
124684: **    May you do good and not evil.
124685: **    May you find forgiveness for yourself and forgive others.
124686: **    May you share freely, never taking more than you give.
124687: **
124688: ******************************************************************************
124689: **
124690: ** This file is part of the SQLite FTS3 extension module. Specifically,
124691: ** this file contains code to insert, update and delete rows from FTS3
124692: ** tables. It also contains code to merge FTS3 b-tree segments. Some
124693: ** of the sub-routines used to merge segments are also used by the query 
124694: ** code in fts3.c.
124695: */
124696: 
124697: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
124698: 
124699: /* #include <string.h> */
124700: /* #include <assert.h> */
124701: /* #include <stdlib.h> */
124702: 
124703: /*
124704: ** When full-text index nodes are loaded from disk, the buffer that they
124705: ** are loaded into has the following number of bytes of padding at the end 
124706: ** of it. i.e. if a full-text index node is 900 bytes in size, then a buffer
124707: ** of 920 bytes is allocated for it.
124708: **
124709: ** This means that if we have a pointer into a buffer containing node data,
124710: ** it is always safe to read up to two varints from it without risking an
124711: ** overread, even if the node data is corrupted.
124712: */
124713: #define FTS3_NODE_PADDING (FTS3_VARINT_MAX*2)
124714: 
124715: /*
124716: ** Under certain circumstances, b-tree nodes (doclists) can be loaded into
124717: ** memory incrementally instead of all at once. This can be a big performance
124718: ** win (reduced IO and CPU) if SQLite stops calling the virtual table xNext()
124719: ** method before retrieving all query results (as may happen, for example,
124720: ** if a query has a LIMIT clause).
124721: **
124722: ** Incremental loading is used for b-tree nodes FTS3_NODE_CHUNK_THRESHOLD 
124723: ** bytes and larger. Nodes are loaded in chunks of FTS3_NODE_CHUNKSIZE bytes.
124724: ** The code is written so that the hard lower-limit for each of these values 
124725: ** is 1. Clearly such small values would be inefficient, but can be useful 
124726: ** for testing purposes.
124727: **
124728: ** If this module is built with SQLITE_TEST defined, these constants may
124729: ** be overridden at runtime for testing purposes. File fts3_test.c contains
124730: ** a Tcl interface to read and write the values.
124731: */
124732: #ifdef SQLITE_TEST
124733: int test_fts3_node_chunksize = (4*1024);
124734: int test_fts3_node_chunk_threshold = (4*1024)*4;
124735: # define FTS3_NODE_CHUNKSIZE       test_fts3_node_chunksize
124736: # define FTS3_NODE_CHUNK_THRESHOLD test_fts3_node_chunk_threshold
124737: #else
124738: # define FTS3_NODE_CHUNKSIZE (4*1024) 
124739: # define FTS3_NODE_CHUNK_THRESHOLD (FTS3_NODE_CHUNKSIZE*4)
124740: #endif
124741: 
124742: typedef struct PendingList PendingList;
124743: typedef struct SegmentNode SegmentNode;
124744: typedef struct SegmentWriter SegmentWriter;
124745: 
124746: /*
124747: ** An instance of the following data structure is used to build doclists
124748: ** incrementally. See function fts3PendingListAppend() for details.
124749: */
124750: struct PendingList {
124751:   int nData;
124752:   char *aData;
124753:   int nSpace;
124754:   sqlite3_int64 iLastDocid;
124755:   sqlite3_int64 iLastCol;
124756:   sqlite3_int64 iLastPos;
124757: };
124758: 
124759: 
124760: /*
124761: ** Each cursor has a (possibly empty) linked list of the following objects.
124762: */
124763: struct Fts3DeferredToken {
124764:   Fts3PhraseToken *pToken;        /* Pointer to corresponding expr token */
124765:   int iCol;                       /* Column token must occur in */
124766:   Fts3DeferredToken *pNext;       /* Next in list of deferred tokens */
124767:   PendingList *pList;             /* Doclist is assembled here */
124768: };
124769: 
124770: /*
124771: ** An instance of this structure is used to iterate through the terms on
124772: ** a contiguous set of segment b-tree leaf nodes. Although the details of
124773: ** this structure are only manipulated by code in this file, opaque handles
124774: ** of type Fts3SegReader* are also used by code in fts3.c to iterate through
124775: ** terms when querying the full-text index. See functions:
124776: **
124777: **   sqlite3Fts3SegReaderNew()
124778: **   sqlite3Fts3SegReaderFree()
124779: **   sqlite3Fts3SegReaderIterate()
124780: **
124781: ** Methods used to manipulate Fts3SegReader structures:
124782: **
124783: **   fts3SegReaderNext()
124784: **   fts3SegReaderFirstDocid()
124785: **   fts3SegReaderNextDocid()
124786: */
124787: struct Fts3SegReader {
124788:   int iIdx;                       /* Index within level, or 0x7FFFFFFF for PT */
124789: 
124790:   sqlite3_int64 iStartBlock;      /* Rowid of first leaf block to traverse */
124791:   sqlite3_int64 iLeafEndBlock;    /* Rowid of final leaf block to traverse */
124792:   sqlite3_int64 iEndBlock;        /* Rowid of final block in segment (or 0) */
124793:   sqlite3_int64 iCurrentBlock;    /* Current leaf block (or 0) */
124794: 
124795:   char *aNode;                    /* Pointer to node data (or NULL) */
124796:   int nNode;                      /* Size of buffer at aNode (or 0) */
124797:   int nPopulate;                  /* If >0, bytes of buffer aNode[] loaded */
124798:   sqlite3_blob *pBlob;            /* If not NULL, blob handle to read node */
124799: 
124800:   Fts3HashElem **ppNextElem;
124801: 
124802:   /* Variables set by fts3SegReaderNext(). These may be read directly
124803:   ** by the caller. They are valid from the time SegmentReaderNew() returns
124804:   ** until SegmentReaderNext() returns something other than SQLITE_OK
124805:   ** (i.e. SQLITE_DONE).
124806:   */
124807:   int nTerm;                      /* Number of bytes in current term */
124808:   char *zTerm;                    /* Pointer to current term */
124809:   int nTermAlloc;                 /* Allocated size of zTerm buffer */
124810:   char *aDoclist;                 /* Pointer to doclist of current entry */
124811:   int nDoclist;                   /* Size of doclist in current entry */
124812: 
124813:   /* The following variables are used by fts3SegReaderNextDocid() to iterate 
124814:   ** through the current doclist (aDoclist/nDoclist).
124815:   */
124816:   char *pOffsetList;
124817:   int nOffsetList;                /* For descending pending seg-readers only */
124818:   sqlite3_int64 iDocid;
124819: };
124820: 
124821: #define fts3SegReaderIsPending(p) ((p)->ppNextElem!=0)
124822: #define fts3SegReaderIsRootOnly(p) ((p)->aNode==(char *)&(p)[1])
124823: 
124824: /*
124825: ** An instance of this structure is used to create a segment b-tree in the
124826: ** database. The internal details of this type are only accessed by the
124827: ** following functions:
124828: **
124829: **   fts3SegWriterAdd()
124830: **   fts3SegWriterFlush()
124831: **   fts3SegWriterFree()
124832: */
124833: struct SegmentWriter {
124834:   SegmentNode *pTree;             /* Pointer to interior tree structure */
124835:   sqlite3_int64 iFirst;           /* First slot in %_segments written */
124836:   sqlite3_int64 iFree;            /* Next free slot in %_segments */
124837:   char *zTerm;                    /* Pointer to previous term buffer */
124838:   int nTerm;                      /* Number of bytes in zTerm */
124839:   int nMalloc;                    /* Size of malloc'd buffer at zMalloc */
124840:   char *zMalloc;                  /* Malloc'd space (possibly) used for zTerm */
124841:   int nSize;                      /* Size of allocation at aData */
124842:   int nData;                      /* Bytes of data in aData */
124843:   char *aData;                    /* Pointer to block from malloc() */
124844: };
124845: 
124846: /*
124847: ** Type SegmentNode is used by the following three functions to create
124848: ** the interior part of the segment b+-tree structures (everything except
124849: ** the leaf nodes). These functions and type are only ever used by code
124850: ** within the fts3SegWriterXXX() family of functions described above.
124851: **
124852: **   fts3NodeAddTerm()
124853: **   fts3NodeWrite()
124854: **   fts3NodeFree()
124855: **
124856: ** When a b+tree is written to the database (either as a result of a merge
124857: ** or the pending-terms table being flushed), leaves are written into the 
124858: ** database file as soon as they are completely populated. The interior of
124859: ** the tree is assembled in memory and written out only once all leaves have
124860: ** been populated and stored. This is Ok, as the b+-tree fanout is usually
124861: ** very large, meaning that the interior of the tree consumes relatively 
124862: ** little memory.
124863: */
124864: struct SegmentNode {
124865:   SegmentNode *pParent;           /* Parent node (or NULL for root node) */
124866:   SegmentNode *pRight;            /* Pointer to right-sibling */
124867:   SegmentNode *pLeftmost;         /* Pointer to left-most node of this depth */
124868:   int nEntry;                     /* Number of terms written to node so far */
124869:   char *zTerm;                    /* Pointer to previous term buffer */
124870:   int nTerm;                      /* Number of bytes in zTerm */
124871:   int nMalloc;                    /* Size of malloc'd buffer at zMalloc */
124872:   char *zMalloc;                  /* Malloc'd space (possibly) used for zTerm */
124873:   int nData;                      /* Bytes of valid data so far */
124874:   char *aData;                    /* Node data */
124875: };
124876: 
124877: /*
124878: ** Valid values for the second argument to fts3SqlStmt().
124879: */
124880: #define SQL_DELETE_CONTENT             0
124881: #define SQL_IS_EMPTY                   1
124882: #define SQL_DELETE_ALL_CONTENT         2 
124883: #define SQL_DELETE_ALL_SEGMENTS        3
124884: #define SQL_DELETE_ALL_SEGDIR          4
124885: #define SQL_DELETE_ALL_DOCSIZE         5
124886: #define SQL_DELETE_ALL_STAT            6
124887: #define SQL_SELECT_CONTENT_BY_ROWID    7
124888: #define SQL_NEXT_SEGMENT_INDEX         8
124889: #define SQL_INSERT_SEGMENTS            9
124890: #define SQL_NEXT_SEGMENTS_ID          10
124891: #define SQL_INSERT_SEGDIR             11
124892: #define SQL_SELECT_LEVEL              12
124893: #define SQL_SELECT_LEVEL_RANGE        13
124894: #define SQL_SELECT_LEVEL_COUNT        14
124895: #define SQL_SELECT_SEGDIR_MAX_LEVEL   15
124896: #define SQL_DELETE_SEGDIR_LEVEL       16
124897: #define SQL_DELETE_SEGMENTS_RANGE     17
124898: #define SQL_CONTENT_INSERT            18
124899: #define SQL_DELETE_DOCSIZE            19
124900: #define SQL_REPLACE_DOCSIZE           20
124901: #define SQL_SELECT_DOCSIZE            21
124902: #define SQL_SELECT_DOCTOTAL           22
124903: #define SQL_REPLACE_DOCTOTAL          23
124904: 
124905: #define SQL_SELECT_ALL_PREFIX_LEVEL   24
124906: #define SQL_DELETE_ALL_TERMS_SEGDIR   25
124907: 
124908: #define SQL_DELETE_SEGDIR_RANGE       26
124909: 
124910: /*
124911: ** This function is used to obtain an SQLite prepared statement handle
124912: ** for the statement identified by the second argument. If successful,
124913: ** *pp is set to the requested statement handle and SQLITE_OK returned.
124914: ** Otherwise, an SQLite error code is returned and *pp is set to 0.
124915: **
124916: ** If argument apVal is not NULL, then it must point to an array with
124917: ** at least as many entries as the requested statement has bound 
124918: ** parameters. The values are bound to the statements parameters before
124919: ** returning.
124920: */
124921: static int fts3SqlStmt(
124922:   Fts3Table *p,                   /* Virtual table handle */
124923:   int eStmt,                      /* One of the SQL_XXX constants above */
124924:   sqlite3_stmt **pp,              /* OUT: Statement handle */
124925:   sqlite3_value **apVal           /* Values to bind to statement */
124926: ){
124927:   const char *azSql[] = {
124928: /* 0  */  "DELETE FROM %Q.'%q_content' WHERE rowid = ?",
124929: /* 1  */  "SELECT NOT EXISTS(SELECT docid FROM %Q.'%q_content' WHERE rowid!=?)",
124930: /* 2  */  "DELETE FROM %Q.'%q_content'",
124931: /* 3  */  "DELETE FROM %Q.'%q_segments'",
124932: /* 4  */  "DELETE FROM %Q.'%q_segdir'",
124933: /* 5  */  "DELETE FROM %Q.'%q_docsize'",
124934: /* 6  */  "DELETE FROM %Q.'%q_stat'",
124935: /* 7  */  "SELECT %s WHERE rowid=?",
124936: /* 8  */  "SELECT (SELECT max(idx) FROM %Q.'%q_segdir' WHERE level = ?) + 1",
124937: /* 9  */  "INSERT INTO %Q.'%q_segments'(blockid, block) VALUES(?, ?)",
124938: /* 10 */  "SELECT coalesce((SELECT max(blockid) FROM %Q.'%q_segments') + 1, 1)",
124939: /* 11 */  "INSERT INTO %Q.'%q_segdir' VALUES(?,?,?,?,?,?)",
124940: 
124941:           /* Return segments in order from oldest to newest.*/ 
124942: /* 12 */  "SELECT idx, start_block, leaves_end_block, end_block, root "
124943:             "FROM %Q.'%q_segdir' WHERE level = ? ORDER BY idx ASC",
124944: /* 13 */  "SELECT idx, start_block, leaves_end_block, end_block, root "
124945:             "FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?"
124946:             "ORDER BY level DESC, idx ASC",
124947: 
124948: /* 14 */  "SELECT count(*) FROM %Q.'%q_segdir' WHERE level = ?",
124949: /* 15 */  "SELECT max(level) FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?",
124950: 
124951: /* 16 */  "DELETE FROM %Q.'%q_segdir' WHERE level = ?",
124952: /* 17 */  "DELETE FROM %Q.'%q_segments' WHERE blockid BETWEEN ? AND ?",
124953: /* 18 */  "INSERT INTO %Q.'%q_content' VALUES(%s)",
124954: /* 19 */  "DELETE FROM %Q.'%q_docsize' WHERE docid = ?",
124955: /* 20 */  "REPLACE INTO %Q.'%q_docsize' VALUES(?,?)",
124956: /* 21 */  "SELECT size FROM %Q.'%q_docsize' WHERE docid=?",
124957: /* 22 */  "SELECT value FROM %Q.'%q_stat' WHERE id=0",
124958: /* 23 */  "REPLACE INTO %Q.'%q_stat' VALUES(0,?)",
124959: /* 24 */  "",
124960: /* 25 */  "",
124961: 
124962: /* 26 */ "DELETE FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?",
124963: 
124964:   };
124965:   int rc = SQLITE_OK;
124966:   sqlite3_stmt *pStmt;
124967: 
124968:   assert( SizeofArray(azSql)==SizeofArray(p->aStmt) );
124969:   assert( eStmt<SizeofArray(azSql) && eStmt>=0 );
124970:   
124971:   pStmt = p->aStmt[eStmt];
124972:   if( !pStmt ){
124973:     char *zSql;
124974:     if( eStmt==SQL_CONTENT_INSERT ){
124975:       zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName, p->zWriteExprlist);
124976:     }else if( eStmt==SQL_SELECT_CONTENT_BY_ROWID ){
124977:       zSql = sqlite3_mprintf(azSql[eStmt], p->zReadExprlist);
124978:     }else{
124979:       zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName);
124980:     }
124981:     if( !zSql ){
124982:       rc = SQLITE_NOMEM;
124983:     }else{
124984:       rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, NULL);
124985:       sqlite3_free(zSql);
124986:       assert( rc==SQLITE_OK || pStmt==0 );
124987:       p->aStmt[eStmt] = pStmt;
124988:     }
124989:   }
124990:   if( apVal ){
124991:     int i;
124992:     int nParam = sqlite3_bind_parameter_count(pStmt);
124993:     for(i=0; rc==SQLITE_OK && i<nParam; i++){
124994:       rc = sqlite3_bind_value(pStmt, i+1, apVal[i]);
124995:     }
124996:   }
124997:   *pp = pStmt;
124998:   return rc;
124999: }
125000: 
125001: static int fts3SelectDocsize(
125002:   Fts3Table *pTab,                /* FTS3 table handle */
125003:   int eStmt,                      /* Either SQL_SELECT_DOCSIZE or DOCTOTAL */
125004:   sqlite3_int64 iDocid,           /* Docid to bind for SQL_SELECT_DOCSIZE */
125005:   sqlite3_stmt **ppStmt           /* OUT: Statement handle */
125006: ){
125007:   sqlite3_stmt *pStmt = 0;        /* Statement requested from fts3SqlStmt() */
125008:   int rc;                         /* Return code */
125009: 
125010:   assert( eStmt==SQL_SELECT_DOCSIZE || eStmt==SQL_SELECT_DOCTOTAL );
125011: 
125012:   rc = fts3SqlStmt(pTab, eStmt, &pStmt, 0);
125013:   if( rc==SQLITE_OK ){
125014:     if( eStmt==SQL_SELECT_DOCSIZE ){
125015:       sqlite3_bind_int64(pStmt, 1, iDocid);
125016:     }
125017:     rc = sqlite3_step(pStmt);
125018:     if( rc!=SQLITE_ROW || sqlite3_column_type(pStmt, 0)!=SQLITE_BLOB ){
125019:       rc = sqlite3_reset(pStmt);
125020:       if( rc==SQLITE_OK ) rc = FTS_CORRUPT_VTAB;
125021:       pStmt = 0;
125022:     }else{
125023:       rc = SQLITE_OK;
125024:     }
125025:   }
125026: 
125027:   *ppStmt = pStmt;
125028:   return rc;
125029: }
125030: 
125031: SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(
125032:   Fts3Table *pTab,                /* Fts3 table handle */
125033:   sqlite3_stmt **ppStmt           /* OUT: Statement handle */
125034: ){
125035:   return fts3SelectDocsize(pTab, SQL_SELECT_DOCTOTAL, 0, ppStmt);
125036: }
125037: 
125038: SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(
125039:   Fts3Table *pTab,                /* Fts3 table handle */
125040:   sqlite3_int64 iDocid,           /* Docid to read size data for */
125041:   sqlite3_stmt **ppStmt           /* OUT: Statement handle */
125042: ){
125043:   return fts3SelectDocsize(pTab, SQL_SELECT_DOCSIZE, iDocid, ppStmt);
125044: }
125045: 
125046: /*
125047: ** Similar to fts3SqlStmt(). Except, after binding the parameters in
125048: ** array apVal[] to the SQL statement identified by eStmt, the statement
125049: ** is executed.
125050: **
125051: ** Returns SQLITE_OK if the statement is successfully executed, or an
125052: ** SQLite error code otherwise.
125053: */
125054: static void fts3SqlExec(
125055:   int *pRC,                /* Result code */
125056:   Fts3Table *p,            /* The FTS3 table */
125057:   int eStmt,               /* Index of statement to evaluate */
125058:   sqlite3_value **apVal    /* Parameters to bind */
125059: ){
125060:   sqlite3_stmt *pStmt;
125061:   int rc;
125062:   if( *pRC ) return;
125063:   rc = fts3SqlStmt(p, eStmt, &pStmt, apVal); 
125064:   if( rc==SQLITE_OK ){
125065:     sqlite3_step(pStmt);
125066:     rc = sqlite3_reset(pStmt);
125067:   }
125068:   *pRC = rc;
125069: }
125070: 
125071: 
125072: /*
125073: ** This function ensures that the caller has obtained a shared-cache
125074: ** table-lock on the %_content table. This is required before reading
125075: ** data from the fts3 table. If this lock is not acquired first, then
125076: ** the caller may end up holding read-locks on the %_segments and %_segdir
125077: ** tables, but no read-lock on the %_content table. If this happens 
125078: ** a second connection will be able to write to the fts3 table, but
125079: ** attempting to commit those writes might return SQLITE_LOCKED or
125080: ** SQLITE_LOCKED_SHAREDCACHE (because the commit attempts to obtain 
125081: ** write-locks on the %_segments and %_segdir ** tables). 
125082: **
125083: ** We try to avoid this because if FTS3 returns any error when committing
125084: ** a transaction, the whole transaction will be rolled back. And this is
125085: ** not what users expect when they get SQLITE_LOCKED_SHAREDCACHE. It can
125086: ** still happen if the user reads data directly from the %_segments or
125087: ** %_segdir tables instead of going through FTS3 though.
125088: **
125089: ** This reasoning does not apply to a content=xxx table.
125090: */
125091: SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *p){
125092:   int rc;                         /* Return code */
125093:   sqlite3_stmt *pStmt;            /* Statement used to obtain lock */
125094: 
125095:   if( p->zContentTbl==0 ){
125096:     rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pStmt, 0);
125097:     if( rc==SQLITE_OK ){
125098:       sqlite3_bind_null(pStmt, 1);
125099:       sqlite3_step(pStmt);
125100:       rc = sqlite3_reset(pStmt);
125101:     }
125102:   }else{
125103:     rc = SQLITE_OK;
125104:   }
125105: 
125106:   return rc;
125107: }
125108: 
125109: /*
125110: ** Set *ppStmt to a statement handle that may be used to iterate through
125111: ** all rows in the %_segdir table, from oldest to newest. If successful,
125112: ** return SQLITE_OK. If an error occurs while preparing the statement, 
125113: ** return an SQLite error code.
125114: **
125115: ** There is only ever one instance of this SQL statement compiled for
125116: ** each FTS3 table.
125117: **
125118: ** The statement returns the following columns from the %_segdir table:
125119: **
125120: **   0: idx
125121: **   1: start_block
125122: **   2: leaves_end_block
125123: **   3: end_block
125124: **   4: root
125125: */
125126: SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(
125127:   Fts3Table *p,                   /* FTS3 table */
125128:   int iIndex,                     /* Index for p->aIndex[] */
125129:   int iLevel,                     /* Level to select */
125130:   sqlite3_stmt **ppStmt           /* OUT: Compiled statement */
125131: ){
125132:   int rc;
125133:   sqlite3_stmt *pStmt = 0;
125134: 
125135:   assert( iLevel==FTS3_SEGCURSOR_ALL || iLevel>=0 );
125136:   assert( iLevel<FTS3_SEGDIR_MAXLEVEL );
125137:   assert( iIndex>=0 && iIndex<p->nIndex );
125138: 
125139:   if( iLevel<0 ){
125140:     /* "SELECT * FROM %_segdir WHERE level BETWEEN ? AND ? ORDER BY ..." */
125141:     rc = fts3SqlStmt(p, SQL_SELECT_LEVEL_RANGE, &pStmt, 0);
125142:     if( rc==SQLITE_OK ){ 
125143:       sqlite3_bind_int(pStmt, 1, iIndex*FTS3_SEGDIR_MAXLEVEL);
125144:       sqlite3_bind_int(pStmt, 2, (iIndex+1)*FTS3_SEGDIR_MAXLEVEL-1);
125145:     }
125146:   }else{
125147:     /* "SELECT * FROM %_segdir WHERE level = ? ORDER BY ..." */
125148:     rc = fts3SqlStmt(p, SQL_SELECT_LEVEL, &pStmt, 0);
125149:     if( rc==SQLITE_OK ){ 
125150:       sqlite3_bind_int(pStmt, 1, iLevel+iIndex*FTS3_SEGDIR_MAXLEVEL);
125151:     }
125152:   }
125153:   *ppStmt = pStmt;
125154:   return rc;
125155: }
125156: 
125157: 
125158: /*
125159: ** Append a single varint to a PendingList buffer. SQLITE_OK is returned
125160: ** if successful, or an SQLite error code otherwise.
125161: **
125162: ** This function also serves to allocate the PendingList structure itself.
125163: ** For example, to create a new PendingList structure containing two
125164: ** varints:
125165: **
125166: **   PendingList *p = 0;
125167: **   fts3PendingListAppendVarint(&p, 1);
125168: **   fts3PendingListAppendVarint(&p, 2);
125169: */
125170: static int fts3PendingListAppendVarint(
125171:   PendingList **pp,               /* IN/OUT: Pointer to PendingList struct */
125172:   sqlite3_int64 i                 /* Value to append to data */
125173: ){
125174:   PendingList *p = *pp;
125175: 
125176:   /* Allocate or grow the PendingList as required. */
125177:   if( !p ){
125178:     p = sqlite3_malloc(sizeof(*p) + 100);
125179:     if( !p ){
125180:       return SQLITE_NOMEM;
125181:     }
125182:     p->nSpace = 100;
125183:     p->aData = (char *)&p[1];
125184:     p->nData = 0;
125185:   }
125186:   else if( p->nData+FTS3_VARINT_MAX+1>p->nSpace ){
125187:     int nNew = p->nSpace * 2;
125188:     p = sqlite3_realloc(p, sizeof(*p) + nNew);
125189:     if( !p ){
125190:       sqlite3_free(*pp);
125191:       *pp = 0;
125192:       return SQLITE_NOMEM;
125193:     }
125194:     p->nSpace = nNew;
125195:     p->aData = (char *)&p[1];
125196:   }
125197: 
125198:   /* Append the new serialized varint to the end of the list. */
125199:   p->nData += sqlite3Fts3PutVarint(&p->aData[p->nData], i);
125200:   p->aData[p->nData] = '\0';
125201:   *pp = p;
125202:   return SQLITE_OK;
125203: }
125204: 
125205: /*
125206: ** Add a docid/column/position entry to a PendingList structure. Non-zero
125207: ** is returned if the structure is sqlite3_realloced as part of adding
125208: ** the entry. Otherwise, zero.
125209: **
125210: ** If an OOM error occurs, *pRc is set to SQLITE_NOMEM before returning.
125211: ** Zero is always returned in this case. Otherwise, if no OOM error occurs,
125212: ** it is set to SQLITE_OK.
125213: */
125214: static int fts3PendingListAppend(
125215:   PendingList **pp,               /* IN/OUT: PendingList structure */
125216:   sqlite3_int64 iDocid,           /* Docid for entry to add */
125217:   sqlite3_int64 iCol,             /* Column for entry to add */
125218:   sqlite3_int64 iPos,             /* Position of term for entry to add */
125219:   int *pRc                        /* OUT: Return code */
125220: ){
125221:   PendingList *p = *pp;
125222:   int rc = SQLITE_OK;
125223: 
125224:   assert( !p || p->iLastDocid<=iDocid );
125225: 
125226:   if( !p || p->iLastDocid!=iDocid ){
125227:     sqlite3_int64 iDelta = iDocid - (p ? p->iLastDocid : 0);
125228:     if( p ){
125229:       assert( p->nData<p->nSpace );
125230:       assert( p->aData[p->nData]==0 );
125231:       p->nData++;
125232:     }
125233:     if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iDelta)) ){
125234:       goto pendinglistappend_out;
125235:     }
125236:     p->iLastCol = -1;
125237:     p->iLastPos = 0;
125238:     p->iLastDocid = iDocid;
125239:   }
125240:   if( iCol>0 && p->iLastCol!=iCol ){
125241:     if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, 1))
125242:      || SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iCol))
125243:     ){
125244:       goto pendinglistappend_out;
125245:     }
125246:     p->iLastCol = iCol;
125247:     p->iLastPos = 0;
125248:   }
125249:   if( iCol>=0 ){
125250:     assert( iPos>p->iLastPos || (iPos==0 && p->iLastPos==0) );
125251:     rc = fts3PendingListAppendVarint(&p, 2+iPos-p->iLastPos);
125252:     if( rc==SQLITE_OK ){
125253:       p->iLastPos = iPos;
125254:     }
125255:   }
125256: 
125257:  pendinglistappend_out:
125258:   *pRc = rc;
125259:   if( p!=*pp ){
125260:     *pp = p;
125261:     return 1;
125262:   }
125263:   return 0;
125264: }
125265: 
125266: /*
125267: ** Free a PendingList object allocated by fts3PendingListAppend().
125268: */
125269: static void fts3PendingListDelete(PendingList *pList){
125270:   sqlite3_free(pList);
125271: }
125272: 
125273: /*
125274: ** Add an entry to one of the pending-terms hash tables.
125275: */
125276: static int fts3PendingTermsAddOne(
125277:   Fts3Table *p,
125278:   int iCol,
125279:   int iPos,
125280:   Fts3Hash *pHash,                /* Pending terms hash table to add entry to */
125281:   const char *zToken,
125282:   int nToken
125283: ){
125284:   PendingList *pList;
125285:   int rc = SQLITE_OK;
125286: 
125287:   pList = (PendingList *)fts3HashFind(pHash, zToken, nToken);
125288:   if( pList ){
125289:     p->nPendingData -= (pList->nData + nToken + sizeof(Fts3HashElem));
125290:   }
125291:   if( fts3PendingListAppend(&pList, p->iPrevDocid, iCol, iPos, &rc) ){
125292:     if( pList==fts3HashInsert(pHash, zToken, nToken, pList) ){
125293:       /* Malloc failed while inserting the new entry. This can only 
125294:       ** happen if there was no previous entry for this token.
125295:       */
125296:       assert( 0==fts3HashFind(pHash, zToken, nToken) );
125297:       sqlite3_free(pList);
125298:       rc = SQLITE_NOMEM;
125299:     }
125300:   }
125301:   if( rc==SQLITE_OK ){
125302:     p->nPendingData += (pList->nData + nToken + sizeof(Fts3HashElem));
125303:   }
125304:   return rc;
125305: }
125306: 
125307: /*
125308: ** Tokenize the nul-terminated string zText and add all tokens to the
125309: ** pending-terms hash-table. The docid used is that currently stored in
125310: ** p->iPrevDocid, and the column is specified by argument iCol.
125311: **
125312: ** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code.
125313: */
125314: static int fts3PendingTermsAdd(
125315:   Fts3Table *p,                   /* Table into which text will be inserted */
125316:   const char *zText,              /* Text of document to be inserted */
125317:   int iCol,                       /* Column into which text is being inserted */
125318:   u32 *pnWord                     /* OUT: Number of tokens inserted */
125319: ){
125320:   int rc;
125321:   int iStart;
125322:   int iEnd;
125323:   int iPos;
125324:   int nWord = 0;
125325: 
125326:   char const *zToken;
125327:   int nToken;
125328: 
125329:   sqlite3_tokenizer *pTokenizer = p->pTokenizer;
125330:   sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
125331:   sqlite3_tokenizer_cursor *pCsr;
125332:   int (*xNext)(sqlite3_tokenizer_cursor *pCursor,
125333:       const char**,int*,int*,int*,int*);
125334: 
125335:   assert( pTokenizer && pModule );
125336: 
125337:   /* If the user has inserted a NULL value, this function may be called with
125338:   ** zText==0. In this case, add zero token entries to the hash table and 
125339:   ** return early. */
125340:   if( zText==0 ){
125341:     *pnWord = 0;
125342:     return SQLITE_OK;
125343:   }
125344: 
125345:   rc = pModule->xOpen(pTokenizer, zText, -1, &pCsr);
125346:   if( rc!=SQLITE_OK ){
125347:     return rc;
125348:   }
125349:   pCsr->pTokenizer = pTokenizer;
125350: 
125351:   xNext = pModule->xNext;
125352:   while( SQLITE_OK==rc
125353:       && SQLITE_OK==(rc = xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos))
125354:   ){
125355:     int i;
125356:     if( iPos>=nWord ) nWord = iPos+1;
125357: 
125358:     /* Positions cannot be negative; we use -1 as a terminator internally.
125359:     ** Tokens must have a non-zero length.
125360:     */
125361:     if( iPos<0 || !zToken || nToken<=0 ){
125362:       rc = SQLITE_ERROR;
125363:       break;
125364:     }
125365: 
125366:     /* Add the term to the terms index */
125367:     rc = fts3PendingTermsAddOne(
125368:         p, iCol, iPos, &p->aIndex[0].hPending, zToken, nToken
125369:     );
125370:     
125371:     /* Add the term to each of the prefix indexes that it is not too 
125372:     ** short for. */
125373:     for(i=1; rc==SQLITE_OK && i<p->nIndex; i++){
125374:       struct Fts3Index *pIndex = &p->aIndex[i];
125375:       if( nToken<pIndex->nPrefix ) continue;
125376:       rc = fts3PendingTermsAddOne(
125377:           p, iCol, iPos, &pIndex->hPending, zToken, pIndex->nPrefix
125378:       );
125379:     }
125380:   }
125381: 
125382:   pModule->xClose(pCsr);
125383:   *pnWord = nWord;
125384:   return (rc==SQLITE_DONE ? SQLITE_OK : rc);
125385: }
125386: 
125387: /* 
125388: ** Calling this function indicates that subsequent calls to 
125389: ** fts3PendingTermsAdd() are to add term/position-list pairs for the
125390: ** contents of the document with docid iDocid.
125391: */
125392: static int fts3PendingTermsDocid(Fts3Table *p, sqlite_int64 iDocid){
125393:   /* TODO(shess) Explore whether partially flushing the buffer on
125394:   ** forced-flush would provide better performance.  I suspect that if
125395:   ** we ordered the doclists by size and flushed the largest until the
125396:   ** buffer was half empty, that would let the less frequent terms
125397:   ** generate longer doclists.
125398:   */
125399:   if( iDocid<=p->iPrevDocid || p->nPendingData>p->nMaxPendingData ){
125400:     int rc = sqlite3Fts3PendingTermsFlush(p);
125401:     if( rc!=SQLITE_OK ) return rc;
125402:   }
125403:   p->iPrevDocid = iDocid;
125404:   return SQLITE_OK;
125405: }
125406: 
125407: /*
125408: ** Discard the contents of the pending-terms hash tables. 
125409: */
125410: SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *p){
125411:   int i;
125412:   for(i=0; i<p->nIndex; i++){
125413:     Fts3HashElem *pElem;
125414:     Fts3Hash *pHash = &p->aIndex[i].hPending;
125415:     for(pElem=fts3HashFirst(pHash); pElem; pElem=fts3HashNext(pElem)){
125416:       PendingList *pList = (PendingList *)fts3HashData(pElem);
125417:       fts3PendingListDelete(pList);
125418:     }
125419:     fts3HashClear(pHash);
125420:   }
125421:   p->nPendingData = 0;
125422: }
125423: 
125424: /*
125425: ** This function is called by the xUpdate() method as part of an INSERT
125426: ** operation. It adds entries for each term in the new record to the
125427: ** pendingTerms hash table.
125428: **
125429: ** Argument apVal is the same as the similarly named argument passed to
125430: ** fts3InsertData(). Parameter iDocid is the docid of the new row.
125431: */
125432: static int fts3InsertTerms(Fts3Table *p, sqlite3_value **apVal, u32 *aSz){
125433:   int i;                          /* Iterator variable */
125434:   for(i=2; i<p->nColumn+2; i++){
125435:     const char *zText = (const char *)sqlite3_value_text(apVal[i]);
125436:     int rc = fts3PendingTermsAdd(p, zText, i-2, &aSz[i-2]);
125437:     if( rc!=SQLITE_OK ){
125438:       return rc;
125439:     }
125440:     aSz[p->nColumn] += sqlite3_value_bytes(apVal[i]);
125441:   }
125442:   return SQLITE_OK;
125443: }
125444: 
125445: /*
125446: ** This function is called by the xUpdate() method for an INSERT operation.
125447: ** The apVal parameter is passed a copy of the apVal argument passed by
125448: ** SQLite to the xUpdate() method. i.e:
125449: **
125450: **   apVal[0]                Not used for INSERT.
125451: **   apVal[1]                rowid
125452: **   apVal[2]                Left-most user-defined column
125453: **   ...
125454: **   apVal[p->nColumn+1]     Right-most user-defined column
125455: **   apVal[p->nColumn+2]     Hidden column with same name as table
125456: **   apVal[p->nColumn+3]     Hidden "docid" column (alias for rowid)
125457: */
125458: static int fts3InsertData(
125459:   Fts3Table *p,                   /* Full-text table */
125460:   sqlite3_value **apVal,          /* Array of values to insert */
125461:   sqlite3_int64 *piDocid          /* OUT: Docid for row just inserted */
125462: ){
125463:   int rc;                         /* Return code */
125464:   sqlite3_stmt *pContentInsert;   /* INSERT INTO %_content VALUES(...) */
125465: 
125466:   if( p->zContentTbl ){
125467:     sqlite3_value *pRowid = apVal[p->nColumn+3];
125468:     if( sqlite3_value_type(pRowid)==SQLITE_NULL ){
125469:       pRowid = apVal[1];
125470:     }
125471:     if( sqlite3_value_type(pRowid)!=SQLITE_INTEGER ){
125472:       return SQLITE_CONSTRAINT;
125473:     }
125474:     *piDocid = sqlite3_value_int64(pRowid);
125475:     return SQLITE_OK;
125476:   }
125477: 
125478:   /* Locate the statement handle used to insert data into the %_content
125479:   ** table. The SQL for this statement is:
125480:   **
125481:   **   INSERT INTO %_content VALUES(?, ?, ?, ...)
125482:   **
125483:   ** The statement features N '?' variables, where N is the number of user
125484:   ** defined columns in the FTS3 table, plus one for the docid field.
125485:   */
125486:   rc = fts3SqlStmt(p, SQL_CONTENT_INSERT, &pContentInsert, &apVal[1]);
125487:   if( rc!=SQLITE_OK ){
125488:     return rc;
125489:   }
125490: 
125491:   /* There is a quirk here. The users INSERT statement may have specified
125492:   ** a value for the "rowid" field, for the "docid" field, or for both.
125493:   ** Which is a problem, since "rowid" and "docid" are aliases for the
125494:   ** same value. For example:
125495:   **
125496:   **   INSERT INTO fts3tbl(rowid, docid) VALUES(1, 2);
125497:   **
125498:   ** In FTS3, this is an error. It is an error to specify non-NULL values
125499:   ** for both docid and some other rowid alias.
125500:   */
125501:   if( SQLITE_NULL!=sqlite3_value_type(apVal[3+p->nColumn]) ){
125502:     if( SQLITE_NULL==sqlite3_value_type(apVal[0])
125503:      && SQLITE_NULL!=sqlite3_value_type(apVal[1])
125504:     ){
125505:       /* A rowid/docid conflict. */
125506:       return SQLITE_ERROR;
125507:     }
125508:     rc = sqlite3_bind_value(pContentInsert, 1, apVal[3+p->nColumn]);
125509:     if( rc!=SQLITE_OK ) return rc;
125510:   }
125511: 
125512:   /* Execute the statement to insert the record. Set *piDocid to the 
125513:   ** new docid value. 
125514:   */
125515:   sqlite3_step(pContentInsert);
125516:   rc = sqlite3_reset(pContentInsert);
125517: 
125518:   *piDocid = sqlite3_last_insert_rowid(p->db);
125519:   return rc;
125520: }
125521: 
125522: 
125523: 
125524: /*
125525: ** Remove all data from the FTS3 table. Clear the hash table containing
125526: ** pending terms.
125527: */
125528: static int fts3DeleteAll(Fts3Table *p, int bContent){
125529:   int rc = SQLITE_OK;             /* Return code */
125530: 
125531:   /* Discard the contents of the pending-terms hash table. */
125532:   sqlite3Fts3PendingTermsClear(p);
125533: 
125534:   /* Delete everything from the shadow tables. Except, leave %_content as
125535:   ** is if bContent is false.  */
125536:   assert( p->zContentTbl==0 || bContent==0 );
125537:   if( bContent ) fts3SqlExec(&rc, p, SQL_DELETE_ALL_CONTENT, 0);
125538:   fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGMENTS, 0);
125539:   fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGDIR, 0);
125540:   if( p->bHasDocsize ){
125541:     fts3SqlExec(&rc, p, SQL_DELETE_ALL_DOCSIZE, 0);
125542:   }
125543:   if( p->bHasStat ){
125544:     fts3SqlExec(&rc, p, SQL_DELETE_ALL_STAT, 0);
125545:   }
125546:   return rc;
125547: }
125548: 
125549: /*
125550: ** The first element in the apVal[] array is assumed to contain the docid
125551: ** (an integer) of a row about to be deleted. Remove all terms from the
125552: ** full-text index.
125553: */
125554: static void fts3DeleteTerms( 
125555:   int *pRC,               /* Result code */
125556:   Fts3Table *p,           /* The FTS table to delete from */
125557:   sqlite3_value *pRowid,  /* The docid to be deleted */
125558:   u32 *aSz                /* Sizes of deleted document written here */
125559: ){
125560:   int rc;
125561:   sqlite3_stmt *pSelect;
125562: 
125563:   if( *pRC ) return;
125564:   rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pSelect, &pRowid);
125565:   if( rc==SQLITE_OK ){
125566:     if( SQLITE_ROW==sqlite3_step(pSelect) ){
125567:       int i;
125568:       for(i=1; i<=p->nColumn; i++){
125569:         const char *zText = (const char *)sqlite3_column_text(pSelect, i);
125570:         rc = fts3PendingTermsAdd(p, zText, -1, &aSz[i-1]);
125571:         if( rc!=SQLITE_OK ){
125572:           sqlite3_reset(pSelect);
125573:           *pRC = rc;
125574:           return;
125575:         }
125576:         aSz[p->nColumn] += sqlite3_column_bytes(pSelect, i);
125577:       }
125578:     }
125579:     rc = sqlite3_reset(pSelect);
125580:   }else{
125581:     sqlite3_reset(pSelect);
125582:   }
125583:   *pRC = rc;
125584: }
125585: 
125586: /*
125587: ** Forward declaration to account for the circular dependency between
125588: ** functions fts3SegmentMerge() and fts3AllocateSegdirIdx().
125589: */
125590: static int fts3SegmentMerge(Fts3Table *, int, int);
125591: 
125592: /* 
125593: ** This function allocates a new level iLevel index in the segdir table.
125594: ** Usually, indexes are allocated within a level sequentially starting
125595: ** with 0, so the allocated index is one greater than the value returned
125596: ** by:
125597: **
125598: **   SELECT max(idx) FROM %_segdir WHERE level = :iLevel
125599: **
125600: ** However, if there are already FTS3_MERGE_COUNT indexes at the requested
125601: ** level, they are merged into a single level (iLevel+1) segment and the 
125602: ** allocated index is 0.
125603: **
125604: ** If successful, *piIdx is set to the allocated index slot and SQLITE_OK
125605: ** returned. Otherwise, an SQLite error code is returned.
125606: */
125607: static int fts3AllocateSegdirIdx(
125608:   Fts3Table *p, 
125609:   int iIndex,                     /* Index for p->aIndex */
125610:   int iLevel, 
125611:   int *piIdx
125612: ){
125613:   int rc;                         /* Return Code */
125614:   sqlite3_stmt *pNextIdx;         /* Query for next idx at level iLevel */
125615:   int iNext = 0;                  /* Result of query pNextIdx */
125616: 
125617:   /* Set variable iNext to the next available segdir index at level iLevel. */
125618:   rc = fts3SqlStmt(p, SQL_NEXT_SEGMENT_INDEX, &pNextIdx, 0);
125619:   if( rc==SQLITE_OK ){
125620:     sqlite3_bind_int(pNextIdx, 1, iIndex*FTS3_SEGDIR_MAXLEVEL + iLevel);
125621:     if( SQLITE_ROW==sqlite3_step(pNextIdx) ){
125622:       iNext = sqlite3_column_int(pNextIdx, 0);
125623:     }
125624:     rc = sqlite3_reset(pNextIdx);
125625:   }
125626: 
125627:   if( rc==SQLITE_OK ){
125628:     /* If iNext is FTS3_MERGE_COUNT, indicating that level iLevel is already
125629:     ** full, merge all segments in level iLevel into a single iLevel+1
125630:     ** segment and allocate (newly freed) index 0 at level iLevel. Otherwise,
125631:     ** if iNext is less than FTS3_MERGE_COUNT, allocate index iNext.
125632:     */
125633:     if( iNext>=FTS3_MERGE_COUNT ){
125634:       rc = fts3SegmentMerge(p, iIndex, iLevel);
125635:       *piIdx = 0;
125636:     }else{
125637:       *piIdx = iNext;
125638:     }
125639:   }
125640: 
125641:   return rc;
125642: }
125643: 
125644: /*
125645: ** The %_segments table is declared as follows:
125646: **
125647: **   CREATE TABLE %_segments(blockid INTEGER PRIMARY KEY, block BLOB)
125648: **
125649: ** This function reads data from a single row of the %_segments table. The
125650: ** specific row is identified by the iBlockid parameter. If paBlob is not
125651: ** NULL, then a buffer is allocated using sqlite3_malloc() and populated
125652: ** with the contents of the blob stored in the "block" column of the 
125653: ** identified table row is. Whether or not paBlob is NULL, *pnBlob is set
125654: ** to the size of the blob in bytes before returning.
125655: **
125656: ** If an error occurs, or the table does not contain the specified row,
125657: ** an SQLite error code is returned. Otherwise, SQLITE_OK is returned. If
125658: ** paBlob is non-NULL, then it is the responsibility of the caller to
125659: ** eventually free the returned buffer.
125660: **
125661: ** This function may leave an open sqlite3_blob* handle in the
125662: ** Fts3Table.pSegments variable. This handle is reused by subsequent calls
125663: ** to this function. The handle may be closed by calling the
125664: ** sqlite3Fts3SegmentsClose() function. Reusing a blob handle is a handy
125665: ** performance improvement, but the blob handle should always be closed
125666: ** before control is returned to the user (to prevent a lock being held
125667: ** on the database file for longer than necessary). Thus, any virtual table
125668: ** method (xFilter etc.) that may directly or indirectly call this function
125669: ** must call sqlite3Fts3SegmentsClose() before returning.
125670: */
125671: SQLITE_PRIVATE int sqlite3Fts3ReadBlock(
125672:   Fts3Table *p,                   /* FTS3 table handle */
125673:   sqlite3_int64 iBlockid,         /* Access the row with blockid=$iBlockid */
125674:   char **paBlob,                  /* OUT: Blob data in malloc'd buffer */
125675:   int *pnBlob,                    /* OUT: Size of blob data */
125676:   int *pnLoad                     /* OUT: Bytes actually loaded */
125677: ){
125678:   int rc;                         /* Return code */
125679: 
125680:   /* pnBlob must be non-NULL. paBlob may be NULL or non-NULL. */
125681:   assert( pnBlob);
125682: 
125683:   if( p->pSegments ){
125684:     rc = sqlite3_blob_reopen(p->pSegments, iBlockid);
125685:   }else{
125686:     if( 0==p->zSegmentsTbl ){
125687:       p->zSegmentsTbl = sqlite3_mprintf("%s_segments", p->zName);
125688:       if( 0==p->zSegmentsTbl ) return SQLITE_NOMEM;
125689:     }
125690:     rc = sqlite3_blob_open(
125691:        p->db, p->zDb, p->zSegmentsTbl, "block", iBlockid, 0, &p->pSegments
125692:     );
125693:   }
125694: 
125695:   if( rc==SQLITE_OK ){
125696:     int nByte = sqlite3_blob_bytes(p->pSegments);
125697:     *pnBlob = nByte;
125698:     if( paBlob ){
125699:       char *aByte = sqlite3_malloc(nByte + FTS3_NODE_PADDING);
125700:       if( !aByte ){
125701:         rc = SQLITE_NOMEM;
125702:       }else{
125703:         if( pnLoad && nByte>(FTS3_NODE_CHUNK_THRESHOLD) ){
125704:           nByte = FTS3_NODE_CHUNKSIZE;
125705:           *pnLoad = nByte;
125706:         }
125707:         rc = sqlite3_blob_read(p->pSegments, aByte, nByte, 0);
125708:         memset(&aByte[nByte], 0, FTS3_NODE_PADDING);
125709:         if( rc!=SQLITE_OK ){
125710:           sqlite3_free(aByte);
125711:           aByte = 0;
125712:         }
125713:       }
125714:       *paBlob = aByte;
125715:     }
125716:   }
125717: 
125718:   return rc;
125719: }
125720: 
125721: /*
125722: ** Close the blob handle at p->pSegments, if it is open. See comments above
125723: ** the sqlite3Fts3ReadBlock() function for details.
125724: */
125725: SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *p){
125726:   sqlite3_blob_close(p->pSegments);
125727:   p->pSegments = 0;
125728: }
125729:     
125730: static int fts3SegReaderIncrRead(Fts3SegReader *pReader){
125731:   int nRead;                      /* Number of bytes to read */
125732:   int rc;                         /* Return code */
125733: 
125734:   nRead = MIN(pReader->nNode - pReader->nPopulate, FTS3_NODE_CHUNKSIZE);
125735:   rc = sqlite3_blob_read(
125736:       pReader->pBlob, 
125737:       &pReader->aNode[pReader->nPopulate],
125738:       nRead,
125739:       pReader->nPopulate
125740:   );
125741: 
125742:   if( rc==SQLITE_OK ){
125743:     pReader->nPopulate += nRead;
125744:     memset(&pReader->aNode[pReader->nPopulate], 0, FTS3_NODE_PADDING);
125745:     if( pReader->nPopulate==pReader->nNode ){
125746:       sqlite3_blob_close(pReader->pBlob);
125747:       pReader->pBlob = 0;
125748:       pReader->nPopulate = 0;
125749:     }
125750:   }
125751:   return rc;
125752: }
125753: 
125754: static int fts3SegReaderRequire(Fts3SegReader *pReader, char *pFrom, int nByte){
125755:   int rc = SQLITE_OK;
125756:   assert( !pReader->pBlob 
125757:        || (pFrom>=pReader->aNode && pFrom<&pReader->aNode[pReader->nNode])
125758:   );
125759:   while( pReader->pBlob && rc==SQLITE_OK 
125760:      &&  (pFrom - pReader->aNode + nByte)>pReader->nPopulate
125761:   ){
125762:     rc = fts3SegReaderIncrRead(pReader);
125763:   }
125764:   return rc;
125765: }
125766: 
125767: /*
125768: ** Move the iterator passed as the first argument to the next term in the
125769: ** segment. If successful, SQLITE_OK is returned. If there is no next term,
125770: ** SQLITE_DONE. Otherwise, an SQLite error code.
125771: */
125772: static int fts3SegReaderNext(
125773:   Fts3Table *p, 
125774:   Fts3SegReader *pReader,
125775:   int bIncr
125776: ){
125777:   int rc;                         /* Return code of various sub-routines */
125778:   char *pNext;                    /* Cursor variable */
125779:   int nPrefix;                    /* Number of bytes in term prefix */
125780:   int nSuffix;                    /* Number of bytes in term suffix */
125781: 
125782:   if( !pReader->aDoclist ){
125783:     pNext = pReader->aNode;
125784:   }else{
125785:     pNext = &pReader->aDoclist[pReader->nDoclist];
125786:   }
125787: 
125788:   if( !pNext || pNext>=&pReader->aNode[pReader->nNode] ){
125789: 
125790:     if( fts3SegReaderIsPending(pReader) ){
125791:       Fts3HashElem *pElem = *(pReader->ppNextElem);
125792:       if( pElem==0 ){
125793:         pReader->aNode = 0;
125794:       }else{
125795:         PendingList *pList = (PendingList *)fts3HashData(pElem);
125796:         pReader->zTerm = (char *)fts3HashKey(pElem);
125797:         pReader->nTerm = fts3HashKeysize(pElem);
125798:         pReader->nNode = pReader->nDoclist = pList->nData + 1;
125799:         pReader->aNode = pReader->aDoclist = pList->aData;
125800:         pReader->ppNextElem++;
125801:         assert( pReader->aNode );
125802:       }
125803:       return SQLITE_OK;
125804:     }
125805: 
125806:     if( !fts3SegReaderIsRootOnly(pReader) ){
125807:       sqlite3_free(pReader->aNode);
125808:       sqlite3_blob_close(pReader->pBlob);
125809:       pReader->pBlob = 0;
125810:     }
125811:     pReader->aNode = 0;
125812: 
125813:     /* If iCurrentBlock>=iLeafEndBlock, this is an EOF condition. All leaf 
125814:     ** blocks have already been traversed.  */
125815:     assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock );
125816:     if( pReader->iCurrentBlock>=pReader->iLeafEndBlock ){
125817:       return SQLITE_OK;
125818:     }
125819: 
125820:     rc = sqlite3Fts3ReadBlock(
125821:         p, ++pReader->iCurrentBlock, &pReader->aNode, &pReader->nNode, 
125822:         (bIncr ? &pReader->nPopulate : 0)
125823:     );
125824:     if( rc!=SQLITE_OK ) return rc;
125825:     assert( pReader->pBlob==0 );
125826:     if( bIncr && pReader->nPopulate<pReader->nNode ){
125827:       pReader->pBlob = p->pSegments;
125828:       p->pSegments = 0;
125829:     }
125830:     pNext = pReader->aNode;
125831:   }
125832: 
125833:   assert( !fts3SegReaderIsPending(pReader) );
125834: 
125835:   rc = fts3SegReaderRequire(pReader, pNext, FTS3_VARINT_MAX*2);
125836:   if( rc!=SQLITE_OK ) return rc;
125837:   
125838:   /* Because of the FTS3_NODE_PADDING bytes of padding, the following is 
125839:   ** safe (no risk of overread) even if the node data is corrupted. */
125840:   pNext += sqlite3Fts3GetVarint32(pNext, &nPrefix);
125841:   pNext += sqlite3Fts3GetVarint32(pNext, &nSuffix);
125842:   if( nPrefix<0 || nSuffix<=0 
125843:    || &pNext[nSuffix]>&pReader->aNode[pReader->nNode] 
125844:   ){
125845:     return FTS_CORRUPT_VTAB;
125846:   }
125847: 
125848:   if( nPrefix+nSuffix>pReader->nTermAlloc ){
125849:     int nNew = (nPrefix+nSuffix)*2;
125850:     char *zNew = sqlite3_realloc(pReader->zTerm, nNew);
125851:     if( !zNew ){
125852:       return SQLITE_NOMEM;
125853:     }
125854:     pReader->zTerm = zNew;
125855:     pReader->nTermAlloc = nNew;
125856:   }
125857: 
125858:   rc = fts3SegReaderRequire(pReader, pNext, nSuffix+FTS3_VARINT_MAX);
125859:   if( rc!=SQLITE_OK ) return rc;
125860: 
125861:   memcpy(&pReader->zTerm[nPrefix], pNext, nSuffix);
125862:   pReader->nTerm = nPrefix+nSuffix;
125863:   pNext += nSuffix;
125864:   pNext += sqlite3Fts3GetVarint32(pNext, &pReader->nDoclist);
125865:   pReader->aDoclist = pNext;
125866:   pReader->pOffsetList = 0;
125867: 
125868:   /* Check that the doclist does not appear to extend past the end of the
125869:   ** b-tree node. And that the final byte of the doclist is 0x00. If either 
125870:   ** of these statements is untrue, then the data structure is corrupt.
125871:   */
125872:   if( &pReader->aDoclist[pReader->nDoclist]>&pReader->aNode[pReader->nNode] 
125873:    || (pReader->nPopulate==0 && pReader->aDoclist[pReader->nDoclist-1])
125874:   ){
125875:     return FTS_CORRUPT_VTAB;
125876:   }
125877:   return SQLITE_OK;
125878: }
125879: 
125880: /*
125881: ** Set the SegReader to point to the first docid in the doclist associated
125882: ** with the current term.
125883: */
125884: static int fts3SegReaderFirstDocid(Fts3Table *pTab, Fts3SegReader *pReader){
125885:   int rc = SQLITE_OK;
125886:   assert( pReader->aDoclist );
125887:   assert( !pReader->pOffsetList );
125888:   if( pTab->bDescIdx && fts3SegReaderIsPending(pReader) ){
125889:     u8 bEof = 0;
125890:     pReader->iDocid = 0;
125891:     pReader->nOffsetList = 0;
125892:     sqlite3Fts3DoclistPrev(0,
125893:         pReader->aDoclist, pReader->nDoclist, &pReader->pOffsetList, 
125894:         &pReader->iDocid, &pReader->nOffsetList, &bEof
125895:     );
125896:   }else{
125897:     rc = fts3SegReaderRequire(pReader, pReader->aDoclist, FTS3_VARINT_MAX);
125898:     if( rc==SQLITE_OK ){
125899:       int n = sqlite3Fts3GetVarint(pReader->aDoclist, &pReader->iDocid);
125900:       pReader->pOffsetList = &pReader->aDoclist[n];
125901:     }
125902:   }
125903:   return rc;
125904: }
125905: 
125906: /*
125907: ** Advance the SegReader to point to the next docid in the doclist
125908: ** associated with the current term.
125909: ** 
125910: ** If arguments ppOffsetList and pnOffsetList are not NULL, then 
125911: ** *ppOffsetList is set to point to the first column-offset list
125912: ** in the doclist entry (i.e. immediately past the docid varint).
125913: ** *pnOffsetList is set to the length of the set of column-offset
125914: ** lists, not including the nul-terminator byte. For example:
125915: */
125916: static int fts3SegReaderNextDocid(
125917:   Fts3Table *pTab,
125918:   Fts3SegReader *pReader,         /* Reader to advance to next docid */
125919:   char **ppOffsetList,            /* OUT: Pointer to current position-list */
125920:   int *pnOffsetList               /* OUT: Length of *ppOffsetList in bytes */
125921: ){
125922:   int rc = SQLITE_OK;
125923:   char *p = pReader->pOffsetList;
125924:   char c = 0;
125925: 
125926:   assert( p );
125927: 
125928:   if( pTab->bDescIdx && fts3SegReaderIsPending(pReader) ){
125929:     /* A pending-terms seg-reader for an FTS4 table that uses order=desc.
125930:     ** Pending-terms doclists are always built up in ascending order, so
125931:     ** we have to iterate through them backwards here. */
125932:     u8 bEof = 0;
125933:     if( ppOffsetList ){
125934:       *ppOffsetList = pReader->pOffsetList;
125935:       *pnOffsetList = pReader->nOffsetList - 1;
125936:     }
125937:     sqlite3Fts3DoclistPrev(0,
125938:         pReader->aDoclist, pReader->nDoclist, &p, &pReader->iDocid,
125939:         &pReader->nOffsetList, &bEof
125940:     );
125941:     if( bEof ){
125942:       pReader->pOffsetList = 0;
125943:     }else{
125944:       pReader->pOffsetList = p;
125945:     }
125946:   }else{
125947:     char *pEnd = &pReader->aDoclist[pReader->nDoclist];
125948: 
125949:     /* Pointer p currently points at the first byte of an offset list. The
125950:     ** following block advances it to point one byte past the end of
125951:     ** the same offset list. */
125952:     while( 1 ){
125953:   
125954:       /* The following line of code (and the "p++" below the while() loop) is
125955:       ** normally all that is required to move pointer p to the desired 
125956:       ** position. The exception is if this node is being loaded from disk
125957:       ** incrementally and pointer "p" now points to the first byte passed
125958:       ** the populated part of pReader->aNode[].
125959:       */
125960:       while( *p | c ) c = *p++ & 0x80;
125961:       assert( *p==0 );
125962:   
125963:       if( pReader->pBlob==0 || p<&pReader->aNode[pReader->nPopulate] ) break;
125964:       rc = fts3SegReaderIncrRead(pReader);
125965:       if( rc!=SQLITE_OK ) return rc;
125966:     }
125967:     p++;
125968:   
125969:     /* If required, populate the output variables with a pointer to and the
125970:     ** size of the previous offset-list.
125971:     */
125972:     if( ppOffsetList ){
125973:       *ppOffsetList = pReader->pOffsetList;
125974:       *pnOffsetList = (int)(p - pReader->pOffsetList - 1);
125975:     }
125976: 
125977:     while( p<pEnd && *p==0 ) p++;
125978:   
125979:     /* If there are no more entries in the doclist, set pOffsetList to
125980:     ** NULL. Otherwise, set Fts3SegReader.iDocid to the next docid and
125981:     ** Fts3SegReader.pOffsetList to point to the next offset list before
125982:     ** returning.
125983:     */
125984:     if( p>=pEnd ){
125985:       pReader->pOffsetList = 0;
125986:     }else{
125987:       rc = fts3SegReaderRequire(pReader, p, FTS3_VARINT_MAX);
125988:       if( rc==SQLITE_OK ){
125989:         sqlite3_int64 iDelta;
125990:         pReader->pOffsetList = p + sqlite3Fts3GetVarint(p, &iDelta);
125991:         if( pTab->bDescIdx ){
125992:           pReader->iDocid -= iDelta;
125993:         }else{
125994:           pReader->iDocid += iDelta;
125995:         }
125996:       }
125997:     }
125998:   }
125999: 
126000:   return SQLITE_OK;
126001: }
126002: 
126003: 
126004: SQLITE_PRIVATE int sqlite3Fts3MsrOvfl(
126005:   Fts3Cursor *pCsr, 
126006:   Fts3MultiSegReader *pMsr,
126007:   int *pnOvfl
126008: ){
126009:   Fts3Table *p = (Fts3Table*)pCsr->base.pVtab;
126010:   int nOvfl = 0;
126011:   int ii;
126012:   int rc = SQLITE_OK;
126013:   int pgsz = p->nPgsz;
126014: 
126015:   assert( p->bHasStat );
126016:   assert( pgsz>0 );
126017: 
126018:   for(ii=0; rc==SQLITE_OK && ii<pMsr->nSegment; ii++){
126019:     Fts3SegReader *pReader = pMsr->apSegment[ii];
126020:     if( !fts3SegReaderIsPending(pReader) 
126021:      && !fts3SegReaderIsRootOnly(pReader) 
126022:     ){
126023:       sqlite3_int64 jj;
126024:       for(jj=pReader->iStartBlock; jj<=pReader->iLeafEndBlock; jj++){
126025:         int nBlob;
126026:         rc = sqlite3Fts3ReadBlock(p, jj, 0, &nBlob, 0);
126027:         if( rc!=SQLITE_OK ) break;
126028:         if( (nBlob+35)>pgsz ){
126029:           nOvfl += (nBlob + 34)/pgsz;
126030:         }
126031:       }
126032:     }
126033:   }
126034:   *pnOvfl = nOvfl;
126035:   return rc;
126036: }
126037: 
126038: /*
126039: ** Free all allocations associated with the iterator passed as the 
126040: ** second argument.
126041: */
126042: SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *pReader){
126043:   if( pReader && !fts3SegReaderIsPending(pReader) ){
126044:     sqlite3_free(pReader->zTerm);
126045:     if( !fts3SegReaderIsRootOnly(pReader) ){
126046:       sqlite3_free(pReader->aNode);
126047:       sqlite3_blob_close(pReader->pBlob);
126048:     }
126049:   }
126050:   sqlite3_free(pReader);
126051: }
126052: 
126053: /*
126054: ** Allocate a new SegReader object.
126055: */
126056: SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(
126057:   int iAge,                       /* Segment "age". */
126058:   sqlite3_int64 iStartLeaf,       /* First leaf to traverse */
126059:   sqlite3_int64 iEndLeaf,         /* Final leaf to traverse */
126060:   sqlite3_int64 iEndBlock,        /* Final block of segment */
126061:   const char *zRoot,              /* Buffer containing root node */
126062:   int nRoot,                      /* Size of buffer containing root node */
126063:   Fts3SegReader **ppReader        /* OUT: Allocated Fts3SegReader */
126064: ){
126065:   Fts3SegReader *pReader;         /* Newly allocated SegReader object */
126066:   int nExtra = 0;                 /* Bytes to allocate segment root node */
126067: 
126068:   assert( iStartLeaf<=iEndLeaf );
126069:   if( iStartLeaf==0 ){
126070:     nExtra = nRoot + FTS3_NODE_PADDING;
126071:   }
126072: 
126073:   pReader = (Fts3SegReader *)sqlite3_malloc(sizeof(Fts3SegReader) + nExtra);
126074:   if( !pReader ){
126075:     return SQLITE_NOMEM;
126076:   }
126077:   memset(pReader, 0, sizeof(Fts3SegReader));
126078:   pReader->iIdx = iAge;
126079:   pReader->iStartBlock = iStartLeaf;
126080:   pReader->iLeafEndBlock = iEndLeaf;
126081:   pReader->iEndBlock = iEndBlock;
126082: 
126083:   if( nExtra ){
126084:     /* The entire segment is stored in the root node. */
126085:     pReader->aNode = (char *)&pReader[1];
126086:     pReader->nNode = nRoot;
126087:     memcpy(pReader->aNode, zRoot, nRoot);
126088:     memset(&pReader->aNode[nRoot], 0, FTS3_NODE_PADDING);
126089:   }else{
126090:     pReader->iCurrentBlock = iStartLeaf-1;
126091:   }
126092:   *ppReader = pReader;
126093:   return SQLITE_OK;
126094: }
126095: 
126096: /*
126097: ** This is a comparison function used as a qsort() callback when sorting
126098: ** an array of pending terms by term. This occurs as part of flushing
126099: ** the contents of the pending-terms hash table to the database.
126100: */
126101: static int fts3CompareElemByTerm(const void *lhs, const void *rhs){
126102:   char *z1 = fts3HashKey(*(Fts3HashElem **)lhs);
126103:   char *z2 = fts3HashKey(*(Fts3HashElem **)rhs);
126104:   int n1 = fts3HashKeysize(*(Fts3HashElem **)lhs);
126105:   int n2 = fts3HashKeysize(*(Fts3HashElem **)rhs);
126106: 
126107:   int n = (n1<n2 ? n1 : n2);
126108:   int c = memcmp(z1, z2, n);
126109:   if( c==0 ){
126110:     c = n1 - n2;
126111:   }
126112:   return c;
126113: }
126114: 
126115: /*
126116: ** This function is used to allocate an Fts3SegReader that iterates through
126117: ** a subset of the terms stored in the Fts3Table.pendingTerms array.
126118: **
126119: ** If the isPrefixIter parameter is zero, then the returned SegReader iterates
126120: ** through each term in the pending-terms table. Or, if isPrefixIter is
126121: ** non-zero, it iterates through each term and its prefixes. For example, if
126122: ** the pending terms hash table contains the terms "sqlite", "mysql" and
126123: ** "firebird", then the iterator visits the following 'terms' (in the order
126124: ** shown):
126125: **
126126: **   f fi fir fire fireb firebi firebir firebird
126127: **   m my mys mysq mysql
126128: **   s sq sql sqli sqlit sqlite
126129: **
126130: ** Whereas if isPrefixIter is zero, the terms visited are:
126131: **
126132: **   firebird mysql sqlite
126133: */
126134: SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(
126135:   Fts3Table *p,                   /* Virtual table handle */
126136:   int iIndex,                     /* Index for p->aIndex */
126137:   const char *zTerm,              /* Term to search for */
126138:   int nTerm,                      /* Size of buffer zTerm */
126139:   int bPrefix,                    /* True for a prefix iterator */
126140:   Fts3SegReader **ppReader        /* OUT: SegReader for pending-terms */
126141: ){
126142:   Fts3SegReader *pReader = 0;     /* Fts3SegReader object to return */
126143:   Fts3HashElem *pE;               /* Iterator variable */
126144:   Fts3HashElem **aElem = 0;       /* Array of term hash entries to scan */
126145:   int nElem = 0;                  /* Size of array at aElem */
126146:   int rc = SQLITE_OK;             /* Return Code */
126147:   Fts3Hash *pHash;
126148: 
126149:   pHash = &p->aIndex[iIndex].hPending;
126150:   if( bPrefix ){
126151:     int nAlloc = 0;               /* Size of allocated array at aElem */
126152: 
126153:     for(pE=fts3HashFirst(pHash); pE; pE=fts3HashNext(pE)){
126154:       char *zKey = (char *)fts3HashKey(pE);
126155:       int nKey = fts3HashKeysize(pE);
126156:       if( nTerm==0 || (nKey>=nTerm && 0==memcmp(zKey, zTerm, nTerm)) ){
126157:         if( nElem==nAlloc ){
126158:           Fts3HashElem **aElem2;
126159:           nAlloc += 16;
126160:           aElem2 = (Fts3HashElem **)sqlite3_realloc(
126161:               aElem, nAlloc*sizeof(Fts3HashElem *)
126162:           );
126163:           if( !aElem2 ){
126164:             rc = SQLITE_NOMEM;
126165:             nElem = 0;
126166:             break;
126167:           }
126168:           aElem = aElem2;
126169:         }
126170: 
126171:         aElem[nElem++] = pE;
126172:       }
126173:     }
126174: 
126175:     /* If more than one term matches the prefix, sort the Fts3HashElem
126176:     ** objects in term order using qsort(). This uses the same comparison
126177:     ** callback as is used when flushing terms to disk.
126178:     */
126179:     if( nElem>1 ){
126180:       qsort(aElem, nElem, sizeof(Fts3HashElem *), fts3CompareElemByTerm);
126181:     }
126182: 
126183:   }else{
126184:     /* The query is a simple term lookup that matches at most one term in
126185:     ** the index. All that is required is a straight hash-lookup. 
126186:     **
126187:     ** Because the stack address of pE may be accessed via the aElem pointer
126188:     ** below, the "Fts3HashElem *pE" must be declared so that it is valid
126189:     ** within this entire function, not just this "else{...}" block.
126190:     */
126191:     pE = fts3HashFindElem(pHash, zTerm, nTerm);
126192:     if( pE ){
126193:       aElem = &pE;
126194:       nElem = 1;
126195:     }
126196:   }
126197: 
126198:   if( nElem>0 ){
126199:     int nByte = sizeof(Fts3SegReader) + (nElem+1)*sizeof(Fts3HashElem *);
126200:     pReader = (Fts3SegReader *)sqlite3_malloc(nByte);
126201:     if( !pReader ){
126202:       rc = SQLITE_NOMEM;
126203:     }else{
126204:       memset(pReader, 0, nByte);
126205:       pReader->iIdx = 0x7FFFFFFF;
126206:       pReader->ppNextElem = (Fts3HashElem **)&pReader[1];
126207:       memcpy(pReader->ppNextElem, aElem, nElem*sizeof(Fts3HashElem *));
126208:     }
126209:   }
126210: 
126211:   if( bPrefix ){
126212:     sqlite3_free(aElem);
126213:   }
126214:   *ppReader = pReader;
126215:   return rc;
126216: }
126217: 
126218: /*
126219: ** Compare the entries pointed to by two Fts3SegReader structures. 
126220: ** Comparison is as follows:
126221: **
126222: **   1) EOF is greater than not EOF.
126223: **
126224: **   2) The current terms (if any) are compared using memcmp(). If one
126225: **      term is a prefix of another, the longer term is considered the
126226: **      larger.
126227: **
126228: **   3) By segment age. An older segment is considered larger.
126229: */
126230: static int fts3SegReaderCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
126231:   int rc;
126232:   if( pLhs->aNode && pRhs->aNode ){
126233:     int rc2 = pLhs->nTerm - pRhs->nTerm;
126234:     if( rc2<0 ){
126235:       rc = memcmp(pLhs->zTerm, pRhs->zTerm, pLhs->nTerm);
126236:     }else{
126237:       rc = memcmp(pLhs->zTerm, pRhs->zTerm, pRhs->nTerm);
126238:     }
126239:     if( rc==0 ){
126240:       rc = rc2;
126241:     }
126242:   }else{
126243:     rc = (pLhs->aNode==0) - (pRhs->aNode==0);
126244:   }
126245:   if( rc==0 ){
126246:     rc = pRhs->iIdx - pLhs->iIdx;
126247:   }
126248:   assert( rc!=0 );
126249:   return rc;
126250: }
126251: 
126252: /*
126253: ** A different comparison function for SegReader structures. In this
126254: ** version, it is assumed that each SegReader points to an entry in
126255: ** a doclist for identical terms. Comparison is made as follows:
126256: **
126257: **   1) EOF (end of doclist in this case) is greater than not EOF.
126258: **
126259: **   2) By current docid.
126260: **
126261: **   3) By segment age. An older segment is considered larger.
126262: */
126263: static int fts3SegReaderDoclistCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
126264:   int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0);
126265:   if( rc==0 ){
126266:     if( pLhs->iDocid==pRhs->iDocid ){
126267:       rc = pRhs->iIdx - pLhs->iIdx;
126268:     }else{
126269:       rc = (pLhs->iDocid > pRhs->iDocid) ? 1 : -1;
126270:     }
126271:   }
126272:   assert( pLhs->aNode && pRhs->aNode );
126273:   return rc;
126274: }
126275: static int fts3SegReaderDoclistCmpRev(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
126276:   int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0);
126277:   if( rc==0 ){
126278:     if( pLhs->iDocid==pRhs->iDocid ){
126279:       rc = pRhs->iIdx - pLhs->iIdx;
126280:     }else{
126281:       rc = (pLhs->iDocid < pRhs->iDocid) ? 1 : -1;
126282:     }
126283:   }
126284:   assert( pLhs->aNode && pRhs->aNode );
126285:   return rc;
126286: }
126287: 
126288: /*
126289: ** Compare the term that the Fts3SegReader object passed as the first argument
126290: ** points to with the term specified by arguments zTerm and nTerm. 
126291: **
126292: ** If the pSeg iterator is already at EOF, return 0. Otherwise, return
126293: ** -ve if the pSeg term is less than zTerm/nTerm, 0 if the two terms are
126294: ** equal, or +ve if the pSeg term is greater than zTerm/nTerm.
126295: */
126296: static int fts3SegReaderTermCmp(
126297:   Fts3SegReader *pSeg,            /* Segment reader object */
126298:   const char *zTerm,              /* Term to compare to */
126299:   int nTerm                       /* Size of term zTerm in bytes */
126300: ){
126301:   int res = 0;
126302:   if( pSeg->aNode ){
126303:     if( pSeg->nTerm>nTerm ){
126304:       res = memcmp(pSeg->zTerm, zTerm, nTerm);
126305:     }else{
126306:       res = memcmp(pSeg->zTerm, zTerm, pSeg->nTerm);
126307:     }
126308:     if( res==0 ){
126309:       res = pSeg->nTerm-nTerm;
126310:     }
126311:   }
126312:   return res;
126313: }
126314: 
126315: /*
126316: ** Argument apSegment is an array of nSegment elements. It is known that
126317: ** the final (nSegment-nSuspect) members are already in sorted order
126318: ** (according to the comparison function provided). This function shuffles
126319: ** the array around until all entries are in sorted order.
126320: */
126321: static void fts3SegReaderSort(
126322:   Fts3SegReader **apSegment,                     /* Array to sort entries of */
126323:   int nSegment,                                  /* Size of apSegment array */
126324:   int nSuspect,                                  /* Unsorted entry count */
126325:   int (*xCmp)(Fts3SegReader *, Fts3SegReader *)  /* Comparison function */
126326: ){
126327:   int i;                          /* Iterator variable */
126328: 
126329:   assert( nSuspect<=nSegment );
126330: 
126331:   if( nSuspect==nSegment ) nSuspect--;
126332:   for(i=nSuspect-1; i>=0; i--){
126333:     int j;
126334:     for(j=i; j<(nSegment-1); j++){
126335:       Fts3SegReader *pTmp;
126336:       if( xCmp(apSegment[j], apSegment[j+1])<0 ) break;
126337:       pTmp = apSegment[j+1];
126338:       apSegment[j+1] = apSegment[j];
126339:       apSegment[j] = pTmp;
126340:     }
126341:   }
126342: 
126343: #ifndef NDEBUG
126344:   /* Check that the list really is sorted now. */
126345:   for(i=0; i<(nSuspect-1); i++){
126346:     assert( xCmp(apSegment[i], apSegment[i+1])<0 );
126347:   }
126348: #endif
126349: }
126350: 
126351: /* 
126352: ** Insert a record into the %_segments table.
126353: */
126354: static int fts3WriteSegment(
126355:   Fts3Table *p,                   /* Virtual table handle */
126356:   sqlite3_int64 iBlock,           /* Block id for new block */
126357:   char *z,                        /* Pointer to buffer containing block data */
126358:   int n                           /* Size of buffer z in bytes */
126359: ){
126360:   sqlite3_stmt *pStmt;
126361:   int rc = fts3SqlStmt(p, SQL_INSERT_SEGMENTS, &pStmt, 0);
126362:   if( rc==SQLITE_OK ){
126363:     sqlite3_bind_int64(pStmt, 1, iBlock);
126364:     sqlite3_bind_blob(pStmt, 2, z, n, SQLITE_STATIC);
126365:     sqlite3_step(pStmt);
126366:     rc = sqlite3_reset(pStmt);
126367:   }
126368:   return rc;
126369: }
126370: 
126371: /* 
126372: ** Insert a record into the %_segdir table.
126373: */
126374: static int fts3WriteSegdir(
126375:   Fts3Table *p,                   /* Virtual table handle */
126376:   int iLevel,                     /* Value for "level" field */
126377:   int iIdx,                       /* Value for "idx" field */
126378:   sqlite3_int64 iStartBlock,      /* Value for "start_block" field */
126379:   sqlite3_int64 iLeafEndBlock,    /* Value for "leaves_end_block" field */
126380:   sqlite3_int64 iEndBlock,        /* Value for "end_block" field */
126381:   char *zRoot,                    /* Blob value for "root" field */
126382:   int nRoot                       /* Number of bytes in buffer zRoot */
126383: ){
126384:   sqlite3_stmt *pStmt;
126385:   int rc = fts3SqlStmt(p, SQL_INSERT_SEGDIR, &pStmt, 0);
126386:   if( rc==SQLITE_OK ){
126387:     sqlite3_bind_int(pStmt, 1, iLevel);
126388:     sqlite3_bind_int(pStmt, 2, iIdx);
126389:     sqlite3_bind_int64(pStmt, 3, iStartBlock);
126390:     sqlite3_bind_int64(pStmt, 4, iLeafEndBlock);
126391:     sqlite3_bind_int64(pStmt, 5, iEndBlock);
126392:     sqlite3_bind_blob(pStmt, 6, zRoot, nRoot, SQLITE_STATIC);
126393:     sqlite3_step(pStmt);
126394:     rc = sqlite3_reset(pStmt);
126395:   }
126396:   return rc;
126397: }
126398: 
126399: /*
126400: ** Return the size of the common prefix (if any) shared by zPrev and
126401: ** zNext, in bytes. For example, 
126402: **
126403: **   fts3PrefixCompress("abc", 3, "abcdef", 6)   // returns 3
126404: **   fts3PrefixCompress("abX", 3, "abcdef", 6)   // returns 2
126405: **   fts3PrefixCompress("abX", 3, "Xbcdef", 6)   // returns 0
126406: */
126407: static int fts3PrefixCompress(
126408:   const char *zPrev,              /* Buffer containing previous term */
126409:   int nPrev,                      /* Size of buffer zPrev in bytes */
126410:   const char *zNext,              /* Buffer containing next term */
126411:   int nNext                       /* Size of buffer zNext in bytes */
126412: ){
126413:   int n;
126414:   UNUSED_PARAMETER(nNext);
126415:   for(n=0; n<nPrev && zPrev[n]==zNext[n]; n++);
126416:   return n;
126417: }
126418: 
126419: /*
126420: ** Add term zTerm to the SegmentNode. It is guaranteed that zTerm is larger
126421: ** (according to memcmp) than the previous term.
126422: */
126423: static int fts3NodeAddTerm(
126424:   Fts3Table *p,                   /* Virtual table handle */
126425:   SegmentNode **ppTree,           /* IN/OUT: SegmentNode handle */ 
126426:   int isCopyTerm,                 /* True if zTerm/nTerm is transient */
126427:   const char *zTerm,              /* Pointer to buffer containing term */
126428:   int nTerm                       /* Size of term in bytes */
126429: ){
126430:   SegmentNode *pTree = *ppTree;
126431:   int rc;
126432:   SegmentNode *pNew;
126433: 
126434:   /* First try to append the term to the current node. Return early if 
126435:   ** this is possible.
126436:   */
126437:   if( pTree ){
126438:     int nData = pTree->nData;     /* Current size of node in bytes */
126439:     int nReq = nData;             /* Required space after adding zTerm */
126440:     int nPrefix;                  /* Number of bytes of prefix compression */
126441:     int nSuffix;                  /* Suffix length */
126442: 
126443:     nPrefix = fts3PrefixCompress(pTree->zTerm, pTree->nTerm, zTerm, nTerm);
126444:     nSuffix = nTerm-nPrefix;
126445: 
126446:     nReq += sqlite3Fts3VarintLen(nPrefix)+sqlite3Fts3VarintLen(nSuffix)+nSuffix;
126447:     if( nReq<=p->nNodeSize || !pTree->zTerm ){
126448: 
126449:       if( nReq>p->nNodeSize ){
126450:         /* An unusual case: this is the first term to be added to the node
126451:         ** and the static node buffer (p->nNodeSize bytes) is not large
126452:         ** enough. Use a separately malloced buffer instead This wastes
126453:         ** p->nNodeSize bytes, but since this scenario only comes about when
126454:         ** the database contain two terms that share a prefix of almost 2KB, 
126455:         ** this is not expected to be a serious problem. 
126456:         */
126457:         assert( pTree->aData==(char *)&pTree[1] );
126458:         pTree->aData = (char *)sqlite3_malloc(nReq);
126459:         if( !pTree->aData ){
126460:           return SQLITE_NOMEM;
126461:         }
126462:       }
126463: 
126464:       if( pTree->zTerm ){
126465:         /* There is no prefix-length field for first term in a node */
126466:         nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nPrefix);
126467:       }
126468: 
126469:       nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nSuffix);
126470:       memcpy(&pTree->aData[nData], &zTerm[nPrefix], nSuffix);
126471:       pTree->nData = nData + nSuffix;
126472:       pTree->nEntry++;
126473: 
126474:       if( isCopyTerm ){
126475:         if( pTree->nMalloc<nTerm ){
126476:           char *zNew = sqlite3_realloc(pTree->zMalloc, nTerm*2);
126477:           if( !zNew ){
126478:             return SQLITE_NOMEM;
126479:           }
126480:           pTree->nMalloc = nTerm*2;
126481:           pTree->zMalloc = zNew;
126482:         }
126483:         pTree->zTerm = pTree->zMalloc;
126484:         memcpy(pTree->zTerm, zTerm, nTerm);
126485:         pTree->nTerm = nTerm;
126486:       }else{
126487:         pTree->zTerm = (char *)zTerm;
126488:         pTree->nTerm = nTerm;
126489:       }
126490:       return SQLITE_OK;
126491:     }
126492:   }
126493: 
126494:   /* If control flows to here, it was not possible to append zTerm to the
126495:   ** current node. Create a new node (a right-sibling of the current node).
126496:   ** If this is the first node in the tree, the term is added to it.
126497:   **
126498:   ** Otherwise, the term is not added to the new node, it is left empty for
126499:   ** now. Instead, the term is inserted into the parent of pTree. If pTree 
126500:   ** has no parent, one is created here.
126501:   */
126502:   pNew = (SegmentNode *)sqlite3_malloc(sizeof(SegmentNode) + p->nNodeSize);
126503:   if( !pNew ){
126504:     return SQLITE_NOMEM;
126505:   }
126506:   memset(pNew, 0, sizeof(SegmentNode));
126507:   pNew->nData = 1 + FTS3_VARINT_MAX;
126508:   pNew->aData = (char *)&pNew[1];
126509: 
126510:   if( pTree ){
126511:     SegmentNode *pParent = pTree->pParent;
126512:     rc = fts3NodeAddTerm(p, &pParent, isCopyTerm, zTerm, nTerm);
126513:     if( pTree->pParent==0 ){
126514:       pTree->pParent = pParent;
126515:     }
126516:     pTree->pRight = pNew;
126517:     pNew->pLeftmost = pTree->pLeftmost;
126518:     pNew->pParent = pParent;
126519:     pNew->zMalloc = pTree->zMalloc;
126520:     pNew->nMalloc = pTree->nMalloc;
126521:     pTree->zMalloc = 0;
126522:   }else{
126523:     pNew->pLeftmost = pNew;
126524:     rc = fts3NodeAddTerm(p, &pNew, isCopyTerm, zTerm, nTerm); 
126525:   }
126526: 
126527:   *ppTree = pNew;
126528:   return rc;
126529: }
126530: 
126531: /*
126532: ** Helper function for fts3NodeWrite().
126533: */
126534: static int fts3TreeFinishNode(
126535:   SegmentNode *pTree, 
126536:   int iHeight, 
126537:   sqlite3_int64 iLeftChild
126538: ){
126539:   int nStart;
126540:   assert( iHeight>=1 && iHeight<128 );
126541:   nStart = FTS3_VARINT_MAX - sqlite3Fts3VarintLen(iLeftChild);
126542:   pTree->aData[nStart] = (char)iHeight;
126543:   sqlite3Fts3PutVarint(&pTree->aData[nStart+1], iLeftChild);
126544:   return nStart;
126545: }
126546: 
126547: /*
126548: ** Write the buffer for the segment node pTree and all of its peers to the
126549: ** database. Then call this function recursively to write the parent of 
126550: ** pTree and its peers to the database. 
126551: **
126552: ** Except, if pTree is a root node, do not write it to the database. Instead,
126553: ** set output variables *paRoot and *pnRoot to contain the root node.
126554: **
126555: ** If successful, SQLITE_OK is returned and output variable *piLast is
126556: ** set to the largest blockid written to the database (or zero if no
126557: ** blocks were written to the db). Otherwise, an SQLite error code is 
126558: ** returned.
126559: */
126560: static int fts3NodeWrite(
126561:   Fts3Table *p,                   /* Virtual table handle */
126562:   SegmentNode *pTree,             /* SegmentNode handle */
126563:   int iHeight,                    /* Height of this node in tree */
126564:   sqlite3_int64 iLeaf,            /* Block id of first leaf node */
126565:   sqlite3_int64 iFree,            /* Block id of next free slot in %_segments */
126566:   sqlite3_int64 *piLast,          /* OUT: Block id of last entry written */
126567:   char **paRoot,                  /* OUT: Data for root node */
126568:   int *pnRoot                     /* OUT: Size of root node in bytes */
126569: ){
126570:   int rc = SQLITE_OK;
126571: 
126572:   if( !pTree->pParent ){
126573:     /* Root node of the tree. */
126574:     int nStart = fts3TreeFinishNode(pTree, iHeight, iLeaf);
126575:     *piLast = iFree-1;
126576:     *pnRoot = pTree->nData - nStart;
126577:     *paRoot = &pTree->aData[nStart];
126578:   }else{
126579:     SegmentNode *pIter;
126580:     sqlite3_int64 iNextFree = iFree;
126581:     sqlite3_int64 iNextLeaf = iLeaf;
126582:     for(pIter=pTree->pLeftmost; pIter && rc==SQLITE_OK; pIter=pIter->pRight){
126583:       int nStart = fts3TreeFinishNode(pIter, iHeight, iNextLeaf);
126584:       int nWrite = pIter->nData - nStart;
126585:   
126586:       rc = fts3WriteSegment(p, iNextFree, &pIter->aData[nStart], nWrite);
126587:       iNextFree++;
126588:       iNextLeaf += (pIter->nEntry+1);
126589:     }
126590:     if( rc==SQLITE_OK ){
126591:       assert( iNextLeaf==iFree );
126592:       rc = fts3NodeWrite(
126593:           p, pTree->pParent, iHeight+1, iFree, iNextFree, piLast, paRoot, pnRoot
126594:       );
126595:     }
126596:   }
126597: 
126598:   return rc;
126599: }
126600: 
126601: /*
126602: ** Free all memory allocations associated with the tree pTree.
126603: */
126604: static void fts3NodeFree(SegmentNode *pTree){
126605:   if( pTree ){
126606:     SegmentNode *p = pTree->pLeftmost;
126607:     fts3NodeFree(p->pParent);
126608:     while( p ){
126609:       SegmentNode *pRight = p->pRight;
126610:       if( p->aData!=(char *)&p[1] ){
126611:         sqlite3_free(p->aData);
126612:       }
126613:       assert( pRight==0 || p->zMalloc==0 );
126614:       sqlite3_free(p->zMalloc);
126615:       sqlite3_free(p);
126616:       p = pRight;
126617:     }
126618:   }
126619: }
126620: 
126621: /*
126622: ** Add a term to the segment being constructed by the SegmentWriter object
126623: ** *ppWriter. When adding the first term to a segment, *ppWriter should
126624: ** be passed NULL. This function will allocate a new SegmentWriter object
126625: ** and return it via the input/output variable *ppWriter in this case.
126626: **
126627: ** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code.
126628: */
126629: static int fts3SegWriterAdd(
126630:   Fts3Table *p,                   /* Virtual table handle */
126631:   SegmentWriter **ppWriter,       /* IN/OUT: SegmentWriter handle */ 
126632:   int isCopyTerm,                 /* True if buffer zTerm must be copied */
126633:   const char *zTerm,              /* Pointer to buffer containing term */
126634:   int nTerm,                      /* Size of term in bytes */
126635:   const char *aDoclist,           /* Pointer to buffer containing doclist */
126636:   int nDoclist                    /* Size of doclist in bytes */
126637: ){
126638:   int nPrefix;                    /* Size of term prefix in bytes */
126639:   int nSuffix;                    /* Size of term suffix in bytes */
126640:   int nReq;                       /* Number of bytes required on leaf page */
126641:   int nData;
126642:   SegmentWriter *pWriter = *ppWriter;
126643: 
126644:   if( !pWriter ){
126645:     int rc;
126646:     sqlite3_stmt *pStmt;
126647: 
126648:     /* Allocate the SegmentWriter structure */
126649:     pWriter = (SegmentWriter *)sqlite3_malloc(sizeof(SegmentWriter));
126650:     if( !pWriter ) return SQLITE_NOMEM;
126651:     memset(pWriter, 0, sizeof(SegmentWriter));
126652:     *ppWriter = pWriter;
126653: 
126654:     /* Allocate a buffer in which to accumulate data */
126655:     pWriter->aData = (char *)sqlite3_malloc(p->nNodeSize);
126656:     if( !pWriter->aData ) return SQLITE_NOMEM;
126657:     pWriter->nSize = p->nNodeSize;
126658: 
126659:     /* Find the next free blockid in the %_segments table */
126660:     rc = fts3SqlStmt(p, SQL_NEXT_SEGMENTS_ID, &pStmt, 0);
126661:     if( rc!=SQLITE_OK ) return rc;
126662:     if( SQLITE_ROW==sqlite3_step(pStmt) ){
126663:       pWriter->iFree = sqlite3_column_int64(pStmt, 0);
126664:       pWriter->iFirst = pWriter->iFree;
126665:     }
126666:     rc = sqlite3_reset(pStmt);
126667:     if( rc!=SQLITE_OK ) return rc;
126668:   }
126669:   nData = pWriter->nData;
126670: 
126671:   nPrefix = fts3PrefixCompress(pWriter->zTerm, pWriter->nTerm, zTerm, nTerm);
126672:   nSuffix = nTerm-nPrefix;
126673: 
126674:   /* Figure out how many bytes are required by this new entry */
126675:   nReq = sqlite3Fts3VarintLen(nPrefix) +    /* varint containing prefix size */
126676:     sqlite3Fts3VarintLen(nSuffix) +         /* varint containing suffix size */
126677:     nSuffix +                               /* Term suffix */
126678:     sqlite3Fts3VarintLen(nDoclist) +        /* Size of doclist */
126679:     nDoclist;                               /* Doclist data */
126680: 
126681:   if( nData>0 && nData+nReq>p->nNodeSize ){
126682:     int rc;
126683: 
126684:     /* The current leaf node is full. Write it out to the database. */
126685:     rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, nData);
126686:     if( rc!=SQLITE_OK ) return rc;
126687: 
126688:     /* Add the current term to the interior node tree. The term added to
126689:     ** the interior tree must:
126690:     **
126691:     **   a) be greater than the largest term on the leaf node just written
126692:     **      to the database (still available in pWriter->zTerm), and
126693:     **
126694:     **   b) be less than or equal to the term about to be added to the new
126695:     **      leaf node (zTerm/nTerm).
126696:     **
126697:     ** In other words, it must be the prefix of zTerm 1 byte longer than
126698:     ** the common prefix (if any) of zTerm and pWriter->zTerm.
126699:     */
126700:     assert( nPrefix<nTerm );
126701:     rc = fts3NodeAddTerm(p, &pWriter->pTree, isCopyTerm, zTerm, nPrefix+1);
126702:     if( rc!=SQLITE_OK ) return rc;
126703: 
126704:     nData = 0;
126705:     pWriter->nTerm = 0;
126706: 
126707:     nPrefix = 0;
126708:     nSuffix = nTerm;
126709:     nReq = 1 +                              /* varint containing prefix size */
126710:       sqlite3Fts3VarintLen(nTerm) +         /* varint containing suffix size */
126711:       nTerm +                               /* Term suffix */
126712:       sqlite3Fts3VarintLen(nDoclist) +      /* Size of doclist */
126713:       nDoclist;                             /* Doclist data */
126714:   }
126715: 
126716:   /* If the buffer currently allocated is too small for this entry, realloc
126717:   ** the buffer to make it large enough.
126718:   */
126719:   if( nReq>pWriter->nSize ){
126720:     char *aNew = sqlite3_realloc(pWriter->aData, nReq);
126721:     if( !aNew ) return SQLITE_NOMEM;
126722:     pWriter->aData = aNew;
126723:     pWriter->nSize = nReq;
126724:   }
126725:   assert( nData+nReq<=pWriter->nSize );
126726: 
126727:   /* Append the prefix-compressed term and doclist to the buffer. */
126728:   nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nPrefix);
126729:   nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nSuffix);
126730:   memcpy(&pWriter->aData[nData], &zTerm[nPrefix], nSuffix);
126731:   nData += nSuffix;
126732:   nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nDoclist);
126733:   memcpy(&pWriter->aData[nData], aDoclist, nDoclist);
126734:   pWriter->nData = nData + nDoclist;
126735: 
126736:   /* Save the current term so that it can be used to prefix-compress the next.
126737:   ** If the isCopyTerm parameter is true, then the buffer pointed to by
126738:   ** zTerm is transient, so take a copy of the term data. Otherwise, just
126739:   ** store a copy of the pointer.
126740:   */
126741:   if( isCopyTerm ){
126742:     if( nTerm>pWriter->nMalloc ){
126743:       char *zNew = sqlite3_realloc(pWriter->zMalloc, nTerm*2);
126744:       if( !zNew ){
126745:         return SQLITE_NOMEM;
126746:       }
126747:       pWriter->nMalloc = nTerm*2;
126748:       pWriter->zMalloc = zNew;
126749:       pWriter->zTerm = zNew;
126750:     }
126751:     assert( pWriter->zTerm==pWriter->zMalloc );
126752:     memcpy(pWriter->zTerm, zTerm, nTerm);
126753:   }else{
126754:     pWriter->zTerm = (char *)zTerm;
126755:   }
126756:   pWriter->nTerm = nTerm;
126757: 
126758:   return SQLITE_OK;
126759: }
126760: 
126761: /*
126762: ** Flush all data associated with the SegmentWriter object pWriter to the
126763: ** database. This function must be called after all terms have been added
126764: ** to the segment using fts3SegWriterAdd(). If successful, SQLITE_OK is
126765: ** returned. Otherwise, an SQLite error code.
126766: */
126767: static int fts3SegWriterFlush(
126768:   Fts3Table *p,                   /* Virtual table handle */
126769:   SegmentWriter *pWriter,         /* SegmentWriter to flush to the db */
126770:   int iLevel,                     /* Value for 'level' column of %_segdir */
126771:   int iIdx                        /* Value for 'idx' column of %_segdir */
126772: ){
126773:   int rc;                         /* Return code */
126774:   if( pWriter->pTree ){
126775:     sqlite3_int64 iLast = 0;      /* Largest block id written to database */
126776:     sqlite3_int64 iLastLeaf;      /* Largest leaf block id written to db */
126777:     char *zRoot = NULL;           /* Pointer to buffer containing root node */
126778:     int nRoot = 0;                /* Size of buffer zRoot */
126779: 
126780:     iLastLeaf = pWriter->iFree;
126781:     rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, pWriter->nData);
126782:     if( rc==SQLITE_OK ){
126783:       rc = fts3NodeWrite(p, pWriter->pTree, 1,
126784:           pWriter->iFirst, pWriter->iFree, &iLast, &zRoot, &nRoot);
126785:     }
126786:     if( rc==SQLITE_OK ){
126787:       rc = fts3WriteSegdir(
126788:           p, iLevel, iIdx, pWriter->iFirst, iLastLeaf, iLast, zRoot, nRoot);
126789:     }
126790:   }else{
126791:     /* The entire tree fits on the root node. Write it to the segdir table. */
126792:     rc = fts3WriteSegdir(
126793:         p, iLevel, iIdx, 0, 0, 0, pWriter->aData, pWriter->nData);
126794:   }
126795:   return rc;
126796: }
126797: 
126798: /*
126799: ** Release all memory held by the SegmentWriter object passed as the 
126800: ** first argument.
126801: */
126802: static void fts3SegWriterFree(SegmentWriter *pWriter){
126803:   if( pWriter ){
126804:     sqlite3_free(pWriter->aData);
126805:     sqlite3_free(pWriter->zMalloc);
126806:     fts3NodeFree(pWriter->pTree);
126807:     sqlite3_free(pWriter);
126808:   }
126809: }
126810: 
126811: /*
126812: ** The first value in the apVal[] array is assumed to contain an integer.
126813: ** This function tests if there exist any documents with docid values that
126814: ** are different from that integer. i.e. if deleting the document with docid
126815: ** pRowid would mean the FTS3 table were empty.
126816: **
126817: ** If successful, *pisEmpty is set to true if the table is empty except for
126818: ** document pRowid, or false otherwise, and SQLITE_OK is returned. If an
126819: ** error occurs, an SQLite error code is returned.
126820: */
126821: static int fts3IsEmpty(Fts3Table *p, sqlite3_value *pRowid, int *pisEmpty){
126822:   sqlite3_stmt *pStmt;
126823:   int rc;
126824:   if( p->zContentTbl ){
126825:     /* If using the content=xxx option, assume the table is never empty */
126826:     *pisEmpty = 0;
126827:     rc = SQLITE_OK;
126828:   }else{
126829:     rc = fts3SqlStmt(p, SQL_IS_EMPTY, &pStmt, &pRowid);
126830:     if( rc==SQLITE_OK ){
126831:       if( SQLITE_ROW==sqlite3_step(pStmt) ){
126832:         *pisEmpty = sqlite3_column_int(pStmt, 0);
126833:       }
126834:       rc = sqlite3_reset(pStmt);
126835:     }
126836:   }
126837:   return rc;
126838: }
126839: 
126840: /*
126841: ** Set *pnMax to the largest segment level in the database for the index
126842: ** iIndex.
126843: **
126844: ** Segment levels are stored in the 'level' column of the %_segdir table.
126845: **
126846: ** Return SQLITE_OK if successful, or an SQLite error code if not.
126847: */
126848: static int fts3SegmentMaxLevel(Fts3Table *p, int iIndex, int *pnMax){
126849:   sqlite3_stmt *pStmt;
126850:   int rc;
126851:   assert( iIndex>=0 && iIndex<p->nIndex );
126852: 
126853:   /* Set pStmt to the compiled version of:
126854:   **
126855:   **   SELECT max(level) FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?
126856:   **
126857:   ** (1024 is actually the value of macro FTS3_SEGDIR_PREFIXLEVEL_STR).
126858:   */
126859:   rc = fts3SqlStmt(p, SQL_SELECT_SEGDIR_MAX_LEVEL, &pStmt, 0);
126860:   if( rc!=SQLITE_OK ) return rc;
126861:   sqlite3_bind_int(pStmt, 1, iIndex*FTS3_SEGDIR_MAXLEVEL);
126862:   sqlite3_bind_int(pStmt, 2, (iIndex+1)*FTS3_SEGDIR_MAXLEVEL - 1);
126863:   if( SQLITE_ROW==sqlite3_step(pStmt) ){
126864:     *pnMax = sqlite3_column_int(pStmt, 0);
126865:   }
126866:   return sqlite3_reset(pStmt);
126867: }
126868: 
126869: /*
126870: ** This function is used after merging multiple segments into a single large
126871: ** segment to delete the old, now redundant, segment b-trees. Specifically,
126872: ** it:
126873: ** 
126874: **   1) Deletes all %_segments entries for the segments associated with 
126875: **      each of the SegReader objects in the array passed as the third 
126876: **      argument, and
126877: **
126878: **   2) deletes all %_segdir entries with level iLevel, or all %_segdir
126879: **      entries regardless of level if (iLevel<0).
126880: **
126881: ** SQLITE_OK is returned if successful, otherwise an SQLite error code.
126882: */
126883: static int fts3DeleteSegdir(
126884:   Fts3Table *p,                   /* Virtual table handle */
126885:   int iIndex,                     /* Index for p->aIndex */
126886:   int iLevel,                     /* Level of %_segdir entries to delete */
126887:   Fts3SegReader **apSegment,      /* Array of SegReader objects */
126888:   int nReader                     /* Size of array apSegment */
126889: ){
126890:   int rc;                         /* Return Code */
126891:   int i;                          /* Iterator variable */
126892:   sqlite3_stmt *pDelete;          /* SQL statement to delete rows */
126893: 
126894:   rc = fts3SqlStmt(p, SQL_DELETE_SEGMENTS_RANGE, &pDelete, 0);
126895:   for(i=0; rc==SQLITE_OK && i<nReader; i++){
126896:     Fts3SegReader *pSegment = apSegment[i];
126897:     if( pSegment->iStartBlock ){
126898:       sqlite3_bind_int64(pDelete, 1, pSegment->iStartBlock);
126899:       sqlite3_bind_int64(pDelete, 2, pSegment->iEndBlock);
126900:       sqlite3_step(pDelete);
126901:       rc = sqlite3_reset(pDelete);
126902:     }
126903:   }
126904:   if( rc!=SQLITE_OK ){
126905:     return rc;
126906:   }
126907: 
126908:   assert( iLevel>=0 || iLevel==FTS3_SEGCURSOR_ALL );
126909:   if( iLevel==FTS3_SEGCURSOR_ALL ){
126910:     rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_RANGE, &pDelete, 0);
126911:     if( rc==SQLITE_OK ){
126912:       sqlite3_bind_int(pDelete, 1, iIndex*FTS3_SEGDIR_MAXLEVEL);
126913:       sqlite3_bind_int(pDelete, 2, (iIndex+1) * FTS3_SEGDIR_MAXLEVEL - 1);
126914:     }
126915:   }else{
126916:     rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_LEVEL, &pDelete, 0);
126917:     if( rc==SQLITE_OK ){
126918:       sqlite3_bind_int(pDelete, 1, iIndex*FTS3_SEGDIR_MAXLEVEL + iLevel);
126919:     }
126920:   }
126921: 
126922:   if( rc==SQLITE_OK ){
126923:     sqlite3_step(pDelete);
126924:     rc = sqlite3_reset(pDelete);
126925:   }
126926: 
126927:   return rc;
126928: }
126929: 
126930: /*
126931: ** When this function is called, buffer *ppList (size *pnList bytes) contains 
126932: ** a position list that may (or may not) feature multiple columns. This
126933: ** function adjusts the pointer *ppList and the length *pnList so that they
126934: ** identify the subset of the position list that corresponds to column iCol.
126935: **
126936: ** If there are no entries in the input position list for column iCol, then
126937: ** *pnList is set to zero before returning.
126938: */
126939: static void fts3ColumnFilter(
126940:   int iCol,                       /* Column to filter on */
126941:   char **ppList,                  /* IN/OUT: Pointer to position list */
126942:   int *pnList                     /* IN/OUT: Size of buffer *ppList in bytes */
126943: ){
126944:   char *pList = *ppList;
126945:   int nList = *pnList;
126946:   char *pEnd = &pList[nList];
126947:   int iCurrent = 0;
126948:   char *p = pList;
126949: 
126950:   assert( iCol>=0 );
126951:   while( 1 ){
126952:     char c = 0;
126953:     while( p<pEnd && (c | *p)&0xFE ) c = *p++ & 0x80;
126954:   
126955:     if( iCol==iCurrent ){
126956:       nList = (int)(p - pList);
126957:       break;
126958:     }
126959: 
126960:     nList -= (int)(p - pList);
126961:     pList = p;
126962:     if( nList==0 ){
126963:       break;
126964:     }
126965:     p = &pList[1];
126966:     p += sqlite3Fts3GetVarint32(p, &iCurrent);
126967:   }
126968: 
126969:   *ppList = pList;
126970:   *pnList = nList;
126971: }
126972: 
126973: /*
126974: ** Cache data in the Fts3MultiSegReader.aBuffer[] buffer (overwriting any
126975: ** existing data). Grow the buffer if required.
126976: **
126977: ** If successful, return SQLITE_OK. Otherwise, if an OOM error is encountered
126978: ** trying to resize the buffer, return SQLITE_NOMEM.
126979: */
126980: static int fts3MsrBufferData(
126981:   Fts3MultiSegReader *pMsr,       /* Multi-segment-reader handle */
126982:   char *pList,
126983:   int nList
126984: ){
126985:   if( nList>pMsr->nBuffer ){
126986:     char *pNew;
126987:     pMsr->nBuffer = nList*2;
126988:     pNew = (char *)sqlite3_realloc(pMsr->aBuffer, pMsr->nBuffer);
126989:     if( !pNew ) return SQLITE_NOMEM;
126990:     pMsr->aBuffer = pNew;
126991:   }
126992: 
126993:   memcpy(pMsr->aBuffer, pList, nList);
126994:   return SQLITE_OK;
126995: }
126996: 
126997: SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext(
126998:   Fts3Table *p,                   /* Virtual table handle */
126999:   Fts3MultiSegReader *pMsr,       /* Multi-segment-reader handle */
127000:   sqlite3_int64 *piDocid,         /* OUT: Docid value */
127001:   char **paPoslist,               /* OUT: Pointer to position list */
127002:   int *pnPoslist                  /* OUT: Size of position list in bytes */
127003: ){
127004:   int nMerge = pMsr->nAdvance;
127005:   Fts3SegReader **apSegment = pMsr->apSegment;
127006:   int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
127007:     p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
127008:   );
127009: 
127010:   if( nMerge==0 ){
127011:     *paPoslist = 0;
127012:     return SQLITE_OK;
127013:   }
127014: 
127015:   while( 1 ){
127016:     Fts3SegReader *pSeg;
127017:     pSeg = pMsr->apSegment[0];
127018: 
127019:     if( pSeg->pOffsetList==0 ){
127020:       *paPoslist = 0;
127021:       break;
127022:     }else{
127023:       int rc;
127024:       char *pList;
127025:       int nList;
127026:       int j;
127027:       sqlite3_int64 iDocid = apSegment[0]->iDocid;
127028: 
127029:       rc = fts3SegReaderNextDocid(p, apSegment[0], &pList, &nList);
127030:       j = 1;
127031:       while( rc==SQLITE_OK 
127032:         && j<nMerge
127033:         && apSegment[j]->pOffsetList
127034:         && apSegment[j]->iDocid==iDocid
127035:       ){
127036:         rc = fts3SegReaderNextDocid(p, apSegment[j], 0, 0);
127037:         j++;
127038:       }
127039:       if( rc!=SQLITE_OK ) return rc;
127040:       fts3SegReaderSort(pMsr->apSegment, nMerge, j, xCmp);
127041: 
127042:       if( pMsr->iColFilter>=0 ){
127043:         fts3ColumnFilter(pMsr->iColFilter, &pList, &nList);
127044:       }
127045: 
127046:       if( nList>0 ){
127047:         if( fts3SegReaderIsPending(apSegment[0]) ){
127048:           rc = fts3MsrBufferData(pMsr, pList, nList+1);
127049:           if( rc!=SQLITE_OK ) return rc;
127050:           *paPoslist = pMsr->aBuffer;
127051:           assert( (pMsr->aBuffer[nList] & 0xFE)==0x00 );
127052:         }else{
127053:           *paPoslist = pList;
127054:         }
127055:         *piDocid = iDocid;
127056:         *pnPoslist = nList;
127057:         break;
127058:       }
127059:     }
127060:   }
127061: 
127062:   return SQLITE_OK;
127063: }
127064: 
127065: static int fts3SegReaderStart(
127066:   Fts3Table *p,                   /* Virtual table handle */
127067:   Fts3MultiSegReader *pCsr,       /* Cursor object */
127068:   const char *zTerm,              /* Term searched for (or NULL) */
127069:   int nTerm                       /* Length of zTerm in bytes */
127070: ){
127071:   int i;
127072:   int nSeg = pCsr->nSegment;
127073: 
127074:   /* If the Fts3SegFilter defines a specific term (or term prefix) to search 
127075:   ** for, then advance each segment iterator until it points to a term of
127076:   ** equal or greater value than the specified term. This prevents many
127077:   ** unnecessary merge/sort operations for the case where single segment
127078:   ** b-tree leaf nodes contain more than one term.
127079:   */
127080:   for(i=0; pCsr->bRestart==0 && i<pCsr->nSegment; i++){
127081:     Fts3SegReader *pSeg = pCsr->apSegment[i];
127082:     do {
127083:       int rc = fts3SegReaderNext(p, pSeg, 0);
127084:       if( rc!=SQLITE_OK ) return rc;
127085:     }while( zTerm && fts3SegReaderTermCmp(pSeg, zTerm, nTerm)<0 );
127086:   }
127087:   fts3SegReaderSort(pCsr->apSegment, nSeg, nSeg, fts3SegReaderCmp);
127088: 
127089:   return SQLITE_OK;
127090: }
127091: 
127092: SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(
127093:   Fts3Table *p,                   /* Virtual table handle */
127094:   Fts3MultiSegReader *pCsr,       /* Cursor object */
127095:   Fts3SegFilter *pFilter          /* Restrictions on range of iteration */
127096: ){
127097:   pCsr->pFilter = pFilter;
127098:   return fts3SegReaderStart(p, pCsr, pFilter->zTerm, pFilter->nTerm);
127099: }
127100: 
127101: SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart(
127102:   Fts3Table *p,                   /* Virtual table handle */
127103:   Fts3MultiSegReader *pCsr,       /* Cursor object */
127104:   int iCol,                       /* Column to match on. */
127105:   const char *zTerm,              /* Term to iterate through a doclist for */
127106:   int nTerm                       /* Number of bytes in zTerm */
127107: ){
127108:   int i;
127109:   int rc;
127110:   int nSegment = pCsr->nSegment;
127111:   int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
127112:     p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
127113:   );
127114: 
127115:   assert( pCsr->pFilter==0 );
127116:   assert( zTerm && nTerm>0 );
127117: 
127118:   /* Advance each segment iterator until it points to the term zTerm/nTerm. */
127119:   rc = fts3SegReaderStart(p, pCsr, zTerm, nTerm);
127120:   if( rc!=SQLITE_OK ) return rc;
127121: 
127122:   /* Determine how many of the segments actually point to zTerm/nTerm. */
127123:   for(i=0; i<nSegment; i++){
127124:     Fts3SegReader *pSeg = pCsr->apSegment[i];
127125:     if( !pSeg->aNode || fts3SegReaderTermCmp(pSeg, zTerm, nTerm) ){
127126:       break;
127127:     }
127128:   }
127129:   pCsr->nAdvance = i;
127130: 
127131:   /* Advance each of the segments to point to the first docid. */
127132:   for(i=0; i<pCsr->nAdvance; i++){
127133:     rc = fts3SegReaderFirstDocid(p, pCsr->apSegment[i]);
127134:     if( rc!=SQLITE_OK ) return rc;
127135:   }
127136:   fts3SegReaderSort(pCsr->apSegment, i, i, xCmp);
127137: 
127138:   assert( iCol<0 || iCol<p->nColumn );
127139:   pCsr->iColFilter = iCol;
127140: 
127141:   return SQLITE_OK;
127142: }
127143: 
127144: /*
127145: ** This function is called on a MultiSegReader that has been started using
127146: ** sqlite3Fts3MsrIncrStart(). One or more calls to MsrIncrNext() may also
127147: ** have been made. Calling this function puts the MultiSegReader in such
127148: ** a state that if the next two calls are:
127149: **
127150: **   sqlite3Fts3SegReaderStart()
127151: **   sqlite3Fts3SegReaderStep()
127152: **
127153: ** then the entire doclist for the term is available in 
127154: ** MultiSegReader.aDoclist/nDoclist.
127155: */
127156: SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr){
127157:   int i;                          /* Used to iterate through segment-readers */
127158: 
127159:   assert( pCsr->zTerm==0 );
127160:   assert( pCsr->nTerm==0 );
127161:   assert( pCsr->aDoclist==0 );
127162:   assert( pCsr->nDoclist==0 );
127163: 
127164:   pCsr->nAdvance = 0;
127165:   pCsr->bRestart = 1;
127166:   for(i=0; i<pCsr->nSegment; i++){
127167:     pCsr->apSegment[i]->pOffsetList = 0;
127168:     pCsr->apSegment[i]->nOffsetList = 0;
127169:     pCsr->apSegment[i]->iDocid = 0;
127170:   }
127171: 
127172:   return SQLITE_OK;
127173: }
127174: 
127175: 
127176: SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(
127177:   Fts3Table *p,                   /* Virtual table handle */
127178:   Fts3MultiSegReader *pCsr        /* Cursor object */
127179: ){
127180:   int rc = SQLITE_OK;
127181: 
127182:   int isIgnoreEmpty =  (pCsr->pFilter->flags & FTS3_SEGMENT_IGNORE_EMPTY);
127183:   int isRequirePos =   (pCsr->pFilter->flags & FTS3_SEGMENT_REQUIRE_POS);
127184:   int isColFilter =    (pCsr->pFilter->flags & FTS3_SEGMENT_COLUMN_FILTER);
127185:   int isPrefix =       (pCsr->pFilter->flags & FTS3_SEGMENT_PREFIX);
127186:   int isScan =         (pCsr->pFilter->flags & FTS3_SEGMENT_SCAN);
127187:   int isFirst =        (pCsr->pFilter->flags & FTS3_SEGMENT_FIRST);
127188: 
127189:   Fts3SegReader **apSegment = pCsr->apSegment;
127190:   int nSegment = pCsr->nSegment;
127191:   Fts3SegFilter *pFilter = pCsr->pFilter;
127192:   int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
127193:     p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
127194:   );
127195: 
127196:   if( pCsr->nSegment==0 ) return SQLITE_OK;
127197: 
127198:   do {
127199:     int nMerge;
127200:     int i;
127201:   
127202:     /* Advance the first pCsr->nAdvance entries in the apSegment[] array
127203:     ** forward. Then sort the list in order of current term again.  
127204:     */
127205:     for(i=0; i<pCsr->nAdvance; i++){
127206:       rc = fts3SegReaderNext(p, apSegment[i], 0);
127207:       if( rc!=SQLITE_OK ) return rc;
127208:     }
127209:     fts3SegReaderSort(apSegment, nSegment, pCsr->nAdvance, fts3SegReaderCmp);
127210:     pCsr->nAdvance = 0;
127211: 
127212:     /* If all the seg-readers are at EOF, we're finished. return SQLITE_OK. */
127213:     assert( rc==SQLITE_OK );
127214:     if( apSegment[0]->aNode==0 ) break;
127215: 
127216:     pCsr->nTerm = apSegment[0]->nTerm;
127217:     pCsr->zTerm = apSegment[0]->zTerm;
127218: 
127219:     /* If this is a prefix-search, and if the term that apSegment[0] points
127220:     ** to does not share a suffix with pFilter->zTerm/nTerm, then all 
127221:     ** required callbacks have been made. In this case exit early.
127222:     **
127223:     ** Similarly, if this is a search for an exact match, and the first term
127224:     ** of segment apSegment[0] is not a match, exit early.
127225:     */
127226:     if( pFilter->zTerm && !isScan ){
127227:       if( pCsr->nTerm<pFilter->nTerm 
127228:        || (!isPrefix && pCsr->nTerm>pFilter->nTerm)
127229:        || memcmp(pCsr->zTerm, pFilter->zTerm, pFilter->nTerm) 
127230:       ){
127231:         break;
127232:       }
127233:     }
127234: 
127235:     nMerge = 1;
127236:     while( nMerge<nSegment 
127237:         && apSegment[nMerge]->aNode
127238:         && apSegment[nMerge]->nTerm==pCsr->nTerm 
127239:         && 0==memcmp(pCsr->zTerm, apSegment[nMerge]->zTerm, pCsr->nTerm)
127240:     ){
127241:       nMerge++;
127242:     }
127243: 
127244:     assert( isIgnoreEmpty || (isRequirePos && !isColFilter) );
127245:     if( nMerge==1 
127246:      && !isIgnoreEmpty 
127247:      && !isFirst 
127248:      && (p->bDescIdx==0 || fts3SegReaderIsPending(apSegment[0])==0)
127249:     ){
127250:       pCsr->nDoclist = apSegment[0]->nDoclist;
127251:       if( fts3SegReaderIsPending(apSegment[0]) ){
127252:         rc = fts3MsrBufferData(pCsr, apSegment[0]->aDoclist, pCsr->nDoclist);
127253:         pCsr->aDoclist = pCsr->aBuffer;
127254:       }else{
127255:         pCsr->aDoclist = apSegment[0]->aDoclist;
127256:       }
127257:       if( rc==SQLITE_OK ) rc = SQLITE_ROW;
127258:     }else{
127259:       int nDoclist = 0;           /* Size of doclist */
127260:       sqlite3_int64 iPrev = 0;    /* Previous docid stored in doclist */
127261: 
127262:       /* The current term of the first nMerge entries in the array
127263:       ** of Fts3SegReader objects is the same. The doclists must be merged
127264:       ** and a single term returned with the merged doclist.
127265:       */
127266:       for(i=0; i<nMerge; i++){
127267:         fts3SegReaderFirstDocid(p, apSegment[i]);
127268:       }
127269:       fts3SegReaderSort(apSegment, nMerge, nMerge, xCmp);
127270:       while( apSegment[0]->pOffsetList ){
127271:         int j;                    /* Number of segments that share a docid */
127272:         char *pList;
127273:         int nList;
127274:         int nByte;
127275:         sqlite3_int64 iDocid = apSegment[0]->iDocid;
127276:         fts3SegReaderNextDocid(p, apSegment[0], &pList, &nList);
127277:         j = 1;
127278:         while( j<nMerge
127279:             && apSegment[j]->pOffsetList
127280:             && apSegment[j]->iDocid==iDocid
127281:         ){
127282:           fts3SegReaderNextDocid(p, apSegment[j], 0, 0);
127283:           j++;
127284:         }
127285: 
127286:         if( isColFilter ){
127287:           fts3ColumnFilter(pFilter->iCol, &pList, &nList);
127288:         }
127289: 
127290:         if( !isIgnoreEmpty || nList>0 ){
127291: 
127292:           /* Calculate the 'docid' delta value to write into the merged 
127293:           ** doclist. */
127294:           sqlite3_int64 iDelta;
127295:           if( p->bDescIdx && nDoclist>0 ){
127296:             iDelta = iPrev - iDocid;
127297:           }else{
127298:             iDelta = iDocid - iPrev;
127299:           }
127300:           assert( iDelta>0 || (nDoclist==0 && iDelta==iDocid) );
127301:           assert( nDoclist>0 || iDelta==iDocid );
127302: 
127303:           nByte = sqlite3Fts3VarintLen(iDelta) + (isRequirePos?nList+1:0);
127304:           if( nDoclist+nByte>pCsr->nBuffer ){
127305:             char *aNew;
127306:             pCsr->nBuffer = (nDoclist+nByte)*2;
127307:             aNew = sqlite3_realloc(pCsr->aBuffer, pCsr->nBuffer);
127308:             if( !aNew ){
127309:               return SQLITE_NOMEM;
127310:             }
127311:             pCsr->aBuffer = aNew;
127312:           }
127313: 
127314:           if( isFirst ){
127315:             char *a = &pCsr->aBuffer[nDoclist];
127316:             int nWrite;
127317:            
127318:             nWrite = sqlite3Fts3FirstFilter(iDelta, pList, nList, a);
127319:             if( nWrite ){
127320:               iPrev = iDocid;
127321:               nDoclist += nWrite;
127322:             }
127323:           }else{
127324:             nDoclist += sqlite3Fts3PutVarint(&pCsr->aBuffer[nDoclist], iDelta);
127325:             iPrev = iDocid;
127326:             if( isRequirePos ){
127327:               memcpy(&pCsr->aBuffer[nDoclist], pList, nList);
127328:               nDoclist += nList;
127329:               pCsr->aBuffer[nDoclist++] = '\0';
127330:             }
127331:           }
127332:         }
127333: 
127334:         fts3SegReaderSort(apSegment, nMerge, j, xCmp);
127335:       }
127336:       if( nDoclist>0 ){
127337:         pCsr->aDoclist = pCsr->aBuffer;
127338:         pCsr->nDoclist = nDoclist;
127339:         rc = SQLITE_ROW;
127340:       }
127341:     }
127342:     pCsr->nAdvance = nMerge;
127343:   }while( rc==SQLITE_OK );
127344: 
127345:   return rc;
127346: }
127347: 
127348: 
127349: SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish(
127350:   Fts3MultiSegReader *pCsr       /* Cursor object */
127351: ){
127352:   if( pCsr ){
127353:     int i;
127354:     for(i=0; i<pCsr->nSegment; i++){
127355:       sqlite3Fts3SegReaderFree(pCsr->apSegment[i]);
127356:     }
127357:     sqlite3_free(pCsr->apSegment);
127358:     sqlite3_free(pCsr->aBuffer);
127359: 
127360:     pCsr->nSegment = 0;
127361:     pCsr->apSegment = 0;
127362:     pCsr->aBuffer = 0;
127363:   }
127364: }
127365: 
127366: /*
127367: ** Merge all level iLevel segments in the database into a single 
127368: ** iLevel+1 segment. Or, if iLevel<0, merge all segments into a
127369: ** single segment with a level equal to the numerically largest level 
127370: ** currently present in the database.
127371: **
127372: ** If this function is called with iLevel<0, but there is only one
127373: ** segment in the database, SQLITE_DONE is returned immediately. 
127374: ** Otherwise, if successful, SQLITE_OK is returned. If an error occurs, 
127375: ** an SQLite error code is returned.
127376: */
127377: static int fts3SegmentMerge(Fts3Table *p, int iIndex, int iLevel){
127378:   int rc;                         /* Return code */
127379:   int iIdx = 0;                   /* Index of new segment */
127380:   int iNewLevel = 0;              /* Level/index to create new segment at */
127381:   SegmentWriter *pWriter = 0;     /* Used to write the new, merged, segment */
127382:   Fts3SegFilter filter;           /* Segment term filter condition */
127383:   Fts3MultiSegReader csr;        /* Cursor to iterate through level(s) */
127384:   int bIgnoreEmpty = 0;           /* True to ignore empty segments */
127385: 
127386:   assert( iLevel==FTS3_SEGCURSOR_ALL
127387:        || iLevel==FTS3_SEGCURSOR_PENDING
127388:        || iLevel>=0
127389:   );
127390:   assert( iLevel<FTS3_SEGDIR_MAXLEVEL );
127391:   assert( iIndex>=0 && iIndex<p->nIndex );
127392: 
127393:   rc = sqlite3Fts3SegReaderCursor(p, iIndex, iLevel, 0, 0, 1, 0, &csr);
127394:   if( rc!=SQLITE_OK || csr.nSegment==0 ) goto finished;
127395: 
127396:   if( iLevel==FTS3_SEGCURSOR_ALL ){
127397:     /* This call is to merge all segments in the database to a single
127398:     ** segment. The level of the new segment is equal to the the numerically 
127399:     ** greatest segment level currently present in the database for this
127400:     ** index. The idx of the new segment is always 0.  */
127401:     if( csr.nSegment==1 ){
127402:       rc = SQLITE_DONE;
127403:       goto finished;
127404:     }
127405:     rc = fts3SegmentMaxLevel(p, iIndex, &iNewLevel);
127406:     bIgnoreEmpty = 1;
127407: 
127408:   }else if( iLevel==FTS3_SEGCURSOR_PENDING ){
127409:     iNewLevel = iIndex * FTS3_SEGDIR_MAXLEVEL; 
127410:     rc = fts3AllocateSegdirIdx(p, iIndex, 0, &iIdx);
127411:   }else{
127412:     /* This call is to merge all segments at level iLevel. find the next
127413:     ** available segment index at level iLevel+1. The call to
127414:     ** fts3AllocateSegdirIdx() will merge the segments at level iLevel+1 to 
127415:     ** a single iLevel+2 segment if necessary.  */
127416:     rc = fts3AllocateSegdirIdx(p, iIndex, iLevel+1, &iIdx);
127417:     iNewLevel = iIndex * FTS3_SEGDIR_MAXLEVEL + iLevel+1;
127418:   }
127419:   if( rc!=SQLITE_OK ) goto finished;
127420:   assert( csr.nSegment>0 );
127421:   assert( iNewLevel>=(iIndex*FTS3_SEGDIR_MAXLEVEL) );
127422:   assert( iNewLevel<((iIndex+1)*FTS3_SEGDIR_MAXLEVEL) );
127423: 
127424:   memset(&filter, 0, sizeof(Fts3SegFilter));
127425:   filter.flags = FTS3_SEGMENT_REQUIRE_POS;
127426:   filter.flags |= (bIgnoreEmpty ? FTS3_SEGMENT_IGNORE_EMPTY : 0);
127427: 
127428:   rc = sqlite3Fts3SegReaderStart(p, &csr, &filter);
127429:   while( SQLITE_OK==rc ){
127430:     rc = sqlite3Fts3SegReaderStep(p, &csr);
127431:     if( rc!=SQLITE_ROW ) break;
127432:     rc = fts3SegWriterAdd(p, &pWriter, 1, 
127433:         csr.zTerm, csr.nTerm, csr.aDoclist, csr.nDoclist);
127434:   }
127435:   if( rc!=SQLITE_OK ) goto finished;
127436:   assert( pWriter );
127437: 
127438:   if( iLevel!=FTS3_SEGCURSOR_PENDING ){
127439:     rc = fts3DeleteSegdir(p, iIndex, iLevel, csr.apSegment, csr.nSegment);
127440:     if( rc!=SQLITE_OK ) goto finished;
127441:   }
127442:   rc = fts3SegWriterFlush(p, pWriter, iNewLevel, iIdx);
127443: 
127444:  finished:
127445:   fts3SegWriterFree(pWriter);
127446:   sqlite3Fts3SegReaderFinish(&csr);
127447:   return rc;
127448: }
127449: 
127450: 
127451: /* 
127452: ** Flush the contents of pendingTerms to level 0 segments.
127453: */
127454: SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *p){
127455:   int rc = SQLITE_OK;
127456:   int i;
127457:   for(i=0; rc==SQLITE_OK && i<p->nIndex; i++){
127458:     rc = fts3SegmentMerge(p, i, FTS3_SEGCURSOR_PENDING);
127459:     if( rc==SQLITE_DONE ) rc = SQLITE_OK;
127460:   }
127461:   sqlite3Fts3PendingTermsClear(p);
127462:   return rc;
127463: }
127464: 
127465: /*
127466: ** Encode N integers as varints into a blob.
127467: */
127468: static void fts3EncodeIntArray(
127469:   int N,             /* The number of integers to encode */
127470:   u32 *a,            /* The integer values */
127471:   char *zBuf,        /* Write the BLOB here */
127472:   int *pNBuf         /* Write number of bytes if zBuf[] used here */
127473: ){
127474:   int i, j;
127475:   for(i=j=0; i<N; i++){
127476:     j += sqlite3Fts3PutVarint(&zBuf[j], (sqlite3_int64)a[i]);
127477:   }
127478:   *pNBuf = j;
127479: }
127480: 
127481: /*
127482: ** Decode a blob of varints into N integers
127483: */
127484: static void fts3DecodeIntArray(
127485:   int N,             /* The number of integers to decode */
127486:   u32 *a,            /* Write the integer values */
127487:   const char *zBuf,  /* The BLOB containing the varints */
127488:   int nBuf           /* size of the BLOB */
127489: ){
127490:   int i, j;
127491:   UNUSED_PARAMETER(nBuf);
127492:   for(i=j=0; i<N; i++){
127493:     sqlite3_int64 x;
127494:     j += sqlite3Fts3GetVarint(&zBuf[j], &x);
127495:     assert(j<=nBuf);
127496:     a[i] = (u32)(x & 0xffffffff);
127497:   }
127498: }
127499: 
127500: /*
127501: ** Insert the sizes (in tokens) for each column of the document
127502: ** with docid equal to p->iPrevDocid.  The sizes are encoded as
127503: ** a blob of varints.
127504: */
127505: static void fts3InsertDocsize(
127506:   int *pRC,                       /* Result code */
127507:   Fts3Table *p,                   /* Table into which to insert */
127508:   u32 *aSz                        /* Sizes of each column, in tokens */
127509: ){
127510:   char *pBlob;             /* The BLOB encoding of the document size */
127511:   int nBlob;               /* Number of bytes in the BLOB */
127512:   sqlite3_stmt *pStmt;     /* Statement used to insert the encoding */
127513:   int rc;                  /* Result code from subfunctions */
127514: 
127515:   if( *pRC ) return;
127516:   pBlob = sqlite3_malloc( 10*p->nColumn );
127517:   if( pBlob==0 ){
127518:     *pRC = SQLITE_NOMEM;
127519:     return;
127520:   }
127521:   fts3EncodeIntArray(p->nColumn, aSz, pBlob, &nBlob);
127522:   rc = fts3SqlStmt(p, SQL_REPLACE_DOCSIZE, &pStmt, 0);
127523:   if( rc ){
127524:     sqlite3_free(pBlob);
127525:     *pRC = rc;
127526:     return;
127527:   }
127528:   sqlite3_bind_int64(pStmt, 1, p->iPrevDocid);
127529:   sqlite3_bind_blob(pStmt, 2, pBlob, nBlob, sqlite3_free);
127530:   sqlite3_step(pStmt);
127531:   *pRC = sqlite3_reset(pStmt);
127532: }
127533: 
127534: /*
127535: ** Record 0 of the %_stat table contains a blob consisting of N varints,
127536: ** where N is the number of user defined columns in the fts3 table plus
127537: ** two. If nCol is the number of user defined columns, then values of the 
127538: ** varints are set as follows:
127539: **
127540: **   Varint 0:       Total number of rows in the table.
127541: **
127542: **   Varint 1..nCol: For each column, the total number of tokens stored in
127543: **                   the column for all rows of the table.
127544: **
127545: **   Varint 1+nCol:  The total size, in bytes, of all text values in all
127546: **                   columns of all rows of the table.
127547: **
127548: */
127549: static void fts3UpdateDocTotals(
127550:   int *pRC,                       /* The result code */
127551:   Fts3Table *p,                   /* Table being updated */
127552:   u32 *aSzIns,                    /* Size increases */
127553:   u32 *aSzDel,                    /* Size decreases */
127554:   int nChng                       /* Change in the number of documents */
127555: ){
127556:   char *pBlob;             /* Storage for BLOB written into %_stat */
127557:   int nBlob;               /* Size of BLOB written into %_stat */
127558:   u32 *a;                  /* Array of integers that becomes the BLOB */
127559:   sqlite3_stmt *pStmt;     /* Statement for reading and writing */
127560:   int i;                   /* Loop counter */
127561:   int rc;                  /* Result code from subfunctions */
127562: 
127563:   const int nStat = p->nColumn+2;
127564: 
127565:   if( *pRC ) return;
127566:   a = sqlite3_malloc( (sizeof(u32)+10)*nStat );
127567:   if( a==0 ){
127568:     *pRC = SQLITE_NOMEM;
127569:     return;
127570:   }
127571:   pBlob = (char*)&a[nStat];
127572:   rc = fts3SqlStmt(p, SQL_SELECT_DOCTOTAL, &pStmt, 0);
127573:   if( rc ){
127574:     sqlite3_free(a);
127575:     *pRC = rc;
127576:     return;
127577:   }
127578:   if( sqlite3_step(pStmt)==SQLITE_ROW ){
127579:     fts3DecodeIntArray(nStat, a,
127580:          sqlite3_column_blob(pStmt, 0),
127581:          sqlite3_column_bytes(pStmt, 0));
127582:   }else{
127583:     memset(a, 0, sizeof(u32)*(nStat) );
127584:   }
127585:   sqlite3_reset(pStmt);
127586:   if( nChng<0 && a[0]<(u32)(-nChng) ){
127587:     a[0] = 0;
127588:   }else{
127589:     a[0] += nChng;
127590:   }
127591:   for(i=0; i<p->nColumn+1; i++){
127592:     u32 x = a[i+1];
127593:     if( x+aSzIns[i] < aSzDel[i] ){
127594:       x = 0;
127595:     }else{
127596:       x = x + aSzIns[i] - aSzDel[i];
127597:     }
127598:     a[i+1] = x;
127599:   }
127600:   fts3EncodeIntArray(nStat, a, pBlob, &nBlob);
127601:   rc = fts3SqlStmt(p, SQL_REPLACE_DOCTOTAL, &pStmt, 0);
127602:   if( rc ){
127603:     sqlite3_free(a);
127604:     *pRC = rc;
127605:     return;
127606:   }
127607:   sqlite3_bind_blob(pStmt, 1, pBlob, nBlob, SQLITE_STATIC);
127608:   sqlite3_step(pStmt);
127609:   *pRC = sqlite3_reset(pStmt);
127610:   sqlite3_free(a);
127611: }
127612: 
127613: static int fts3DoOptimize(Fts3Table *p, int bReturnDone){
127614:   int i;
127615:   int bSeenDone = 0;
127616:   int rc = SQLITE_OK;
127617:   for(i=0; rc==SQLITE_OK && i<p->nIndex; i++){
127618:     rc = fts3SegmentMerge(p, i, FTS3_SEGCURSOR_ALL);
127619:     if( rc==SQLITE_DONE ){
127620:       bSeenDone = 1;
127621:       rc = SQLITE_OK;
127622:     }
127623:   }
127624:   sqlite3Fts3SegmentsClose(p);
127625:   sqlite3Fts3PendingTermsClear(p);
127626: 
127627:   return (rc==SQLITE_OK && bReturnDone && bSeenDone) ? SQLITE_DONE : rc;
127628: }
127629: 
127630: /*
127631: ** This function is called when the user executes the following statement:
127632: **
127633: **     INSERT INTO <tbl>(<tbl>) VALUES('rebuild');
127634: **
127635: ** The entire FTS index is discarded and rebuilt. If the table is one 
127636: ** created using the content=xxx option, then the new index is based on
127637: ** the current contents of the xxx table. Otherwise, it is rebuilt based
127638: ** on the contents of the %_content table.
127639: */
127640: static int fts3DoRebuild(Fts3Table *p){
127641:   int rc;                         /* Return Code */
127642: 
127643:   rc = fts3DeleteAll(p, 0);
127644:   if( rc==SQLITE_OK ){
127645:     u32 *aSz = 0;
127646:     u32 *aSzIns = 0;
127647:     u32 *aSzDel = 0;
127648:     sqlite3_stmt *pStmt = 0;
127649:     int nEntry = 0;
127650: 
127651:     /* Compose and prepare an SQL statement to loop through the content table */
127652:     char *zSql = sqlite3_mprintf("SELECT %s" , p->zReadExprlist);
127653:     if( !zSql ){
127654:       rc = SQLITE_NOMEM;
127655:     }else{
127656:       rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
127657:       sqlite3_free(zSql);
127658:     }
127659: 
127660:     if( rc==SQLITE_OK ){
127661:       int nByte = sizeof(u32) * (p->nColumn+1)*3;
127662:       aSz = (u32 *)sqlite3_malloc(nByte);
127663:       if( aSz==0 ){
127664:         rc = SQLITE_NOMEM;
127665:       }else{
127666:         memset(aSz, 0, nByte);
127667:         aSzIns = &aSz[p->nColumn+1];
127668:         aSzDel = &aSzIns[p->nColumn+1];
127669:       }
127670:     }
127671: 
127672:     while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
127673:       int iCol;
127674:       rc = fts3PendingTermsDocid(p, sqlite3_column_int64(pStmt, 0));
127675:       aSz[p->nColumn] = 0;
127676:       for(iCol=0; rc==SQLITE_OK && iCol<p->nColumn; iCol++){
127677:         const char *z = (const char *) sqlite3_column_text(pStmt, iCol+1);
127678:         rc = fts3PendingTermsAdd(p, z, iCol, &aSz[iCol]);
127679:         aSz[p->nColumn] += sqlite3_column_bytes(pStmt, iCol+1);
127680:       }
127681:       if( p->bHasDocsize ){
127682:         fts3InsertDocsize(&rc, p, aSz);
127683:       }
127684:       if( rc!=SQLITE_OK ){
127685:         sqlite3_finalize(pStmt);
127686:         pStmt = 0;
127687:       }else{
127688:         nEntry++;
127689:         for(iCol=0; iCol<=p->nColumn; iCol++){
127690:           aSzIns[iCol] += aSz[iCol];
127691:         }
127692:       }
127693:     }
127694:     if( p->bHasStat ){
127695:       fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nEntry);
127696:     }
127697:     sqlite3_free(aSz);
127698: 
127699:     if( pStmt ){
127700:       int rc2 = sqlite3_finalize(pStmt);
127701:       if( rc==SQLITE_OK ){
127702:         rc = rc2;
127703:       }
127704:     }
127705:   }
127706: 
127707:   return rc;
127708: }
127709: 
127710: /*
127711: ** Handle a 'special' INSERT of the form:
127712: **
127713: **   "INSERT INTO tbl(tbl) VALUES(<expr>)"
127714: **
127715: ** Argument pVal contains the result of <expr>. Currently the only 
127716: ** meaningful value to insert is the text 'optimize'.
127717: */
127718: static int fts3SpecialInsert(Fts3Table *p, sqlite3_value *pVal){
127719:   int rc;                         /* Return Code */
127720:   const char *zVal = (const char *)sqlite3_value_text(pVal);
127721:   int nVal = sqlite3_value_bytes(pVal);
127722: 
127723:   if( !zVal ){
127724:     return SQLITE_NOMEM;
127725:   }else if( nVal==8 && 0==sqlite3_strnicmp(zVal, "optimize", 8) ){
127726:     rc = fts3DoOptimize(p, 0);
127727:   }else if( nVal==7 && 0==sqlite3_strnicmp(zVal, "rebuild", 7) ){
127728:     rc = fts3DoRebuild(p);
127729: #ifdef SQLITE_TEST
127730:   }else if( nVal>9 && 0==sqlite3_strnicmp(zVal, "nodesize=", 9) ){
127731:     p->nNodeSize = atoi(&zVal[9]);
127732:     rc = SQLITE_OK;
127733:   }else if( nVal>11 && 0==sqlite3_strnicmp(zVal, "maxpending=", 9) ){
127734:     p->nMaxPendingData = atoi(&zVal[11]);
127735:     rc = SQLITE_OK;
127736: #endif
127737:   }else{
127738:     rc = SQLITE_ERROR;
127739:   }
127740: 
127741:   return rc;
127742: }
127743: 
127744: /*
127745: ** Delete all cached deferred doclists. Deferred doclists are cached
127746: ** (allocated) by the sqlite3Fts3CacheDeferredDoclists() function.
127747: */
127748: SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *pCsr){
127749:   Fts3DeferredToken *pDef;
127750:   for(pDef=pCsr->pDeferred; pDef; pDef=pDef->pNext){
127751:     fts3PendingListDelete(pDef->pList);
127752:     pDef->pList = 0;
127753:   }
127754: }
127755: 
127756: /*
127757: ** Free all entries in the pCsr->pDeffered list. Entries are added to 
127758: ** this list using sqlite3Fts3DeferToken().
127759: */
127760: SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *pCsr){
127761:   Fts3DeferredToken *pDef;
127762:   Fts3DeferredToken *pNext;
127763:   for(pDef=pCsr->pDeferred; pDef; pDef=pNext){
127764:     pNext = pDef->pNext;
127765:     fts3PendingListDelete(pDef->pList);
127766:     sqlite3_free(pDef);
127767:   }
127768:   pCsr->pDeferred = 0;
127769: }
127770: 
127771: /*
127772: ** Generate deferred-doclists for all tokens in the pCsr->pDeferred list
127773: ** based on the row that pCsr currently points to.
127774: **
127775: ** A deferred-doclist is like any other doclist with position information
127776: ** included, except that it only contains entries for a single row of the
127777: ** table, not for all rows.
127778: */
127779: SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *pCsr){
127780:   int rc = SQLITE_OK;             /* Return code */
127781:   if( pCsr->pDeferred ){
127782:     int i;                        /* Used to iterate through table columns */
127783:     sqlite3_int64 iDocid;         /* Docid of the row pCsr points to */
127784:     Fts3DeferredToken *pDef;      /* Used to iterate through deferred tokens */
127785:   
127786:     Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
127787:     sqlite3_tokenizer *pT = p->pTokenizer;
127788:     sqlite3_tokenizer_module const *pModule = pT->pModule;
127789:    
127790:     assert( pCsr->isRequireSeek==0 );
127791:     iDocid = sqlite3_column_int64(pCsr->pStmt, 0);
127792:   
127793:     for(i=0; i<p->nColumn && rc==SQLITE_OK; i++){
127794:       const char *zText = (const char *)sqlite3_column_text(pCsr->pStmt, i+1);
127795:       sqlite3_tokenizer_cursor *pTC = 0;
127796:   
127797:       rc = pModule->xOpen(pT, zText, -1, &pTC);
127798:       while( rc==SQLITE_OK ){
127799:         char const *zToken;       /* Buffer containing token */
127800:         int nToken;               /* Number of bytes in token */
127801:         int iDum1, iDum2;         /* Dummy variables */
127802:         int iPos;                 /* Position of token in zText */
127803:   
127804:         pTC->pTokenizer = pT;
127805:         rc = pModule->xNext(pTC, &zToken, &nToken, &iDum1, &iDum2, &iPos);
127806:         for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){
127807:           Fts3PhraseToken *pPT = pDef->pToken;
127808:           if( (pDef->iCol>=p->nColumn || pDef->iCol==i)
127809:            && (pPT->bFirst==0 || iPos==0)
127810:            && (pPT->n==nToken || (pPT->isPrefix && pPT->n<nToken))
127811:            && (0==memcmp(zToken, pPT->z, pPT->n))
127812:           ){
127813:             fts3PendingListAppend(&pDef->pList, iDocid, i, iPos, &rc);
127814:           }
127815:         }
127816:       }
127817:       if( pTC ) pModule->xClose(pTC);
127818:       if( rc==SQLITE_DONE ) rc = SQLITE_OK;
127819:     }
127820:   
127821:     for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){
127822:       if( pDef->pList ){
127823:         rc = fts3PendingListAppendVarint(&pDef->pList, 0);
127824:       }
127825:     }
127826:   }
127827: 
127828:   return rc;
127829: }
127830: 
127831: SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList(
127832:   Fts3DeferredToken *p, 
127833:   char **ppData, 
127834:   int *pnData
127835: ){
127836:   char *pRet;
127837:   int nSkip;
127838:   sqlite3_int64 dummy;
127839: 
127840:   *ppData = 0;
127841:   *pnData = 0;
127842: 
127843:   if( p->pList==0 ){
127844:     return SQLITE_OK;
127845:   }
127846: 
127847:   pRet = (char *)sqlite3_malloc(p->pList->nData);
127848:   if( !pRet ) return SQLITE_NOMEM;
127849: 
127850:   nSkip = sqlite3Fts3GetVarint(p->pList->aData, &dummy);
127851:   *pnData = p->pList->nData - nSkip;
127852:   *ppData = pRet;
127853:   
127854:   memcpy(pRet, &p->pList->aData[nSkip], *pnData);
127855:   return SQLITE_OK;
127856: }
127857: 
127858: /*
127859: ** Add an entry for token pToken to the pCsr->pDeferred list.
127860: */
127861: SQLITE_PRIVATE int sqlite3Fts3DeferToken(
127862:   Fts3Cursor *pCsr,               /* Fts3 table cursor */
127863:   Fts3PhraseToken *pToken,        /* Token to defer */
127864:   int iCol                        /* Column that token must appear in (or -1) */
127865: ){
127866:   Fts3DeferredToken *pDeferred;
127867:   pDeferred = sqlite3_malloc(sizeof(*pDeferred));
127868:   if( !pDeferred ){
127869:     return SQLITE_NOMEM;
127870:   }
127871:   memset(pDeferred, 0, sizeof(*pDeferred));
127872:   pDeferred->pToken = pToken;
127873:   pDeferred->pNext = pCsr->pDeferred; 
127874:   pDeferred->iCol = iCol;
127875:   pCsr->pDeferred = pDeferred;
127876: 
127877:   assert( pToken->pDeferred==0 );
127878:   pToken->pDeferred = pDeferred;
127879: 
127880:   return SQLITE_OK;
127881: }
127882: 
127883: /*
127884: ** SQLite value pRowid contains the rowid of a row that may or may not be
127885: ** present in the FTS3 table. If it is, delete it and adjust the contents
127886: ** of subsiduary data structures accordingly.
127887: */
127888: static int fts3DeleteByRowid(
127889:   Fts3Table *p, 
127890:   sqlite3_value *pRowid, 
127891:   int *pnDoc,
127892:   u32 *aSzDel
127893: ){
127894:   int isEmpty = 0;
127895:   int rc = fts3IsEmpty(p, pRowid, &isEmpty);
127896:   if( rc==SQLITE_OK ){
127897:     if( isEmpty ){
127898:       /* Deleting this row means the whole table is empty. In this case
127899:       ** delete the contents of all three tables and throw away any
127900:       ** data in the pendingTerms hash table.  */
127901:       rc = fts3DeleteAll(p, 1);
127902:       *pnDoc = *pnDoc - 1;
127903:     }else{
127904:       sqlite3_int64 iRemove = sqlite3_value_int64(pRowid);
127905:       rc = fts3PendingTermsDocid(p, iRemove);
127906:       fts3DeleteTerms(&rc, p, pRowid, aSzDel);
127907:       if( p->zContentTbl==0 ){
127908:         fts3SqlExec(&rc, p, SQL_DELETE_CONTENT, &pRowid);
127909:         if( sqlite3_changes(p->db) ) *pnDoc = *pnDoc - 1;
127910:       }else{
127911:         *pnDoc = *pnDoc - 1;
127912:       }
127913:       if( p->bHasDocsize ){
127914:         fts3SqlExec(&rc, p, SQL_DELETE_DOCSIZE, &pRowid);
127915:       }
127916:     }
127917:   }
127918: 
127919:   return rc;
127920: }
127921: 
127922: /*
127923: ** This function does the work for the xUpdate method of FTS3 virtual
127924: ** tables.
127925: */
127926: SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(
127927:   sqlite3_vtab *pVtab,            /* FTS3 vtab object */
127928:   int nArg,                       /* Size of argument array */
127929:   sqlite3_value **apVal,          /* Array of arguments */
127930:   sqlite_int64 *pRowid            /* OUT: The affected (or effected) rowid */
127931: ){
127932:   Fts3Table *p = (Fts3Table *)pVtab;
127933:   int rc = SQLITE_OK;             /* Return Code */
127934:   int isRemove = 0;               /* True for an UPDATE or DELETE */
127935:   u32 *aSzIns = 0;                /* Sizes of inserted documents */
127936:   u32 *aSzDel;                    /* Sizes of deleted documents */
127937:   int nChng = 0;                  /* Net change in number of documents */
127938:   int bInsertDone = 0;
127939: 
127940:   assert( p->pSegments==0 );
127941: 
127942:   /* Check for a "special" INSERT operation. One of the form:
127943:   **
127944:   **   INSERT INTO xyz(xyz) VALUES('command');
127945:   */
127946:   if( nArg>1 
127947:    && sqlite3_value_type(apVal[0])==SQLITE_NULL 
127948:    && sqlite3_value_type(apVal[p->nColumn+2])!=SQLITE_NULL 
127949:   ){
127950:     rc = fts3SpecialInsert(p, apVal[p->nColumn+2]);
127951:     goto update_out;
127952:   }
127953: 
127954:   /* Allocate space to hold the change in document sizes */
127955:   aSzIns = sqlite3_malloc( sizeof(aSzIns[0])*(p->nColumn+1)*2 );
127956:   if( aSzIns==0 ){
127957:     rc = SQLITE_NOMEM;
127958:     goto update_out;
127959:   }
127960:   aSzDel = &aSzIns[p->nColumn+1];
127961:   memset(aSzIns, 0, sizeof(aSzIns[0])*(p->nColumn+1)*2);
127962: 
127963:   /* If this is an INSERT operation, or an UPDATE that modifies the rowid
127964:   ** value, then this operation requires constraint handling.
127965:   **
127966:   ** If the on-conflict mode is REPLACE, this means that the existing row
127967:   ** should be deleted from the database before inserting the new row. Or,
127968:   ** if the on-conflict mode is other than REPLACE, then this method must
127969:   ** detect the conflict and return SQLITE_CONSTRAINT before beginning to
127970:   ** modify the database file.
127971:   */
127972:   if( nArg>1 && p->zContentTbl==0 ){
127973:     /* Find the value object that holds the new rowid value. */
127974:     sqlite3_value *pNewRowid = apVal[3+p->nColumn];
127975:     if( sqlite3_value_type(pNewRowid)==SQLITE_NULL ){
127976:       pNewRowid = apVal[1];
127977:     }
127978: 
127979:     if( sqlite3_value_type(pNewRowid)!=SQLITE_NULL && ( 
127980:         sqlite3_value_type(apVal[0])==SQLITE_NULL
127981:      || sqlite3_value_int64(apVal[0])!=sqlite3_value_int64(pNewRowid)
127982:     )){
127983:       /* The new rowid is not NULL (in this case the rowid will be
127984:       ** automatically assigned and there is no chance of a conflict), and 
127985:       ** the statement is either an INSERT or an UPDATE that modifies the
127986:       ** rowid column. So if the conflict mode is REPLACE, then delete any
127987:       ** existing row with rowid=pNewRowid. 
127988:       **
127989:       ** Or, if the conflict mode is not REPLACE, insert the new record into 
127990:       ** the %_content table. If we hit the duplicate rowid constraint (or any
127991:       ** other error) while doing so, return immediately.
127992:       **
127993:       ** This branch may also run if pNewRowid contains a value that cannot
127994:       ** be losslessly converted to an integer. In this case, the eventual 
127995:       ** call to fts3InsertData() (either just below or further on in this
127996:       ** function) will return SQLITE_MISMATCH. If fts3DeleteByRowid is 
127997:       ** invoked, it will delete zero rows (since no row will have
127998:       ** docid=$pNewRowid if $pNewRowid is not an integer value).
127999:       */
128000:       if( sqlite3_vtab_on_conflict(p->db)==SQLITE_REPLACE ){
128001:         rc = fts3DeleteByRowid(p, pNewRowid, &nChng, aSzDel);
128002:       }else{
128003:         rc = fts3InsertData(p, apVal, pRowid);
128004:         bInsertDone = 1;
128005:       }
128006:     }
128007:   }
128008:   if( rc!=SQLITE_OK ){
128009:     goto update_out;
128010:   }
128011: 
128012:   /* If this is a DELETE or UPDATE operation, remove the old record. */
128013:   if( sqlite3_value_type(apVal[0])!=SQLITE_NULL ){
128014:     assert( sqlite3_value_type(apVal[0])==SQLITE_INTEGER );
128015:     rc = fts3DeleteByRowid(p, apVal[0], &nChng, aSzDel);
128016:     isRemove = 1;
128017:   }
128018:   
128019:   /* If this is an INSERT or UPDATE operation, insert the new record. */
128020:   if( nArg>1 && rc==SQLITE_OK ){
128021:     if( bInsertDone==0 ){
128022:       rc = fts3InsertData(p, apVal, pRowid);
128023:       if( rc==SQLITE_CONSTRAINT && p->zContentTbl==0 ){
128024:         rc = FTS_CORRUPT_VTAB;
128025:       }
128026:     }
128027:     if( rc==SQLITE_OK && (!isRemove || *pRowid!=p->iPrevDocid ) ){
128028:       rc = fts3PendingTermsDocid(p, *pRowid);
128029:     }
128030:     if( rc==SQLITE_OK ){
128031:       assert( p->iPrevDocid==*pRowid );
128032:       rc = fts3InsertTerms(p, apVal, aSzIns);
128033:     }
128034:     if( p->bHasDocsize ){
128035:       fts3InsertDocsize(&rc, p, aSzIns);
128036:     }
128037:     nChng++;
128038:   }
128039: 
128040:   if( p->bHasStat ){
128041:     fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nChng);
128042:   }
128043: 
128044:  update_out:
128045:   sqlite3_free(aSzIns);
128046:   sqlite3Fts3SegmentsClose(p);
128047:   return rc;
128048: }
128049: 
128050: /* 
128051: ** Flush any data in the pending-terms hash table to disk. If successful,
128052: ** merge all segments in the database (including the new segment, if 
128053: ** there was any data to flush) into a single segment. 
128054: */
128055: SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *p){
128056:   int rc;
128057:   rc = sqlite3_exec(p->db, "SAVEPOINT fts3", 0, 0, 0);
128058:   if( rc==SQLITE_OK ){
128059:     rc = fts3DoOptimize(p, 1);
128060:     if( rc==SQLITE_OK || rc==SQLITE_DONE ){
128061:       int rc2 = sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0);
128062:       if( rc2!=SQLITE_OK ) rc = rc2;
128063:     }else{
128064:       sqlite3_exec(p->db, "ROLLBACK TO fts3", 0, 0, 0);
128065:       sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0);
128066:     }
128067:   }
128068:   sqlite3Fts3SegmentsClose(p);
128069:   return rc;
128070: }
128071: 
128072: #endif
128073: 
128074: /************** End of fts3_write.c ******************************************/
128075: /************** Begin file fts3_snippet.c ************************************/
128076: /*
128077: ** 2009 Oct 23
128078: **
128079: ** The author disclaims copyright to this source code.  In place of
128080: ** a legal notice, here is a blessing:
128081: **
128082: **    May you do good and not evil.
128083: **    May you find forgiveness for yourself and forgive others.
128084: **    May you share freely, never taking more than you give.
128085: **
128086: ******************************************************************************
128087: */
128088: 
128089: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
128090: 
128091: /* #include <string.h> */
128092: /* #include <assert.h> */
128093: 
128094: /*
128095: ** Characters that may appear in the second argument to matchinfo().
128096: */
128097: #define FTS3_MATCHINFO_NPHRASE   'p'        /* 1 value */
128098: #define FTS3_MATCHINFO_NCOL      'c'        /* 1 value */
128099: #define FTS3_MATCHINFO_NDOC      'n'        /* 1 value */
128100: #define FTS3_MATCHINFO_AVGLENGTH 'a'        /* nCol values */
128101: #define FTS3_MATCHINFO_LENGTH    'l'        /* nCol values */
128102: #define FTS3_MATCHINFO_LCS       's'        /* nCol values */
128103: #define FTS3_MATCHINFO_HITS      'x'        /* 3*nCol*nPhrase values */
128104: 
128105: /*
128106: ** The default value for the second argument to matchinfo(). 
128107: */
128108: #define FTS3_MATCHINFO_DEFAULT   "pcx"
128109: 
128110: 
128111: /*
128112: ** Used as an fts3ExprIterate() context when loading phrase doclists to
128113: ** Fts3Expr.aDoclist[]/nDoclist.
128114: */
128115: typedef struct LoadDoclistCtx LoadDoclistCtx;
128116: struct LoadDoclistCtx {
128117:   Fts3Cursor *pCsr;               /* FTS3 Cursor */
128118:   int nPhrase;                    /* Number of phrases seen so far */
128119:   int nToken;                     /* Number of tokens seen so far */
128120: };
128121: 
128122: /*
128123: ** The following types are used as part of the implementation of the 
128124: ** fts3BestSnippet() routine.
128125: */
128126: typedef struct SnippetIter SnippetIter;
128127: typedef struct SnippetPhrase SnippetPhrase;
128128: typedef struct SnippetFragment SnippetFragment;
128129: 
128130: struct SnippetIter {
128131:   Fts3Cursor *pCsr;               /* Cursor snippet is being generated from */
128132:   int iCol;                       /* Extract snippet from this column */
128133:   int nSnippet;                   /* Requested snippet length (in tokens) */
128134:   int nPhrase;                    /* Number of phrases in query */
128135:   SnippetPhrase *aPhrase;         /* Array of size nPhrase */
128136:   int iCurrent;                   /* First token of current snippet */
128137: };
128138: 
128139: struct SnippetPhrase {
128140:   int nToken;                     /* Number of tokens in phrase */
128141:   char *pList;                    /* Pointer to start of phrase position list */
128142:   int iHead;                      /* Next value in position list */
128143:   char *pHead;                    /* Position list data following iHead */
128144:   int iTail;                      /* Next value in trailing position list */
128145:   char *pTail;                    /* Position list data following iTail */
128146: };
128147: 
128148: struct SnippetFragment {
128149:   int iCol;                       /* Column snippet is extracted from */
128150:   int iPos;                       /* Index of first token in snippet */
128151:   u64 covered;                    /* Mask of query phrases covered */
128152:   u64 hlmask;                     /* Mask of snippet terms to highlight */
128153: };
128154: 
128155: /*
128156: ** This type is used as an fts3ExprIterate() context object while 
128157: ** accumulating the data returned by the matchinfo() function.
128158: */
128159: typedef struct MatchInfo MatchInfo;
128160: struct MatchInfo {
128161:   Fts3Cursor *pCursor;            /* FTS3 Cursor */
128162:   int nCol;                       /* Number of columns in table */
128163:   int nPhrase;                    /* Number of matchable phrases in query */
128164:   sqlite3_int64 nDoc;             /* Number of docs in database */
128165:   u32 *aMatchinfo;                /* Pre-allocated buffer */
128166: };
128167: 
128168: 
128169: 
128170: /*
128171: ** The snippet() and offsets() functions both return text values. An instance
128172: ** of the following structure is used to accumulate those values while the
128173: ** functions are running. See fts3StringAppend() for details.
128174: */
128175: typedef struct StrBuffer StrBuffer;
128176: struct StrBuffer {
128177:   char *z;                        /* Pointer to buffer containing string */
128178:   int n;                          /* Length of z in bytes (excl. nul-term) */
128179:   int nAlloc;                     /* Allocated size of buffer z in bytes */
128180: };
128181: 
128182: 
128183: /*
128184: ** This function is used to help iterate through a position-list. A position
128185: ** list is a list of unique integers, sorted from smallest to largest. Each
128186: ** element of the list is represented by an FTS3 varint that takes the value
128187: ** of the difference between the current element and the previous one plus
128188: ** two. For example, to store the position-list:
128189: **
128190: **     4 9 113
128191: **
128192: ** the three varints:
128193: **
128194: **     6 7 106
128195: **
128196: ** are encoded.
128197: **
128198: ** When this function is called, *pp points to the start of an element of
128199: ** the list. *piPos contains the value of the previous entry in the list.
128200: ** After it returns, *piPos contains the value of the next element of the
128201: ** list and *pp is advanced to the following varint.
128202: */
128203: static void fts3GetDeltaPosition(char **pp, int *piPos){
128204:   int iVal;
128205:   *pp += sqlite3Fts3GetVarint32(*pp, &iVal);
128206:   *piPos += (iVal-2);
128207: }
128208: 
128209: /*
128210: ** Helper function for fts3ExprIterate() (see below).
128211: */
128212: static int fts3ExprIterate2(
128213:   Fts3Expr *pExpr,                /* Expression to iterate phrases of */
128214:   int *piPhrase,                  /* Pointer to phrase counter */
128215:   int (*x)(Fts3Expr*,int,void*),  /* Callback function to invoke for phrases */
128216:   void *pCtx                      /* Second argument to pass to callback */
128217: ){
128218:   int rc;                         /* Return code */
128219:   int eType = pExpr->eType;       /* Type of expression node pExpr */
128220: 
128221:   if( eType!=FTSQUERY_PHRASE ){
128222:     assert( pExpr->pLeft && pExpr->pRight );
128223:     rc = fts3ExprIterate2(pExpr->pLeft, piPhrase, x, pCtx);
128224:     if( rc==SQLITE_OK && eType!=FTSQUERY_NOT ){
128225:       rc = fts3ExprIterate2(pExpr->pRight, piPhrase, x, pCtx);
128226:     }
128227:   }else{
128228:     rc = x(pExpr, *piPhrase, pCtx);
128229:     (*piPhrase)++;
128230:   }
128231:   return rc;
128232: }
128233: 
128234: /*
128235: ** Iterate through all phrase nodes in an FTS3 query, except those that
128236: ** are part of a sub-tree that is the right-hand-side of a NOT operator.
128237: ** For each phrase node found, the supplied callback function is invoked.
128238: **
128239: ** If the callback function returns anything other than SQLITE_OK, 
128240: ** the iteration is abandoned and the error code returned immediately.
128241: ** Otherwise, SQLITE_OK is returned after a callback has been made for
128242: ** all eligible phrase nodes.
128243: */
128244: static int fts3ExprIterate(
128245:   Fts3Expr *pExpr,                /* Expression to iterate phrases of */
128246:   int (*x)(Fts3Expr*,int,void*),  /* Callback function to invoke for phrases */
128247:   void *pCtx                      /* Second argument to pass to callback */
128248: ){
128249:   int iPhrase = 0;                /* Variable used as the phrase counter */
128250:   return fts3ExprIterate2(pExpr, &iPhrase, x, pCtx);
128251: }
128252: 
128253: /*
128254: ** This is an fts3ExprIterate() callback used while loading the doclists
128255: ** for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also
128256: ** fts3ExprLoadDoclists().
128257: */
128258: static int fts3ExprLoadDoclistsCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
128259:   int rc = SQLITE_OK;
128260:   Fts3Phrase *pPhrase = pExpr->pPhrase;
128261:   LoadDoclistCtx *p = (LoadDoclistCtx *)ctx;
128262: 
128263:   UNUSED_PARAMETER(iPhrase);
128264: 
128265:   p->nPhrase++;
128266:   p->nToken += pPhrase->nToken;
128267: 
128268:   return rc;
128269: }
128270: 
128271: /*
128272: ** Load the doclists for each phrase in the query associated with FTS3 cursor
128273: ** pCsr. 
128274: **
128275: ** If pnPhrase is not NULL, then *pnPhrase is set to the number of matchable 
128276: ** phrases in the expression (all phrases except those directly or 
128277: ** indirectly descended from the right-hand-side of a NOT operator). If 
128278: ** pnToken is not NULL, then it is set to the number of tokens in all
128279: ** matchable phrases of the expression.
128280: */
128281: static int fts3ExprLoadDoclists(
128282:   Fts3Cursor *pCsr,               /* Fts3 cursor for current query */
128283:   int *pnPhrase,                  /* OUT: Number of phrases in query */
128284:   int *pnToken                    /* OUT: Number of tokens in query */
128285: ){
128286:   int rc;                         /* Return Code */
128287:   LoadDoclistCtx sCtx = {0,0,0};  /* Context for fts3ExprIterate() */
128288:   sCtx.pCsr = pCsr;
128289:   rc = fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb, (void *)&sCtx);
128290:   if( pnPhrase ) *pnPhrase = sCtx.nPhrase;
128291:   if( pnToken ) *pnToken = sCtx.nToken;
128292:   return rc;
128293: }
128294: 
128295: static int fts3ExprPhraseCountCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
128296:   (*(int *)ctx)++;
128297:   UNUSED_PARAMETER(pExpr);
128298:   UNUSED_PARAMETER(iPhrase);
128299:   return SQLITE_OK;
128300: }
128301: static int fts3ExprPhraseCount(Fts3Expr *pExpr){
128302:   int nPhrase = 0;
128303:   (void)fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase);
128304:   return nPhrase;
128305: }
128306: 
128307: /*
128308: ** Advance the position list iterator specified by the first two 
128309: ** arguments so that it points to the first element with a value greater
128310: ** than or equal to parameter iNext.
128311: */
128312: static void fts3SnippetAdvance(char **ppIter, int *piIter, int iNext){
128313:   char *pIter = *ppIter;
128314:   if( pIter ){
128315:     int iIter = *piIter;
128316: 
128317:     while( iIter<iNext ){
128318:       if( 0==(*pIter & 0xFE) ){
128319:         iIter = -1;
128320:         pIter = 0;
128321:         break;
128322:       }
128323:       fts3GetDeltaPosition(&pIter, &iIter);
128324:     }
128325: 
128326:     *piIter = iIter;
128327:     *ppIter = pIter;
128328:   }
128329: }
128330: 
128331: /*
128332: ** Advance the snippet iterator to the next candidate snippet.
128333: */
128334: static int fts3SnippetNextCandidate(SnippetIter *pIter){
128335:   int i;                          /* Loop counter */
128336: 
128337:   if( pIter->iCurrent<0 ){
128338:     /* The SnippetIter object has just been initialized. The first snippet
128339:     ** candidate always starts at offset 0 (even if this candidate has a
128340:     ** score of 0.0).
128341:     */
128342:     pIter->iCurrent = 0;
128343: 
128344:     /* Advance the 'head' iterator of each phrase to the first offset that
128345:     ** is greater than or equal to (iNext+nSnippet).
128346:     */
128347:     for(i=0; i<pIter->nPhrase; i++){
128348:       SnippetPhrase *pPhrase = &pIter->aPhrase[i];
128349:       fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, pIter->nSnippet);
128350:     }
128351:   }else{
128352:     int iStart;
128353:     int iEnd = 0x7FFFFFFF;
128354: 
128355:     for(i=0; i<pIter->nPhrase; i++){
128356:       SnippetPhrase *pPhrase = &pIter->aPhrase[i];
128357:       if( pPhrase->pHead && pPhrase->iHead<iEnd ){
128358:         iEnd = pPhrase->iHead;
128359:       }
128360:     }
128361:     if( iEnd==0x7FFFFFFF ){
128362:       return 1;
128363:     }
128364: 
128365:     pIter->iCurrent = iStart = iEnd - pIter->nSnippet + 1;
128366:     for(i=0; i<pIter->nPhrase; i++){
128367:       SnippetPhrase *pPhrase = &pIter->aPhrase[i];
128368:       fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, iEnd+1);
128369:       fts3SnippetAdvance(&pPhrase->pTail, &pPhrase->iTail, iStart);
128370:     }
128371:   }
128372: 
128373:   return 0;
128374: }
128375: 
128376: /*
128377: ** Retrieve information about the current candidate snippet of snippet 
128378: ** iterator pIter.
128379: */
128380: static void fts3SnippetDetails(
128381:   SnippetIter *pIter,             /* Snippet iterator */
128382:   u64 mCovered,                   /* Bitmask of phrases already covered */
128383:   int *piToken,                   /* OUT: First token of proposed snippet */
128384:   int *piScore,                   /* OUT: "Score" for this snippet */
128385:   u64 *pmCover,                   /* OUT: Bitmask of phrases covered */
128386:   u64 *pmHighlight                /* OUT: Bitmask of terms to highlight */
128387: ){
128388:   int iStart = pIter->iCurrent;   /* First token of snippet */
128389:   int iScore = 0;                 /* Score of this snippet */
128390:   int i;                          /* Loop counter */
128391:   u64 mCover = 0;                 /* Mask of phrases covered by this snippet */
128392:   u64 mHighlight = 0;             /* Mask of tokens to highlight in snippet */
128393: 
128394:   for(i=0; i<pIter->nPhrase; i++){
128395:     SnippetPhrase *pPhrase = &pIter->aPhrase[i];
128396:     if( pPhrase->pTail ){
128397:       char *pCsr = pPhrase->pTail;
128398:       int iCsr = pPhrase->iTail;
128399: 
128400:       while( iCsr<(iStart+pIter->nSnippet) ){
128401:         int j;
128402:         u64 mPhrase = (u64)1 << i;
128403:         u64 mPos = (u64)1 << (iCsr - iStart);
128404:         assert( iCsr>=iStart );
128405:         if( (mCover|mCovered)&mPhrase ){
128406:           iScore++;
128407:         }else{
128408:           iScore += 1000;
128409:         }
128410:         mCover |= mPhrase;
128411: 
128412:         for(j=0; j<pPhrase->nToken; j++){
128413:           mHighlight |= (mPos>>j);
128414:         }
128415: 
128416:         if( 0==(*pCsr & 0x0FE) ) break;
128417:         fts3GetDeltaPosition(&pCsr, &iCsr);
128418:       }
128419:     }
128420:   }
128421: 
128422:   /* Set the output variables before returning. */
128423:   *piToken = iStart;
128424:   *piScore = iScore;
128425:   *pmCover = mCover;
128426:   *pmHighlight = mHighlight;
128427: }
128428: 
128429: /*
128430: ** This function is an fts3ExprIterate() callback used by fts3BestSnippet().
128431: ** Each invocation populates an element of the SnippetIter.aPhrase[] array.
128432: */
128433: static int fts3SnippetFindPositions(Fts3Expr *pExpr, int iPhrase, void *ctx){
128434:   SnippetIter *p = (SnippetIter *)ctx;
128435:   SnippetPhrase *pPhrase = &p->aPhrase[iPhrase];
128436:   char *pCsr;
128437: 
128438:   pPhrase->nToken = pExpr->pPhrase->nToken;
128439: 
128440:   pCsr = sqlite3Fts3EvalPhrasePoslist(p->pCsr, pExpr, p->iCol);
128441:   if( pCsr ){
128442:     int iFirst = 0;
128443:     pPhrase->pList = pCsr;
128444:     fts3GetDeltaPosition(&pCsr, &iFirst);
128445:     assert( iFirst>=0 );
128446:     pPhrase->pHead = pCsr;
128447:     pPhrase->pTail = pCsr;
128448:     pPhrase->iHead = iFirst;
128449:     pPhrase->iTail = iFirst;
128450:   }else{
128451:     assert( pPhrase->pList==0 && pPhrase->pHead==0 && pPhrase->pTail==0 );
128452:   }
128453: 
128454:   return SQLITE_OK;
128455: }
128456: 
128457: /*
128458: ** Select the fragment of text consisting of nFragment contiguous tokens 
128459: ** from column iCol that represent the "best" snippet. The best snippet
128460: ** is the snippet with the highest score, where scores are calculated
128461: ** by adding:
128462: **
128463: **   (a) +1 point for each occurence of a matchable phrase in the snippet.
128464: **
128465: **   (b) +1000 points for the first occurence of each matchable phrase in 
128466: **       the snippet for which the corresponding mCovered bit is not set.
128467: **
128468: ** The selected snippet parameters are stored in structure *pFragment before
128469: ** returning. The score of the selected snippet is stored in *piScore
128470: ** before returning.
128471: */
128472: static int fts3BestSnippet(
128473:   int nSnippet,                   /* Desired snippet length */
128474:   Fts3Cursor *pCsr,               /* Cursor to create snippet for */
128475:   int iCol,                       /* Index of column to create snippet from */
128476:   u64 mCovered,                   /* Mask of phrases already covered */
128477:   u64 *pmSeen,                    /* IN/OUT: Mask of phrases seen */
128478:   SnippetFragment *pFragment,     /* OUT: Best snippet found */
128479:   int *piScore                    /* OUT: Score of snippet pFragment */
128480: ){
128481:   int rc;                         /* Return Code */
128482:   int nList;                      /* Number of phrases in expression */
128483:   SnippetIter sIter;              /* Iterates through snippet candidates */
128484:   int nByte;                      /* Number of bytes of space to allocate */
128485:   int iBestScore = -1;            /* Best snippet score found so far */
128486:   int i;                          /* Loop counter */
128487: 
128488:   memset(&sIter, 0, sizeof(sIter));
128489: 
128490:   /* Iterate through the phrases in the expression to count them. The same
128491:   ** callback makes sure the doclists are loaded for each phrase.
128492:   */
128493:   rc = fts3ExprLoadDoclists(pCsr, &nList, 0);
128494:   if( rc!=SQLITE_OK ){
128495:     return rc;
128496:   }
128497: 
128498:   /* Now that it is known how many phrases there are, allocate and zero
128499:   ** the required space using malloc().
128500:   */
128501:   nByte = sizeof(SnippetPhrase) * nList;
128502:   sIter.aPhrase = (SnippetPhrase *)sqlite3_malloc(nByte);
128503:   if( !sIter.aPhrase ){
128504:     return SQLITE_NOMEM;
128505:   }
128506:   memset(sIter.aPhrase, 0, nByte);
128507: 
128508:   /* Initialize the contents of the SnippetIter object. Then iterate through
128509:   ** the set of phrases in the expression to populate the aPhrase[] array.
128510:   */
128511:   sIter.pCsr = pCsr;
128512:   sIter.iCol = iCol;
128513:   sIter.nSnippet = nSnippet;
128514:   sIter.nPhrase = nList;
128515:   sIter.iCurrent = -1;
128516:   (void)fts3ExprIterate(pCsr->pExpr, fts3SnippetFindPositions, (void *)&sIter);
128517: 
128518:   /* Set the *pmSeen output variable. */
128519:   for(i=0; i<nList; i++){
128520:     if( sIter.aPhrase[i].pHead ){
128521:       *pmSeen |= (u64)1 << i;
128522:     }
128523:   }
128524: 
128525:   /* Loop through all candidate snippets. Store the best snippet in 
128526:   ** *pFragment. Store its associated 'score' in iBestScore.
128527:   */
128528:   pFragment->iCol = iCol;
128529:   while( !fts3SnippetNextCandidate(&sIter) ){
128530:     int iPos;
128531:     int iScore;
128532:     u64 mCover;
128533:     u64 mHighlight;
128534:     fts3SnippetDetails(&sIter, mCovered, &iPos, &iScore, &mCover, &mHighlight);
128535:     assert( iScore>=0 );
128536:     if( iScore>iBestScore ){
128537:       pFragment->iPos = iPos;
128538:       pFragment->hlmask = mHighlight;
128539:       pFragment->covered = mCover;
128540:       iBestScore = iScore;
128541:     }
128542:   }
128543: 
128544:   sqlite3_free(sIter.aPhrase);
128545:   *piScore = iBestScore;
128546:   return SQLITE_OK;
128547: }
128548: 
128549: 
128550: /*
128551: ** Append a string to the string-buffer passed as the first argument.
128552: **
128553: ** If nAppend is negative, then the length of the string zAppend is
128554: ** determined using strlen().
128555: */
128556: static int fts3StringAppend(
128557:   StrBuffer *pStr,                /* Buffer to append to */
128558:   const char *zAppend,            /* Pointer to data to append to buffer */
128559:   int nAppend                     /* Size of zAppend in bytes (or -1) */
128560: ){
128561:   if( nAppend<0 ){
128562:     nAppend = (int)strlen(zAppend);
128563:   }
128564: 
128565:   /* If there is insufficient space allocated at StrBuffer.z, use realloc()
128566:   ** to grow the buffer until so that it is big enough to accomadate the
128567:   ** appended data.
128568:   */
128569:   if( pStr->n+nAppend+1>=pStr->nAlloc ){
128570:     int nAlloc = pStr->nAlloc+nAppend+100;
128571:     char *zNew = sqlite3_realloc(pStr->z, nAlloc);
128572:     if( !zNew ){
128573:       return SQLITE_NOMEM;
128574:     }
128575:     pStr->z = zNew;
128576:     pStr->nAlloc = nAlloc;
128577:   }
128578: 
128579:   /* Append the data to the string buffer. */
128580:   memcpy(&pStr->z[pStr->n], zAppend, nAppend);
128581:   pStr->n += nAppend;
128582:   pStr->z[pStr->n] = '\0';
128583: 
128584:   return SQLITE_OK;
128585: }
128586: 
128587: /*
128588: ** The fts3BestSnippet() function often selects snippets that end with a
128589: ** query term. That is, the final term of the snippet is always a term
128590: ** that requires highlighting. For example, if 'X' is a highlighted term
128591: ** and '.' is a non-highlighted term, BestSnippet() may select:
128592: **
128593: **     ........X.....X
128594: **
128595: ** This function "shifts" the beginning of the snippet forward in the 
128596: ** document so that there are approximately the same number of 
128597: ** non-highlighted terms to the right of the final highlighted term as there
128598: ** are to the left of the first highlighted term. For example, to this:
128599: **
128600: **     ....X.....X....
128601: **
128602: ** This is done as part of extracting the snippet text, not when selecting
128603: ** the snippet. Snippet selection is done based on doclists only, so there
128604: ** is no way for fts3BestSnippet() to know whether or not the document 
128605: ** actually contains terms that follow the final highlighted term. 
128606: */
128607: static int fts3SnippetShift(
128608:   Fts3Table *pTab,                /* FTS3 table snippet comes from */
128609:   int nSnippet,                   /* Number of tokens desired for snippet */
128610:   const char *zDoc,               /* Document text to extract snippet from */
128611:   int nDoc,                       /* Size of buffer zDoc in bytes */
128612:   int *piPos,                     /* IN/OUT: First token of snippet */
128613:   u64 *pHlmask                    /* IN/OUT: Mask of tokens to highlight */
128614: ){
128615:   u64 hlmask = *pHlmask;          /* Local copy of initial highlight-mask */
128616: 
128617:   if( hlmask ){
128618:     int nLeft;                    /* Tokens to the left of first highlight */
128619:     int nRight;                   /* Tokens to the right of last highlight */
128620:     int nDesired;                 /* Ideal number of tokens to shift forward */
128621: 
128622:     for(nLeft=0; !(hlmask & ((u64)1 << nLeft)); nLeft++);
128623:     for(nRight=0; !(hlmask & ((u64)1 << (nSnippet-1-nRight))); nRight++);
128624:     nDesired = (nLeft-nRight)/2;
128625: 
128626:     /* Ideally, the start of the snippet should be pushed forward in the
128627:     ** document nDesired tokens. This block checks if there are actually
128628:     ** nDesired tokens to the right of the snippet. If so, *piPos and
128629:     ** *pHlMask are updated to shift the snippet nDesired tokens to the
128630:     ** right. Otherwise, the snippet is shifted by the number of tokens
128631:     ** available.
128632:     */
128633:     if( nDesired>0 ){
128634:       int nShift;                 /* Number of tokens to shift snippet by */
128635:       int iCurrent = 0;           /* Token counter */
128636:       int rc;                     /* Return Code */
128637:       sqlite3_tokenizer_module *pMod;
128638:       sqlite3_tokenizer_cursor *pC;
128639:       pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule;
128640: 
128641:       /* Open a cursor on zDoc/nDoc. Check if there are (nSnippet+nDesired)
128642:       ** or more tokens in zDoc/nDoc.
128643:       */
128644:       rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
128645:       if( rc!=SQLITE_OK ){
128646:         return rc;
128647:       }
128648:       pC->pTokenizer = pTab->pTokenizer;
128649:       while( rc==SQLITE_OK && iCurrent<(nSnippet+nDesired) ){
128650:         const char *ZDUMMY; int DUMMY1, DUMMY2, DUMMY3;
128651:         rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &DUMMY2, &DUMMY3, &iCurrent);
128652:       }
128653:       pMod->xClose(pC);
128654:       if( rc!=SQLITE_OK && rc!=SQLITE_DONE ){ return rc; }
128655: 
128656:       nShift = (rc==SQLITE_DONE)+iCurrent-nSnippet;
128657:       assert( nShift<=nDesired );
128658:       if( nShift>0 ){
128659:         *piPos += nShift;
128660:         *pHlmask = hlmask >> nShift;
128661:       }
128662:     }
128663:   }
128664:   return SQLITE_OK;
128665: }
128666: 
128667: /*
128668: ** Extract the snippet text for fragment pFragment from cursor pCsr and
128669: ** append it to string buffer pOut.
128670: */
128671: static int fts3SnippetText(
128672:   Fts3Cursor *pCsr,               /* FTS3 Cursor */
128673:   SnippetFragment *pFragment,     /* Snippet to extract */
128674:   int iFragment,                  /* Fragment number */
128675:   int isLast,                     /* True for final fragment in snippet */
128676:   int nSnippet,                   /* Number of tokens in extracted snippet */
128677:   const char *zOpen,              /* String inserted before highlighted term */
128678:   const char *zClose,             /* String inserted after highlighted term */
128679:   const char *zEllipsis,          /* String inserted between snippets */
128680:   StrBuffer *pOut                 /* Write output here */
128681: ){
128682:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
128683:   int rc;                         /* Return code */
128684:   const char *zDoc;               /* Document text to extract snippet from */
128685:   int nDoc;                       /* Size of zDoc in bytes */
128686:   int iCurrent = 0;               /* Current token number of document */
128687:   int iEnd = 0;                   /* Byte offset of end of current token */
128688:   int isShiftDone = 0;            /* True after snippet is shifted */
128689:   int iPos = pFragment->iPos;     /* First token of snippet */
128690:   u64 hlmask = pFragment->hlmask; /* Highlight-mask for snippet */
128691:   int iCol = pFragment->iCol+1;   /* Query column to extract text from */
128692:   sqlite3_tokenizer_module *pMod; /* Tokenizer module methods object */
128693:   sqlite3_tokenizer_cursor *pC;   /* Tokenizer cursor open on zDoc/nDoc */
128694:   const char *ZDUMMY;             /* Dummy argument used with tokenizer */
128695:   int DUMMY1;                     /* Dummy argument used with tokenizer */
128696:   
128697:   zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol);
128698:   if( zDoc==0 ){
128699:     if( sqlite3_column_type(pCsr->pStmt, iCol)!=SQLITE_NULL ){
128700:       return SQLITE_NOMEM;
128701:     }
128702:     return SQLITE_OK;
128703:   }
128704:   nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol);
128705: 
128706:   /* Open a token cursor on the document. */
128707:   pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule;
128708:   rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
128709:   if( rc!=SQLITE_OK ){
128710:     return rc;
128711:   }
128712:   pC->pTokenizer = pTab->pTokenizer;
128713: 
128714:   while( rc==SQLITE_OK ){
128715:     int iBegin;                   /* Offset in zDoc of start of token */
128716:     int iFin;                     /* Offset in zDoc of end of token */
128717:     int isHighlight;              /* True for highlighted terms */
128718: 
128719:     rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &iBegin, &iFin, &iCurrent);
128720:     if( rc!=SQLITE_OK ){
128721:       if( rc==SQLITE_DONE ){
128722:         /* Special case - the last token of the snippet is also the last token
128723:         ** of the column. Append any punctuation that occurred between the end
128724:         ** of the previous token and the end of the document to the output. 
128725:         ** Then break out of the loop. */
128726:         rc = fts3StringAppend(pOut, &zDoc[iEnd], -1);
128727:       }
128728:       break;
128729:     }
128730:     if( iCurrent<iPos ){ continue; }
128731: 
128732:     if( !isShiftDone ){
128733:       int n = nDoc - iBegin;
128734:       rc = fts3SnippetShift(pTab, nSnippet, &zDoc[iBegin], n, &iPos, &hlmask);
128735:       isShiftDone = 1;
128736: 
128737:       /* Now that the shift has been done, check if the initial "..." are
128738:       ** required. They are required if (a) this is not the first fragment,
128739:       ** or (b) this fragment does not begin at position 0 of its column. 
128740:       */
128741:       if( rc==SQLITE_OK && (iPos>0 || iFragment>0) ){
128742:         rc = fts3StringAppend(pOut, zEllipsis, -1);
128743:       }
128744:       if( rc!=SQLITE_OK || iCurrent<iPos ) continue;
128745:     }
128746: 
128747:     if( iCurrent>=(iPos+nSnippet) ){
128748:       if( isLast ){
128749:         rc = fts3StringAppend(pOut, zEllipsis, -1);
128750:       }
128751:       break;
128752:     }
128753: 
128754:     /* Set isHighlight to true if this term should be highlighted. */
128755:     isHighlight = (hlmask & ((u64)1 << (iCurrent-iPos)))!=0;
128756: 
128757:     if( iCurrent>iPos ) rc = fts3StringAppend(pOut, &zDoc[iEnd], iBegin-iEnd);
128758:     if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zOpen, -1);
128759:     if( rc==SQLITE_OK ) rc = fts3StringAppend(pOut, &zDoc[iBegin], iFin-iBegin);
128760:     if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zClose, -1);
128761: 
128762:     iEnd = iFin;
128763:   }
128764: 
128765:   pMod->xClose(pC);
128766:   return rc;
128767: }
128768: 
128769: 
128770: /*
128771: ** This function is used to count the entries in a column-list (a 
128772: ** delta-encoded list of term offsets within a single column of a single 
128773: ** row). When this function is called, *ppCollist should point to the
128774: ** beginning of the first varint in the column-list (the varint that
128775: ** contains the position of the first matching term in the column data).
128776: ** Before returning, *ppCollist is set to point to the first byte after
128777: ** the last varint in the column-list (either the 0x00 signifying the end
128778: ** of the position-list, or the 0x01 that precedes the column number of
128779: ** the next column in the position-list).
128780: **
128781: ** The number of elements in the column-list is returned.
128782: */
128783: static int fts3ColumnlistCount(char **ppCollist){
128784:   char *pEnd = *ppCollist;
128785:   char c = 0;
128786:   int nEntry = 0;
128787: 
128788:   /* A column-list is terminated by either a 0x01 or 0x00. */
128789:   while( 0xFE & (*pEnd | c) ){
128790:     c = *pEnd++ & 0x80;
128791:     if( !c ) nEntry++;
128792:   }
128793: 
128794:   *ppCollist = pEnd;
128795:   return nEntry;
128796: }
128797: 
128798: /*
128799: ** fts3ExprIterate() callback used to collect the "global" matchinfo stats
128800: ** for a single query. 
128801: **
128802: ** fts3ExprIterate() callback to load the 'global' elements of a
128803: ** FTS3_MATCHINFO_HITS matchinfo array. The global stats are those elements 
128804: ** of the matchinfo array that are constant for all rows returned by the 
128805: ** current query.
128806: **
128807: ** Argument pCtx is actually a pointer to a struct of type MatchInfo. This
128808: ** function populates Matchinfo.aMatchinfo[] as follows:
128809: **
128810: **   for(iCol=0; iCol<nCol; iCol++){
128811: **     aMatchinfo[3*iPhrase*nCol + 3*iCol + 1] = X;
128812: **     aMatchinfo[3*iPhrase*nCol + 3*iCol + 2] = Y;
128813: **   }
128814: **
128815: ** where X is the number of matches for phrase iPhrase is column iCol of all
128816: ** rows of the table. Y is the number of rows for which column iCol contains
128817: ** at least one instance of phrase iPhrase.
128818: **
128819: ** If the phrase pExpr consists entirely of deferred tokens, then all X and
128820: ** Y values are set to nDoc, where nDoc is the number of documents in the 
128821: ** file system. This is done because the full-text index doclist is required
128822: ** to calculate these values properly, and the full-text index doclist is
128823: ** not available for deferred tokens.
128824: */
128825: static int fts3ExprGlobalHitsCb(
128826:   Fts3Expr *pExpr,                /* Phrase expression node */
128827:   int iPhrase,                    /* Phrase number (numbered from zero) */
128828:   void *pCtx                      /* Pointer to MatchInfo structure */
128829: ){
128830:   MatchInfo *p = (MatchInfo *)pCtx;
128831:   return sqlite3Fts3EvalPhraseStats(
128832:       p->pCursor, pExpr, &p->aMatchinfo[3*iPhrase*p->nCol]
128833:   );
128834: }
128835: 
128836: /*
128837: ** fts3ExprIterate() callback used to collect the "local" part of the
128838: ** FTS3_MATCHINFO_HITS array. The local stats are those elements of the 
128839: ** array that are different for each row returned by the query.
128840: */
128841: static int fts3ExprLocalHitsCb(
128842:   Fts3Expr *pExpr,                /* Phrase expression node */
128843:   int iPhrase,                    /* Phrase number */
128844:   void *pCtx                      /* Pointer to MatchInfo structure */
128845: ){
128846:   MatchInfo *p = (MatchInfo *)pCtx;
128847:   int iStart = iPhrase * p->nCol * 3;
128848:   int i;
128849: 
128850:   for(i=0; i<p->nCol; i++){
128851:     char *pCsr;
128852:     pCsr = sqlite3Fts3EvalPhrasePoslist(p->pCursor, pExpr, i);
128853:     if( pCsr ){
128854:       p->aMatchinfo[iStart+i*3] = fts3ColumnlistCount(&pCsr);
128855:     }else{
128856:       p->aMatchinfo[iStart+i*3] = 0;
128857:     }
128858:   }
128859: 
128860:   return SQLITE_OK;
128861: }
128862: 
128863: static int fts3MatchinfoCheck(
128864:   Fts3Table *pTab, 
128865:   char cArg,
128866:   char **pzErr
128867: ){
128868:   if( (cArg==FTS3_MATCHINFO_NPHRASE)
128869:    || (cArg==FTS3_MATCHINFO_NCOL)
128870:    || (cArg==FTS3_MATCHINFO_NDOC && pTab->bHasStat)
128871:    || (cArg==FTS3_MATCHINFO_AVGLENGTH && pTab->bHasStat)
128872:    || (cArg==FTS3_MATCHINFO_LENGTH && pTab->bHasDocsize)
128873:    || (cArg==FTS3_MATCHINFO_LCS)
128874:    || (cArg==FTS3_MATCHINFO_HITS)
128875:   ){
128876:     return SQLITE_OK;
128877:   }
128878:   *pzErr = sqlite3_mprintf("unrecognized matchinfo request: %c", cArg);
128879:   return SQLITE_ERROR;
128880: }
128881: 
128882: static int fts3MatchinfoSize(MatchInfo *pInfo, char cArg){
128883:   int nVal;                       /* Number of integers output by cArg */
128884: 
128885:   switch( cArg ){
128886:     case FTS3_MATCHINFO_NDOC:
128887:     case FTS3_MATCHINFO_NPHRASE: 
128888:     case FTS3_MATCHINFO_NCOL: 
128889:       nVal = 1;
128890:       break;
128891: 
128892:     case FTS3_MATCHINFO_AVGLENGTH:
128893:     case FTS3_MATCHINFO_LENGTH:
128894:     case FTS3_MATCHINFO_LCS:
128895:       nVal = pInfo->nCol;
128896:       break;
128897: 
128898:     default:
128899:       assert( cArg==FTS3_MATCHINFO_HITS );
128900:       nVal = pInfo->nCol * pInfo->nPhrase * 3;
128901:       break;
128902:   }
128903: 
128904:   return nVal;
128905: }
128906: 
128907: static int fts3MatchinfoSelectDoctotal(
128908:   Fts3Table *pTab,
128909:   sqlite3_stmt **ppStmt,
128910:   sqlite3_int64 *pnDoc,
128911:   const char **paLen
128912: ){
128913:   sqlite3_stmt *pStmt;
128914:   const char *a;
128915:   sqlite3_int64 nDoc;
128916: 
128917:   if( !*ppStmt ){
128918:     int rc = sqlite3Fts3SelectDoctotal(pTab, ppStmt);
128919:     if( rc!=SQLITE_OK ) return rc;
128920:   }
128921:   pStmt = *ppStmt;
128922:   assert( sqlite3_data_count(pStmt)==1 );
128923: 
128924:   a = sqlite3_column_blob(pStmt, 0);
128925:   a += sqlite3Fts3GetVarint(a, &nDoc);
128926:   if( nDoc==0 ) return FTS_CORRUPT_VTAB;
128927:   *pnDoc = (u32)nDoc;
128928: 
128929:   if( paLen ) *paLen = a;
128930:   return SQLITE_OK;
128931: }
128932: 
128933: /*
128934: ** An instance of the following structure is used to store state while 
128935: ** iterating through a multi-column position-list corresponding to the
128936: ** hits for a single phrase on a single row in order to calculate the
128937: ** values for a matchinfo() FTS3_MATCHINFO_LCS request.
128938: */
128939: typedef struct LcsIterator LcsIterator;
128940: struct LcsIterator {
128941:   Fts3Expr *pExpr;                /* Pointer to phrase expression */
128942:   int iPosOffset;                 /* Tokens count up to end of this phrase */
128943:   char *pRead;                    /* Cursor used to iterate through aDoclist */
128944:   int iPos;                       /* Current position */
128945: };
128946: 
128947: /* 
128948: ** If LcsIterator.iCol is set to the following value, the iterator has
128949: ** finished iterating through all offsets for all columns.
128950: */
128951: #define LCS_ITERATOR_FINISHED 0x7FFFFFFF;
128952: 
128953: static int fts3MatchinfoLcsCb(
128954:   Fts3Expr *pExpr,                /* Phrase expression node */
128955:   int iPhrase,                    /* Phrase number (numbered from zero) */
128956:   void *pCtx                      /* Pointer to MatchInfo structure */
128957: ){
128958:   LcsIterator *aIter = (LcsIterator *)pCtx;
128959:   aIter[iPhrase].pExpr = pExpr;
128960:   return SQLITE_OK;
128961: }
128962: 
128963: /*
128964: ** Advance the iterator passed as an argument to the next position. Return
128965: ** 1 if the iterator is at EOF or if it now points to the start of the
128966: ** position list for the next column.
128967: */
128968: static int fts3LcsIteratorAdvance(LcsIterator *pIter){
128969:   char *pRead = pIter->pRead;
128970:   sqlite3_int64 iRead;
128971:   int rc = 0;
128972: 
128973:   pRead += sqlite3Fts3GetVarint(pRead, &iRead);
128974:   if( iRead==0 || iRead==1 ){
128975:     pRead = 0;
128976:     rc = 1;
128977:   }else{
128978:     pIter->iPos += (int)(iRead-2);
128979:   }
128980: 
128981:   pIter->pRead = pRead;
128982:   return rc;
128983: }
128984:   
128985: /*
128986: ** This function implements the FTS3_MATCHINFO_LCS matchinfo() flag. 
128987: **
128988: ** If the call is successful, the longest-common-substring lengths for each
128989: ** column are written into the first nCol elements of the pInfo->aMatchinfo[] 
128990: ** array before returning. SQLITE_OK is returned in this case.
128991: **
128992: ** Otherwise, if an error occurs, an SQLite error code is returned and the
128993: ** data written to the first nCol elements of pInfo->aMatchinfo[] is 
128994: ** undefined.
128995: */
128996: static int fts3MatchinfoLcs(Fts3Cursor *pCsr, MatchInfo *pInfo){
128997:   LcsIterator *aIter;
128998:   int i;
128999:   int iCol;
129000:   int nToken = 0;
129001: 
129002:   /* Allocate and populate the array of LcsIterator objects. The array
129003:   ** contains one element for each matchable phrase in the query.
129004:   **/
129005:   aIter = sqlite3_malloc(sizeof(LcsIterator) * pCsr->nPhrase);
129006:   if( !aIter ) return SQLITE_NOMEM;
129007:   memset(aIter, 0, sizeof(LcsIterator) * pCsr->nPhrase);
129008:   (void)fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter);
129009: 
129010:   for(i=0; i<pInfo->nPhrase; i++){
129011:     LcsIterator *pIter = &aIter[i];
129012:     nToken -= pIter->pExpr->pPhrase->nToken;
129013:     pIter->iPosOffset = nToken;
129014:   }
129015: 
129016:   for(iCol=0; iCol<pInfo->nCol; iCol++){
129017:     int nLcs = 0;                 /* LCS value for this column */
129018:     int nLive = 0;                /* Number of iterators in aIter not at EOF */
129019: 
129020:     for(i=0; i<pInfo->nPhrase; i++){
129021:       LcsIterator *pIt = &aIter[i];
129022:       pIt->pRead = sqlite3Fts3EvalPhrasePoslist(pCsr, pIt->pExpr, iCol);
129023:       if( pIt->pRead ){
129024:         pIt->iPos = pIt->iPosOffset;
129025:         fts3LcsIteratorAdvance(&aIter[i]);
129026:         nLive++;
129027:       }
129028:     }
129029: 
129030:     while( nLive>0 ){
129031:       LcsIterator *pAdv = 0;      /* The iterator to advance by one position */
129032:       int nThisLcs = 0;           /* LCS for the current iterator positions */
129033: 
129034:       for(i=0; i<pInfo->nPhrase; i++){
129035:         LcsIterator *pIter = &aIter[i];
129036:         if( pIter->pRead==0 ){
129037:           /* This iterator is already at EOF for this column. */
129038:           nThisLcs = 0;
129039:         }else{
129040:           if( pAdv==0 || pIter->iPos<pAdv->iPos ){
129041:             pAdv = pIter;
129042:           }
129043:           if( nThisLcs==0 || pIter->iPos==pIter[-1].iPos ){
129044:             nThisLcs++;
129045:           }else{
129046:             nThisLcs = 1;
129047:           }
129048:           if( nThisLcs>nLcs ) nLcs = nThisLcs;
129049:         }
129050:       }
129051:       if( fts3LcsIteratorAdvance(pAdv) ) nLive--;
129052:     }
129053: 
129054:     pInfo->aMatchinfo[iCol] = nLcs;
129055:   }
129056: 
129057:   sqlite3_free(aIter);
129058:   return SQLITE_OK;
129059: }
129060: 
129061: /*
129062: ** Populate the buffer pInfo->aMatchinfo[] with an array of integers to
129063: ** be returned by the matchinfo() function. Argument zArg contains the 
129064: ** format string passed as the second argument to matchinfo (or the
129065: ** default value "pcx" if no second argument was specified). The format
129066: ** string has already been validated and the pInfo->aMatchinfo[] array
129067: ** is guaranteed to be large enough for the output.
129068: **
129069: ** If bGlobal is true, then populate all fields of the matchinfo() output.
129070: ** If it is false, then assume that those fields that do not change between
129071: ** rows (i.e. FTS3_MATCHINFO_NPHRASE, NCOL, NDOC, AVGLENGTH and part of HITS)
129072: ** have already been populated.
129073: **
129074: ** Return SQLITE_OK if successful, or an SQLite error code if an error 
129075: ** occurs. If a value other than SQLITE_OK is returned, the state the
129076: ** pInfo->aMatchinfo[] buffer is left in is undefined.
129077: */
129078: static int fts3MatchinfoValues(
129079:   Fts3Cursor *pCsr,               /* FTS3 cursor object */
129080:   int bGlobal,                    /* True to grab the global stats */
129081:   MatchInfo *pInfo,               /* Matchinfo context object */
129082:   const char *zArg                /* Matchinfo format string */
129083: ){
129084:   int rc = SQLITE_OK;
129085:   int i;
129086:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
129087:   sqlite3_stmt *pSelect = 0;
129088: 
129089:   for(i=0; rc==SQLITE_OK && zArg[i]; i++){
129090: 
129091:     switch( zArg[i] ){
129092:       case FTS3_MATCHINFO_NPHRASE:
129093:         if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nPhrase;
129094:         break;
129095: 
129096:       case FTS3_MATCHINFO_NCOL:
129097:         if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nCol;
129098:         break;
129099:         
129100:       case FTS3_MATCHINFO_NDOC:
129101:         if( bGlobal ){
129102:           sqlite3_int64 nDoc = 0;
129103:           rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, 0);
129104:           pInfo->aMatchinfo[0] = (u32)nDoc;
129105:         }
129106:         break;
129107: 
129108:       case FTS3_MATCHINFO_AVGLENGTH: 
129109:         if( bGlobal ){
129110:           sqlite3_int64 nDoc;     /* Number of rows in table */
129111:           const char *a;          /* Aggregate column length array */
129112: 
129113:           rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, &a);
129114:           if( rc==SQLITE_OK ){
129115:             int iCol;
129116:             for(iCol=0; iCol<pInfo->nCol; iCol++){
129117:               u32 iVal;
129118:               sqlite3_int64 nToken;
129119:               a += sqlite3Fts3GetVarint(a, &nToken);
129120:               iVal = (u32)(((u32)(nToken&0xffffffff)+nDoc/2)/nDoc);
129121:               pInfo->aMatchinfo[iCol] = iVal;
129122:             }
129123:           }
129124:         }
129125:         break;
129126: 
129127:       case FTS3_MATCHINFO_LENGTH: {
129128:         sqlite3_stmt *pSelectDocsize = 0;
129129:         rc = sqlite3Fts3SelectDocsize(pTab, pCsr->iPrevId, &pSelectDocsize);
129130:         if( rc==SQLITE_OK ){
129131:           int iCol;
129132:           const char *a = sqlite3_column_blob(pSelectDocsize, 0);
129133:           for(iCol=0; iCol<pInfo->nCol; iCol++){
129134:             sqlite3_int64 nToken;
129135:             a += sqlite3Fts3GetVarint(a, &nToken);
129136:             pInfo->aMatchinfo[iCol] = (u32)nToken;
129137:           }
129138:         }
129139:         sqlite3_reset(pSelectDocsize);
129140:         break;
129141:       }
129142: 
129143:       case FTS3_MATCHINFO_LCS:
129144:         rc = fts3ExprLoadDoclists(pCsr, 0, 0);
129145:         if( rc==SQLITE_OK ){
129146:           rc = fts3MatchinfoLcs(pCsr, pInfo);
129147:         }
129148:         break;
129149: 
129150:       default: {
129151:         Fts3Expr *pExpr;
129152:         assert( zArg[i]==FTS3_MATCHINFO_HITS );
129153:         pExpr = pCsr->pExpr;
129154:         rc = fts3ExprLoadDoclists(pCsr, 0, 0);
129155:         if( rc!=SQLITE_OK ) break;
129156:         if( bGlobal ){
129157:           if( pCsr->pDeferred ){
129158:             rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &pInfo->nDoc, 0);
129159:             if( rc!=SQLITE_OK ) break;
129160:           }
129161:           rc = fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo);
129162:           if( rc!=SQLITE_OK ) break;
129163:         }
129164:         (void)fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo);
129165:         break;
129166:       }
129167:     }
129168: 
129169:     pInfo->aMatchinfo += fts3MatchinfoSize(pInfo, zArg[i]);
129170:   }
129171: 
129172:   sqlite3_reset(pSelect);
129173:   return rc;
129174: }
129175: 
129176: 
129177: /*
129178: ** Populate pCsr->aMatchinfo[] with data for the current row. The 
129179: ** 'matchinfo' data is an array of 32-bit unsigned integers (C type u32).
129180: */
129181: static int fts3GetMatchinfo(
129182:   Fts3Cursor *pCsr,               /* FTS3 Cursor object */
129183:   const char *zArg                /* Second argument to matchinfo() function */
129184: ){
129185:   MatchInfo sInfo;
129186:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
129187:   int rc = SQLITE_OK;
129188:   int bGlobal = 0;                /* Collect 'global' stats as well as local */
129189: 
129190:   memset(&sInfo, 0, sizeof(MatchInfo));
129191:   sInfo.pCursor = pCsr;
129192:   sInfo.nCol = pTab->nColumn;
129193: 
129194:   /* If there is cached matchinfo() data, but the format string for the 
129195:   ** cache does not match the format string for this request, discard 
129196:   ** the cached data. */
129197:   if( pCsr->zMatchinfo && strcmp(pCsr->zMatchinfo, zArg) ){
129198:     assert( pCsr->aMatchinfo );
129199:     sqlite3_free(pCsr->aMatchinfo);
129200:     pCsr->zMatchinfo = 0;
129201:     pCsr->aMatchinfo = 0;
129202:   }
129203: 
129204:   /* If Fts3Cursor.aMatchinfo[] is NULL, then this is the first time the
129205:   ** matchinfo function has been called for this query. In this case 
129206:   ** allocate the array used to accumulate the matchinfo data and
129207:   ** initialize those elements that are constant for every row.
129208:   */
129209:   if( pCsr->aMatchinfo==0 ){
129210:     int nMatchinfo = 0;           /* Number of u32 elements in match-info */
129211:     int nArg;                     /* Bytes in zArg */
129212:     int i;                        /* Used to iterate through zArg */
129213: 
129214:     /* Determine the number of phrases in the query */
129215:     pCsr->nPhrase = fts3ExprPhraseCount(pCsr->pExpr);
129216:     sInfo.nPhrase = pCsr->nPhrase;
129217: 
129218:     /* Determine the number of integers in the buffer returned by this call. */
129219:     for(i=0; zArg[i]; i++){
129220:       nMatchinfo += fts3MatchinfoSize(&sInfo, zArg[i]);
129221:     }
129222: 
129223:     /* Allocate space for Fts3Cursor.aMatchinfo[] and Fts3Cursor.zMatchinfo. */
129224:     nArg = (int)strlen(zArg);
129225:     pCsr->aMatchinfo = (u32 *)sqlite3_malloc(sizeof(u32)*nMatchinfo + nArg + 1);
129226:     if( !pCsr->aMatchinfo ) return SQLITE_NOMEM;
129227: 
129228:     pCsr->zMatchinfo = (char *)&pCsr->aMatchinfo[nMatchinfo];
129229:     pCsr->nMatchinfo = nMatchinfo;
129230:     memcpy(pCsr->zMatchinfo, zArg, nArg+1);
129231:     memset(pCsr->aMatchinfo, 0, sizeof(u32)*nMatchinfo);
129232:     pCsr->isMatchinfoNeeded = 1;
129233:     bGlobal = 1;
129234:   }
129235: 
129236:   sInfo.aMatchinfo = pCsr->aMatchinfo;
129237:   sInfo.nPhrase = pCsr->nPhrase;
129238:   if( pCsr->isMatchinfoNeeded ){
129239:     rc = fts3MatchinfoValues(pCsr, bGlobal, &sInfo, zArg);
129240:     pCsr->isMatchinfoNeeded = 0;
129241:   }
129242: 
129243:   return rc;
129244: }
129245: 
129246: /*
129247: ** Implementation of snippet() function.
129248: */
129249: SQLITE_PRIVATE void sqlite3Fts3Snippet(
129250:   sqlite3_context *pCtx,          /* SQLite function call context */
129251:   Fts3Cursor *pCsr,               /* Cursor object */
129252:   const char *zStart,             /* Snippet start text - "<b>" */
129253:   const char *zEnd,               /* Snippet end text - "</b>" */
129254:   const char *zEllipsis,          /* Snippet ellipsis text - "<b>...</b>" */
129255:   int iCol,                       /* Extract snippet from this column */
129256:   int nToken                      /* Approximate number of tokens in snippet */
129257: ){
129258:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
129259:   int rc = SQLITE_OK;
129260:   int i;
129261:   StrBuffer res = {0, 0, 0};
129262: 
129263:   /* The returned text includes up to four fragments of text extracted from
129264:   ** the data in the current row. The first iteration of the for(...) loop
129265:   ** below attempts to locate a single fragment of text nToken tokens in 
129266:   ** size that contains at least one instance of all phrases in the query
129267:   ** expression that appear in the current row. If such a fragment of text
129268:   ** cannot be found, the second iteration of the loop attempts to locate
129269:   ** a pair of fragments, and so on.
129270:   */
129271:   int nSnippet = 0;               /* Number of fragments in this snippet */
129272:   SnippetFragment aSnippet[4];    /* Maximum of 4 fragments per snippet */
129273:   int nFToken = -1;               /* Number of tokens in each fragment */
129274: 
129275:   if( !pCsr->pExpr ){
129276:     sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC);
129277:     return;
129278:   }
129279: 
129280:   for(nSnippet=1; 1; nSnippet++){
129281: 
129282:     int iSnip;                    /* Loop counter 0..nSnippet-1 */
129283:     u64 mCovered = 0;             /* Bitmask of phrases covered by snippet */
129284:     u64 mSeen = 0;                /* Bitmask of phrases seen by BestSnippet() */
129285: 
129286:     if( nToken>=0 ){
129287:       nFToken = (nToken+nSnippet-1) / nSnippet;
129288:     }else{
129289:       nFToken = -1 * nToken;
129290:     }
129291: 
129292:     for(iSnip=0; iSnip<nSnippet; iSnip++){
129293:       int iBestScore = -1;        /* Best score of columns checked so far */
129294:       int iRead;                  /* Used to iterate through columns */
129295:       SnippetFragment *pFragment = &aSnippet[iSnip];
129296: 
129297:       memset(pFragment, 0, sizeof(*pFragment));
129298: 
129299:       /* Loop through all columns of the table being considered for snippets.
129300:       ** If the iCol argument to this function was negative, this means all
129301:       ** columns of the FTS3 table. Otherwise, only column iCol is considered.
129302:       */
129303:       for(iRead=0; iRead<pTab->nColumn; iRead++){
129304:         SnippetFragment sF = {0, 0, 0, 0};
129305:         int iS;
129306:         if( iCol>=0 && iRead!=iCol ) continue;
129307: 
129308:         /* Find the best snippet of nFToken tokens in column iRead. */
129309:         rc = fts3BestSnippet(nFToken, pCsr, iRead, mCovered, &mSeen, &sF, &iS);
129310:         if( rc!=SQLITE_OK ){
129311:           goto snippet_out;
129312:         }
129313:         if( iS>iBestScore ){
129314:           *pFragment = sF;
129315:           iBestScore = iS;
129316:         }
129317:       }
129318: 
129319:       mCovered |= pFragment->covered;
129320:     }
129321: 
129322:     /* If all query phrases seen by fts3BestSnippet() are present in at least
129323:     ** one of the nSnippet snippet fragments, break out of the loop.
129324:     */
129325:     assert( (mCovered&mSeen)==mCovered );
129326:     if( mSeen==mCovered || nSnippet==SizeofArray(aSnippet) ) break;
129327:   }
129328: 
129329:   assert( nFToken>0 );
129330: 
129331:   for(i=0; i<nSnippet && rc==SQLITE_OK; i++){
129332:     rc = fts3SnippetText(pCsr, &aSnippet[i], 
129333:         i, (i==nSnippet-1), nFToken, zStart, zEnd, zEllipsis, &res
129334:     );
129335:   }
129336: 
129337:  snippet_out:
129338:   sqlite3Fts3SegmentsClose(pTab);
129339:   if( rc!=SQLITE_OK ){
129340:     sqlite3_result_error_code(pCtx, rc);
129341:     sqlite3_free(res.z);
129342:   }else{
129343:     sqlite3_result_text(pCtx, res.z, -1, sqlite3_free);
129344:   }
129345: }
129346: 
129347: 
129348: typedef struct TermOffset TermOffset;
129349: typedef struct TermOffsetCtx TermOffsetCtx;
129350: 
129351: struct TermOffset {
129352:   char *pList;                    /* Position-list */
129353:   int iPos;                       /* Position just read from pList */
129354:   int iOff;                       /* Offset of this term from read positions */
129355: };
129356: 
129357: struct TermOffsetCtx {
129358:   Fts3Cursor *pCsr;
129359:   int iCol;                       /* Column of table to populate aTerm for */
129360:   int iTerm;
129361:   sqlite3_int64 iDocid;
129362:   TermOffset *aTerm;
129363: };
129364: 
129365: /*
129366: ** This function is an fts3ExprIterate() callback used by sqlite3Fts3Offsets().
129367: */
129368: static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){
129369:   TermOffsetCtx *p = (TermOffsetCtx *)ctx;
129370:   int nTerm;                      /* Number of tokens in phrase */
129371:   int iTerm;                      /* For looping through nTerm phrase terms */
129372:   char *pList;                    /* Pointer to position list for phrase */
129373:   int iPos = 0;                   /* First position in position-list */
129374: 
129375:   UNUSED_PARAMETER(iPhrase);
129376:   pList = sqlite3Fts3EvalPhrasePoslist(p->pCsr, pExpr, p->iCol);
129377:   nTerm = pExpr->pPhrase->nToken;
129378:   if( pList ){
129379:     fts3GetDeltaPosition(&pList, &iPos);
129380:     assert( iPos>=0 );
129381:   }
129382: 
129383:   for(iTerm=0; iTerm<nTerm; iTerm++){
129384:     TermOffset *pT = &p->aTerm[p->iTerm++];
129385:     pT->iOff = nTerm-iTerm-1;
129386:     pT->pList = pList;
129387:     pT->iPos = iPos;
129388:   }
129389: 
129390:   return SQLITE_OK;
129391: }
129392: 
129393: /*
129394: ** Implementation of offsets() function.
129395: */
129396: SQLITE_PRIVATE void sqlite3Fts3Offsets(
129397:   sqlite3_context *pCtx,          /* SQLite function call context */
129398:   Fts3Cursor *pCsr                /* Cursor object */
129399: ){
129400:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
129401:   sqlite3_tokenizer_module const *pMod = pTab->pTokenizer->pModule;
129402:   const char *ZDUMMY;             /* Dummy argument used with xNext() */
129403:   int NDUMMY;                     /* Dummy argument used with xNext() */
129404:   int rc;                         /* Return Code */
129405:   int nToken;                     /* Number of tokens in query */
129406:   int iCol;                       /* Column currently being processed */
129407:   StrBuffer res = {0, 0, 0};      /* Result string */
129408:   TermOffsetCtx sCtx;             /* Context for fts3ExprTermOffsetInit() */
129409: 
129410:   if( !pCsr->pExpr ){
129411:     sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC);
129412:     return;
129413:   }
129414: 
129415:   memset(&sCtx, 0, sizeof(sCtx));
129416:   assert( pCsr->isRequireSeek==0 );
129417: 
129418:   /* Count the number of terms in the query */
129419:   rc = fts3ExprLoadDoclists(pCsr, 0, &nToken);
129420:   if( rc!=SQLITE_OK ) goto offsets_out;
129421: 
129422:   /* Allocate the array of TermOffset iterators. */
129423:   sCtx.aTerm = (TermOffset *)sqlite3_malloc(sizeof(TermOffset)*nToken);
129424:   if( 0==sCtx.aTerm ){
129425:     rc = SQLITE_NOMEM;
129426:     goto offsets_out;
129427:   }
129428:   sCtx.iDocid = pCsr->iPrevId;
129429:   sCtx.pCsr = pCsr;
129430: 
129431:   /* Loop through the table columns, appending offset information to 
129432:   ** string-buffer res for each column.
129433:   */
129434:   for(iCol=0; iCol<pTab->nColumn; iCol++){
129435:     sqlite3_tokenizer_cursor *pC; /* Tokenizer cursor */
129436:     int iStart;
129437:     int iEnd;
129438:     int iCurrent;
129439:     const char *zDoc;
129440:     int nDoc;
129441: 
129442:     /* Initialize the contents of sCtx.aTerm[] for column iCol. There is 
129443:     ** no way that this operation can fail, so the return code from
129444:     ** fts3ExprIterate() can be discarded.
129445:     */
129446:     sCtx.iCol = iCol;
129447:     sCtx.iTerm = 0;
129448:     (void)fts3ExprIterate(pCsr->pExpr, fts3ExprTermOffsetInit, (void *)&sCtx);
129449: 
129450:     /* Retreive the text stored in column iCol. If an SQL NULL is stored 
129451:     ** in column iCol, jump immediately to the next iteration of the loop.
129452:     ** If an OOM occurs while retrieving the data (this can happen if SQLite
129453:     ** needs to transform the data from utf-16 to utf-8), return SQLITE_NOMEM 
129454:     ** to the caller. 
129455:     */
129456:     zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol+1);
129457:     nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol+1);
129458:     if( zDoc==0 ){
129459:       if( sqlite3_column_type(pCsr->pStmt, iCol+1)==SQLITE_NULL ){
129460:         continue;
129461:       }
129462:       rc = SQLITE_NOMEM;
129463:       goto offsets_out;
129464:     }
129465: 
129466:     /* Initialize a tokenizer iterator to iterate through column iCol. */
129467:     rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
129468:     if( rc!=SQLITE_OK ) goto offsets_out;
129469:     pC->pTokenizer = pTab->pTokenizer;
129470: 
129471:     rc = pMod->xNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent);
129472:     while( rc==SQLITE_OK ){
129473:       int i;                      /* Used to loop through terms */
129474:       int iMinPos = 0x7FFFFFFF;   /* Position of next token */
129475:       TermOffset *pTerm = 0;      /* TermOffset associated with next token */
129476: 
129477:       for(i=0; i<nToken; i++){
129478:         TermOffset *pT = &sCtx.aTerm[i];
129479:         if( pT->pList && (pT->iPos-pT->iOff)<iMinPos ){
129480:           iMinPos = pT->iPos-pT->iOff;
129481:           pTerm = pT;
129482:         }
129483:       }
129484: 
129485:       if( !pTerm ){
129486:         /* All offsets for this column have been gathered. */
129487:         rc = SQLITE_DONE;
129488:       }else{
129489:         assert( iCurrent<=iMinPos );
129490:         if( 0==(0xFE&*pTerm->pList) ){
129491:           pTerm->pList = 0;
129492:         }else{
129493:           fts3GetDeltaPosition(&pTerm->pList, &pTerm->iPos);
129494:         }
129495:         while( rc==SQLITE_OK && iCurrent<iMinPos ){
129496:           rc = pMod->xNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent);
129497:         }
129498:         if( rc==SQLITE_OK ){
129499:           char aBuffer[64];
129500:           sqlite3_snprintf(sizeof(aBuffer), aBuffer, 
129501:               "%d %d %d %d ", iCol, pTerm-sCtx.aTerm, iStart, iEnd-iStart
129502:           );
129503:           rc = fts3StringAppend(&res, aBuffer, -1);
129504:         }else if( rc==SQLITE_DONE && pTab->zContentTbl==0 ){
129505:           rc = FTS_CORRUPT_VTAB;
129506:         }
129507:       }
129508:     }
129509:     if( rc==SQLITE_DONE ){
129510:       rc = SQLITE_OK;
129511:     }
129512: 
129513:     pMod->xClose(pC);
129514:     if( rc!=SQLITE_OK ) goto offsets_out;
129515:   }
129516: 
129517:  offsets_out:
129518:   sqlite3_free(sCtx.aTerm);
129519:   assert( rc!=SQLITE_DONE );
129520:   sqlite3Fts3SegmentsClose(pTab);
129521:   if( rc!=SQLITE_OK ){
129522:     sqlite3_result_error_code(pCtx,  rc);
129523:     sqlite3_free(res.z);
129524:   }else{
129525:     sqlite3_result_text(pCtx, res.z, res.n-1, sqlite3_free);
129526:   }
129527:   return;
129528: }
129529: 
129530: /*
129531: ** Implementation of matchinfo() function.
129532: */
129533: SQLITE_PRIVATE void sqlite3Fts3Matchinfo(
129534:   sqlite3_context *pContext,      /* Function call context */
129535:   Fts3Cursor *pCsr,               /* FTS3 table cursor */
129536:   const char *zArg                /* Second arg to matchinfo() function */
129537: ){
129538:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
129539:   int rc;
129540:   int i;
129541:   const char *zFormat;
129542: 
129543:   if( zArg ){
129544:     for(i=0; zArg[i]; i++){
129545:       char *zErr = 0;
129546:       if( fts3MatchinfoCheck(pTab, zArg[i], &zErr) ){
129547:         sqlite3_result_error(pContext, zErr, -1);
129548:         sqlite3_free(zErr);
129549:         return;
129550:       }
129551:     }
129552:     zFormat = zArg;
129553:   }else{
129554:     zFormat = FTS3_MATCHINFO_DEFAULT;
129555:   }
129556: 
129557:   if( !pCsr->pExpr ){
129558:     sqlite3_result_blob(pContext, "", 0, SQLITE_STATIC);
129559:     return;
129560:   }
129561: 
129562:   /* Retrieve matchinfo() data. */
129563:   rc = fts3GetMatchinfo(pCsr, zFormat);
129564:   sqlite3Fts3SegmentsClose(pTab);
129565: 
129566:   if( rc!=SQLITE_OK ){
129567:     sqlite3_result_error_code(pContext, rc);
129568:   }else{
129569:     int n = pCsr->nMatchinfo * sizeof(u32);
129570:     sqlite3_result_blob(pContext, pCsr->aMatchinfo, n, SQLITE_TRANSIENT);
129571:   }
129572: }
129573: 
129574: #endif
129575: 
129576: /************** End of fts3_snippet.c ****************************************/
129577: /************** Begin file rtree.c *******************************************/
129578: /*
129579: ** 2001 September 15
129580: **
129581: ** The author disclaims copyright to this source code.  In place of
129582: ** a legal notice, here is a blessing:
129583: **
129584: **    May you do good and not evil.
129585: **    May you find forgiveness for yourself and forgive others.
129586: **    May you share freely, never taking more than you give.
129587: **
129588: *************************************************************************
129589: ** This file contains code for implementations of the r-tree and r*-tree
129590: ** algorithms packaged as an SQLite virtual table module.
129591: */
129592: 
129593: /*
129594: ** Database Format of R-Tree Tables
129595: ** --------------------------------
129596: **
129597: ** The data structure for a single virtual r-tree table is stored in three 
129598: ** native SQLite tables declared as follows. In each case, the '%' character
129599: ** in the table name is replaced with the user-supplied name of the r-tree
129600: ** table.
129601: **
129602: **   CREATE TABLE %_node(nodeno INTEGER PRIMARY KEY, data BLOB)
129603: **   CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER)
129604: **   CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER)
129605: **
129606: ** The data for each node of the r-tree structure is stored in the %_node
129607: ** table. For each node that is not the root node of the r-tree, there is
129608: ** an entry in the %_parent table associating the node with its parent.
129609: ** And for each row of data in the table, there is an entry in the %_rowid
129610: ** table that maps from the entries rowid to the id of the node that it
129611: ** is stored on.
129612: **
129613: ** The root node of an r-tree always exists, even if the r-tree table is
129614: ** empty. The nodeno of the root node is always 1. All other nodes in the
129615: ** table must be the same size as the root node. The content of each node
129616: ** is formatted as follows:
129617: **
129618: **   1. If the node is the root node (node 1), then the first 2 bytes
129619: **      of the node contain the tree depth as a big-endian integer.
129620: **      For non-root nodes, the first 2 bytes are left unused.
129621: **
129622: **   2. The next 2 bytes contain the number of entries currently 
129623: **      stored in the node.
129624: **
129625: **   3. The remainder of the node contains the node entries. Each entry
129626: **      consists of a single 8-byte integer followed by an even number
129627: **      of 4-byte coordinates. For leaf nodes the integer is the rowid
129628: **      of a record. For internal nodes it is the node number of a
129629: **      child page.
129630: */
129631: 
129632: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RTREE)
129633: 
129634: /*
129635: ** This file contains an implementation of a couple of different variants
129636: ** of the r-tree algorithm. See the README file for further details. The 
129637: ** same data-structure is used for all, but the algorithms for insert and
129638: ** delete operations vary. The variants used are selected at compile time 
129639: ** by defining the following symbols:
129640: */
129641: 
129642: /* Either, both or none of the following may be set to activate 
129643: ** r*tree variant algorithms.
129644: */
129645: #define VARIANT_RSTARTREE_CHOOSESUBTREE 0
129646: #define VARIANT_RSTARTREE_REINSERT      1
129647: 
129648: /* 
129649: ** Exactly one of the following must be set to 1.
129650: */
129651: #define VARIANT_GUTTMAN_QUADRATIC_SPLIT 0
129652: #define VARIANT_GUTTMAN_LINEAR_SPLIT    0
129653: #define VARIANT_RSTARTREE_SPLIT         1
129654: 
129655: #define VARIANT_GUTTMAN_SPLIT \
129656:         (VARIANT_GUTTMAN_LINEAR_SPLIT||VARIANT_GUTTMAN_QUADRATIC_SPLIT)
129657: 
129658: #if VARIANT_GUTTMAN_QUADRATIC_SPLIT
129659:   #define PickNext QuadraticPickNext
129660:   #define PickSeeds QuadraticPickSeeds
129661:   #define AssignCells splitNodeGuttman
129662: #endif
129663: #if VARIANT_GUTTMAN_LINEAR_SPLIT
129664:   #define PickNext LinearPickNext
129665:   #define PickSeeds LinearPickSeeds
129666:   #define AssignCells splitNodeGuttman
129667: #endif
129668: #if VARIANT_RSTARTREE_SPLIT
129669:   #define AssignCells splitNodeStartree
129670: #endif
129671: 
129672: #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
129673: # define NDEBUG 1
129674: #endif
129675: 
129676: #ifndef SQLITE_CORE
129677:   SQLITE_EXTENSION_INIT1
129678: #else
129679: #endif
129680: 
129681: /* #include <string.h> */
129682: /* #include <assert.h> */
129683: 
129684: #ifndef SQLITE_AMALGAMATION
129685: #include "sqlite3rtree.h"
129686: typedef sqlite3_int64 i64;
129687: typedef unsigned char u8;
129688: typedef unsigned int u32;
129689: #endif
129690: 
129691: /*  The following macro is used to suppress compiler warnings.
129692: */
129693: #ifndef UNUSED_PARAMETER
129694: # define UNUSED_PARAMETER(x) (void)(x)
129695: #endif
129696: 
129697: typedef struct Rtree Rtree;
129698: typedef struct RtreeCursor RtreeCursor;
129699: typedef struct RtreeNode RtreeNode;
129700: typedef struct RtreeCell RtreeCell;
129701: typedef struct RtreeConstraint RtreeConstraint;
129702: typedef struct RtreeMatchArg RtreeMatchArg;
129703: typedef struct RtreeGeomCallback RtreeGeomCallback;
129704: typedef union RtreeCoord RtreeCoord;
129705: 
129706: /* The rtree may have between 1 and RTREE_MAX_DIMENSIONS dimensions. */
129707: #define RTREE_MAX_DIMENSIONS 5
129708: 
129709: /* Size of hash table Rtree.aHash. This hash table is not expected to
129710: ** ever contain very many entries, so a fixed number of buckets is 
129711: ** used.
129712: */
129713: #define HASHSIZE 128
129714: 
129715: /* 
129716: ** An rtree virtual-table object.
129717: */
129718: struct Rtree {
129719:   sqlite3_vtab base;
129720:   sqlite3 *db;                /* Host database connection */
129721:   int iNodeSize;              /* Size in bytes of each node in the node table */
129722:   int nDim;                   /* Number of dimensions */
129723:   int nBytesPerCell;          /* Bytes consumed per cell */
129724:   int iDepth;                 /* Current depth of the r-tree structure */
129725:   char *zDb;                  /* Name of database containing r-tree table */
129726:   char *zName;                /* Name of r-tree table */ 
129727:   RtreeNode *aHash[HASHSIZE]; /* Hash table of in-memory nodes. */ 
129728:   int nBusy;                  /* Current number of users of this structure */
129729: 
129730:   /* List of nodes removed during a CondenseTree operation. List is
129731:   ** linked together via the pointer normally used for hash chains -
129732:   ** RtreeNode.pNext. RtreeNode.iNode stores the depth of the sub-tree 
129733:   ** headed by the node (leaf nodes have RtreeNode.iNode==0).
129734:   */
129735:   RtreeNode *pDeleted;
129736:   int iReinsertHeight;        /* Height of sub-trees Reinsert() has run on */
129737: 
129738:   /* Statements to read/write/delete a record from xxx_node */
129739:   sqlite3_stmt *pReadNode;
129740:   sqlite3_stmt *pWriteNode;
129741:   sqlite3_stmt *pDeleteNode;
129742: 
129743:   /* Statements to read/write/delete a record from xxx_rowid */
129744:   sqlite3_stmt *pReadRowid;
129745:   sqlite3_stmt *pWriteRowid;
129746:   sqlite3_stmt *pDeleteRowid;
129747: 
129748:   /* Statements to read/write/delete a record from xxx_parent */
129749:   sqlite3_stmt *pReadParent;
129750:   sqlite3_stmt *pWriteParent;
129751:   sqlite3_stmt *pDeleteParent;
129752: 
129753:   int eCoordType;
129754: };
129755: 
129756: /* Possible values for eCoordType: */
129757: #define RTREE_COORD_REAL32 0
129758: #define RTREE_COORD_INT32  1
129759: 
129760: /*
129761: ** The minimum number of cells allowed for a node is a third of the 
129762: ** maximum. In Gutman's notation:
129763: **
129764: **     m = M/3
129765: **
129766: ** If an R*-tree "Reinsert" operation is required, the same number of
129767: ** cells are removed from the overfull node and reinserted into the tree.
129768: */
129769: #define RTREE_MINCELLS(p) ((((p)->iNodeSize-4)/(p)->nBytesPerCell)/3)
129770: #define RTREE_REINSERT(p) RTREE_MINCELLS(p)
129771: #define RTREE_MAXCELLS 51
129772: 
129773: /*
129774: ** The smallest possible node-size is (512-64)==448 bytes. And the largest
129775: ** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates).
129776: ** Therefore all non-root nodes must contain at least 3 entries. Since 
129777: ** 2^40 is greater than 2^64, an r-tree structure always has a depth of
129778: ** 40 or less.
129779: */
129780: #define RTREE_MAX_DEPTH 40
129781: 
129782: /* 
129783: ** An rtree cursor object.
129784: */
129785: struct RtreeCursor {
129786:   sqlite3_vtab_cursor base;
129787:   RtreeNode *pNode;                 /* Node cursor is currently pointing at */
129788:   int iCell;                        /* Index of current cell in pNode */
129789:   int iStrategy;                    /* Copy of idxNum search parameter */
129790:   int nConstraint;                  /* Number of entries in aConstraint */
129791:   RtreeConstraint *aConstraint;     /* Search constraints. */
129792: };
129793: 
129794: union RtreeCoord {
129795:   float f;
129796:   int i;
129797: };
129798: 
129799: /*
129800: ** The argument is an RtreeCoord. Return the value stored within the RtreeCoord
129801: ** formatted as a double. This macro assumes that local variable pRtree points
129802: ** to the Rtree structure associated with the RtreeCoord.
129803: */
129804: #define DCOORD(coord) (                           \
129805:   (pRtree->eCoordType==RTREE_COORD_REAL32) ?      \
129806:     ((double)coord.f) :                           \
129807:     ((double)coord.i)                             \
129808: )
129809: 
129810: /*
129811: ** A search constraint.
129812: */
129813: struct RtreeConstraint {
129814:   int iCoord;                     /* Index of constrained coordinate */
129815:   int op;                         /* Constraining operation */
129816:   double rValue;                  /* Constraint value. */
129817:   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
129818:   sqlite3_rtree_geometry *pGeom;  /* Constraint callback argument for a MATCH */
129819: };
129820: 
129821: /* Possible values for RtreeConstraint.op */
129822: #define RTREE_EQ    0x41
129823: #define RTREE_LE    0x42
129824: #define RTREE_LT    0x43
129825: #define RTREE_GE    0x44
129826: #define RTREE_GT    0x45
129827: #define RTREE_MATCH 0x46
129828: 
129829: /* 
129830: ** An rtree structure node.
129831: */
129832: struct RtreeNode {
129833:   RtreeNode *pParent;               /* Parent node */
129834:   i64 iNode;
129835:   int nRef;
129836:   int isDirty;
129837:   u8 *zData;
129838:   RtreeNode *pNext;                 /* Next node in this hash chain */
129839: };
129840: #define NCELL(pNode) readInt16(&(pNode)->zData[2])
129841: 
129842: /* 
129843: ** Structure to store a deserialized rtree record.
129844: */
129845: struct RtreeCell {
129846:   i64 iRowid;
129847:   RtreeCoord aCoord[RTREE_MAX_DIMENSIONS*2];
129848: };
129849: 
129850: 
129851: /*
129852: ** Value for the first field of every RtreeMatchArg object. The MATCH
129853: ** operator tests that the first field of a blob operand matches this
129854: ** value to avoid operating on invalid blobs (which could cause a segfault).
129855: */
129856: #define RTREE_GEOMETRY_MAGIC 0x891245AB
129857: 
129858: /*
129859: ** An instance of this structure must be supplied as a blob argument to
129860: ** the right-hand-side of an SQL MATCH operator used to constrain an
129861: ** r-tree query.
129862: */
129863: struct RtreeMatchArg {
129864:   u32 magic;                      /* Always RTREE_GEOMETRY_MAGIC */
129865:   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
129866:   void *pContext;
129867:   int nParam;
129868:   double aParam[1];
129869: };
129870: 
129871: /*
129872: ** When a geometry callback is created (see sqlite3_rtree_geometry_callback),
129873: ** a single instance of the following structure is allocated. It is used
129874: ** as the context for the user-function created by by s_r_g_c(). The object
129875: ** is eventually deleted by the destructor mechanism provided by
129876: ** sqlite3_create_function_v2() (which is called by s_r_g_c() to create
129877: ** the geometry callback function).
129878: */
129879: struct RtreeGeomCallback {
129880:   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
129881:   void *pContext;
129882: };
129883: 
129884: #ifndef MAX
129885: # define MAX(x,y) ((x) < (y) ? (y) : (x))
129886: #endif
129887: #ifndef MIN
129888: # define MIN(x,y) ((x) > (y) ? (y) : (x))
129889: #endif
129890: 
129891: /*
129892: ** Functions to deserialize a 16 bit integer, 32 bit real number and
129893: ** 64 bit integer. The deserialized value is returned.
129894: */
129895: static int readInt16(u8 *p){
129896:   return (p[0]<<8) + p[1];
129897: }
129898: static void readCoord(u8 *p, RtreeCoord *pCoord){
129899:   u32 i = (
129900:     (((u32)p[0]) << 24) + 
129901:     (((u32)p[1]) << 16) + 
129902:     (((u32)p[2]) <<  8) + 
129903:     (((u32)p[3]) <<  0)
129904:   );
129905:   *(u32 *)pCoord = i;
129906: }
129907: static i64 readInt64(u8 *p){
129908:   return (
129909:     (((i64)p[0]) << 56) + 
129910:     (((i64)p[1]) << 48) + 
129911:     (((i64)p[2]) << 40) + 
129912:     (((i64)p[3]) << 32) + 
129913:     (((i64)p[4]) << 24) + 
129914:     (((i64)p[5]) << 16) + 
129915:     (((i64)p[6]) <<  8) + 
129916:     (((i64)p[7]) <<  0)
129917:   );
129918: }
129919: 
129920: /*
129921: ** Functions to serialize a 16 bit integer, 32 bit real number and
129922: ** 64 bit integer. The value returned is the number of bytes written
129923: ** to the argument buffer (always 2, 4 and 8 respectively).
129924: */
129925: static int writeInt16(u8 *p, int i){
129926:   p[0] = (i>> 8)&0xFF;
129927:   p[1] = (i>> 0)&0xFF;
129928:   return 2;
129929: }
129930: static int writeCoord(u8 *p, RtreeCoord *pCoord){
129931:   u32 i;
129932:   assert( sizeof(RtreeCoord)==4 );
129933:   assert( sizeof(u32)==4 );
129934:   i = *(u32 *)pCoord;
129935:   p[0] = (i>>24)&0xFF;
129936:   p[1] = (i>>16)&0xFF;
129937:   p[2] = (i>> 8)&0xFF;
129938:   p[3] = (i>> 0)&0xFF;
129939:   return 4;
129940: }
129941: static int writeInt64(u8 *p, i64 i){
129942:   p[0] = (i>>56)&0xFF;
129943:   p[1] = (i>>48)&0xFF;
129944:   p[2] = (i>>40)&0xFF;
129945:   p[3] = (i>>32)&0xFF;
129946:   p[4] = (i>>24)&0xFF;
129947:   p[5] = (i>>16)&0xFF;
129948:   p[6] = (i>> 8)&0xFF;
129949:   p[7] = (i>> 0)&0xFF;
129950:   return 8;
129951: }
129952: 
129953: /*
129954: ** Increment the reference count of node p.
129955: */
129956: static void nodeReference(RtreeNode *p){
129957:   if( p ){
129958:     p->nRef++;
129959:   }
129960: }
129961: 
129962: /*
129963: ** Clear the content of node p (set all bytes to 0x00).
129964: */
129965: static void nodeZero(Rtree *pRtree, RtreeNode *p){
129966:   memset(&p->zData[2], 0, pRtree->iNodeSize-2);
129967:   p->isDirty = 1;
129968: }
129969: 
129970: /*
129971: ** Given a node number iNode, return the corresponding key to use
129972: ** in the Rtree.aHash table.
129973: */
129974: static int nodeHash(i64 iNode){
129975:   return (
129976:     (iNode>>56) ^ (iNode>>48) ^ (iNode>>40) ^ (iNode>>32) ^ 
129977:     (iNode>>24) ^ (iNode>>16) ^ (iNode>> 8) ^ (iNode>> 0)
129978:   ) % HASHSIZE;
129979: }
129980: 
129981: /*
129982: ** Search the node hash table for node iNode. If found, return a pointer
129983: ** to it. Otherwise, return 0.
129984: */
129985: static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){
129986:   RtreeNode *p;
129987:   for(p=pRtree->aHash[nodeHash(iNode)]; p && p->iNode!=iNode; p=p->pNext);
129988:   return p;
129989: }
129990: 
129991: /*
129992: ** Add node pNode to the node hash table.
129993: */
129994: static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){
129995:   int iHash;
129996:   assert( pNode->pNext==0 );
129997:   iHash = nodeHash(pNode->iNode);
129998:   pNode->pNext = pRtree->aHash[iHash];
129999:   pRtree->aHash[iHash] = pNode;
130000: }
130001: 
130002: /*
130003: ** Remove node pNode from the node hash table.
130004: */
130005: static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){
130006:   RtreeNode **pp;
130007:   if( pNode->iNode!=0 ){
130008:     pp = &pRtree->aHash[nodeHash(pNode->iNode)];
130009:     for( ; (*pp)!=pNode; pp = &(*pp)->pNext){ assert(*pp); }
130010:     *pp = pNode->pNext;
130011:     pNode->pNext = 0;
130012:   }
130013: }
130014: 
130015: /*
130016: ** Allocate and return new r-tree node. Initially, (RtreeNode.iNode==0),
130017: ** indicating that node has not yet been assigned a node number. It is
130018: ** assigned a node number when nodeWrite() is called to write the
130019: ** node contents out to the database.
130020: */
130021: static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){
130022:   RtreeNode *pNode;
130023:   pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize);
130024:   if( pNode ){
130025:     memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize);
130026:     pNode->zData = (u8 *)&pNode[1];
130027:     pNode->nRef = 1;
130028:     pNode->pParent = pParent;
130029:     pNode->isDirty = 1;
130030:     nodeReference(pParent);
130031:   }
130032:   return pNode;
130033: }
130034: 
130035: /*
130036: ** Obtain a reference to an r-tree node.
130037: */
130038: static int
130039: nodeAcquire(
130040:   Rtree *pRtree,             /* R-tree structure */
130041:   i64 iNode,                 /* Node number to load */
130042:   RtreeNode *pParent,        /* Either the parent node or NULL */
130043:   RtreeNode **ppNode         /* OUT: Acquired node */
130044: ){
130045:   int rc;
130046:   int rc2 = SQLITE_OK;
130047:   RtreeNode *pNode;
130048: 
130049:   /* Check if the requested node is already in the hash table. If so,
130050:   ** increase its reference count and return it.
130051:   */
130052:   if( (pNode = nodeHashLookup(pRtree, iNode)) ){
130053:     assert( !pParent || !pNode->pParent || pNode->pParent==pParent );
130054:     if( pParent && !pNode->pParent ){
130055:       nodeReference(pParent);
130056:       pNode->pParent = pParent;
130057:     }
130058:     pNode->nRef++;
130059:     *ppNode = pNode;
130060:     return SQLITE_OK;
130061:   }
130062: 
130063:   sqlite3_bind_int64(pRtree->pReadNode, 1, iNode);
130064:   rc = sqlite3_step(pRtree->pReadNode);
130065:   if( rc==SQLITE_ROW ){
130066:     const u8 *zBlob = sqlite3_column_blob(pRtree->pReadNode, 0);
130067:     if( pRtree->iNodeSize==sqlite3_column_bytes(pRtree->pReadNode, 0) ){
130068:       pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize);
130069:       if( !pNode ){
130070:         rc2 = SQLITE_NOMEM;
130071:       }else{
130072:         pNode->pParent = pParent;
130073:         pNode->zData = (u8 *)&pNode[1];
130074:         pNode->nRef = 1;
130075:         pNode->iNode = iNode;
130076:         pNode->isDirty = 0;
130077:         pNode->pNext = 0;
130078:         memcpy(pNode->zData, zBlob, pRtree->iNodeSize);
130079:         nodeReference(pParent);
130080:       }
130081:     }
130082:   }
130083:   rc = sqlite3_reset(pRtree->pReadNode);
130084:   if( rc==SQLITE_OK ) rc = rc2;
130085: 
130086:   /* If the root node was just loaded, set pRtree->iDepth to the height
130087:   ** of the r-tree structure. A height of zero means all data is stored on
130088:   ** the root node. A height of one means the children of the root node
130089:   ** are the leaves, and so on. If the depth as specified on the root node
130090:   ** is greater than RTREE_MAX_DEPTH, the r-tree structure must be corrupt.
130091:   */
130092:   if( pNode && iNode==1 ){
130093:     pRtree->iDepth = readInt16(pNode->zData);
130094:     if( pRtree->iDepth>RTREE_MAX_DEPTH ){
130095:       rc = SQLITE_CORRUPT_VTAB;
130096:     }
130097:   }
130098: 
130099:   /* If no error has occurred so far, check if the "number of entries"
130100:   ** field on the node is too large. If so, set the return code to 
130101:   ** SQLITE_CORRUPT_VTAB.
130102:   */
130103:   if( pNode && rc==SQLITE_OK ){
130104:     if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){
130105:       rc = SQLITE_CORRUPT_VTAB;
130106:     }
130107:   }
130108: 
130109:   if( rc==SQLITE_OK ){
130110:     if( pNode!=0 ){
130111:       nodeHashInsert(pRtree, pNode);
130112:     }else{
130113:       rc = SQLITE_CORRUPT_VTAB;
130114:     }
130115:     *ppNode = pNode;
130116:   }else{
130117:     sqlite3_free(pNode);
130118:     *ppNode = 0;
130119:   }
130120: 
130121:   return rc;
130122: }
130123: 
130124: /*
130125: ** Overwrite cell iCell of node pNode with the contents of pCell.
130126: */
130127: static void nodeOverwriteCell(
130128:   Rtree *pRtree, 
130129:   RtreeNode *pNode,  
130130:   RtreeCell *pCell, 
130131:   int iCell
130132: ){
130133:   int ii;
130134:   u8 *p = &pNode->zData[4 + pRtree->nBytesPerCell*iCell];
130135:   p += writeInt64(p, pCell->iRowid);
130136:   for(ii=0; ii<(pRtree->nDim*2); ii++){
130137:     p += writeCoord(p, &pCell->aCoord[ii]);
130138:   }
130139:   pNode->isDirty = 1;
130140: }
130141: 
130142: /*
130143: ** Remove cell the cell with index iCell from node pNode.
130144: */
130145: static void nodeDeleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell){
130146:   u8 *pDst = &pNode->zData[4 + pRtree->nBytesPerCell*iCell];
130147:   u8 *pSrc = &pDst[pRtree->nBytesPerCell];
130148:   int nByte = (NCELL(pNode) - iCell - 1) * pRtree->nBytesPerCell;
130149:   memmove(pDst, pSrc, nByte);
130150:   writeInt16(&pNode->zData[2], NCELL(pNode)-1);
130151:   pNode->isDirty = 1;
130152: }
130153: 
130154: /*
130155: ** Insert the contents of cell pCell into node pNode. If the insert
130156: ** is successful, return SQLITE_OK.
130157: **
130158: ** If there is not enough free space in pNode, return SQLITE_FULL.
130159: */
130160: static int
130161: nodeInsertCell(
130162:   Rtree *pRtree, 
130163:   RtreeNode *pNode, 
130164:   RtreeCell *pCell 
130165: ){
130166:   int nCell;                    /* Current number of cells in pNode */
130167:   int nMaxCell;                 /* Maximum number of cells for pNode */
130168: 
130169:   nMaxCell = (pRtree->iNodeSize-4)/pRtree->nBytesPerCell;
130170:   nCell = NCELL(pNode);
130171: 
130172:   assert( nCell<=nMaxCell );
130173:   if( nCell<nMaxCell ){
130174:     nodeOverwriteCell(pRtree, pNode, pCell, nCell);
130175:     writeInt16(&pNode->zData[2], nCell+1);
130176:     pNode->isDirty = 1;
130177:   }
130178: 
130179:   return (nCell==nMaxCell);
130180: }
130181: 
130182: /*
130183: ** If the node is dirty, write it out to the database.
130184: */
130185: static int
130186: nodeWrite(Rtree *pRtree, RtreeNode *pNode){
130187:   int rc = SQLITE_OK;
130188:   if( pNode->isDirty ){
130189:     sqlite3_stmt *p = pRtree->pWriteNode;
130190:     if( pNode->iNode ){
130191:       sqlite3_bind_int64(p, 1, pNode->iNode);
130192:     }else{
130193:       sqlite3_bind_null(p, 1);
130194:     }
130195:     sqlite3_bind_blob(p, 2, pNode->zData, pRtree->iNodeSize, SQLITE_STATIC);
130196:     sqlite3_step(p);
130197:     pNode->isDirty = 0;
130198:     rc = sqlite3_reset(p);
130199:     if( pNode->iNode==0 && rc==SQLITE_OK ){
130200:       pNode->iNode = sqlite3_last_insert_rowid(pRtree->db);
130201:       nodeHashInsert(pRtree, pNode);
130202:     }
130203:   }
130204:   return rc;
130205: }
130206: 
130207: /*
130208: ** Release a reference to a node. If the node is dirty and the reference
130209: ** count drops to zero, the node data is written to the database.
130210: */
130211: static int
130212: nodeRelease(Rtree *pRtree, RtreeNode *pNode){
130213:   int rc = SQLITE_OK;
130214:   if( pNode ){
130215:     assert( pNode->nRef>0 );
130216:     pNode->nRef--;
130217:     if( pNode->nRef==0 ){
130218:       if( pNode->iNode==1 ){
130219:         pRtree->iDepth = -1;
130220:       }
130221:       if( pNode->pParent ){
130222:         rc = nodeRelease(pRtree, pNode->pParent);
130223:       }
130224:       if( rc==SQLITE_OK ){
130225:         rc = nodeWrite(pRtree, pNode);
130226:       }
130227:       nodeHashDelete(pRtree, pNode);
130228:       sqlite3_free(pNode);
130229:     }
130230:   }
130231:   return rc;
130232: }
130233: 
130234: /*
130235: ** Return the 64-bit integer value associated with cell iCell of
130236: ** node pNode. If pNode is a leaf node, this is a rowid. If it is
130237: ** an internal node, then the 64-bit integer is a child page number.
130238: */
130239: static i64 nodeGetRowid(
130240:   Rtree *pRtree, 
130241:   RtreeNode *pNode, 
130242:   int iCell
130243: ){
130244:   assert( iCell<NCELL(pNode) );
130245:   return readInt64(&pNode->zData[4 + pRtree->nBytesPerCell*iCell]);
130246: }
130247: 
130248: /*
130249: ** Return coordinate iCoord from cell iCell in node pNode.
130250: */
130251: static void nodeGetCoord(
130252:   Rtree *pRtree, 
130253:   RtreeNode *pNode, 
130254:   int iCell,
130255:   int iCoord,
130256:   RtreeCoord *pCoord           /* Space to write result to */
130257: ){
130258:   readCoord(&pNode->zData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord);
130259: }
130260: 
130261: /*
130262: ** Deserialize cell iCell of node pNode. Populate the structure pointed
130263: ** to by pCell with the results.
130264: */
130265: static void nodeGetCell(
130266:   Rtree *pRtree, 
130267:   RtreeNode *pNode, 
130268:   int iCell,
130269:   RtreeCell *pCell
130270: ){
130271:   int ii;
130272:   pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell);
130273:   for(ii=0; ii<pRtree->nDim*2; ii++){
130274:     nodeGetCoord(pRtree, pNode, iCell, ii, &pCell->aCoord[ii]);
130275:   }
130276: }
130277: 
130278: 
130279: /* Forward declaration for the function that does the work of
130280: ** the virtual table module xCreate() and xConnect() methods.
130281: */
130282: static int rtreeInit(
130283:   sqlite3 *, void *, int, const char *const*, sqlite3_vtab **, char **, int
130284: );
130285: 
130286: /* 
130287: ** Rtree virtual table module xCreate method.
130288: */
130289: static int rtreeCreate(
130290:   sqlite3 *db,
130291:   void *pAux,
130292:   int argc, const char *const*argv,
130293:   sqlite3_vtab **ppVtab,
130294:   char **pzErr
130295: ){
130296:   return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 1);
130297: }
130298: 
130299: /* 
130300: ** Rtree virtual table module xConnect method.
130301: */
130302: static int rtreeConnect(
130303:   sqlite3 *db,
130304:   void *pAux,
130305:   int argc, const char *const*argv,
130306:   sqlite3_vtab **ppVtab,
130307:   char **pzErr
130308: ){
130309:   return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 0);
130310: }
130311: 
130312: /*
130313: ** Increment the r-tree reference count.
130314: */
130315: static void rtreeReference(Rtree *pRtree){
130316:   pRtree->nBusy++;
130317: }
130318: 
130319: /*
130320: ** Decrement the r-tree reference count. When the reference count reaches
130321: ** zero the structure is deleted.
130322: */
130323: static void rtreeRelease(Rtree *pRtree){
130324:   pRtree->nBusy--;
130325:   if( pRtree->nBusy==0 ){
130326:     sqlite3_finalize(pRtree->pReadNode);
130327:     sqlite3_finalize(pRtree->pWriteNode);
130328:     sqlite3_finalize(pRtree->pDeleteNode);
130329:     sqlite3_finalize(pRtree->pReadRowid);
130330:     sqlite3_finalize(pRtree->pWriteRowid);
130331:     sqlite3_finalize(pRtree->pDeleteRowid);
130332:     sqlite3_finalize(pRtree->pReadParent);
130333:     sqlite3_finalize(pRtree->pWriteParent);
130334:     sqlite3_finalize(pRtree->pDeleteParent);
130335:     sqlite3_free(pRtree);
130336:   }
130337: }
130338: 
130339: /* 
130340: ** Rtree virtual table module xDisconnect method.
130341: */
130342: static int rtreeDisconnect(sqlite3_vtab *pVtab){
130343:   rtreeRelease((Rtree *)pVtab);
130344:   return SQLITE_OK;
130345: }
130346: 
130347: /* 
130348: ** Rtree virtual table module xDestroy method.
130349: */
130350: static int rtreeDestroy(sqlite3_vtab *pVtab){
130351:   Rtree *pRtree = (Rtree *)pVtab;
130352:   int rc;
130353:   char *zCreate = sqlite3_mprintf(
130354:     "DROP TABLE '%q'.'%q_node';"
130355:     "DROP TABLE '%q'.'%q_rowid';"
130356:     "DROP TABLE '%q'.'%q_parent';",
130357:     pRtree->zDb, pRtree->zName, 
130358:     pRtree->zDb, pRtree->zName,
130359:     pRtree->zDb, pRtree->zName
130360:   );
130361:   if( !zCreate ){
130362:     rc = SQLITE_NOMEM;
130363:   }else{
130364:     rc = sqlite3_exec(pRtree->db, zCreate, 0, 0, 0);
130365:     sqlite3_free(zCreate);
130366:   }
130367:   if( rc==SQLITE_OK ){
130368:     rtreeRelease(pRtree);
130369:   }
130370: 
130371:   return rc;
130372: }
130373: 
130374: /* 
130375: ** Rtree virtual table module xOpen method.
130376: */
130377: static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){
130378:   int rc = SQLITE_NOMEM;
130379:   RtreeCursor *pCsr;
130380: 
130381:   pCsr = (RtreeCursor *)sqlite3_malloc(sizeof(RtreeCursor));
130382:   if( pCsr ){
130383:     memset(pCsr, 0, sizeof(RtreeCursor));
130384:     pCsr->base.pVtab = pVTab;
130385:     rc = SQLITE_OK;
130386:   }
130387:   *ppCursor = (sqlite3_vtab_cursor *)pCsr;
130388: 
130389:   return rc;
130390: }
130391: 
130392: 
130393: /*
130394: ** Free the RtreeCursor.aConstraint[] array and its contents.
130395: */
130396: static void freeCursorConstraints(RtreeCursor *pCsr){
130397:   if( pCsr->aConstraint ){
130398:     int i;                        /* Used to iterate through constraint array */
130399:     for(i=0; i<pCsr->nConstraint; i++){
130400:       sqlite3_rtree_geometry *pGeom = pCsr->aConstraint[i].pGeom;
130401:       if( pGeom ){
130402:         if( pGeom->xDelUser ) pGeom->xDelUser(pGeom->pUser);
130403:         sqlite3_free(pGeom);
130404:       }
130405:     }
130406:     sqlite3_free(pCsr->aConstraint);
130407:     pCsr->aConstraint = 0;
130408:   }
130409: }
130410: 
130411: /* 
130412: ** Rtree virtual table module xClose method.
130413: */
130414: static int rtreeClose(sqlite3_vtab_cursor *cur){
130415:   Rtree *pRtree = (Rtree *)(cur->pVtab);
130416:   int rc;
130417:   RtreeCursor *pCsr = (RtreeCursor *)cur;
130418:   freeCursorConstraints(pCsr);
130419:   rc = nodeRelease(pRtree, pCsr->pNode);
130420:   sqlite3_free(pCsr);
130421:   return rc;
130422: }
130423: 
130424: /*
130425: ** Rtree virtual table module xEof method.
130426: **
130427: ** Return non-zero if the cursor does not currently point to a valid 
130428: ** record (i.e if the scan has finished), or zero otherwise.
130429: */
130430: static int rtreeEof(sqlite3_vtab_cursor *cur){
130431:   RtreeCursor *pCsr = (RtreeCursor *)cur;
130432:   return (pCsr->pNode==0);
130433: }
130434: 
130435: /*
130436: ** The r-tree constraint passed as the second argument to this function is
130437: ** guaranteed to be a MATCH constraint.
130438: */
130439: static int testRtreeGeom(
130440:   Rtree *pRtree,                  /* R-Tree object */
130441:   RtreeConstraint *pConstraint,   /* MATCH constraint to test */
130442:   RtreeCell *pCell,               /* Cell to test */
130443:   int *pbRes                      /* OUT: Test result */
130444: ){
130445:   int i;
130446:   double aCoord[RTREE_MAX_DIMENSIONS*2];
130447:   int nCoord = pRtree->nDim*2;
130448: 
130449:   assert( pConstraint->op==RTREE_MATCH );
130450:   assert( pConstraint->pGeom );
130451: 
130452:   for(i=0; i<nCoord; i++){
130453:     aCoord[i] = DCOORD(pCell->aCoord[i]);
130454:   }
130455:   return pConstraint->xGeom(pConstraint->pGeom, nCoord, aCoord, pbRes);
130456: }
130457: 
130458: /* 
130459: ** Cursor pCursor currently points to a cell in a non-leaf page.
130460: ** Set *pbEof to true if the sub-tree headed by the cell is filtered
130461: ** (excluded) by the constraints in the pCursor->aConstraint[] 
130462: ** array, or false otherwise.
130463: **
130464: ** Return SQLITE_OK if successful or an SQLite error code if an error
130465: ** occurs within a geometry callback.
130466: */
130467: static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
130468:   RtreeCell cell;
130469:   int ii;
130470:   int bRes = 0;
130471:   int rc = SQLITE_OK;
130472: 
130473:   nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
130474:   for(ii=0; bRes==0 && ii<pCursor->nConstraint; ii++){
130475:     RtreeConstraint *p = &pCursor->aConstraint[ii];
130476:     double cell_min = DCOORD(cell.aCoord[(p->iCoord>>1)*2]);
130477:     double cell_max = DCOORD(cell.aCoord[(p->iCoord>>1)*2+1]);
130478: 
130479:     assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE 
130480:         || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
130481:     );
130482: 
130483:     switch( p->op ){
130484:       case RTREE_LE: case RTREE_LT: 
130485:         bRes = p->rValue<cell_min; 
130486:         break;
130487: 
130488:       case RTREE_GE: case RTREE_GT: 
130489:         bRes = p->rValue>cell_max; 
130490:         break;
130491: 
130492:       case RTREE_EQ:
130493:         bRes = (p->rValue>cell_max || p->rValue<cell_min);
130494:         break;
130495: 
130496:       default: {
130497:         assert( p->op==RTREE_MATCH );
130498:         rc = testRtreeGeom(pRtree, p, &cell, &bRes);
130499:         bRes = !bRes;
130500:         break;
130501:       }
130502:     }
130503:   }
130504: 
130505:   *pbEof = bRes;
130506:   return rc;
130507: }
130508: 
130509: /* 
130510: ** Test if the cell that cursor pCursor currently points to
130511: ** would be filtered (excluded) by the constraints in the 
130512: ** pCursor->aConstraint[] array. If so, set *pbEof to true before
130513: ** returning. If the cell is not filtered (excluded) by the constraints,
130514: ** set pbEof to zero.
130515: **
130516: ** Return SQLITE_OK if successful or an SQLite error code if an error
130517: ** occurs within a geometry callback.
130518: **
130519: ** This function assumes that the cell is part of a leaf node.
130520: */
130521: static int testRtreeEntry(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
130522:   RtreeCell cell;
130523:   int ii;
130524:   *pbEof = 0;
130525: 
130526:   nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
130527:   for(ii=0; ii<pCursor->nConstraint; ii++){
130528:     RtreeConstraint *p = &pCursor->aConstraint[ii];
130529:     double coord = DCOORD(cell.aCoord[p->iCoord]);
130530:     int res;
130531:     assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE 
130532:         || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
130533:     );
130534:     switch( p->op ){
130535:       case RTREE_LE: res = (coord<=p->rValue); break;
130536:       case RTREE_LT: res = (coord<p->rValue);  break;
130537:       case RTREE_GE: res = (coord>=p->rValue); break;
130538:       case RTREE_GT: res = (coord>p->rValue);  break;
130539:       case RTREE_EQ: res = (coord==p->rValue); break;
130540:       default: {
130541:         int rc;
130542:         assert( p->op==RTREE_MATCH );
130543:         rc = testRtreeGeom(pRtree, p, &cell, &res);
130544:         if( rc!=SQLITE_OK ){
130545:           return rc;
130546:         }
130547:         break;
130548:       }
130549:     }
130550: 
130551:     if( !res ){
130552:       *pbEof = 1;
130553:       return SQLITE_OK;
130554:     }
130555:   }
130556: 
130557:   return SQLITE_OK;
130558: }
130559: 
130560: /*
130561: ** Cursor pCursor currently points at a node that heads a sub-tree of
130562: ** height iHeight (if iHeight==0, then the node is a leaf). Descend
130563: ** to point to the left-most cell of the sub-tree that matches the 
130564: ** configured constraints.
130565: */
130566: static int descendToCell(
130567:   Rtree *pRtree, 
130568:   RtreeCursor *pCursor, 
130569:   int iHeight,
130570:   int *pEof                 /* OUT: Set to true if cannot descend */
130571: ){
130572:   int isEof;
130573:   int rc;
130574:   int ii;
130575:   RtreeNode *pChild;
130576:   sqlite3_int64 iRowid;
130577: 
130578:   RtreeNode *pSavedNode = pCursor->pNode;
130579:   int iSavedCell = pCursor->iCell;
130580: 
130581:   assert( iHeight>=0 );
130582: 
130583:   if( iHeight==0 ){
130584:     rc = testRtreeEntry(pRtree, pCursor, &isEof);
130585:   }else{
130586:     rc = testRtreeCell(pRtree, pCursor, &isEof);
130587:   }
130588:   if( rc!=SQLITE_OK || isEof || iHeight==0 ){
130589:     goto descend_to_cell_out;
130590:   }
130591: 
130592:   iRowid = nodeGetRowid(pRtree, pCursor->pNode, pCursor->iCell);
130593:   rc = nodeAcquire(pRtree, iRowid, pCursor->pNode, &pChild);
130594:   if( rc!=SQLITE_OK ){
130595:     goto descend_to_cell_out;
130596:   }
130597: 
130598:   nodeRelease(pRtree, pCursor->pNode);
130599:   pCursor->pNode = pChild;
130600:   isEof = 1;
130601:   for(ii=0; isEof && ii<NCELL(pChild); ii++){
130602:     pCursor->iCell = ii;
130603:     rc = descendToCell(pRtree, pCursor, iHeight-1, &isEof);
130604:     if( rc!=SQLITE_OK ){
130605:       goto descend_to_cell_out;
130606:     }
130607:   }
130608: 
130609:   if( isEof ){
130610:     assert( pCursor->pNode==pChild );
130611:     nodeReference(pSavedNode);
130612:     nodeRelease(pRtree, pChild);
130613:     pCursor->pNode = pSavedNode;
130614:     pCursor->iCell = iSavedCell;
130615:   }
130616: 
130617: descend_to_cell_out:
130618:   *pEof = isEof;
130619:   return rc;
130620: }
130621: 
130622: /*
130623: ** One of the cells in node pNode is guaranteed to have a 64-bit 
130624: ** integer value equal to iRowid. Return the index of this cell.
130625: */
130626: static int nodeRowidIndex(
130627:   Rtree *pRtree, 
130628:   RtreeNode *pNode, 
130629:   i64 iRowid,
130630:   int *piIndex
130631: ){
130632:   int ii;
130633:   int nCell = NCELL(pNode);
130634:   for(ii=0; ii<nCell; ii++){
130635:     if( nodeGetRowid(pRtree, pNode, ii)==iRowid ){
130636:       *piIndex = ii;
130637:       return SQLITE_OK;
130638:     }
130639:   }
130640:   return SQLITE_CORRUPT_VTAB;
130641: }
130642: 
130643: /*
130644: ** Return the index of the cell containing a pointer to node pNode
130645: ** in its parent. If pNode is the root node, return -1.
130646: */
130647: static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode, int *piIndex){
130648:   RtreeNode *pParent = pNode->pParent;
130649:   if( pParent ){
130650:     return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex);
130651:   }
130652:   *piIndex = -1;
130653:   return SQLITE_OK;
130654: }
130655: 
130656: /* 
130657: ** Rtree virtual table module xNext method.
130658: */
130659: static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){
130660:   Rtree *pRtree = (Rtree *)(pVtabCursor->pVtab);
130661:   RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
130662:   int rc = SQLITE_OK;
130663: 
130664:   /* RtreeCursor.pNode must not be NULL. If is is NULL, then this cursor is
130665:   ** already at EOF. It is against the rules to call the xNext() method of
130666:   ** a cursor that has already reached EOF.
130667:   */
130668:   assert( pCsr->pNode );
130669: 
130670:   if( pCsr->iStrategy==1 ){
130671:     /* This "scan" is a direct lookup by rowid. There is no next entry. */
130672:     nodeRelease(pRtree, pCsr->pNode);
130673:     pCsr->pNode = 0;
130674:   }else{
130675:     /* Move to the next entry that matches the configured constraints. */
130676:     int iHeight = 0;
130677:     while( pCsr->pNode ){
130678:       RtreeNode *pNode = pCsr->pNode;
130679:       int nCell = NCELL(pNode);
130680:       for(pCsr->iCell++; pCsr->iCell<nCell; pCsr->iCell++){
130681:         int isEof;
130682:         rc = descendToCell(pRtree, pCsr, iHeight, &isEof);
130683:         if( rc!=SQLITE_OK || !isEof ){
130684:           return rc;
130685:         }
130686:       }
130687:       pCsr->pNode = pNode->pParent;
130688:       rc = nodeParentIndex(pRtree, pNode, &pCsr->iCell);
130689:       if( rc!=SQLITE_OK ){
130690:         return rc;
130691:       }
130692:       nodeReference(pCsr->pNode);
130693:       nodeRelease(pRtree, pNode);
130694:       iHeight++;
130695:     }
130696:   }
130697: 
130698:   return rc;
130699: }
130700: 
130701: /* 
130702: ** Rtree virtual table module xRowid method.
130703: */
130704: static int rtreeRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pRowid){
130705:   Rtree *pRtree = (Rtree *)pVtabCursor->pVtab;
130706:   RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
130707: 
130708:   assert(pCsr->pNode);
130709:   *pRowid = nodeGetRowid(pRtree, pCsr->pNode, pCsr->iCell);
130710: 
130711:   return SQLITE_OK;
130712: }
130713: 
130714: /* 
130715: ** Rtree virtual table module xColumn method.
130716: */
130717: static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){
130718:   Rtree *pRtree = (Rtree *)cur->pVtab;
130719:   RtreeCursor *pCsr = (RtreeCursor *)cur;
130720: 
130721:   if( i==0 ){
130722:     i64 iRowid = nodeGetRowid(pRtree, pCsr->pNode, pCsr->iCell);
130723:     sqlite3_result_int64(ctx, iRowid);
130724:   }else{
130725:     RtreeCoord c;
130726:     nodeGetCoord(pRtree, pCsr->pNode, pCsr->iCell, i-1, &c);
130727:     if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
130728:       sqlite3_result_double(ctx, c.f);
130729:     }else{
130730:       assert( pRtree->eCoordType==RTREE_COORD_INT32 );
130731:       sqlite3_result_int(ctx, c.i);
130732:     }
130733:   }
130734: 
130735:   return SQLITE_OK;
130736: }
130737: 
130738: /* 
130739: ** Use nodeAcquire() to obtain the leaf node containing the record with 
130740: ** rowid iRowid. If successful, set *ppLeaf to point to the node and
130741: ** return SQLITE_OK. If there is no such record in the table, set
130742: ** *ppLeaf to 0 and return SQLITE_OK. If an error occurs, set *ppLeaf
130743: ** to zero and return an SQLite error code.
130744: */
130745: static int findLeafNode(Rtree *pRtree, i64 iRowid, RtreeNode **ppLeaf){
130746:   int rc;
130747:   *ppLeaf = 0;
130748:   sqlite3_bind_int64(pRtree->pReadRowid, 1, iRowid);
130749:   if( sqlite3_step(pRtree->pReadRowid)==SQLITE_ROW ){
130750:     i64 iNode = sqlite3_column_int64(pRtree->pReadRowid, 0);
130751:     rc = nodeAcquire(pRtree, iNode, 0, ppLeaf);
130752:     sqlite3_reset(pRtree->pReadRowid);
130753:   }else{
130754:     rc = sqlite3_reset(pRtree->pReadRowid);
130755:   }
130756:   return rc;
130757: }
130758: 
130759: /*
130760: ** This function is called to configure the RtreeConstraint object passed
130761: ** as the second argument for a MATCH constraint. The value passed as the
130762: ** first argument to this function is the right-hand operand to the MATCH
130763: ** operator.
130764: */
130765: static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){
130766:   RtreeMatchArg *p;
130767:   sqlite3_rtree_geometry *pGeom;
130768:   int nBlob;
130769: 
130770:   /* Check that value is actually a blob. */
130771:   if( sqlite3_value_type(pValue)!=SQLITE_BLOB ) return SQLITE_ERROR;
130772: 
130773:   /* Check that the blob is roughly the right size. */
130774:   nBlob = sqlite3_value_bytes(pValue);
130775:   if( nBlob<(int)sizeof(RtreeMatchArg) 
130776:    || ((nBlob-sizeof(RtreeMatchArg))%sizeof(double))!=0
130777:   ){
130778:     return SQLITE_ERROR;
130779:   }
130780: 
130781:   pGeom = (sqlite3_rtree_geometry *)sqlite3_malloc(
130782:       sizeof(sqlite3_rtree_geometry) + nBlob
130783:   );
130784:   if( !pGeom ) return SQLITE_NOMEM;
130785:   memset(pGeom, 0, sizeof(sqlite3_rtree_geometry));
130786:   p = (RtreeMatchArg *)&pGeom[1];
130787: 
130788:   memcpy(p, sqlite3_value_blob(pValue), nBlob);
130789:   if( p->magic!=RTREE_GEOMETRY_MAGIC 
130790:    || nBlob!=(int)(sizeof(RtreeMatchArg) + (p->nParam-1)*sizeof(double))
130791:   ){
130792:     sqlite3_free(pGeom);
130793:     return SQLITE_ERROR;
130794:   }
130795: 
130796:   pGeom->pContext = p->pContext;
130797:   pGeom->nParam = p->nParam;
130798:   pGeom->aParam = p->aParam;
130799: 
130800:   pCons->xGeom = p->xGeom;
130801:   pCons->pGeom = pGeom;
130802:   return SQLITE_OK;
130803: }
130804: 
130805: /* 
130806: ** Rtree virtual table module xFilter method.
130807: */
130808: static int rtreeFilter(
130809:   sqlite3_vtab_cursor *pVtabCursor, 
130810:   int idxNum, const char *idxStr,
130811:   int argc, sqlite3_value **argv
130812: ){
130813:   Rtree *pRtree = (Rtree *)pVtabCursor->pVtab;
130814:   RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
130815: 
130816:   RtreeNode *pRoot = 0;
130817:   int ii;
130818:   int rc = SQLITE_OK;
130819: 
130820:   rtreeReference(pRtree);
130821: 
130822:   freeCursorConstraints(pCsr);
130823:   pCsr->iStrategy = idxNum;
130824: 
130825:   if( idxNum==1 ){
130826:     /* Special case - lookup by rowid. */
130827:     RtreeNode *pLeaf;        /* Leaf on which the required cell resides */
130828:     i64 iRowid = sqlite3_value_int64(argv[0]);
130829:     rc = findLeafNode(pRtree, iRowid, &pLeaf);
130830:     pCsr->pNode = pLeaf; 
130831:     if( pLeaf ){
130832:       assert( rc==SQLITE_OK );
130833:       rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &pCsr->iCell);
130834:     }
130835:   }else{
130836:     /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array 
130837:     ** with the configured constraints. 
130838:     */
130839:     if( argc>0 ){
130840:       pCsr->aConstraint = sqlite3_malloc(sizeof(RtreeConstraint)*argc);
130841:       pCsr->nConstraint = argc;
130842:       if( !pCsr->aConstraint ){
130843:         rc = SQLITE_NOMEM;
130844:       }else{
130845:         memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*argc);
130846:         assert( (idxStr==0 && argc==0)
130847:                 || (idxStr && (int)strlen(idxStr)==argc*2) );
130848:         for(ii=0; ii<argc; ii++){
130849:           RtreeConstraint *p = &pCsr->aConstraint[ii];
130850:           p->op = idxStr[ii*2];
130851:           p->iCoord = idxStr[ii*2+1]-'a';
130852:           if( p->op==RTREE_MATCH ){
130853:             /* A MATCH operator. The right-hand-side must be a blob that
130854:             ** can be cast into an RtreeMatchArg object. One created using
130855:             ** an sqlite3_rtree_geometry_callback() SQL user function.
130856:             */
130857:             rc = deserializeGeometry(argv[ii], p);
130858:             if( rc!=SQLITE_OK ){
130859:               break;
130860:             }
130861:           }else{
130862:             p->rValue = sqlite3_value_double(argv[ii]);
130863:           }
130864:         }
130865:       }
130866:     }
130867:   
130868:     if( rc==SQLITE_OK ){
130869:       pCsr->pNode = 0;
130870:       rc = nodeAcquire(pRtree, 1, 0, &pRoot);
130871:     }
130872:     if( rc==SQLITE_OK ){
130873:       int isEof = 1;
130874:       int nCell = NCELL(pRoot);
130875:       pCsr->pNode = pRoot;
130876:       for(pCsr->iCell=0; rc==SQLITE_OK && pCsr->iCell<nCell; pCsr->iCell++){
130877:         assert( pCsr->pNode==pRoot );
130878:         rc = descendToCell(pRtree, pCsr, pRtree->iDepth, &isEof);
130879:         if( !isEof ){
130880:           break;
130881:         }
130882:       }
130883:       if( rc==SQLITE_OK && isEof ){
130884:         assert( pCsr->pNode==pRoot );
130885:         nodeRelease(pRtree, pRoot);
130886:         pCsr->pNode = 0;
130887:       }
130888:       assert( rc!=SQLITE_OK || !pCsr->pNode || pCsr->iCell<NCELL(pCsr->pNode) );
130889:     }
130890:   }
130891: 
130892:   rtreeRelease(pRtree);
130893:   return rc;
130894: }
130895: 
130896: /*
130897: ** Rtree virtual table module xBestIndex method. There are three
130898: ** table scan strategies to choose from (in order from most to 
130899: ** least desirable):
130900: **
130901: **   idxNum     idxStr        Strategy
130902: **   ------------------------------------------------
130903: **     1        Unused        Direct lookup by rowid.
130904: **     2        See below     R-tree query or full-table scan.
130905: **   ------------------------------------------------
130906: **
130907: ** If strategy 1 is used, then idxStr is not meaningful. If strategy
130908: ** 2 is used, idxStr is formatted to contain 2 bytes for each 
130909: ** constraint used. The first two bytes of idxStr correspond to 
130910: ** the constraint in sqlite3_index_info.aConstraintUsage[] with
130911: ** (argvIndex==1) etc.
130912: **
130913: ** The first of each pair of bytes in idxStr identifies the constraint
130914: ** operator as follows:
130915: **
130916: **   Operator    Byte Value
130917: **   ----------------------
130918: **      =        0x41 ('A')
130919: **     <=        0x42 ('B')
130920: **      <        0x43 ('C')
130921: **     >=        0x44 ('D')
130922: **      >        0x45 ('E')
130923: **   MATCH       0x46 ('F')
130924: **   ----------------------
130925: **
130926: ** The second of each pair of bytes identifies the coordinate column
130927: ** to which the constraint applies. The leftmost coordinate column
130928: ** is 'a', the second from the left 'b' etc.
130929: */
130930: static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
130931:   int rc = SQLITE_OK;
130932:   int ii;
130933: 
130934:   int iIdx = 0;
130935:   char zIdxStr[RTREE_MAX_DIMENSIONS*8+1];
130936:   memset(zIdxStr, 0, sizeof(zIdxStr));
130937:   UNUSED_PARAMETER(tab);
130938: 
130939:   assert( pIdxInfo->idxStr==0 );
130940:   for(ii=0; ii<pIdxInfo->nConstraint && iIdx<(int)(sizeof(zIdxStr)-1); ii++){
130941:     struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii];
130942: 
130943:     if( p->usable && p->iColumn==0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){
130944:       /* We have an equality constraint on the rowid. Use strategy 1. */
130945:       int jj;
130946:       for(jj=0; jj<ii; jj++){
130947:         pIdxInfo->aConstraintUsage[jj].argvIndex = 0;
130948:         pIdxInfo->aConstraintUsage[jj].omit = 0;
130949:       }
130950:       pIdxInfo->idxNum = 1;
130951:       pIdxInfo->aConstraintUsage[ii].argvIndex = 1;
130952:       pIdxInfo->aConstraintUsage[jj].omit = 1;
130953: 
130954:       /* This strategy involves a two rowid lookups on an B-Tree structures
130955:       ** and then a linear search of an R-Tree node. This should be 
130956:       ** considered almost as quick as a direct rowid lookup (for which 
130957:       ** sqlite uses an internal cost of 0.0).
130958:       */ 
130959:       pIdxInfo->estimatedCost = 10.0;
130960:       return SQLITE_OK;
130961:     }
130962: 
130963:     if( p->usable && (p->iColumn>0 || p->op==SQLITE_INDEX_CONSTRAINT_MATCH) ){
130964:       u8 op;
130965:       switch( p->op ){
130966:         case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; break;
130967:         case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; break;
130968:         case SQLITE_INDEX_CONSTRAINT_LE: op = RTREE_LE; break;
130969:         case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; break;
130970:         case SQLITE_INDEX_CONSTRAINT_GE: op = RTREE_GE; break;
130971:         default:
130972:           assert( p->op==SQLITE_INDEX_CONSTRAINT_MATCH );
130973:           op = RTREE_MATCH; 
130974:           break;
130975:       }
130976:       zIdxStr[iIdx++] = op;
130977:       zIdxStr[iIdx++] = p->iColumn - 1 + 'a';
130978:       pIdxInfo->aConstraintUsage[ii].argvIndex = (iIdx/2);
130979:       pIdxInfo->aConstraintUsage[ii].omit = 1;
130980:     }
130981:   }
130982: 
130983:   pIdxInfo->idxNum = 2;
130984:   pIdxInfo->needToFreeIdxStr = 1;
130985:   if( iIdx>0 && 0==(pIdxInfo->idxStr = sqlite3_mprintf("%s", zIdxStr)) ){
130986:     return SQLITE_NOMEM;
130987:   }
130988:   assert( iIdx>=0 );
130989:   pIdxInfo->estimatedCost = (2000000.0 / (double)(iIdx + 1));
130990:   return rc;
130991: }
130992: 
130993: /*
130994: ** Return the N-dimensional volumn of the cell stored in *p.
130995: */
130996: static float cellArea(Rtree *pRtree, RtreeCell *p){
130997:   float area = 1.0;
130998:   int ii;
130999:   for(ii=0; ii<(pRtree->nDim*2); ii+=2){
131000:     area = (float)(area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])));
131001:   }
131002:   return area;
131003: }
131004: 
131005: /*
131006: ** Return the margin length of cell p. The margin length is the sum
131007: ** of the objects size in each dimension.
131008: */
131009: static float cellMargin(Rtree *pRtree, RtreeCell *p){
131010:   float margin = 0.0;
131011:   int ii;
131012:   for(ii=0; ii<(pRtree->nDim*2); ii+=2){
131013:     margin += (float)(DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]));
131014:   }
131015:   return margin;
131016: }
131017: 
131018: /*
131019: ** Store the union of cells p1 and p2 in p1.
131020: */
131021: static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){
131022:   int ii;
131023:   if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
131024:     for(ii=0; ii<(pRtree->nDim*2); ii+=2){
131025:       p1->aCoord[ii].f = MIN(p1->aCoord[ii].f, p2->aCoord[ii].f);
131026:       p1->aCoord[ii+1].f = MAX(p1->aCoord[ii+1].f, p2->aCoord[ii+1].f);
131027:     }
131028:   }else{
131029:     for(ii=0; ii<(pRtree->nDim*2); ii+=2){
131030:       p1->aCoord[ii].i = MIN(p1->aCoord[ii].i, p2->aCoord[ii].i);
131031:       p1->aCoord[ii+1].i = MAX(p1->aCoord[ii+1].i, p2->aCoord[ii+1].i);
131032:     }
131033:   }
131034: }
131035: 
131036: /*
131037: ** Return true if the area covered by p2 is a subset of the area covered
131038: ** by p1. False otherwise.
131039: */
131040: static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){
131041:   int ii;
131042:   int isInt = (pRtree->eCoordType==RTREE_COORD_INT32);
131043:   for(ii=0; ii<(pRtree->nDim*2); ii+=2){
131044:     RtreeCoord *a1 = &p1->aCoord[ii];
131045:     RtreeCoord *a2 = &p2->aCoord[ii];
131046:     if( (!isInt && (a2[0].f<a1[0].f || a2[1].f>a1[1].f)) 
131047:      || ( isInt && (a2[0].i<a1[0].i || a2[1].i>a1[1].i)) 
131048:     ){
131049:       return 0;
131050:     }
131051:   }
131052:   return 1;
131053: }
131054: 
131055: /*
131056: ** Return the amount cell p would grow by if it were unioned with pCell.
131057: */
131058: static float cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){
131059:   float area;
131060:   RtreeCell cell;
131061:   memcpy(&cell, p, sizeof(RtreeCell));
131062:   area = cellArea(pRtree, &cell);
131063:   cellUnion(pRtree, &cell, pCell);
131064:   return (cellArea(pRtree, &cell)-area);
131065: }
131066: 
131067: #if VARIANT_RSTARTREE_CHOOSESUBTREE || VARIANT_RSTARTREE_SPLIT
131068: static float cellOverlap(
131069:   Rtree *pRtree, 
131070:   RtreeCell *p, 
131071:   RtreeCell *aCell, 
131072:   int nCell, 
131073:   int iExclude
131074: ){
131075:   int ii;
131076:   float overlap = 0.0;
131077:   for(ii=0; ii<nCell; ii++){
131078: #if VARIANT_RSTARTREE_CHOOSESUBTREE
131079:     if( ii!=iExclude )
131080: #else
131081:     assert( iExclude==-1 );
131082:     UNUSED_PARAMETER(iExclude);
131083: #endif
131084:     {
131085:       int jj;
131086:       float o = 1.0;
131087:       for(jj=0; jj<(pRtree->nDim*2); jj+=2){
131088:         double x1;
131089:         double x2;
131090: 
131091:         x1 = MAX(DCOORD(p->aCoord[jj]), DCOORD(aCell[ii].aCoord[jj]));
131092:         x2 = MIN(DCOORD(p->aCoord[jj+1]), DCOORD(aCell[ii].aCoord[jj+1]));
131093: 
131094:         if( x2<x1 ){
131095:           o = 0.0;
131096:           break;
131097:         }else{
131098:           o = o * (float)(x2-x1);
131099:         }
131100:       }
131101:       overlap += o;
131102:     }
131103:   }
131104:   return overlap;
131105: }
131106: #endif
131107: 
131108: #if VARIANT_RSTARTREE_CHOOSESUBTREE
131109: static float cellOverlapEnlargement(
131110:   Rtree *pRtree, 
131111:   RtreeCell *p, 
131112:   RtreeCell *pInsert, 
131113:   RtreeCell *aCell, 
131114:   int nCell, 
131115:   int iExclude
131116: ){
131117:   double before;
131118:   double after;
131119:   before = cellOverlap(pRtree, p, aCell, nCell, iExclude);
131120:   cellUnion(pRtree, p, pInsert);
131121:   after = cellOverlap(pRtree, p, aCell, nCell, iExclude);
131122:   return (float)(after-before);
131123: }
131124: #endif
131125: 
131126: 
131127: /*
131128: ** This function implements the ChooseLeaf algorithm from Gutman[84].
131129: ** ChooseSubTree in r*tree terminology.
131130: */
131131: static int ChooseLeaf(
131132:   Rtree *pRtree,               /* Rtree table */
131133:   RtreeCell *pCell,            /* Cell to insert into rtree */
131134:   int iHeight,                 /* Height of sub-tree rooted at pCell */
131135:   RtreeNode **ppLeaf           /* OUT: Selected leaf page */
131136: ){
131137:   int rc;
131138:   int ii;
131139:   RtreeNode *pNode;
131140:   rc = nodeAcquire(pRtree, 1, 0, &pNode);
131141: 
131142:   for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){
131143:     int iCell;
131144:     sqlite3_int64 iBest = 0;
131145: 
131146:     float fMinGrowth = 0.0;
131147:     float fMinArea = 0.0;
131148: #if VARIANT_RSTARTREE_CHOOSESUBTREE
131149:     float fMinOverlap = 0.0;
131150:     float overlap;
131151: #endif
131152: 
131153:     int nCell = NCELL(pNode);
131154:     RtreeCell cell;
131155:     RtreeNode *pChild;
131156: 
131157:     RtreeCell *aCell = 0;
131158: 
131159: #if VARIANT_RSTARTREE_CHOOSESUBTREE
131160:     if( ii==(pRtree->iDepth-1) ){
131161:       int jj;
131162:       aCell = sqlite3_malloc(sizeof(RtreeCell)*nCell);
131163:       if( !aCell ){
131164:         rc = SQLITE_NOMEM;
131165:         nodeRelease(pRtree, pNode);
131166:         pNode = 0;
131167:         continue;
131168:       }
131169:       for(jj=0; jj<nCell; jj++){
131170:         nodeGetCell(pRtree, pNode, jj, &aCell[jj]);
131171:       }
131172:     }
131173: #endif
131174: 
131175:     /* Select the child node which will be enlarged the least if pCell
131176:     ** is inserted into it. Resolve ties by choosing the entry with
131177:     ** the smallest area.
131178:     */
131179:     for(iCell=0; iCell<nCell; iCell++){
131180:       int bBest = 0;
131181:       float growth;
131182:       float area;
131183:       nodeGetCell(pRtree, pNode, iCell, &cell);
131184:       growth = cellGrowth(pRtree, &cell, pCell);
131185:       area = cellArea(pRtree, &cell);
131186: 
131187: #if VARIANT_RSTARTREE_CHOOSESUBTREE
131188:       if( ii==(pRtree->iDepth-1) ){
131189:         overlap = cellOverlapEnlargement(pRtree,&cell,pCell,aCell,nCell,iCell);
131190:       }else{
131191:         overlap = 0.0;
131192:       }
131193:       if( (iCell==0) 
131194:        || (overlap<fMinOverlap) 
131195:        || (overlap==fMinOverlap && growth<fMinGrowth)
131196:        || (overlap==fMinOverlap && growth==fMinGrowth && area<fMinArea)
131197:       ){
131198:         bBest = 1;
131199:         fMinOverlap = overlap;
131200:       }
131201: #else
131202:       if( iCell==0||growth<fMinGrowth||(growth==fMinGrowth && area<fMinArea) ){
131203:         bBest = 1;
131204:       }
131205: #endif
131206:       if( bBest ){
131207:         fMinGrowth = growth;
131208:         fMinArea = area;
131209:         iBest = cell.iRowid;
131210:       }
131211:     }
131212: 
131213:     sqlite3_free(aCell);
131214:     rc = nodeAcquire(pRtree, iBest, pNode, &pChild);
131215:     nodeRelease(pRtree, pNode);
131216:     pNode = pChild;
131217:   }
131218: 
131219:   *ppLeaf = pNode;
131220:   return rc;
131221: }
131222: 
131223: /*
131224: ** A cell with the same content as pCell has just been inserted into
131225: ** the node pNode. This function updates the bounding box cells in
131226: ** all ancestor elements.
131227: */
131228: static int AdjustTree(
131229:   Rtree *pRtree,                    /* Rtree table */
131230:   RtreeNode *pNode,                 /* Adjust ancestry of this node. */
131231:   RtreeCell *pCell                  /* This cell was just inserted */
131232: ){
131233:   RtreeNode *p = pNode;
131234:   while( p->pParent ){
131235:     RtreeNode *pParent = p->pParent;
131236:     RtreeCell cell;
131237:     int iCell;
131238: 
131239:     if( nodeParentIndex(pRtree, p, &iCell) ){
131240:       return SQLITE_CORRUPT_VTAB;
131241:     }
131242: 
131243:     nodeGetCell(pRtree, pParent, iCell, &cell);
131244:     if( !cellContains(pRtree, &cell, pCell) ){
131245:       cellUnion(pRtree, &cell, pCell);
131246:       nodeOverwriteCell(pRtree, pParent, &cell, iCell);
131247:     }
131248:  
131249:     p = pParent;
131250:   }
131251:   return SQLITE_OK;
131252: }
131253: 
131254: /*
131255: ** Write mapping (iRowid->iNode) to the <rtree>_rowid table.
131256: */
131257: static int rowidWrite(Rtree *pRtree, sqlite3_int64 iRowid, sqlite3_int64 iNode){
131258:   sqlite3_bind_int64(pRtree->pWriteRowid, 1, iRowid);
131259:   sqlite3_bind_int64(pRtree->pWriteRowid, 2, iNode);
131260:   sqlite3_step(pRtree->pWriteRowid);
131261:   return sqlite3_reset(pRtree->pWriteRowid);
131262: }
131263: 
131264: /*
131265: ** Write mapping (iNode->iPar) to the <rtree>_parent table.
131266: */
131267: static int parentWrite(Rtree *pRtree, sqlite3_int64 iNode, sqlite3_int64 iPar){
131268:   sqlite3_bind_int64(pRtree->pWriteParent, 1, iNode);
131269:   sqlite3_bind_int64(pRtree->pWriteParent, 2, iPar);
131270:   sqlite3_step(pRtree->pWriteParent);
131271:   return sqlite3_reset(pRtree->pWriteParent);
131272: }
131273: 
131274: static int rtreeInsertCell(Rtree *, RtreeNode *, RtreeCell *, int);
131275: 
131276: #if VARIANT_GUTTMAN_LINEAR_SPLIT
131277: /*
131278: ** Implementation of the linear variant of the PickNext() function from
131279: ** Guttman[84].
131280: */
131281: static RtreeCell *LinearPickNext(
131282:   Rtree *pRtree,
131283:   RtreeCell *aCell, 
131284:   int nCell, 
131285:   RtreeCell *pLeftBox, 
131286:   RtreeCell *pRightBox,
131287:   int *aiUsed
131288: ){
131289:   int ii;
131290:   for(ii=0; aiUsed[ii]; ii++);
131291:   aiUsed[ii] = 1;
131292:   return &aCell[ii];
131293: }
131294: 
131295: /*
131296: ** Implementation of the linear variant of the PickSeeds() function from
131297: ** Guttman[84].
131298: */
131299: static void LinearPickSeeds(
131300:   Rtree *pRtree,
131301:   RtreeCell *aCell, 
131302:   int nCell, 
131303:   int *piLeftSeed, 
131304:   int *piRightSeed
131305: ){
131306:   int i;
131307:   int iLeftSeed = 0;
131308:   int iRightSeed = 1;
131309:   float maxNormalInnerWidth = 0.0;
131310: 
131311:   /* Pick two "seed" cells from the array of cells. The algorithm used
131312:   ** here is the LinearPickSeeds algorithm from Gutman[1984]. The 
131313:   ** indices of the two seed cells in the array are stored in local
131314:   ** variables iLeftSeek and iRightSeed.
131315:   */
131316:   for(i=0; i<pRtree->nDim; i++){
131317:     float x1 = DCOORD(aCell[0].aCoord[i*2]);
131318:     float x2 = DCOORD(aCell[0].aCoord[i*2+1]);
131319:     float x3 = x1;
131320:     float x4 = x2;
131321:     int jj;
131322: 
131323:     int iCellLeft = 0;
131324:     int iCellRight = 0;
131325: 
131326:     for(jj=1; jj<nCell; jj++){
131327:       float left = DCOORD(aCell[jj].aCoord[i*2]);
131328:       float right = DCOORD(aCell[jj].aCoord[i*2+1]);
131329: 
131330:       if( left<x1 ) x1 = left;
131331:       if( right>x4 ) x4 = right;
131332:       if( left>x3 ){
131333:         x3 = left;
131334:         iCellRight = jj;
131335:       }
131336:       if( right<x2 ){
131337:         x2 = right;
131338:         iCellLeft = jj;
131339:       }
131340:     }
131341: 
131342:     if( x4!=x1 ){
131343:       float normalwidth = (x3 - x2) / (x4 - x1);
131344:       if( normalwidth>maxNormalInnerWidth ){
131345:         iLeftSeed = iCellLeft;
131346:         iRightSeed = iCellRight;
131347:       }
131348:     }
131349:   }
131350: 
131351:   *piLeftSeed = iLeftSeed;
131352:   *piRightSeed = iRightSeed;
131353: }
131354: #endif /* VARIANT_GUTTMAN_LINEAR_SPLIT */
131355: 
131356: #if VARIANT_GUTTMAN_QUADRATIC_SPLIT
131357: /*
131358: ** Implementation of the quadratic variant of the PickNext() function from
131359: ** Guttman[84].
131360: */
131361: static RtreeCell *QuadraticPickNext(
131362:   Rtree *pRtree,
131363:   RtreeCell *aCell, 
131364:   int nCell, 
131365:   RtreeCell *pLeftBox, 
131366:   RtreeCell *pRightBox,
131367:   int *aiUsed
131368: ){
131369:   #define FABS(a) ((a)<0.0?-1.0*(a):(a))
131370: 
131371:   int iSelect = -1;
131372:   float fDiff;
131373:   int ii;
131374:   for(ii=0; ii<nCell; ii++){
131375:     if( aiUsed[ii]==0 ){
131376:       float left = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
131377:       float right = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
131378:       float diff = FABS(right-left);
131379:       if( iSelect<0 || diff>fDiff ){
131380:         fDiff = diff;
131381:         iSelect = ii;
131382:       }
131383:     }
131384:   }
131385:   aiUsed[iSelect] = 1;
131386:   return &aCell[iSelect];
131387: }
131388: 
131389: /*
131390: ** Implementation of the quadratic variant of the PickSeeds() function from
131391: ** Guttman[84].
131392: */
131393: static void QuadraticPickSeeds(
131394:   Rtree *pRtree,
131395:   RtreeCell *aCell, 
131396:   int nCell, 
131397:   int *piLeftSeed, 
131398:   int *piRightSeed
131399: ){
131400:   int ii;
131401:   int jj;
131402: 
131403:   int iLeftSeed = 0;
131404:   int iRightSeed = 1;
131405:   float fWaste = 0.0;
131406: 
131407:   for(ii=0; ii<nCell; ii++){
131408:     for(jj=ii+1; jj<nCell; jj++){
131409:       float right = cellArea(pRtree, &aCell[jj]);
131410:       float growth = cellGrowth(pRtree, &aCell[ii], &aCell[jj]);
131411:       float waste = growth - right;
131412: 
131413:       if( waste>fWaste ){
131414:         iLeftSeed = ii;
131415:         iRightSeed = jj;
131416:         fWaste = waste;
131417:       }
131418:     }
131419:   }
131420: 
131421:   *piLeftSeed = iLeftSeed;
131422:   *piRightSeed = iRightSeed;
131423: }
131424: #endif /* VARIANT_GUTTMAN_QUADRATIC_SPLIT */
131425: 
131426: /*
131427: ** Arguments aIdx, aDistance and aSpare all point to arrays of size
131428: ** nIdx. The aIdx array contains the set of integers from 0 to 
131429: ** (nIdx-1) in no particular order. This function sorts the values
131430: ** in aIdx according to the indexed values in aDistance. For
131431: ** example, assuming the inputs:
131432: **
131433: **   aIdx      = { 0,   1,   2,   3 }
131434: **   aDistance = { 5.0, 2.0, 7.0, 6.0 }
131435: **
131436: ** this function sets the aIdx array to contain:
131437: **
131438: **   aIdx      = { 0,   1,   2,   3 }
131439: **
131440: ** The aSpare array is used as temporary working space by the
131441: ** sorting algorithm.
131442: */
131443: static void SortByDistance(
131444:   int *aIdx, 
131445:   int nIdx, 
131446:   float *aDistance, 
131447:   int *aSpare
131448: ){
131449:   if( nIdx>1 ){
131450:     int iLeft = 0;
131451:     int iRight = 0;
131452: 
131453:     int nLeft = nIdx/2;
131454:     int nRight = nIdx-nLeft;
131455:     int *aLeft = aIdx;
131456:     int *aRight = &aIdx[nLeft];
131457: 
131458:     SortByDistance(aLeft, nLeft, aDistance, aSpare);
131459:     SortByDistance(aRight, nRight, aDistance, aSpare);
131460: 
131461:     memcpy(aSpare, aLeft, sizeof(int)*nLeft);
131462:     aLeft = aSpare;
131463: 
131464:     while( iLeft<nLeft || iRight<nRight ){
131465:       if( iLeft==nLeft ){
131466:         aIdx[iLeft+iRight] = aRight[iRight];
131467:         iRight++;
131468:       }else if( iRight==nRight ){
131469:         aIdx[iLeft+iRight] = aLeft[iLeft];
131470:         iLeft++;
131471:       }else{
131472:         float fLeft = aDistance[aLeft[iLeft]];
131473:         float fRight = aDistance[aRight[iRight]];
131474:         if( fLeft<fRight ){
131475:           aIdx[iLeft+iRight] = aLeft[iLeft];
131476:           iLeft++;
131477:         }else{
131478:           aIdx[iLeft+iRight] = aRight[iRight];
131479:           iRight++;
131480:         }
131481:       }
131482:     }
131483: 
131484: #if 0
131485:     /* Check that the sort worked */
131486:     {
131487:       int jj;
131488:       for(jj=1; jj<nIdx; jj++){
131489:         float left = aDistance[aIdx[jj-1]];
131490:         float right = aDistance[aIdx[jj]];
131491:         assert( left<=right );
131492:       }
131493:     }
131494: #endif
131495:   }
131496: }
131497: 
131498: /*
131499: ** Arguments aIdx, aCell and aSpare all point to arrays of size
131500: ** nIdx. The aIdx array contains the set of integers from 0 to 
131501: ** (nIdx-1) in no particular order. This function sorts the values
131502: ** in aIdx according to dimension iDim of the cells in aCell. The
131503: ** minimum value of dimension iDim is considered first, the
131504: ** maximum used to break ties.
131505: **
131506: ** The aSpare array is used as temporary working space by the
131507: ** sorting algorithm.
131508: */
131509: static void SortByDimension(
131510:   Rtree *pRtree,
131511:   int *aIdx, 
131512:   int nIdx, 
131513:   int iDim, 
131514:   RtreeCell *aCell, 
131515:   int *aSpare
131516: ){
131517:   if( nIdx>1 ){
131518: 
131519:     int iLeft = 0;
131520:     int iRight = 0;
131521: 
131522:     int nLeft = nIdx/2;
131523:     int nRight = nIdx-nLeft;
131524:     int *aLeft = aIdx;
131525:     int *aRight = &aIdx[nLeft];
131526: 
131527:     SortByDimension(pRtree, aLeft, nLeft, iDim, aCell, aSpare);
131528:     SortByDimension(pRtree, aRight, nRight, iDim, aCell, aSpare);
131529: 
131530:     memcpy(aSpare, aLeft, sizeof(int)*nLeft);
131531:     aLeft = aSpare;
131532:     while( iLeft<nLeft || iRight<nRight ){
131533:       double xleft1 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2]);
131534:       double xleft2 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2+1]);
131535:       double xright1 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2]);
131536:       double xright2 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2+1]);
131537:       if( (iLeft!=nLeft) && ((iRight==nRight)
131538:        || (xleft1<xright1)
131539:        || (xleft1==xright1 && xleft2<xright2)
131540:       )){
131541:         aIdx[iLeft+iRight] = aLeft[iLeft];
131542:         iLeft++;
131543:       }else{
131544:         aIdx[iLeft+iRight] = aRight[iRight];
131545:         iRight++;
131546:       }
131547:     }
131548: 
131549: #if 0
131550:     /* Check that the sort worked */
131551:     {
131552:       int jj;
131553:       for(jj=1; jj<nIdx; jj++){
131554:         float xleft1 = aCell[aIdx[jj-1]].aCoord[iDim*2];
131555:         float xleft2 = aCell[aIdx[jj-1]].aCoord[iDim*2+1];
131556:         float xright1 = aCell[aIdx[jj]].aCoord[iDim*2];
131557:         float xright2 = aCell[aIdx[jj]].aCoord[iDim*2+1];
131558:         assert( xleft1<=xright1 && (xleft1<xright1 || xleft2<=xright2) );
131559:       }
131560:     }
131561: #endif
131562:   }
131563: }
131564: 
131565: #if VARIANT_RSTARTREE_SPLIT
131566: /*
131567: ** Implementation of the R*-tree variant of SplitNode from Beckman[1990].
131568: */
131569: static int splitNodeStartree(
131570:   Rtree *pRtree,
131571:   RtreeCell *aCell,
131572:   int nCell,
131573:   RtreeNode *pLeft,
131574:   RtreeNode *pRight,
131575:   RtreeCell *pBboxLeft,
131576:   RtreeCell *pBboxRight
131577: ){
131578:   int **aaSorted;
131579:   int *aSpare;
131580:   int ii;
131581: 
131582:   int iBestDim = 0;
131583:   int iBestSplit = 0;
131584:   float fBestMargin = 0.0;
131585: 
131586:   int nByte = (pRtree->nDim+1)*(sizeof(int*)+nCell*sizeof(int));
131587: 
131588:   aaSorted = (int **)sqlite3_malloc(nByte);
131589:   if( !aaSorted ){
131590:     return SQLITE_NOMEM;
131591:   }
131592: 
131593:   aSpare = &((int *)&aaSorted[pRtree->nDim])[pRtree->nDim*nCell];
131594:   memset(aaSorted, 0, nByte);
131595:   for(ii=0; ii<pRtree->nDim; ii++){
131596:     int jj;
131597:     aaSorted[ii] = &((int *)&aaSorted[pRtree->nDim])[ii*nCell];
131598:     for(jj=0; jj<nCell; jj++){
131599:       aaSorted[ii][jj] = jj;
131600:     }
131601:     SortByDimension(pRtree, aaSorted[ii], nCell, ii, aCell, aSpare);
131602:   }
131603: 
131604:   for(ii=0; ii<pRtree->nDim; ii++){
131605:     float margin = 0.0;
131606:     float fBestOverlap = 0.0;
131607:     float fBestArea = 0.0;
131608:     int iBestLeft = 0;
131609:     int nLeft;
131610: 
131611:     for(
131612:       nLeft=RTREE_MINCELLS(pRtree); 
131613:       nLeft<=(nCell-RTREE_MINCELLS(pRtree)); 
131614:       nLeft++
131615:     ){
131616:       RtreeCell left;
131617:       RtreeCell right;
131618:       int kk;
131619:       float overlap;
131620:       float area;
131621: 
131622:       memcpy(&left, &aCell[aaSorted[ii][0]], sizeof(RtreeCell));
131623:       memcpy(&right, &aCell[aaSorted[ii][nCell-1]], sizeof(RtreeCell));
131624:       for(kk=1; kk<(nCell-1); kk++){
131625:         if( kk<nLeft ){
131626:           cellUnion(pRtree, &left, &aCell[aaSorted[ii][kk]]);
131627:         }else{
131628:           cellUnion(pRtree, &right, &aCell[aaSorted[ii][kk]]);
131629:         }
131630:       }
131631:       margin += cellMargin(pRtree, &left);
131632:       margin += cellMargin(pRtree, &right);
131633:       overlap = cellOverlap(pRtree, &left, &right, 1, -1);
131634:       area = cellArea(pRtree, &left) + cellArea(pRtree, &right);
131635:       if( (nLeft==RTREE_MINCELLS(pRtree))
131636:        || (overlap<fBestOverlap)
131637:        || (overlap==fBestOverlap && area<fBestArea)
131638:       ){
131639:         iBestLeft = nLeft;
131640:         fBestOverlap = overlap;
131641:         fBestArea = area;
131642:       }
131643:     }
131644: 
131645:     if( ii==0 || margin<fBestMargin ){
131646:       iBestDim = ii;
131647:       fBestMargin = margin;
131648:       iBestSplit = iBestLeft;
131649:     }
131650:   }
131651: 
131652:   memcpy(pBboxLeft, &aCell[aaSorted[iBestDim][0]], sizeof(RtreeCell));
131653:   memcpy(pBboxRight, &aCell[aaSorted[iBestDim][iBestSplit]], sizeof(RtreeCell));
131654:   for(ii=0; ii<nCell; ii++){
131655:     RtreeNode *pTarget = (ii<iBestSplit)?pLeft:pRight;
131656:     RtreeCell *pBbox = (ii<iBestSplit)?pBboxLeft:pBboxRight;
131657:     RtreeCell *pCell = &aCell[aaSorted[iBestDim][ii]];
131658:     nodeInsertCell(pRtree, pTarget, pCell);
131659:     cellUnion(pRtree, pBbox, pCell);
131660:   }
131661: 
131662:   sqlite3_free(aaSorted);
131663:   return SQLITE_OK;
131664: }
131665: #endif
131666: 
131667: #if VARIANT_GUTTMAN_SPLIT
131668: /*
131669: ** Implementation of the regular R-tree SplitNode from Guttman[1984].
131670: */
131671: static int splitNodeGuttman(
131672:   Rtree *pRtree,
131673:   RtreeCell *aCell,
131674:   int nCell,
131675:   RtreeNode *pLeft,
131676:   RtreeNode *pRight,
131677:   RtreeCell *pBboxLeft,
131678:   RtreeCell *pBboxRight
131679: ){
131680:   int iLeftSeed = 0;
131681:   int iRightSeed = 1;
131682:   int *aiUsed;
131683:   int i;
131684: 
131685:   aiUsed = sqlite3_malloc(sizeof(int)*nCell);
131686:   if( !aiUsed ){
131687:     return SQLITE_NOMEM;
131688:   }
131689:   memset(aiUsed, 0, sizeof(int)*nCell);
131690: 
131691:   PickSeeds(pRtree, aCell, nCell, &iLeftSeed, &iRightSeed);
131692: 
131693:   memcpy(pBboxLeft, &aCell[iLeftSeed], sizeof(RtreeCell));
131694:   memcpy(pBboxRight, &aCell[iRightSeed], sizeof(RtreeCell));
131695:   nodeInsertCell(pRtree, pLeft, &aCell[iLeftSeed]);
131696:   nodeInsertCell(pRtree, pRight, &aCell[iRightSeed]);
131697:   aiUsed[iLeftSeed] = 1;
131698:   aiUsed[iRightSeed] = 1;
131699: 
131700:   for(i=nCell-2; i>0; i--){
131701:     RtreeCell *pNext;
131702:     pNext = PickNext(pRtree, aCell, nCell, pBboxLeft, pBboxRight, aiUsed);
131703:     float diff =  
131704:       cellGrowth(pRtree, pBboxLeft, pNext) - 
131705:       cellGrowth(pRtree, pBboxRight, pNext)
131706:     ;
131707:     if( (RTREE_MINCELLS(pRtree)-NCELL(pRight)==i)
131708:      || (diff>0.0 && (RTREE_MINCELLS(pRtree)-NCELL(pLeft)!=i))
131709:     ){
131710:       nodeInsertCell(pRtree, pRight, pNext);
131711:       cellUnion(pRtree, pBboxRight, pNext);
131712:     }else{
131713:       nodeInsertCell(pRtree, pLeft, pNext);
131714:       cellUnion(pRtree, pBboxLeft, pNext);
131715:     }
131716:   }
131717: 
131718:   sqlite3_free(aiUsed);
131719:   return SQLITE_OK;
131720: }
131721: #endif
131722: 
131723: static int updateMapping(
131724:   Rtree *pRtree, 
131725:   i64 iRowid, 
131726:   RtreeNode *pNode, 
131727:   int iHeight
131728: ){
131729:   int (*xSetMapping)(Rtree *, sqlite3_int64, sqlite3_int64);
131730:   xSetMapping = ((iHeight==0)?rowidWrite:parentWrite);
131731:   if( iHeight>0 ){
131732:     RtreeNode *pChild = nodeHashLookup(pRtree, iRowid);
131733:     if( pChild ){
131734:       nodeRelease(pRtree, pChild->pParent);
131735:       nodeReference(pNode);
131736:       pChild->pParent = pNode;
131737:     }
131738:   }
131739:   return xSetMapping(pRtree, iRowid, pNode->iNode);
131740: }
131741: 
131742: static int SplitNode(
131743:   Rtree *pRtree,
131744:   RtreeNode *pNode,
131745:   RtreeCell *pCell,
131746:   int iHeight
131747: ){
131748:   int i;
131749:   int newCellIsRight = 0;
131750: 
131751:   int rc = SQLITE_OK;
131752:   int nCell = NCELL(pNode);
131753:   RtreeCell *aCell;
131754:   int *aiUsed;
131755: 
131756:   RtreeNode *pLeft = 0;
131757:   RtreeNode *pRight = 0;
131758: 
131759:   RtreeCell leftbbox;
131760:   RtreeCell rightbbox;
131761: 
131762:   /* Allocate an array and populate it with a copy of pCell and 
131763:   ** all cells from node pLeft. Then zero the original node.
131764:   */
131765:   aCell = sqlite3_malloc((sizeof(RtreeCell)+sizeof(int))*(nCell+1));
131766:   if( !aCell ){
131767:     rc = SQLITE_NOMEM;
131768:     goto splitnode_out;
131769:   }
131770:   aiUsed = (int *)&aCell[nCell+1];
131771:   memset(aiUsed, 0, sizeof(int)*(nCell+1));
131772:   for(i=0; i<nCell; i++){
131773:     nodeGetCell(pRtree, pNode, i, &aCell[i]);
131774:   }
131775:   nodeZero(pRtree, pNode);
131776:   memcpy(&aCell[nCell], pCell, sizeof(RtreeCell));
131777:   nCell++;
131778: 
131779:   if( pNode->iNode==1 ){
131780:     pRight = nodeNew(pRtree, pNode);
131781:     pLeft = nodeNew(pRtree, pNode);
131782:     pRtree->iDepth++;
131783:     pNode->isDirty = 1;
131784:     writeInt16(pNode->zData, pRtree->iDepth);
131785:   }else{
131786:     pLeft = pNode;
131787:     pRight = nodeNew(pRtree, pLeft->pParent);
131788:     nodeReference(pLeft);
131789:   }
131790: 
131791:   if( !pLeft || !pRight ){
131792:     rc = SQLITE_NOMEM;
131793:     goto splitnode_out;
131794:   }
131795: 
131796:   memset(pLeft->zData, 0, pRtree->iNodeSize);
131797:   memset(pRight->zData, 0, pRtree->iNodeSize);
131798: 
131799:   rc = AssignCells(pRtree, aCell, nCell, pLeft, pRight, &leftbbox, &rightbbox);
131800:   if( rc!=SQLITE_OK ){
131801:     goto splitnode_out;
131802:   }
131803: 
131804:   /* Ensure both child nodes have node numbers assigned to them by calling
131805:   ** nodeWrite(). Node pRight always needs a node number, as it was created
131806:   ** by nodeNew() above. But node pLeft sometimes already has a node number.
131807:   ** In this case avoid the all to nodeWrite().
131808:   */
131809:   if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight))
131810:    || (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft)))
131811:   ){
131812:     goto splitnode_out;
131813:   }
131814: 
131815:   rightbbox.iRowid = pRight->iNode;
131816:   leftbbox.iRowid = pLeft->iNode;
131817: 
131818:   if( pNode->iNode==1 ){
131819:     rc = rtreeInsertCell(pRtree, pLeft->pParent, &leftbbox, iHeight+1);
131820:     if( rc!=SQLITE_OK ){
131821:       goto splitnode_out;
131822:     }
131823:   }else{
131824:     RtreeNode *pParent = pLeft->pParent;
131825:     int iCell;
131826:     rc = nodeParentIndex(pRtree, pLeft, &iCell);
131827:     if( rc==SQLITE_OK ){
131828:       nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell);
131829:       rc = AdjustTree(pRtree, pParent, &leftbbox);
131830:     }
131831:     if( rc!=SQLITE_OK ){
131832:       goto splitnode_out;
131833:     }
131834:   }
131835:   if( (rc = rtreeInsertCell(pRtree, pRight->pParent, &rightbbox, iHeight+1)) ){
131836:     goto splitnode_out;
131837:   }
131838: 
131839:   for(i=0; i<NCELL(pRight); i++){
131840:     i64 iRowid = nodeGetRowid(pRtree, pRight, i);
131841:     rc = updateMapping(pRtree, iRowid, pRight, iHeight);
131842:     if( iRowid==pCell->iRowid ){
131843:       newCellIsRight = 1;
131844:     }
131845:     if( rc!=SQLITE_OK ){
131846:       goto splitnode_out;
131847:     }
131848:   }
131849:   if( pNode->iNode==1 ){
131850:     for(i=0; i<NCELL(pLeft); i++){
131851:       i64 iRowid = nodeGetRowid(pRtree, pLeft, i);
131852:       rc = updateMapping(pRtree, iRowid, pLeft, iHeight);
131853:       if( rc!=SQLITE_OK ){
131854:         goto splitnode_out;
131855:       }
131856:     }
131857:   }else if( newCellIsRight==0 ){
131858:     rc = updateMapping(pRtree, pCell->iRowid, pLeft, iHeight);
131859:   }
131860: 
131861:   if( rc==SQLITE_OK ){
131862:     rc = nodeRelease(pRtree, pRight);
131863:     pRight = 0;
131864:   }
131865:   if( rc==SQLITE_OK ){
131866:     rc = nodeRelease(pRtree, pLeft);
131867:     pLeft = 0;
131868:   }
131869: 
131870: splitnode_out:
131871:   nodeRelease(pRtree, pRight);
131872:   nodeRelease(pRtree, pLeft);
131873:   sqlite3_free(aCell);
131874:   return rc;
131875: }
131876: 
131877: /*
131878: ** If node pLeaf is not the root of the r-tree and its pParent pointer is 
131879: ** still NULL, load all ancestor nodes of pLeaf into memory and populate
131880: ** the pLeaf->pParent chain all the way up to the root node.
131881: **
131882: ** This operation is required when a row is deleted (or updated - an update
131883: ** is implemented as a delete followed by an insert). SQLite provides the
131884: ** rowid of the row to delete, which can be used to find the leaf on which
131885: ** the entry resides (argument pLeaf). Once the leaf is located, this 
131886: ** function is called to determine its ancestry.
131887: */
131888: static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){
131889:   int rc = SQLITE_OK;
131890:   RtreeNode *pChild = pLeaf;
131891:   while( rc==SQLITE_OK && pChild->iNode!=1 && pChild->pParent==0 ){
131892:     int rc2 = SQLITE_OK;          /* sqlite3_reset() return code */
131893:     sqlite3_bind_int64(pRtree->pReadParent, 1, pChild->iNode);
131894:     rc = sqlite3_step(pRtree->pReadParent);
131895:     if( rc==SQLITE_ROW ){
131896:       RtreeNode *pTest;           /* Used to test for reference loops */
131897:       i64 iNode;                  /* Node number of parent node */
131898: 
131899:       /* Before setting pChild->pParent, test that we are not creating a
131900:       ** loop of references (as we would if, say, pChild==pParent). We don't
131901:       ** want to do this as it leads to a memory leak when trying to delete
131902:       ** the referenced counted node structures.
131903:       */
131904:       iNode = sqlite3_column_int64(pRtree->pReadParent, 0);
131905:       for(pTest=pLeaf; pTest && pTest->iNode!=iNode; pTest=pTest->pParent);
131906:       if( !pTest ){
131907:         rc2 = nodeAcquire(pRtree, iNode, 0, &pChild->pParent);
131908:       }
131909:     }
131910:     rc = sqlite3_reset(pRtree->pReadParent);
131911:     if( rc==SQLITE_OK ) rc = rc2;
131912:     if( rc==SQLITE_OK && !pChild->pParent ) rc = SQLITE_CORRUPT_VTAB;
131913:     pChild = pChild->pParent;
131914:   }
131915:   return rc;
131916: }
131917: 
131918: static int deleteCell(Rtree *, RtreeNode *, int, int);
131919: 
131920: static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){
131921:   int rc;
131922:   int rc2;
131923:   RtreeNode *pParent = 0;
131924:   int iCell;
131925: 
131926:   assert( pNode->nRef==1 );
131927: 
131928:   /* Remove the entry in the parent cell. */
131929:   rc = nodeParentIndex(pRtree, pNode, &iCell);
131930:   if( rc==SQLITE_OK ){
131931:     pParent = pNode->pParent;
131932:     pNode->pParent = 0;
131933:     rc = deleteCell(pRtree, pParent, iCell, iHeight+1);
131934:   }
131935:   rc2 = nodeRelease(pRtree, pParent);
131936:   if( rc==SQLITE_OK ){
131937:     rc = rc2;
131938:   }
131939:   if( rc!=SQLITE_OK ){
131940:     return rc;
131941:   }
131942: 
131943:   /* Remove the xxx_node entry. */
131944:   sqlite3_bind_int64(pRtree->pDeleteNode, 1, pNode->iNode);
131945:   sqlite3_step(pRtree->pDeleteNode);
131946:   if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteNode)) ){
131947:     return rc;
131948:   }
131949: 
131950:   /* Remove the xxx_parent entry. */
131951:   sqlite3_bind_int64(pRtree->pDeleteParent, 1, pNode->iNode);
131952:   sqlite3_step(pRtree->pDeleteParent);
131953:   if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteParent)) ){
131954:     return rc;
131955:   }
131956:   
131957:   /* Remove the node from the in-memory hash table and link it into
131958:   ** the Rtree.pDeleted list. Its contents will be re-inserted later on.
131959:   */
131960:   nodeHashDelete(pRtree, pNode);
131961:   pNode->iNode = iHeight;
131962:   pNode->pNext = pRtree->pDeleted;
131963:   pNode->nRef++;
131964:   pRtree->pDeleted = pNode;
131965: 
131966:   return SQLITE_OK;
131967: }
131968: 
131969: static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){
131970:   RtreeNode *pParent = pNode->pParent;
131971:   int rc = SQLITE_OK; 
131972:   if( pParent ){
131973:     int ii; 
131974:     int nCell = NCELL(pNode);
131975:     RtreeCell box;                            /* Bounding box for pNode */
131976:     nodeGetCell(pRtree, pNode, 0, &box);
131977:     for(ii=1; ii<nCell; ii++){
131978:       RtreeCell cell;
131979:       nodeGetCell(pRtree, pNode, ii, &cell);
131980:       cellUnion(pRtree, &box, &cell);
131981:     }
131982:     box.iRowid = pNode->iNode;
131983:     rc = nodeParentIndex(pRtree, pNode, &ii);
131984:     if( rc==SQLITE_OK ){
131985:       nodeOverwriteCell(pRtree, pParent, &box, ii);
131986:       rc = fixBoundingBox(pRtree, pParent);
131987:     }
131988:   }
131989:   return rc;
131990: }
131991: 
131992: /*
131993: ** Delete the cell at index iCell of node pNode. After removing the
131994: ** cell, adjust the r-tree data structure if required.
131995: */
131996: static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){
131997:   RtreeNode *pParent;
131998:   int rc;
131999: 
132000:   if( SQLITE_OK!=(rc = fixLeafParent(pRtree, pNode)) ){
132001:     return rc;
132002:   }
132003: 
132004:   /* Remove the cell from the node. This call just moves bytes around
132005:   ** the in-memory node image, so it cannot fail.
132006:   */
132007:   nodeDeleteCell(pRtree, pNode, iCell);
132008: 
132009:   /* If the node is not the tree root and now has less than the minimum
132010:   ** number of cells, remove it from the tree. Otherwise, update the
132011:   ** cell in the parent node so that it tightly contains the updated
132012:   ** node.
132013:   */
132014:   pParent = pNode->pParent;
132015:   assert( pParent || pNode->iNode==1 );
132016:   if( pParent ){
132017:     if( NCELL(pNode)<RTREE_MINCELLS(pRtree) ){
132018:       rc = removeNode(pRtree, pNode, iHeight);
132019:     }else{
132020:       rc = fixBoundingBox(pRtree, pNode);
132021:     }
132022:   }
132023: 
132024:   return rc;
132025: }
132026: 
132027: static int Reinsert(
132028:   Rtree *pRtree, 
132029:   RtreeNode *pNode, 
132030:   RtreeCell *pCell, 
132031:   int iHeight
132032: ){
132033:   int *aOrder;
132034:   int *aSpare;
132035:   RtreeCell *aCell;
132036:   float *aDistance;
132037:   int nCell;
132038:   float aCenterCoord[RTREE_MAX_DIMENSIONS];
132039:   int iDim;
132040:   int ii;
132041:   int rc = SQLITE_OK;
132042: 
132043:   memset(aCenterCoord, 0, sizeof(float)*RTREE_MAX_DIMENSIONS);
132044: 
132045:   nCell = NCELL(pNode)+1;
132046: 
132047:   /* Allocate the buffers used by this operation. The allocation is
132048:   ** relinquished before this function returns.
132049:   */
132050:   aCell = (RtreeCell *)sqlite3_malloc(nCell * (
132051:     sizeof(RtreeCell) +         /* aCell array */
132052:     sizeof(int)       +         /* aOrder array */
132053:     sizeof(int)       +         /* aSpare array */
132054:     sizeof(float)               /* aDistance array */
132055:   ));
132056:   if( !aCell ){
132057:     return SQLITE_NOMEM;
132058:   }
132059:   aOrder    = (int *)&aCell[nCell];
132060:   aSpare    = (int *)&aOrder[nCell];
132061:   aDistance = (float *)&aSpare[nCell];
132062: 
132063:   for(ii=0; ii<nCell; ii++){
132064:     if( ii==(nCell-1) ){
132065:       memcpy(&aCell[ii], pCell, sizeof(RtreeCell));
132066:     }else{
132067:       nodeGetCell(pRtree, pNode, ii, &aCell[ii]);
132068:     }
132069:     aOrder[ii] = ii;
132070:     for(iDim=0; iDim<pRtree->nDim; iDim++){
132071:       aCenterCoord[iDim] += (float)DCOORD(aCell[ii].aCoord[iDim*2]);
132072:       aCenterCoord[iDim] += (float)DCOORD(aCell[ii].aCoord[iDim*2+1]);
132073:     }
132074:   }
132075:   for(iDim=0; iDim<pRtree->nDim; iDim++){
132076:     aCenterCoord[iDim] = (float)(aCenterCoord[iDim]/((float)nCell*2.0));
132077:   }
132078: 
132079:   for(ii=0; ii<nCell; ii++){
132080:     aDistance[ii] = 0.0;
132081:     for(iDim=0; iDim<pRtree->nDim; iDim++){
132082:       float coord = (float)(DCOORD(aCell[ii].aCoord[iDim*2+1]) - 
132083:           DCOORD(aCell[ii].aCoord[iDim*2]));
132084:       aDistance[ii] += (coord-aCenterCoord[iDim])*(coord-aCenterCoord[iDim]);
132085:     }
132086:   }
132087: 
132088:   SortByDistance(aOrder, nCell, aDistance, aSpare);
132089:   nodeZero(pRtree, pNode);
132090: 
132091:   for(ii=0; rc==SQLITE_OK && ii<(nCell-(RTREE_MINCELLS(pRtree)+1)); ii++){
132092:     RtreeCell *p = &aCell[aOrder[ii]];
132093:     nodeInsertCell(pRtree, pNode, p);
132094:     if( p->iRowid==pCell->iRowid ){
132095:       if( iHeight==0 ){
132096:         rc = rowidWrite(pRtree, p->iRowid, pNode->iNode);
132097:       }else{
132098:         rc = parentWrite(pRtree, p->iRowid, pNode->iNode);
132099:       }
132100:     }
132101:   }
132102:   if( rc==SQLITE_OK ){
132103:     rc = fixBoundingBox(pRtree, pNode);
132104:   }
132105:   for(; rc==SQLITE_OK && ii<nCell; ii++){
132106:     /* Find a node to store this cell in. pNode->iNode currently contains
132107:     ** the height of the sub-tree headed by the cell.
132108:     */
132109:     RtreeNode *pInsert;
132110:     RtreeCell *p = &aCell[aOrder[ii]];
132111:     rc = ChooseLeaf(pRtree, p, iHeight, &pInsert);
132112:     if( rc==SQLITE_OK ){
132113:       int rc2;
132114:       rc = rtreeInsertCell(pRtree, pInsert, p, iHeight);
132115:       rc2 = nodeRelease(pRtree, pInsert);
132116:       if( rc==SQLITE_OK ){
132117:         rc = rc2;
132118:       }
132119:     }
132120:   }
132121: 
132122:   sqlite3_free(aCell);
132123:   return rc;
132124: }
132125: 
132126: /*
132127: ** Insert cell pCell into node pNode. Node pNode is the head of a 
132128: ** subtree iHeight high (leaf nodes have iHeight==0).
132129: */
132130: static int rtreeInsertCell(
132131:   Rtree *pRtree,
132132:   RtreeNode *pNode,
132133:   RtreeCell *pCell,
132134:   int iHeight
132135: ){
132136:   int rc = SQLITE_OK;
132137:   if( iHeight>0 ){
132138:     RtreeNode *pChild = nodeHashLookup(pRtree, pCell->iRowid);
132139:     if( pChild ){
132140:       nodeRelease(pRtree, pChild->pParent);
132141:       nodeReference(pNode);
132142:       pChild->pParent = pNode;
132143:     }
132144:   }
132145:   if( nodeInsertCell(pRtree, pNode, pCell) ){
132146: #if VARIANT_RSTARTREE_REINSERT
132147:     if( iHeight<=pRtree->iReinsertHeight || pNode->iNode==1){
132148:       rc = SplitNode(pRtree, pNode, pCell, iHeight);
132149:     }else{
132150:       pRtree->iReinsertHeight = iHeight;
132151:       rc = Reinsert(pRtree, pNode, pCell, iHeight);
132152:     }
132153: #else
132154:     rc = SplitNode(pRtree, pNode, pCell, iHeight);
132155: #endif
132156:   }else{
132157:     rc = AdjustTree(pRtree, pNode, pCell);
132158:     if( rc==SQLITE_OK ){
132159:       if( iHeight==0 ){
132160:         rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode);
132161:       }else{
132162:         rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode);
132163:       }
132164:     }
132165:   }
132166:   return rc;
132167: }
132168: 
132169: static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){
132170:   int ii;
132171:   int rc = SQLITE_OK;
132172:   int nCell = NCELL(pNode);
132173: 
132174:   for(ii=0; rc==SQLITE_OK && ii<nCell; ii++){
132175:     RtreeNode *pInsert;
132176:     RtreeCell cell;
132177:     nodeGetCell(pRtree, pNode, ii, &cell);
132178: 
132179:     /* Find a node to store this cell in. pNode->iNode currently contains
132180:     ** the height of the sub-tree headed by the cell.
132181:     */
132182:     rc = ChooseLeaf(pRtree, &cell, (int)pNode->iNode, &pInsert);
132183:     if( rc==SQLITE_OK ){
132184:       int rc2;
132185:       rc = rtreeInsertCell(pRtree, pInsert, &cell, (int)pNode->iNode);
132186:       rc2 = nodeRelease(pRtree, pInsert);
132187:       if( rc==SQLITE_OK ){
132188:         rc = rc2;
132189:       }
132190:     }
132191:   }
132192:   return rc;
132193: }
132194: 
132195: /*
132196: ** Select a currently unused rowid for a new r-tree record.
132197: */
132198: static int newRowid(Rtree *pRtree, i64 *piRowid){
132199:   int rc;
132200:   sqlite3_bind_null(pRtree->pWriteRowid, 1);
132201:   sqlite3_bind_null(pRtree->pWriteRowid, 2);
132202:   sqlite3_step(pRtree->pWriteRowid);
132203:   rc = sqlite3_reset(pRtree->pWriteRowid);
132204:   *piRowid = sqlite3_last_insert_rowid(pRtree->db);
132205:   return rc;
132206: }
132207: 
132208: /*
132209: ** Remove the entry with rowid=iDelete from the r-tree structure.
132210: */
132211: static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){
132212:   int rc;                         /* Return code */
132213:   RtreeNode *pLeaf;               /* Leaf node containing record iDelete */
132214:   int iCell;                      /* Index of iDelete cell in pLeaf */
132215:   RtreeNode *pRoot;               /* Root node of rtree structure */
132216: 
132217: 
132218:   /* Obtain a reference to the root node to initialise Rtree.iDepth */
132219:   rc = nodeAcquire(pRtree, 1, 0, &pRoot);
132220: 
132221:   /* Obtain a reference to the leaf node that contains the entry 
132222:   ** about to be deleted. 
132223:   */
132224:   if( rc==SQLITE_OK ){
132225:     rc = findLeafNode(pRtree, iDelete, &pLeaf);
132226:   }
132227: 
132228:   /* Delete the cell in question from the leaf node. */
132229:   if( rc==SQLITE_OK ){
132230:     int rc2;
132231:     rc = nodeRowidIndex(pRtree, pLeaf, iDelete, &iCell);
132232:     if( rc==SQLITE_OK ){
132233:       rc = deleteCell(pRtree, pLeaf, iCell, 0);
132234:     }
132235:     rc2 = nodeRelease(pRtree, pLeaf);
132236:     if( rc==SQLITE_OK ){
132237:       rc = rc2;
132238:     }
132239:   }
132240: 
132241:   /* Delete the corresponding entry in the <rtree>_rowid table. */
132242:   if( rc==SQLITE_OK ){
132243:     sqlite3_bind_int64(pRtree->pDeleteRowid, 1, iDelete);
132244:     sqlite3_step(pRtree->pDeleteRowid);
132245:     rc = sqlite3_reset(pRtree->pDeleteRowid);
132246:   }
132247: 
132248:   /* Check if the root node now has exactly one child. If so, remove
132249:   ** it, schedule the contents of the child for reinsertion and 
132250:   ** reduce the tree height by one.
132251:   **
132252:   ** This is equivalent to copying the contents of the child into
132253:   ** the root node (the operation that Gutman's paper says to perform 
132254:   ** in this scenario).
132255:   */
132256:   if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){
132257:     int rc2;
132258:     RtreeNode *pChild;
132259:     i64 iChild = nodeGetRowid(pRtree, pRoot, 0);
132260:     rc = nodeAcquire(pRtree, iChild, pRoot, &pChild);
132261:     if( rc==SQLITE_OK ){
132262:       rc = removeNode(pRtree, pChild, pRtree->iDepth-1);
132263:     }
132264:     rc2 = nodeRelease(pRtree, pChild);
132265:     if( rc==SQLITE_OK ) rc = rc2;
132266:     if( rc==SQLITE_OK ){
132267:       pRtree->iDepth--;
132268:       writeInt16(pRoot->zData, pRtree->iDepth);
132269:       pRoot->isDirty = 1;
132270:     }
132271:   }
132272: 
132273:   /* Re-insert the contents of any underfull nodes removed from the tree. */
132274:   for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){
132275:     if( rc==SQLITE_OK ){
132276:       rc = reinsertNodeContent(pRtree, pLeaf);
132277:     }
132278:     pRtree->pDeleted = pLeaf->pNext;
132279:     sqlite3_free(pLeaf);
132280:   }
132281: 
132282:   /* Release the reference to the root node. */
132283:   if( rc==SQLITE_OK ){
132284:     rc = nodeRelease(pRtree, pRoot);
132285:   }else{
132286:     nodeRelease(pRtree, pRoot);
132287:   }
132288: 
132289:   return rc;
132290: }
132291: 
132292: /*
132293: ** The xUpdate method for rtree module virtual tables.
132294: */
132295: static int rtreeUpdate(
132296:   sqlite3_vtab *pVtab, 
132297:   int nData, 
132298:   sqlite3_value **azData, 
132299:   sqlite_int64 *pRowid
132300: ){
132301:   Rtree *pRtree = (Rtree *)pVtab;
132302:   int rc = SQLITE_OK;
132303:   RtreeCell cell;                 /* New cell to insert if nData>1 */
132304:   int bHaveRowid = 0;             /* Set to 1 after new rowid is determined */
132305: 
132306:   rtreeReference(pRtree);
132307:   assert(nData>=1);
132308: 
132309:   /* Constraint handling. A write operation on an r-tree table may return
132310:   ** SQLITE_CONSTRAINT for two reasons:
132311:   **
132312:   **   1. A duplicate rowid value, or
132313:   **   2. The supplied data violates the "x2>=x1" constraint.
132314:   **
132315:   ** In the first case, if the conflict-handling mode is REPLACE, then
132316:   ** the conflicting row can be removed before proceeding. In the second
132317:   ** case, SQLITE_CONSTRAINT must be returned regardless of the
132318:   ** conflict-handling mode specified by the user.
132319:   */
132320:   if( nData>1 ){
132321:     int ii;
132322: 
132323:     /* Populate the cell.aCoord[] array. The first coordinate is azData[3]. */
132324:     assert( nData==(pRtree->nDim*2 + 3) );
132325:     if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
132326:       for(ii=0; ii<(pRtree->nDim*2); ii+=2){
132327:         cell.aCoord[ii].f = (float)sqlite3_value_double(azData[ii+3]);
132328:         cell.aCoord[ii+1].f = (float)sqlite3_value_double(azData[ii+4]);
132329:         if( cell.aCoord[ii].f>cell.aCoord[ii+1].f ){
132330:           rc = SQLITE_CONSTRAINT;
132331:           goto constraint;
132332:         }
132333:       }
132334:     }else{
132335:       for(ii=0; ii<(pRtree->nDim*2); ii+=2){
132336:         cell.aCoord[ii].i = sqlite3_value_int(azData[ii+3]);
132337:         cell.aCoord[ii+1].i = sqlite3_value_int(azData[ii+4]);
132338:         if( cell.aCoord[ii].i>cell.aCoord[ii+1].i ){
132339:           rc = SQLITE_CONSTRAINT;
132340:           goto constraint;
132341:         }
132342:       }
132343:     }
132344: 
132345:     /* If a rowid value was supplied, check if it is already present in 
132346:     ** the table. If so, the constraint has failed. */
132347:     if( sqlite3_value_type(azData[2])!=SQLITE_NULL ){
132348:       cell.iRowid = sqlite3_value_int64(azData[2]);
132349:       if( sqlite3_value_type(azData[0])==SQLITE_NULL
132350:        || sqlite3_value_int64(azData[0])!=cell.iRowid
132351:       ){
132352:         int steprc;
132353:         sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid);
132354:         steprc = sqlite3_step(pRtree->pReadRowid);
132355:         rc = sqlite3_reset(pRtree->pReadRowid);
132356:         if( SQLITE_ROW==steprc ){
132357:           if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){
132358:             rc = rtreeDeleteRowid(pRtree, cell.iRowid);
132359:           }else{
132360:             rc = SQLITE_CONSTRAINT;
132361:             goto constraint;
132362:           }
132363:         }
132364:       }
132365:       bHaveRowid = 1;
132366:     }
132367:   }
132368: 
132369:   /* If azData[0] is not an SQL NULL value, it is the rowid of a
132370:   ** record to delete from the r-tree table. The following block does
132371:   ** just that.
132372:   */
132373:   if( sqlite3_value_type(azData[0])!=SQLITE_NULL ){
132374:     rc = rtreeDeleteRowid(pRtree, sqlite3_value_int64(azData[0]));
132375:   }
132376: 
132377:   /* If the azData[] array contains more than one element, elements
132378:   ** (azData[2]..azData[argc-1]) contain a new record to insert into
132379:   ** the r-tree structure.
132380:   */
132381:   if( rc==SQLITE_OK && nData>1 ){
132382:     /* Insert the new record into the r-tree */
132383:     RtreeNode *pLeaf;
132384: 
132385:     /* Figure out the rowid of the new row. */
132386:     if( bHaveRowid==0 ){
132387:       rc = newRowid(pRtree, &cell.iRowid);
132388:     }
132389:     *pRowid = cell.iRowid;
132390: 
132391:     if( rc==SQLITE_OK ){
132392:       rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf);
132393:     }
132394:     if( rc==SQLITE_OK ){
132395:       int rc2;
132396:       pRtree->iReinsertHeight = -1;
132397:       rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0);
132398:       rc2 = nodeRelease(pRtree, pLeaf);
132399:       if( rc==SQLITE_OK ){
132400:         rc = rc2;
132401:       }
132402:     }
132403:   }
132404: 
132405: constraint:
132406:   rtreeRelease(pRtree);
132407:   return rc;
132408: }
132409: 
132410: /*
132411: ** The xRename method for rtree module virtual tables.
132412: */
132413: static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){
132414:   Rtree *pRtree = (Rtree *)pVtab;
132415:   int rc = SQLITE_NOMEM;
132416:   char *zSql = sqlite3_mprintf(
132417:     "ALTER TABLE %Q.'%q_node'   RENAME TO \"%w_node\";"
132418:     "ALTER TABLE %Q.'%q_parent' RENAME TO \"%w_parent\";"
132419:     "ALTER TABLE %Q.'%q_rowid'  RENAME TO \"%w_rowid\";"
132420:     , pRtree->zDb, pRtree->zName, zNewName 
132421:     , pRtree->zDb, pRtree->zName, zNewName 
132422:     , pRtree->zDb, pRtree->zName, zNewName
132423:   );
132424:   if( zSql ){
132425:     rc = sqlite3_exec(pRtree->db, zSql, 0, 0, 0);
132426:     sqlite3_free(zSql);
132427:   }
132428:   return rc;
132429: }
132430: 
132431: static sqlite3_module rtreeModule = {
132432:   0,                          /* iVersion */
132433:   rtreeCreate,                /* xCreate - create a table */
132434:   rtreeConnect,               /* xConnect - connect to an existing table */
132435:   rtreeBestIndex,             /* xBestIndex - Determine search strategy */
132436:   rtreeDisconnect,            /* xDisconnect - Disconnect from a table */
132437:   rtreeDestroy,               /* xDestroy - Drop a table */
132438:   rtreeOpen,                  /* xOpen - open a cursor */
132439:   rtreeClose,                 /* xClose - close a cursor */
132440:   rtreeFilter,                /* xFilter - configure scan constraints */
132441:   rtreeNext,                  /* xNext - advance a cursor */
132442:   rtreeEof,                   /* xEof */
132443:   rtreeColumn,                /* xColumn - read data */
132444:   rtreeRowid,                 /* xRowid - read data */
132445:   rtreeUpdate,                /* xUpdate - write data */
132446:   0,                          /* xBegin - begin transaction */
132447:   0,                          /* xSync - sync transaction */
132448:   0,                          /* xCommit - commit transaction */
132449:   0,                          /* xRollback - rollback transaction */
132450:   0,                          /* xFindFunction - function overloading */
132451:   rtreeRename,                /* xRename - rename the table */
132452:   0,                          /* xSavepoint */
132453:   0,                          /* xRelease */
132454:   0                           /* xRollbackTo */
132455: };
132456: 
132457: static int rtreeSqlInit(
132458:   Rtree *pRtree, 
132459:   sqlite3 *db, 
132460:   const char *zDb, 
132461:   const char *zPrefix, 
132462:   int isCreate
132463: ){
132464:   int rc = SQLITE_OK;
132465: 
132466:   #define N_STATEMENT 9
132467:   static const char *azSql[N_STATEMENT] = {
132468:     /* Read and write the xxx_node table */
132469:     "SELECT data FROM '%q'.'%q_node' WHERE nodeno = :1",
132470:     "INSERT OR REPLACE INTO '%q'.'%q_node' VALUES(:1, :2)",
132471:     "DELETE FROM '%q'.'%q_node' WHERE nodeno = :1",
132472: 
132473:     /* Read and write the xxx_rowid table */
132474:     "SELECT nodeno FROM '%q'.'%q_rowid' WHERE rowid = :1",
132475:     "INSERT OR REPLACE INTO '%q'.'%q_rowid' VALUES(:1, :2)",
132476:     "DELETE FROM '%q'.'%q_rowid' WHERE rowid = :1",
132477: 
132478:     /* Read and write the xxx_parent table */
132479:     "SELECT parentnode FROM '%q'.'%q_parent' WHERE nodeno = :1",
132480:     "INSERT OR REPLACE INTO '%q'.'%q_parent' VALUES(:1, :2)",
132481:     "DELETE FROM '%q'.'%q_parent' WHERE nodeno = :1"
132482:   };
132483:   sqlite3_stmt **appStmt[N_STATEMENT];
132484:   int i;
132485: 
132486:   pRtree->db = db;
132487: 
132488:   if( isCreate ){
132489:     char *zCreate = sqlite3_mprintf(
132490: "CREATE TABLE \"%w\".\"%w_node\"(nodeno INTEGER PRIMARY KEY, data BLOB);"
132491: "CREATE TABLE \"%w\".\"%w_rowid\"(rowid INTEGER PRIMARY KEY, nodeno INTEGER);"
132492: "CREATE TABLE \"%w\".\"%w_parent\"(nodeno INTEGER PRIMARY KEY, parentnode INTEGER);"
132493: "INSERT INTO '%q'.'%q_node' VALUES(1, zeroblob(%d))",
132494:       zDb, zPrefix, zDb, zPrefix, zDb, zPrefix, zDb, zPrefix, pRtree->iNodeSize
132495:     );
132496:     if( !zCreate ){
132497:       return SQLITE_NOMEM;
132498:     }
132499:     rc = sqlite3_exec(db, zCreate, 0, 0, 0);
132500:     sqlite3_free(zCreate);
132501:     if( rc!=SQLITE_OK ){
132502:       return rc;
132503:     }
132504:   }
132505: 
132506:   appStmt[0] = &pRtree->pReadNode;
132507:   appStmt[1] = &pRtree->pWriteNode;
132508:   appStmt[2] = &pRtree->pDeleteNode;
132509:   appStmt[3] = &pRtree->pReadRowid;
132510:   appStmt[4] = &pRtree->pWriteRowid;
132511:   appStmt[5] = &pRtree->pDeleteRowid;
132512:   appStmt[6] = &pRtree->pReadParent;
132513:   appStmt[7] = &pRtree->pWriteParent;
132514:   appStmt[8] = &pRtree->pDeleteParent;
132515: 
132516:   for(i=0; i<N_STATEMENT && rc==SQLITE_OK; i++){
132517:     char *zSql = sqlite3_mprintf(azSql[i], zDb, zPrefix);
132518:     if( zSql ){
132519:       rc = sqlite3_prepare_v2(db, zSql, -1, appStmt[i], 0); 
132520:     }else{
132521:       rc = SQLITE_NOMEM;
132522:     }
132523:     sqlite3_free(zSql);
132524:   }
132525: 
132526:   return rc;
132527: }
132528: 
132529: /*
132530: ** The second argument to this function contains the text of an SQL statement
132531: ** that returns a single integer value. The statement is compiled and executed
132532: ** using database connection db. If successful, the integer value returned
132533: ** is written to *piVal and SQLITE_OK returned. Otherwise, an SQLite error
132534: ** code is returned and the value of *piVal after returning is not defined.
132535: */
132536: static int getIntFromStmt(sqlite3 *db, const char *zSql, int *piVal){
132537:   int rc = SQLITE_NOMEM;
132538:   if( zSql ){
132539:     sqlite3_stmt *pStmt = 0;
132540:     rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
132541:     if( rc==SQLITE_OK ){
132542:       if( SQLITE_ROW==sqlite3_step(pStmt) ){
132543:         *piVal = sqlite3_column_int(pStmt, 0);
132544:       }
132545:       rc = sqlite3_finalize(pStmt);
132546:     }
132547:   }
132548:   return rc;
132549: }
132550: 
132551: /*
132552: ** This function is called from within the xConnect() or xCreate() method to
132553: ** determine the node-size used by the rtree table being created or connected
132554: ** to. If successful, pRtree->iNodeSize is populated and SQLITE_OK returned.
132555: ** Otherwise, an SQLite error code is returned.
132556: **
132557: ** If this function is being called as part of an xConnect(), then the rtree
132558: ** table already exists. In this case the node-size is determined by inspecting
132559: ** the root node of the tree.
132560: **
132561: ** Otherwise, for an xCreate(), use 64 bytes less than the database page-size. 
132562: ** This ensures that each node is stored on a single database page. If the 
132563: ** database page-size is so large that more than RTREE_MAXCELLS entries 
132564: ** would fit in a single node, use a smaller node-size.
132565: */
132566: static int getNodeSize(
132567:   sqlite3 *db,                    /* Database handle */
132568:   Rtree *pRtree,                  /* Rtree handle */
132569:   int isCreate                    /* True for xCreate, false for xConnect */
132570: ){
132571:   int rc;
132572:   char *zSql;
132573:   if( isCreate ){
132574:     int iPageSize = 0;
132575:     zSql = sqlite3_mprintf("PRAGMA %Q.page_size", pRtree->zDb);
132576:     rc = getIntFromStmt(db, zSql, &iPageSize);
132577:     if( rc==SQLITE_OK ){
132578:       pRtree->iNodeSize = iPageSize-64;
132579:       if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)<pRtree->iNodeSize ){
132580:         pRtree->iNodeSize = 4+pRtree->nBytesPerCell*RTREE_MAXCELLS;
132581:       }
132582:     }
132583:   }else{
132584:     zSql = sqlite3_mprintf(
132585:         "SELECT length(data) FROM '%q'.'%q_node' WHERE nodeno = 1",
132586:         pRtree->zDb, pRtree->zName
132587:     );
132588:     rc = getIntFromStmt(db, zSql, &pRtree->iNodeSize);
132589:   }
132590: 
132591:   sqlite3_free(zSql);
132592:   return rc;
132593: }
132594: 
132595: /* 
132596: ** This function is the implementation of both the xConnect and xCreate
132597: ** methods of the r-tree virtual table.
132598: **
132599: **   argv[0]   -> module name
132600: **   argv[1]   -> database name
132601: **   argv[2]   -> table name
132602: **   argv[...] -> column names...
132603: */
132604: static int rtreeInit(
132605:   sqlite3 *db,                        /* Database connection */
132606:   void *pAux,                         /* One of the RTREE_COORD_* constants */
132607:   int argc, const char *const*argv,   /* Parameters to CREATE TABLE statement */
132608:   sqlite3_vtab **ppVtab,              /* OUT: New virtual table */
132609:   char **pzErr,                       /* OUT: Error message, if any */
132610:   int isCreate                        /* True for xCreate, false for xConnect */
132611: ){
132612:   int rc = SQLITE_OK;
132613:   Rtree *pRtree;
132614:   int nDb;              /* Length of string argv[1] */
132615:   int nName;            /* Length of string argv[2] */
132616:   int eCoordType = (pAux ? RTREE_COORD_INT32 : RTREE_COORD_REAL32);
132617: 
132618:   const char *aErrMsg[] = {
132619:     0,                                                    /* 0 */
132620:     "Wrong number of columns for an rtree table",         /* 1 */
132621:     "Too few columns for an rtree table",                 /* 2 */
132622:     "Too many columns for an rtree table"                 /* 3 */
132623:   };
132624: 
132625:   int iErr = (argc<6) ? 2 : argc>(RTREE_MAX_DIMENSIONS*2+4) ? 3 : argc%2;
132626:   if( aErrMsg[iErr] ){
132627:     *pzErr = sqlite3_mprintf("%s", aErrMsg[iErr]);
132628:     return SQLITE_ERROR;
132629:   }
132630: 
132631:   sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
132632: 
132633:   /* Allocate the sqlite3_vtab structure */
132634:   nDb = strlen(argv[1]);
132635:   nName = strlen(argv[2]);
132636:   pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2);
132637:   if( !pRtree ){
132638:     return SQLITE_NOMEM;
132639:   }
132640:   memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2);
132641:   pRtree->nBusy = 1;
132642:   pRtree->base.pModule = &rtreeModule;
132643:   pRtree->zDb = (char *)&pRtree[1];
132644:   pRtree->zName = &pRtree->zDb[nDb+1];
132645:   pRtree->nDim = (argc-4)/2;
132646:   pRtree->nBytesPerCell = 8 + pRtree->nDim*4*2;
132647:   pRtree->eCoordType = eCoordType;
132648:   memcpy(pRtree->zDb, argv[1], nDb);
132649:   memcpy(pRtree->zName, argv[2], nName);
132650: 
132651:   /* Figure out the node size to use. */
132652:   rc = getNodeSize(db, pRtree, isCreate);
132653: 
132654:   /* Create/Connect to the underlying relational database schema. If
132655:   ** that is successful, call sqlite3_declare_vtab() to configure
132656:   ** the r-tree table schema.
132657:   */
132658:   if( rc==SQLITE_OK ){
132659:     if( (rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate)) ){
132660:       *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
132661:     }else{
132662:       char *zSql = sqlite3_mprintf("CREATE TABLE x(%s", argv[3]);
132663:       char *zTmp;
132664:       int ii;
132665:       for(ii=4; zSql && ii<argc; ii++){
132666:         zTmp = zSql;
132667:         zSql = sqlite3_mprintf("%s, %s", zTmp, argv[ii]);
132668:         sqlite3_free(zTmp);
132669:       }
132670:       if( zSql ){
132671:         zTmp = zSql;
132672:         zSql = sqlite3_mprintf("%s);", zTmp);
132673:         sqlite3_free(zTmp);
132674:       }
132675:       if( !zSql ){
132676:         rc = SQLITE_NOMEM;
132677:       }else if( SQLITE_OK!=(rc = sqlite3_declare_vtab(db, zSql)) ){
132678:         *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
132679:       }
132680:       sqlite3_free(zSql);
132681:     }
132682:   }
132683: 
132684:   if( rc==SQLITE_OK ){
132685:     *ppVtab = (sqlite3_vtab *)pRtree;
132686:   }else{
132687:     rtreeRelease(pRtree);
132688:   }
132689:   return rc;
132690: }
132691: 
132692: 
132693: /*
132694: ** Implementation of a scalar function that decodes r-tree nodes to
132695: ** human readable strings. This can be used for debugging and analysis.
132696: **
132697: ** The scalar function takes two arguments, a blob of data containing
132698: ** an r-tree node, and the number of dimensions the r-tree indexes.
132699: ** For a two-dimensional r-tree structure called "rt", to deserialize
132700: ** all nodes, a statement like:
132701: **
132702: **   SELECT rtreenode(2, data) FROM rt_node;
132703: **
132704: ** The human readable string takes the form of a Tcl list with one
132705: ** entry for each cell in the r-tree node. Each entry is itself a
132706: ** list, containing the 8-byte rowid/pageno followed by the 
132707: ** <num-dimension>*2 coordinates.
132708: */
132709: static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
132710:   char *zText = 0;
132711:   RtreeNode node;
132712:   Rtree tree;
132713:   int ii;
132714: 
132715:   UNUSED_PARAMETER(nArg);
132716:   memset(&node, 0, sizeof(RtreeNode));
132717:   memset(&tree, 0, sizeof(Rtree));
132718:   tree.nDim = sqlite3_value_int(apArg[0]);
132719:   tree.nBytesPerCell = 8 + 8 * tree.nDim;
132720:   node.zData = (u8 *)sqlite3_value_blob(apArg[1]);
132721: 
132722:   for(ii=0; ii<NCELL(&node); ii++){
132723:     char zCell[512];
132724:     int nCell = 0;
132725:     RtreeCell cell;
132726:     int jj;
132727: 
132728:     nodeGetCell(&tree, &node, ii, &cell);
132729:     sqlite3_snprintf(512-nCell,&zCell[nCell],"%lld", cell.iRowid);
132730:     nCell = strlen(zCell);
132731:     for(jj=0; jj<tree.nDim*2; jj++){
132732:       sqlite3_snprintf(512-nCell,&zCell[nCell]," %f",(double)cell.aCoord[jj].f);
132733:       nCell = strlen(zCell);
132734:     }
132735: 
132736:     if( zText ){
132737:       char *zTextNew = sqlite3_mprintf("%s {%s}", zText, zCell);
132738:       sqlite3_free(zText);
132739:       zText = zTextNew;
132740:     }else{
132741:       zText = sqlite3_mprintf("{%s}", zCell);
132742:     }
132743:   }
132744:   
132745:   sqlite3_result_text(ctx, zText, -1, sqlite3_free);
132746: }
132747: 
132748: static void rtreedepth(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
132749:   UNUSED_PARAMETER(nArg);
132750:   if( sqlite3_value_type(apArg[0])!=SQLITE_BLOB 
132751:    || sqlite3_value_bytes(apArg[0])<2
132752:   ){
132753:     sqlite3_result_error(ctx, "Invalid argument to rtreedepth()", -1); 
132754:   }else{
132755:     u8 *zBlob = (u8 *)sqlite3_value_blob(apArg[0]);
132756:     sqlite3_result_int(ctx, readInt16(zBlob));
132757:   }
132758: }
132759: 
132760: /*
132761: ** Register the r-tree module with database handle db. This creates the
132762: ** virtual table module "rtree" and the debugging/analysis scalar 
132763: ** function "rtreenode".
132764: */
132765: SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db){
132766:   const int utf8 = SQLITE_UTF8;
132767:   int rc;
132768: 
132769:   rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0);
132770:   if( rc==SQLITE_OK ){
132771:     rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0);
132772:   }
132773:   if( rc==SQLITE_OK ){
132774:     void *c = (void *)RTREE_COORD_REAL32;
132775:     rc = sqlite3_create_module_v2(db, "rtree", &rtreeModule, c, 0);
132776:   }
132777:   if( rc==SQLITE_OK ){
132778:     void *c = (void *)RTREE_COORD_INT32;
132779:     rc = sqlite3_create_module_v2(db, "rtree_i32", &rtreeModule, c, 0);
132780:   }
132781: 
132782:   return rc;
132783: }
132784: 
132785: /*
132786: ** A version of sqlite3_free() that can be used as a callback. This is used
132787: ** in two places - as the destructor for the blob value returned by the
132788: ** invocation of a geometry function, and as the destructor for the geometry
132789: ** functions themselves.
132790: */
132791: static void doSqlite3Free(void *p){
132792:   sqlite3_free(p);
132793: }
132794: 
132795: /*
132796: ** Each call to sqlite3_rtree_geometry_callback() creates an ordinary SQLite
132797: ** scalar user function. This C function is the callback used for all such
132798: ** registered SQL functions.
132799: **
132800: ** The scalar user functions return a blob that is interpreted by r-tree
132801: ** table MATCH operators.
132802: */
132803: static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value **aArg){
132804:   RtreeGeomCallback *pGeomCtx = (RtreeGeomCallback *)sqlite3_user_data(ctx);
132805:   RtreeMatchArg *pBlob;
132806:   int nBlob;
132807: 
132808:   nBlob = sizeof(RtreeMatchArg) + (nArg-1)*sizeof(double);
132809:   pBlob = (RtreeMatchArg *)sqlite3_malloc(nBlob);
132810:   if( !pBlob ){
132811:     sqlite3_result_error_nomem(ctx);
132812:   }else{
132813:     int i;
132814:     pBlob->magic = RTREE_GEOMETRY_MAGIC;
132815:     pBlob->xGeom = pGeomCtx->xGeom;
132816:     pBlob->pContext = pGeomCtx->pContext;
132817:     pBlob->nParam = nArg;
132818:     for(i=0; i<nArg; i++){
132819:       pBlob->aParam[i] = sqlite3_value_double(aArg[i]);
132820:     }
132821:     sqlite3_result_blob(ctx, pBlob, nBlob, doSqlite3Free);
132822:   }
132823: }
132824: 
132825: /*
132826: ** Register a new geometry function for use with the r-tree MATCH operator.
132827: */
132828: SQLITE_API int sqlite3_rtree_geometry_callback(
132829:   sqlite3 *db,
132830:   const char *zGeom,
132831:   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *),
132832:   void *pContext
132833: ){
132834:   RtreeGeomCallback *pGeomCtx;      /* Context object for new user-function */
132835: 
132836:   /* Allocate and populate the context object. */
132837:   pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback));
132838:   if( !pGeomCtx ) return SQLITE_NOMEM;
132839:   pGeomCtx->xGeom = xGeom;
132840:   pGeomCtx->pContext = pContext;
132841: 
132842:   /* Create the new user-function. Register a destructor function to delete
132843:   ** the context object when it is no longer required.  */
132844:   return sqlite3_create_function_v2(db, zGeom, -1, SQLITE_ANY, 
132845:       (void *)pGeomCtx, geomCallback, 0, 0, doSqlite3Free
132846:   );
132847: }
132848: 
132849: #if !SQLITE_CORE
132850: SQLITE_API int sqlite3_extension_init(
132851:   sqlite3 *db,
132852:   char **pzErrMsg,
132853:   const sqlite3_api_routines *pApi
132854: ){
132855:   SQLITE_EXTENSION_INIT2(pApi)
132856:   return sqlite3RtreeInit(db);
132857: }
132858: #endif
132859: 
132860: #endif
132861: 
132862: /************** End of rtree.c ***********************************************/
132863: /************** Begin file icu.c *********************************************/
132864: /*
132865: ** 2007 May 6
132866: **
132867: ** The author disclaims copyright to this source code.  In place of
132868: ** a legal notice, here is a blessing:
132869: **
132870: **    May you do good and not evil.
132871: **    May you find forgiveness for yourself and forgive others.
132872: **    May you share freely, never taking more than you give.
132873: **
132874: *************************************************************************
132875: ** $Id: sqlite3.c,v 1.2 2012/10/12 08:22:46 misho Exp $
132876: **
132877: ** This file implements an integration between the ICU library 
132878: ** ("International Components for Unicode", an open-source library 
132879: ** for handling unicode data) and SQLite. The integration uses 
132880: ** ICU to provide the following to SQLite:
132881: **
132882: **   * An implementation of the SQL regexp() function (and hence REGEXP
132883: **     operator) using the ICU uregex_XX() APIs.
132884: **
132885: **   * Implementations of the SQL scalar upper() and lower() functions
132886: **     for case mapping.
132887: **
132888: **   * Integration of ICU and SQLite collation seqences.
132889: **
132890: **   * An implementation of the LIKE operator that uses ICU to 
132891: **     provide case-independent matching.
132892: */
132893: 
132894: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU)
132895: 
132896: /* Include ICU headers */
132897: #include <unicode/utypes.h>
132898: #include <unicode/uregex.h>
132899: #include <unicode/ustring.h>
132900: #include <unicode/ucol.h>
132901: 
132902: /* #include <assert.h> */
132903: 
132904: #ifndef SQLITE_CORE
132905:   SQLITE_EXTENSION_INIT1
132906: #else
132907: #endif
132908: 
132909: /*
132910: ** Maximum length (in bytes) of the pattern in a LIKE or GLOB
132911: ** operator.
132912: */
132913: #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
132914: # define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
132915: #endif
132916: 
132917: /*
132918: ** Version of sqlite3_free() that is always a function, never a macro.
132919: */
132920: static void xFree(void *p){
132921:   sqlite3_free(p);
132922: }
132923: 
132924: /*
132925: ** Compare two UTF-8 strings for equality where the first string is
132926: ** a "LIKE" expression. Return true (1) if they are the same and 
132927: ** false (0) if they are different.
132928: */
132929: static int icuLikeCompare(
132930:   const uint8_t *zPattern,   /* LIKE pattern */
132931:   const uint8_t *zString,    /* The UTF-8 string to compare against */
132932:   const UChar32 uEsc         /* The escape character */
132933: ){
132934:   static const int MATCH_ONE = (UChar32)'_';
132935:   static const int MATCH_ALL = (UChar32)'%';
132936: 
132937:   int iPattern = 0;       /* Current byte index in zPattern */
132938:   int iString = 0;        /* Current byte index in zString */
132939: 
132940:   int prevEscape = 0;     /* True if the previous character was uEsc */
132941: 
132942:   while( zPattern[iPattern]!=0 ){
132943: 
132944:     /* Read (and consume) the next character from the input pattern. */
132945:     UChar32 uPattern;
132946:     U8_NEXT_UNSAFE(zPattern, iPattern, uPattern);
132947:     assert(uPattern!=0);
132948: 
132949:     /* There are now 4 possibilities:
132950:     **
132951:     **     1. uPattern is an unescaped match-all character "%",
132952:     **     2. uPattern is an unescaped match-one character "_",
132953:     **     3. uPattern is an unescaped escape character, or
132954:     **     4. uPattern is to be handled as an ordinary character
132955:     */
132956:     if( !prevEscape && uPattern==MATCH_ALL ){
132957:       /* Case 1. */
132958:       uint8_t c;
132959: 
132960:       /* Skip any MATCH_ALL or MATCH_ONE characters that follow a
132961:       ** MATCH_ALL. For each MATCH_ONE, skip one character in the 
132962:       ** test string.
132963:       */
132964:       while( (c=zPattern[iPattern]) == MATCH_ALL || c == MATCH_ONE ){
132965:         if( c==MATCH_ONE ){
132966:           if( zString[iString]==0 ) return 0;
132967:           U8_FWD_1_UNSAFE(zString, iString);
132968:         }
132969:         iPattern++;
132970:       }
132971: 
132972:       if( zPattern[iPattern]==0 ) return 1;
132973: 
132974:       while( zString[iString] ){
132975:         if( icuLikeCompare(&zPattern[iPattern], &zString[iString], uEsc) ){
132976:           return 1;
132977:         }
132978:         U8_FWD_1_UNSAFE(zString, iString);
132979:       }
132980:       return 0;
132981: 
132982:     }else if( !prevEscape && uPattern==MATCH_ONE ){
132983:       /* Case 2. */
132984:       if( zString[iString]==0 ) return 0;
132985:       U8_FWD_1_UNSAFE(zString, iString);
132986: 
132987:     }else if( !prevEscape && uPattern==uEsc){
132988:       /* Case 3. */
132989:       prevEscape = 1;
132990: 
132991:     }else{
132992:       /* Case 4. */
132993:       UChar32 uString;
132994:       U8_NEXT_UNSAFE(zString, iString, uString);
132995:       uString = u_foldCase(uString, U_FOLD_CASE_DEFAULT);
132996:       uPattern = u_foldCase(uPattern, U_FOLD_CASE_DEFAULT);
132997:       if( uString!=uPattern ){
132998:         return 0;
132999:       }
133000:       prevEscape = 0;
133001:     }
133002:   }
133003: 
133004:   return zString[iString]==0;
133005: }
133006: 
133007: /*
133008: ** Implementation of the like() SQL function.  This function implements
133009: ** the build-in LIKE operator.  The first argument to the function is the
133010: ** pattern and the second argument is the string.  So, the SQL statements:
133011: **
133012: **       A LIKE B
133013: **
133014: ** is implemented as like(B, A). If there is an escape character E, 
133015: **
133016: **       A LIKE B ESCAPE E
133017: **
133018: ** is mapped to like(B, A, E).
133019: */
133020: static void icuLikeFunc(
133021:   sqlite3_context *context, 
133022:   int argc, 
133023:   sqlite3_value **argv
133024: ){
133025:   const unsigned char *zA = sqlite3_value_text(argv[0]);
133026:   const unsigned char *zB = sqlite3_value_text(argv[1]);
133027:   UChar32 uEsc = 0;
133028: 
133029:   /* Limit the length of the LIKE or GLOB pattern to avoid problems
133030:   ** of deep recursion and N*N behavior in patternCompare().
133031:   */
133032:   if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){
133033:     sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
133034:     return;
133035:   }
133036: 
133037: 
133038:   if( argc==3 ){
133039:     /* The escape character string must consist of a single UTF-8 character.
133040:     ** Otherwise, return an error.
133041:     */
133042:     int nE= sqlite3_value_bytes(argv[2]);
133043:     const unsigned char *zE = sqlite3_value_text(argv[2]);
133044:     int i = 0;
133045:     if( zE==0 ) return;
133046:     U8_NEXT(zE, i, nE, uEsc);
133047:     if( i!=nE){
133048:       sqlite3_result_error(context, 
133049:           "ESCAPE expression must be a single character", -1);
133050:       return;
133051:     }
133052:   }
133053: 
133054:   if( zA && zB ){
133055:     sqlite3_result_int(context, icuLikeCompare(zA, zB, uEsc));
133056:   }
133057: }
133058: 
133059: /*
133060: ** This function is called when an ICU function called from within
133061: ** the implementation of an SQL scalar function returns an error.
133062: **
133063: ** The scalar function context passed as the first argument is 
133064: ** loaded with an error message based on the following two args.
133065: */
133066: static void icuFunctionError(
133067:   sqlite3_context *pCtx,       /* SQLite scalar function context */
133068:   const char *zName,           /* Name of ICU function that failed */
133069:   UErrorCode e                 /* Error code returned by ICU function */
133070: ){
133071:   char zBuf[128];
133072:   sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e));
133073:   zBuf[127] = '\0';
133074:   sqlite3_result_error(pCtx, zBuf, -1);
133075: }
133076: 
133077: /*
133078: ** Function to delete compiled regexp objects. Registered as
133079: ** a destructor function with sqlite3_set_auxdata().
133080: */
133081: static void icuRegexpDelete(void *p){
133082:   URegularExpression *pExpr = (URegularExpression *)p;
133083:   uregex_close(pExpr);
133084: }
133085: 
133086: /*
133087: ** Implementation of SQLite REGEXP operator. This scalar function takes
133088: ** two arguments. The first is a regular expression pattern to compile
133089: ** the second is a string to match against that pattern. If either 
133090: ** argument is an SQL NULL, then NULL Is returned. Otherwise, the result
133091: ** is 1 if the string matches the pattern, or 0 otherwise.
133092: **
133093: ** SQLite maps the regexp() function to the regexp() operator such
133094: ** that the following two are equivalent:
133095: **
133096: **     zString REGEXP zPattern
133097: **     regexp(zPattern, zString)
133098: **
133099: ** Uses the following ICU regexp APIs:
133100: **
133101: **     uregex_open()
133102: **     uregex_matches()
133103: **     uregex_close()
133104: */
133105: static void icuRegexpFunc(sqlite3_context *p, int nArg, sqlite3_value **apArg){
133106:   UErrorCode status = U_ZERO_ERROR;
133107:   URegularExpression *pExpr;
133108:   UBool res;
133109:   const UChar *zString = sqlite3_value_text16(apArg[1]);
133110: 
133111:   (void)nArg;  /* Unused parameter */
133112: 
133113:   /* If the left hand side of the regexp operator is NULL, 
133114:   ** then the result is also NULL. 
133115:   */
133116:   if( !zString ){
133117:     return;
133118:   }
133119: 
133120:   pExpr = sqlite3_get_auxdata(p, 0);
133121:   if( !pExpr ){
133122:     const UChar *zPattern = sqlite3_value_text16(apArg[0]);
133123:     if( !zPattern ){
133124:       return;
133125:     }
133126:     pExpr = uregex_open(zPattern, -1, 0, 0, &status);
133127: 
133128:     if( U_SUCCESS(status) ){
133129:       sqlite3_set_auxdata(p, 0, pExpr, icuRegexpDelete);
133130:     }else{
133131:       assert(!pExpr);
133132:       icuFunctionError(p, "uregex_open", status);
133133:       return;
133134:     }
133135:   }
133136: 
133137:   /* Configure the text that the regular expression operates on. */
133138:   uregex_setText(pExpr, zString, -1, &status);
133139:   if( !U_SUCCESS(status) ){
133140:     icuFunctionError(p, "uregex_setText", status);
133141:     return;
133142:   }
133143: 
133144:   /* Attempt the match */
133145:   res = uregex_matches(pExpr, 0, &status);
133146:   if( !U_SUCCESS(status) ){
133147:     icuFunctionError(p, "uregex_matches", status);
133148:     return;
133149:   }
133150: 
133151:   /* Set the text that the regular expression operates on to a NULL
133152:   ** pointer. This is not really necessary, but it is tidier than 
133153:   ** leaving the regular expression object configured with an invalid
133154:   ** pointer after this function returns.
133155:   */
133156:   uregex_setText(pExpr, 0, 0, &status);
133157: 
133158:   /* Return 1 or 0. */
133159:   sqlite3_result_int(p, res ? 1 : 0);
133160: }
133161: 
133162: /*
133163: ** Implementations of scalar functions for case mapping - upper() and 
133164: ** lower(). Function upper() converts its input to upper-case (ABC).
133165: ** Function lower() converts to lower-case (abc).
133166: **
133167: ** ICU provides two types of case mapping, "general" case mapping and
133168: ** "language specific". Refer to ICU documentation for the differences
133169: ** between the two.
133170: **
133171: ** To utilise "general" case mapping, the upper() or lower() scalar 
133172: ** functions are invoked with one argument:
133173: **
133174: **     upper('ABC') -> 'abc'
133175: **     lower('abc') -> 'ABC'
133176: **
133177: ** To access ICU "language specific" case mapping, upper() or lower()
133178: ** should be invoked with two arguments. The second argument is the name
133179: ** of the locale to use. Passing an empty string ("") or SQL NULL value
133180: ** as the second argument is the same as invoking the 1 argument version
133181: ** of upper() or lower().
133182: **
133183: **     lower('I', 'en_us') -> 'i'
133184: **     lower('I', 'tr_tr') -> 'ı' (small dotless i)
133185: **
133186: ** http://www.icu-project.org/userguide/posix.html#case_mappings
133187: */
133188: static void icuCaseFunc16(sqlite3_context *p, int nArg, sqlite3_value **apArg){
133189:   const UChar *zInput;
133190:   UChar *zOutput;
133191:   int nInput;
133192:   int nOutput;
133193: 
133194:   UErrorCode status = U_ZERO_ERROR;
133195:   const char *zLocale = 0;
133196: 
133197:   assert(nArg==1 || nArg==2);
133198:   if( nArg==2 ){
133199:     zLocale = (const char *)sqlite3_value_text(apArg[1]);
133200:   }
133201: 
133202:   zInput = sqlite3_value_text16(apArg[0]);
133203:   if( !zInput ){
133204:     return;
133205:   }
133206:   nInput = sqlite3_value_bytes16(apArg[0]);
133207: 
133208:   nOutput = nInput * 2 + 2;
133209:   zOutput = sqlite3_malloc(nOutput);
133210:   if( !zOutput ){
133211:     return;
133212:   }
133213: 
133214:   if( sqlite3_user_data(p) ){
133215:     u_strToUpper(zOutput, nOutput/2, zInput, nInput/2, zLocale, &status);
133216:   }else{
133217:     u_strToLower(zOutput, nOutput/2, zInput, nInput/2, zLocale, &status);
133218:   }
133219: 
133220:   if( !U_SUCCESS(status) ){
133221:     icuFunctionError(p, "u_strToLower()/u_strToUpper", status);
133222:     return;
133223:   }
133224: 
133225:   sqlite3_result_text16(p, zOutput, -1, xFree);
133226: }
133227: 
133228: /*
133229: ** Collation sequence destructor function. The pCtx argument points to
133230: ** a UCollator structure previously allocated using ucol_open().
133231: */
133232: static void icuCollationDel(void *pCtx){
133233:   UCollator *p = (UCollator *)pCtx;
133234:   ucol_close(p);
133235: }
133236: 
133237: /*
133238: ** Collation sequence comparison function. The pCtx argument points to
133239: ** a UCollator structure previously allocated using ucol_open().
133240: */
133241: static int icuCollationColl(
133242:   void *pCtx,
133243:   int nLeft,
133244:   const void *zLeft,
133245:   int nRight,
133246:   const void *zRight
133247: ){
133248:   UCollationResult res;
133249:   UCollator *p = (UCollator *)pCtx;
133250:   res = ucol_strcoll(p, (UChar *)zLeft, nLeft/2, (UChar *)zRight, nRight/2);
133251:   switch( res ){
133252:     case UCOL_LESS:    return -1;
133253:     case UCOL_GREATER: return +1;
133254:     case UCOL_EQUAL:   return 0;
133255:   }
133256:   assert(!"Unexpected return value from ucol_strcoll()");
133257:   return 0;
133258: }
133259: 
133260: /*
133261: ** Implementation of the scalar function icu_load_collation().
133262: **
133263: ** This scalar function is used to add ICU collation based collation 
133264: ** types to an SQLite database connection. It is intended to be called
133265: ** as follows:
133266: **
133267: **     SELECT icu_load_collation(<locale>, <collation-name>);
133268: **
133269: ** Where <locale> is a string containing an ICU locale identifier (i.e.
133270: ** "en_AU", "tr_TR" etc.) and <collation-name> is the name of the
133271: ** collation sequence to create.
133272: */
133273: static void icuLoadCollation(
133274:   sqlite3_context *p, 
133275:   int nArg, 
133276:   sqlite3_value **apArg
133277: ){
133278:   sqlite3 *db = (sqlite3 *)sqlite3_user_data(p);
133279:   UErrorCode status = U_ZERO_ERROR;
133280:   const char *zLocale;      /* Locale identifier - (eg. "jp_JP") */
133281:   const char *zName;        /* SQL Collation sequence name (eg. "japanese") */
133282:   UCollator *pUCollator;    /* ICU library collation object */
133283:   int rc;                   /* Return code from sqlite3_create_collation_x() */
133284: 
133285:   assert(nArg==2);
133286:   zLocale = (const char *)sqlite3_value_text(apArg[0]);
133287:   zName = (const char *)sqlite3_value_text(apArg[1]);
133288: 
133289:   if( !zLocale || !zName ){
133290:     return;
133291:   }
133292: 
133293:   pUCollator = ucol_open(zLocale, &status);
133294:   if( !U_SUCCESS(status) ){
133295:     icuFunctionError(p, "ucol_open", status);
133296:     return;
133297:   }
133298:   assert(p);
133299: 
133300:   rc = sqlite3_create_collation_v2(db, zName, SQLITE_UTF16, (void *)pUCollator, 
133301:       icuCollationColl, icuCollationDel
133302:   );
133303:   if( rc!=SQLITE_OK ){
133304:     ucol_close(pUCollator);
133305:     sqlite3_result_error(p, "Error registering collation function", -1);
133306:   }
133307: }
133308: 
133309: /*
133310: ** Register the ICU extension functions with database db.
133311: */
133312: SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){
133313:   struct IcuScalar {
133314:     const char *zName;                        /* Function name */
133315:     int nArg;                                 /* Number of arguments */
133316:     int enc;                                  /* Optimal text encoding */
133317:     void *pContext;                           /* sqlite3_user_data() context */
133318:     void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
133319:   } scalars[] = {
133320:     {"regexp", 2, SQLITE_ANY,          0, icuRegexpFunc},
133321: 
133322:     {"lower",  1, SQLITE_UTF16,        0, icuCaseFunc16},
133323:     {"lower",  2, SQLITE_UTF16,        0, icuCaseFunc16},
133324:     {"upper",  1, SQLITE_UTF16, (void*)1, icuCaseFunc16},
133325:     {"upper",  2, SQLITE_UTF16, (void*)1, icuCaseFunc16},
133326: 
133327:     {"lower",  1, SQLITE_UTF8,         0, icuCaseFunc16},
133328:     {"lower",  2, SQLITE_UTF8,         0, icuCaseFunc16},
133329:     {"upper",  1, SQLITE_UTF8,  (void*)1, icuCaseFunc16},
133330:     {"upper",  2, SQLITE_UTF8,  (void*)1, icuCaseFunc16},
133331: 
133332:     {"like",   2, SQLITE_UTF8,         0, icuLikeFunc},
133333:     {"like",   3, SQLITE_UTF8,         0, icuLikeFunc},
133334: 
133335:     {"icu_load_collation",  2, SQLITE_UTF8, (void*)db, icuLoadCollation},
133336:   };
133337: 
133338:   int rc = SQLITE_OK;
133339:   int i;
133340: 
133341:   for(i=0; rc==SQLITE_OK && i<(int)(sizeof(scalars)/sizeof(scalars[0])); i++){
133342:     struct IcuScalar *p = &scalars[i];
133343:     rc = sqlite3_create_function(
133344:         db, p->zName, p->nArg, p->enc, p->pContext, p->xFunc, 0, 0
133345:     );
133346:   }
133347: 
133348:   return rc;
133349: }
133350: 
133351: #if !SQLITE_CORE
133352: SQLITE_API int sqlite3_extension_init(
133353:   sqlite3 *db, 
133354:   char **pzErrMsg,
133355:   const sqlite3_api_routines *pApi
133356: ){
133357:   SQLITE_EXTENSION_INIT2(pApi)
133358:   return sqlite3IcuInit(db);
133359: }
133360: #endif
133361: 
133362: #endif
133363: 
133364: /************** End of icu.c *************************************************/
133365: /************** Begin file fts3_icu.c ****************************************/
133366: /*
133367: ** 2007 June 22
133368: **
133369: ** The author disclaims copyright to this source code.  In place of
133370: ** a legal notice, here is a blessing:
133371: **
133372: **    May you do good and not evil.
133373: **    May you find forgiveness for yourself and forgive others.
133374: **    May you share freely, never taking more than you give.
133375: **
133376: *************************************************************************
133377: ** This file implements a tokenizer for fts3 based on the ICU library.
133378: */
133379: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
133380: #ifdef SQLITE_ENABLE_ICU
133381: 
133382: /* #include <assert.h> */
133383: /* #include <string.h> */
133384: 
133385: #include <unicode/ubrk.h>
133386: /* #include <unicode/ucol.h> */
133387: /* #include <unicode/ustring.h> */
133388: #include <unicode/utf16.h>
133389: 
133390: typedef struct IcuTokenizer IcuTokenizer;
133391: typedef struct IcuCursor IcuCursor;
133392: 
133393: struct IcuTokenizer {
133394:   sqlite3_tokenizer base;
133395:   char *zLocale;
133396: };
133397: 
133398: struct IcuCursor {
133399:   sqlite3_tokenizer_cursor base;
133400: 
133401:   UBreakIterator *pIter;      /* ICU break-iterator object */
133402:   int nChar;                  /* Number of UChar elements in pInput */
133403:   UChar *aChar;               /* Copy of input using utf-16 encoding */
133404:   int *aOffset;               /* Offsets of each character in utf-8 input */
133405: 
133406:   int nBuffer;
133407:   char *zBuffer;
133408: 
133409:   int iToken;
133410: };
133411: 
133412: /*
133413: ** Create a new tokenizer instance.
133414: */
133415: static int icuCreate(
133416:   int argc,                            /* Number of entries in argv[] */
133417:   const char * const *argv,            /* Tokenizer creation arguments */
133418:   sqlite3_tokenizer **ppTokenizer      /* OUT: Created tokenizer */
133419: ){
133420:   IcuTokenizer *p;
133421:   int n = 0;
133422: 
133423:   if( argc>0 ){
133424:     n = strlen(argv[0])+1;
133425:   }
133426:   p = (IcuTokenizer *)sqlite3_malloc(sizeof(IcuTokenizer)+n);
133427:   if( !p ){
133428:     return SQLITE_NOMEM;
133429:   }
133430:   memset(p, 0, sizeof(IcuTokenizer));
133431: 
133432:   if( n ){
133433:     p->zLocale = (char *)&p[1];
133434:     memcpy(p->zLocale, argv[0], n);
133435:   }
133436: 
133437:   *ppTokenizer = (sqlite3_tokenizer *)p;
133438: 
133439:   return SQLITE_OK;
133440: }
133441: 
133442: /*
133443: ** Destroy a tokenizer
133444: */
133445: static int icuDestroy(sqlite3_tokenizer *pTokenizer){
133446:   IcuTokenizer *p = (IcuTokenizer *)pTokenizer;
133447:   sqlite3_free(p);
133448:   return SQLITE_OK;
133449: }
133450: 
133451: /*
133452: ** Prepare to begin tokenizing a particular string.  The input
133453: ** string to be tokenized is pInput[0..nBytes-1].  A cursor
133454: ** used to incrementally tokenize this string is returned in 
133455: ** *ppCursor.
133456: */
133457: static int icuOpen(
133458:   sqlite3_tokenizer *pTokenizer,         /* The tokenizer */
133459:   const char *zInput,                    /* Input string */
133460:   int nInput,                            /* Length of zInput in bytes */
133461:   sqlite3_tokenizer_cursor **ppCursor    /* OUT: Tokenization cursor */
133462: ){
133463:   IcuTokenizer *p = (IcuTokenizer *)pTokenizer;
133464:   IcuCursor *pCsr;
133465: 
133466:   const int32_t opt = U_FOLD_CASE_DEFAULT;
133467:   UErrorCode status = U_ZERO_ERROR;
133468:   int nChar;
133469: 
133470:   UChar32 c;
133471:   int iInput = 0;
133472:   int iOut = 0;
133473: 
133474:   *ppCursor = 0;
133475: 
133476:   if( nInput<0 ){
133477:     nInput = strlen(zInput);
133478:   }
133479:   nChar = nInput+1;
133480:   pCsr = (IcuCursor *)sqlite3_malloc(
133481:       sizeof(IcuCursor) +                /* IcuCursor */
133482:       nChar * sizeof(UChar) +            /* IcuCursor.aChar[] */
133483:       (nChar+1) * sizeof(int)            /* IcuCursor.aOffset[] */
133484:   );
133485:   if( !pCsr ){
133486:     return SQLITE_NOMEM;
133487:   }
133488:   memset(pCsr, 0, sizeof(IcuCursor));
133489:   pCsr->aChar = (UChar *)&pCsr[1];
133490:   pCsr->aOffset = (int *)&pCsr->aChar[nChar];
133491: 
133492:   pCsr->aOffset[iOut] = iInput;
133493:   U8_NEXT(zInput, iInput, nInput, c); 
133494:   while( c>0 ){
133495:     int isError = 0;
133496:     c = u_foldCase(c, opt);
133497:     U16_APPEND(pCsr->aChar, iOut, nChar, c, isError);
133498:     if( isError ){
133499:       sqlite3_free(pCsr);
133500:       return SQLITE_ERROR;
133501:     }
133502:     pCsr->aOffset[iOut] = iInput;
133503: 
133504:     if( iInput<nInput ){
133505:       U8_NEXT(zInput, iInput, nInput, c);
133506:     }else{
133507:       c = 0;
133508:     }
133509:   }
133510: 
133511:   pCsr->pIter = ubrk_open(UBRK_WORD, p->zLocale, pCsr->aChar, iOut, &status);
133512:   if( !U_SUCCESS(status) ){
133513:     sqlite3_free(pCsr);
133514:     return SQLITE_ERROR;
133515:   }
133516:   pCsr->nChar = iOut;
133517: 
133518:   ubrk_first(pCsr->pIter);
133519:   *ppCursor = (sqlite3_tokenizer_cursor *)pCsr;
133520:   return SQLITE_OK;
133521: }
133522: 
133523: /*
133524: ** Close a tokenization cursor previously opened by a call to icuOpen().
133525: */
133526: static int icuClose(sqlite3_tokenizer_cursor *pCursor){
133527:   IcuCursor *pCsr = (IcuCursor *)pCursor;
133528:   ubrk_close(pCsr->pIter);
133529:   sqlite3_free(pCsr->zBuffer);
133530:   sqlite3_free(pCsr);
133531:   return SQLITE_OK;
133532: }
133533: 
133534: /*
133535: ** Extract the next token from a tokenization cursor.
133536: */
133537: static int icuNext(
133538:   sqlite3_tokenizer_cursor *pCursor,  /* Cursor returned by simpleOpen */
133539:   const char **ppToken,               /* OUT: *ppToken is the token text */
133540:   int *pnBytes,                       /* OUT: Number of bytes in token */
133541:   int *piStartOffset,                 /* OUT: Starting offset of token */
133542:   int *piEndOffset,                   /* OUT: Ending offset of token */
133543:   int *piPosition                     /* OUT: Position integer of token */
133544: ){
133545:   IcuCursor *pCsr = (IcuCursor *)pCursor;
133546: 
133547:   int iStart = 0;
133548:   int iEnd = 0;
133549:   int nByte = 0;
133550: 
133551:   while( iStart==iEnd ){
133552:     UChar32 c;
133553: 
133554:     iStart = ubrk_current(pCsr->pIter);
133555:     iEnd = ubrk_next(pCsr->pIter);
133556:     if( iEnd==UBRK_DONE ){
133557:       return SQLITE_DONE;
133558:     }
133559: 
133560:     while( iStart<iEnd ){
133561:       int iWhite = iStart;
133562:       U8_NEXT(pCsr->aChar, iWhite, pCsr->nChar, c);
133563:       if( u_isspace(c) ){
133564:         iStart = iWhite;
133565:       }else{
133566:         break;
133567:       }
133568:     }
133569:     assert(iStart<=iEnd);
133570:   }
133571: 
133572:   do {
133573:     UErrorCode status = U_ZERO_ERROR;
133574:     if( nByte ){
133575:       char *zNew = sqlite3_realloc(pCsr->zBuffer, nByte);
133576:       if( !zNew ){
133577:         return SQLITE_NOMEM;
133578:       }
133579:       pCsr->zBuffer = zNew;
133580:       pCsr->nBuffer = nByte;
133581:     }
133582: 
133583:     u_strToUTF8(
133584:         pCsr->zBuffer, pCsr->nBuffer, &nByte,    /* Output vars */
133585:         &pCsr->aChar[iStart], iEnd-iStart,       /* Input vars */
133586:         &status                                  /* Output success/failure */
133587:     );
133588:   } while( nByte>pCsr->nBuffer );
133589: 
133590:   *ppToken = pCsr->zBuffer;
133591:   *pnBytes = nByte;
133592:   *piStartOffset = pCsr->aOffset[iStart];
133593:   *piEndOffset = pCsr->aOffset[iEnd];
133594:   *piPosition = pCsr->iToken++;
133595: 
133596:   return SQLITE_OK;
133597: }
133598: 
133599: /*
133600: ** The set of routines that implement the simple tokenizer
133601: */
133602: static const sqlite3_tokenizer_module icuTokenizerModule = {
133603:   0,                           /* iVersion */
133604:   icuCreate,                   /* xCreate  */
133605:   icuDestroy,                  /* xCreate  */
133606:   icuOpen,                     /* xOpen    */
133607:   icuClose,                    /* xClose   */
133608:   icuNext,                     /* xNext    */
133609: };
133610: 
133611: /*
133612: ** Set *ppModule to point at the implementation of the ICU tokenizer.
133613: */
133614: SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(
133615:   sqlite3_tokenizer_module const**ppModule
133616: ){
133617:   *ppModule = &icuTokenizerModule;
133618: }
133619: 
133620: #endif /* defined(SQLITE_ENABLE_ICU) */
133621: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
133622: 
133623: /************** End of fts3_icu.c ********************************************/

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